Processing math: 100%

4 votos

¿Cómo distinguir entre las interrupciones de GPIO desde el mismo manejador de interrupciones?

Estoy tratando de conectar unos cuantos módulos a mi placa STM32L476 para la cual necesito habilitar dos interrupciones de GPIO desde el mismo puerto (puertoA, pin 5 y puertoA, pin 6), pero el manejador de interrupciones para estos pines es manejado por una línea externa común para los pines 5 a 9 (EXTI9_5_IRQHandler).

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

8voto

berendi Puntos 316

Lea el registro EXTI->PR1 para decidir

void EXTI9_5_IRQHandler(void) {
    uint32_t pendiente = EXTI->PR1;
    if (pendiente & (1 << 5)) {
        EXTI->PR1 = 1 << 5; // borra la bandera pendiente, de lo contrario obtendríamos interrupciones infinitas
        // manejar pin 5 aquí
    }
    if (pendiente & (1 << 6)) {
        EXTI->PR1 = 1 << 6;
        // manejar pin 6 aquí
    }
}

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X