linux 应用层gpio中断_linux gpio中断

最近用到gpio中断,gpio中断也是嵌入式系统用的比较多的。

对于GPIO操作 linux 有一套标准的 API,set value、get value之类的,当然也有关于中断的。

关于中断的就是:

static inline int gpio_to_irq(unsigned int gpio)

{

return __gpio_to_irq(gpio);

}

1 使用gpio中断

在linux模块中使用gpio中断的步骤通常如下

1)实现中断处理函数。

static irqreturn_t myIntHandler(int irq, void *dev_id)

{

printk("Interrupt IN\n");

return IRQ_HANDLED

}

2)初始化函数

int xxx_init()

{

int ret, irqno;

ret = gpio_request(gpioNo, "mygpiopin");

if(ret){

printk("irq pin request io failed.\n");

return -1;

}

irqno= gpio_to_irq(gpioNo);

ret = request_irq(irqno,myIntHandler , RQF_TRIGGER_RISING|IRQF_TRIGGER_FALLING, "myinterrupt", NULL);

if(ret) {

printk(KERN_ERR "can not get irq\n");

return ret;

}

}就两个函数:

gpio_request  通常用来检测这个gpio是否可用,是否已经在使用了。

gpio_to_irq 转换gpio编号到对应irq号。

之后就是熟悉的request_irq

有时候还会加一个gpio_is_valid,判断一下gpioNo是否合理,通常自己察看芯片手册填入正确gpio number,不需要再再在这里判断一下。

2,gpio中断API的实现过程

简单看一下。

int gpio_request(unsigned gpio, const char *label)

{

return gpiod_request(gpio

你可能感兴趣的:(linux,应用层gpio中断)