de Estado no es almacenado automáticamente cuando entra una rutina de
interrupción o cuando regresa de la rutina de interrupción. Esto deber ser hecho
manualmente por software. Cuando usa la instrucción CLI para deshabilitar
interrupciones, la interrupción será deshabilitada inmediatamente. Ninguna
interrupción será ejecutada después de la interrupción CLI, Incluso si ocurre
simultáneamente con la instrucción CLI. Los siguientes ejemplos muestran
como esto puede ser usado para evitar interrupciones durante el tiempo de
escritura en la EEPROM.
Ejemplo del Código en Lenguaje Ensamblador
In r16, SREG; almacena el valor en SREG
cli; deshabilita interrupciones durante la secuencia de tiempos
sbi EECR, EEMPE; Comienza la escritura en la EEPROM
sbi EECR, EEPE
Out SREG, r16; almacena el valor del I-bit en el SREG
Ejemplo del Código en C
char cSREG;
cSREG = SREG; almacena el valor en SREG */
/* Deshabilita interrupciones durante la secuencia de tiempos */
__disable_interrupt();
EECR |= (1<<EEMPE); /* Comienza la escritura en la EEPROM */
EECR |= (1<<EEPE);
SREG = cSREG; /* almacena el valor del I-bit en el SREG */
Cuando usa la instrucción SEI para habilitar interrupciones, la siguiente
instrucción SEI será ejecutada antes de cualquier interrupción pendiente, como
muestra el siguiente ejemplo.
Ejemplo del Código en Lenguaje Ensamblador
sei; Habilita la configuración de interrupciones globales
Sleep; ingresa a descansar, espera por la interrupción
; note: ingresa a descansar antes de cualquier pedido de interrupción
__enable_interrupt(); /* Habilita la configuración de interrupciones globales */
__sleep(); /* ingresa a descansar, espera por la interrupción */
/* Note: ingresa a descansar antes de cualquier pedido de interrupción */
6.7.1 Tiempo de respuesta de la Interrupción
La respuesta para la ejecución de interrupción para habilitar todas las
interrupciones del AVR son mínimos cinco ciclos.
Después de cinco ciclos de reloj la dirección del vector de programa para la
rutina manual de interrupción es ejecutada.