Proceso de interrupción

Proceso de interrupción

Al generarse y aceptarse una interrupción, se detiene la ejecución del programa en curso y se ejecuta una rutina de código asociada a la interrupción conocida como RTI (Rutina de Tratamiento de Interrupción) o ISR (Interrupt Service Routine). Tras finalizar la RTI, el programa continúa su ejecución en el punto en el que se produjo la interrupción.

 

Proceso de Interrupción

PASOS del Proceso de Interrupción

1. El momento en el que se produce un evento, su flag de interrupción se activa, si se acepta la interrupción, se pone en marcha el proceso de tratamiento de dicha interrupción, cuyo primer paso depende del estado en el que se encuentra la CPU.

a) Si la CPU está activa, para ponerse en marcha el proceso de interrupción, se espera a que finalice la instrucción en curso.

b) Si la CPU está parada, en un estado de bajo consumo, se finaliza este estado de bajo consumo temporalmente hasta que se haya tratado enteramente la interrupción.

2. Se guarda en la pila el PC que apunta a la siguiente instrucción del programa que se estaba ejecutando cuando llegó la interrupción.

3. Se guarda en la pila el registro de estado (SR).

 

 

Almacenamiento en la PILA del PC y del SR

4. Si hay varias interrupciones pendientes se selecciona la de más prioridad y el resto quedan pendiente.

5. Dependiendo del tipo de interrupción, el flag de interrupción, que indica que se ha producido el evento que ha provocado la interrupción, se borra de forma automática o tiene que ser borrado de forma manual por el programador.

De esta forma, en el caso de que la RTI tenga asociada una única fuente de interrupción, hace que la ejecución de la propia RTI borre el flag de forma automática. Sin embargo, si la RTI tiene asociadas varias fuentes de interrupción, la ejecución de la RTI no puede provocar por si misma el borrado del flag, por lo que es necesario su borrado manual, una vez se ha identificado la fuente dentro de la RTI.

6. Se modifica el Registro de Estado SR para poder ejecutar la RTI. Se pone a 0 el SR, con lo que se deshabilitan todas las interrupciones enmascarables. GIE=CPUOFF=SCG1=V=N=Z=C=0.

7. El contenido de vector de interrupción asociado a la causa de interrupción se carga al PC, para pasar a ejecutar la RTI de interrupción.

8. Se ejecuta la RTI, y al finalizar se recupera de la pila el SR y PC. Esto permite retornar al mismo contexto y punto de ejecución en el que estaba cuando se produjo la interrupción.

 

Recuperación del SR y PC

Debes conocer

VECTORES DE INTERRUPCIÓN

Durante el procesamiento de cualquier interrupción es necesario conocer la dirección de memoria donde se encuentra el código correspondiente a la RTI que debe ejecutarse para realizar su tratamiento. Esta información está almacenada en una tabla conocida como tabla de vectores de interrupción ubicada al final del mapa de memoria (en la memoria flash), donde cada posible interrupción posee una entrada en la tabla con la dirección de comienzo de la RTI asociada a la misma

Es responsabilidad del programador inicializar correctamente los valores almacenados en la tabla de vectores de interrupción, de forma que al generarse cualquier interrupción se pueda localizar la RTI que el programador ha asociado a dicha interrupción.

 

 

Zona de memoria destinada a la tabla de vectores

 

 

La tabla de vectores para el microcontrolador MSP430F2274 se muestra a continuación:

 

Tabla de vectores de interrupción del MSP430F2274

 

Obra publicada con Licencia Creative Commons Reconocimiento 2.5