J'essaye de programmer un IRQ GPIO sur la carte d'évaluation AT91SAM9M10-EKES. J'ai réussi à enregistrer l'IRQ et l'IRQ fonctionne. Cependant, certaines interruptions sont manquées. J'envoie 26, et je ne reçois que 22.GPIO IRQ sur Linux embarqué basé sur ARM
Le code:
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);
Ce n'est pas tout conducteur, mais c'est la partie réelle qui traite de l'IRQ. Si quelqu'un voit un problème dans le code, ou peut suggérer un moyen de savoir pourquoi je perds 4 interruptions, veuillez répondre. Je suis coincé sur ce pendant des heures ... :(
Merci. Ramon.
le printk est la raison !! Ça marche. Merci. – stdcall
@ Longfield: Pouvez-vous s'il vous plaît répondre à ce http://stackoverflow.com/questions/24608817/interrupt-on-gpio-line-is-not-being-detected? –