¿Cómo distinguir entre las interrupciones GPIO del mismo controlador de interrupciones?

2

Estoy intentando conectar algunos módulos a mi STM32L476 para el cual Necesito habilitar dos interrupciones GPIO desde el mismo puerto (puerto A, pin 5 y puerto A, pin 6), pero el controlador de interrupciones para estos pines se maneja mediante una línea externa común para los pines 5 a 9 (EXTI9_5_IRQHandler).

Necesito hacer una tarea diferente en estas dos interrupciones, pero ¿cómo sabría qué interrupción ha ocurrido cuando ambas son manejadas por el mismo controlador? ¿Hay alguna bandera que pueda verificar para saber esto?

    
pregunta Arun Joe

1 respuesta

6

Lea el registro EXTI->PR1 para decidir

void EXTI9_5_IRQHandler(void) {
    uint32_t pending = EXTI->PR1;
    if(pending & (1 << 5)) {
        EXTI->PR1 = 1 << 5; // clear pending flag, otherwise we'd get endless interrupts
        // handle pin 5 here
    }
    if(pending & (1 << 6)) {
        EXTI->PR1 = 1 << 6;
        // handle pin 6 here
    }
}
    
respondido por el berendi

Lea otras preguntas en las etiquetas