GPIO IRQ во встроенном Linux на базе ARM

Я пытаюсь запрограммировать GPIO IRQ на оценочной плате AT91SAM9M10-EKES. Я успешно зарегистрировал 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 прерывания, ответьте. Я застрял в этом на несколько часов ...: (

Спасибо. Рамон.

5
задан Longfield 18 August 2011 в 23:46
поделиться