Repetir la misma interrupción en AVR

0

Supongamos que el microcontrolador AVR está manejando una interrupción. Interrupciones desactivadas. En este momento se produce la misma interrupción . ¿El microcontrolador manejará la interrupción nuevamente después del retorno del primer controlador?

Si la respuesta es "sí", ¿cómo puedo evitar esto? (Quiero usar la interrupción INT0 (en el nivel bajo) con un botón. Pero debido al rebote, la interrupción puede ocurrir nuevamente cuando el microcontrolador lo maneja).

    
pregunta

2 respuestas

0

En general, las interrupciones se desactivan cuando el procesador ingresa en un controlador de interrupciones y se vuelven a habilitar automáticamente cuando regresa el controlador de interrupciones. (Consulte las instrucciones de CLI , SEI y RETI en el manual para obtener más información).

Cuando se dispara la interrupción externa, el indicador de interrupción INTF0 en EIFR se establece en 1. Cuando las interrupciones están habilitadas y este bit es 1, el procesador ingresa al controlador de interrupciones. Dentro del manejador de interrupciones, este bit podría nuevamente establecerse en 1, pero la interrupción no volverá a ocurrir hasta que las interrupciones se vuelvan a habilitar. También puede borrar explícitamente este bit a 0 escribiendo un 1 en el registro. Si estaba dentro del controlador de interrupción, un evento externo establece el bit y borra el bit antes de regresar del controlador de interrupción, entonces la interrupción no se activará nuevamente.

Sin embargo, tenga en cuenta que en realidad no puede establecer o borrar INTF0 si está utilizando interrupciones activadas por nivel, solo coincide con el estado del pin en todo momento. Si el pin está bajo y las interrupciones están habilitadas, volverá a activar la interrupción. La única forma de detenerlo es deshabilitar las interrupciones (ya sea globalmente, o ocultando el bit INT0 en particular en EIMSK ).

    
respondido por el Jim Paris
1

Como Jim Paris ya señaló, puede borrar explícitamente el indicador de interrupción si la condición de interrupción se activó nuevamente durante el ISR. Sin embargo, eso probablemente no te ayudará a deshacer correctamente tu botón. Si el tiempo de ejecución de su controlador de interrupción es más corto que el tiempo que el botón rebota (lo que probablemente sea el caso), se volverá a activar de todos modos.

Otro problema que debe considerar es que incluso picos muy cortos en su entrada podrían desencadenar el "evento de botón". Como normalmente tiene varios centímetros de cable al botón, no subestime los problemas de ruido (botón vecino, por ejemplo). Usar un pin activado por interrupción para la detección de botones es algo excesivo de todos modos, pero muchos caminos llevan a Roma ...

    
respondido por el Rev1.0

Lea otras preguntas en las etiquetas