【发布时间】:2011-08-17 11:30:04
【问题描述】:
我正在尝试在 AT91SAM9M10-EKES 评估板上对 GPIO IRQ 进行编程。 我成功注册了 IRQ,并且 IRQ 正在工作。 但是,会遗漏一些中断。我发送 26 个,但我只收到 22 个。
代码:
static irqreturn_t wiegand_interrupt(int irq, void *dev_id){
atomic_inc(&counter);
printk(KERN_WARNING "IRQ recieved, counting... %d\n",atomic_read(&counter));
return 0;
}
irq1 = gpio_to_irq(AT91_PIN_PA21);
if (irq1 < 0) {
err = irq1;
printk("Unable to get irq number for GPIO %d, error %d\n",AT91_PIN_PA21, err);
goto fail;
}
err = request_irq(irq1,wiegand_interrupt,0 ,"wiegand",NULL);
irq2 = gpio_to_irq(AT91_PIN_PA20);
if (irq2 < 0) {
err = irq2;
printk("Unable to get irq number for GPIO %d, error %d\n",AT91_PIN_PA21, err);
goto fail;
}
err = request_irq(irq2,wiegand_interrupt,0 ,"wiegand",NULL);
这不是整个驱动程序,而是处理 IRQ 的实际部分。 如果有人在代码中看到问题,或者可以提出一种方法来了解我为什么会丢失 4 个中断,请回复。我被困在这几个小时... :(
谢谢。 拉蒙。
【问题讨论】:
标签: linux-device-driver embedded-linux irq arm9 gpio