La respuesta de ejecución de interrupción para todas
las interrupciones de AVR habilitadas es de cuatro ciclos de clock como mínimo. Cuatro
ciclos de clock después de que el flag de interrupción se ponga a set, se ejecuta la
dirección del vector de programa para la rutina de manejo de la interrupción. Durante
este 4º periodo de ciclo de clock, el Contador de Programa (2 bytes) es introducido en la
pila y el puntero de pila es decrementado en 2. El vector es normalmente un salto relativo
a la rutina de interrupción y este salto toma dos ciclos de clock. Si ocurre una
interrupción durante la ejecución de una instrucción multi-ciclo, antes de que la
interrupción sea servida, se completa esta instrucción.
Un retorno de una rutina de manejo de interrupción (el mismo que una
rutina de llamada a subrutina) toma cuatro ciclos de clock. Durante estos cuatro ciclos de
clock, el Contador de Programa (2 bytes) se extrae de la pila, el puntero de pila es
incrementado en 2 y el flag I en SREG está a set. Cuando el AVR termina una
interrupción, siempre volverá al programa principal y ejecutará una instrucción más
antes de que cualquier interrupción pendiente se sirva.
Observe que el registro de estado (SREG) no es manejado por el hardware
del AVR, para ninguna interrupcion ni subprograma. Para la rutina de manejo de
interrupción se requiere un almacenamiento del SREG, esto debe ser realizado por el
software del usuario.
Para interrupciones activadas por eventos que pueden permanecer
estáticos, cuando el evento ocurre, el flag de interrupción está a set. Si el flag de
interrupción es borrado y la condición de interrupción persiste, el flag no se pondrá
a set hasta que el evento ocurra la próxima vez. Observe que una interrupción de nivel
externo sólo se recordará mientras que la condición de interrupción esté activa. |