Estoy tratando de programar una IRQ GPIO en la placa de evaluación AT91SAM9M10-EKES. Logré registrar la IRQ con éxito, y la IRQ está funcionando. Sin embargo, algunas interrupciones se pierden. Voy a enviar a 26 años, y sólo obtengo 22.GPIO IRQ en ARM basado en Linux incorporado
El código:
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);
Esto no es todo el conductor, pero esta es la parte real que se ocupa de la IRQ. Si alguien ve un problema en el código o puede sugerir una forma de saber por qué pierdo 4 interrupciones, responda. Estoy atascado en esto por horas ... :(
Gracias. Ramón.
¡la impresión es la razón! funciona. Gracias. – stdcall
@Longfield: ¿Puedes responder a este http://stackoverflow.com/questions/24608817/interrupt-on-gpio-line-is-not-being-detected? –