我正在尝试在AT91SAM9M10-EKES评估板上编写GPIO中断请求。
我已成功注册了中断请求,并且中断请求正在工作。
然而,有一些中断被错过了。我发送了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个中断的方法,请回复。我已经卡在这里几个小时了...:( 谢谢。 Ramon.