Funcionamiento del mecanismo de interrupciones
Cada dispositivo que desea comunicarse con el procesador por interrupciones debe tener asignada una línea única capaz de avisar a éste de que le requiere para una operación. Esta línea es la llamada IRQ ("Interrupt ReQuest", petición de interrupción).
Las IRQ son líneas que llegan al controlador de interrupciones, un componente hardware dedicado a la gestión de las interrupciones, y que puede estar integrado en el procesador principal o ser un circuito separado conectado al procesador principal.
El controlador de interrupciones debe ser capaz de habilitar o inhibir líneas de interrupción (operación llamada comúnmente enmascarar por la utilización de una mascara ), y establecer prioridades entre las distintas interrupciones habilitadas.
Cuando varias líneas de petición de interrupción se activan a la vez, el controlador de interrupciones utilizará estas prioridades para escoger la interrupción sobre la que informará al procesador principal. Sin embargo hay interrupciones que no se pueden enmascarar o deshabilitar, las conocidas como interrupciones no emascarables o NMI.
Un procesador principal (sin controlador de interrupciones integrado) suele tener una única línea de interrupción llamada habitualmente INT. Esta línea es activada por el controlador de interrupciones cuando tiene una interrupción que servir. Al activarse esta línea, el procesador consulta los registros del controlador de interrupciones para averiguar qué IRQ es la que ha de atender. A partir del número de IRQ busca en el vector de interrupciones qué rutina debe llamar para atender una petición del dispositivo asociado a dicha IRQ.
Las rutinas de interrupción generalmente toman un pequeño tiempo de ejecución y la mayoría no pueden ser interrumpidas cuando se están atendiendo, porque al entrar en ellas se almacena el estado de los registros en una pila y si se interrumpen muchas veces, la pila se puede desbordar.
Mecanismo de interrupciones en un PC
Un ordenador PC típico dispone en su placa base
de un controlador de interrupciones 8259 de Intel o de un circuito integrado análogo. Este dispositivo electrónico dispone de hasta 16 líneas IRQ, numeradas desde el 00 hasta el 15. En las nuevas placas base este circuito está integrado junto con el resto del chipset.
Al mismo tiempo, interrupción funciona como catalizador de un sistema en desarrollo a través de diversas formas de ser responsable.
Un computador debe disponer de los elementos suficientes para que el programador tenga un control total sobre todo lo que ocurre durante la ejecución de su programa. La llegada de una interrupción provoca que la CPU suspenda la ejecución de un programa e inicie la de otro (rutina de servicio de interrupción). Como las interrupciones pueden producirse en cualquier momento, es muy probable que se altere la secuencia de sucesos que el programador había previsto inicialmente. Es por ello que las interrupciones deber controlarse cuidadosamente.
De esta forma, podemos resumir todas las etapas seguidas ante una interrupción en un sistema dotado de vectorización. Estos pasos son los siguientes:
1.- El dispositivo envía la solicitud de interrupción mediante la línea INTR.
2.- El procesador termina la ejecución de la instrucción en curso y analiza la línea de petición de interrupción, INTR. Si esta línea no está activada continuará normalmente con la ejecución de la siguiente instrucción, en caso contrario se pasa a la etapa siguiente.
3.- La CPU reconoce la interrupción, para informar al dispositivo de ello, activa la línea de reconocimiento de interrupción, INTA.
4.- El dispositivo que reciba la señal INTA envía el código de interrupción por el bus de datos.
5.- La CPU calcula la dirección de memoria donde se encuentra la rutina de servicio de interrupción (vector de interrupción).
6.- El estado del procesador, y en particular el contador de programa, se salva en la pila de la misma forma que en una llamada a procedimiento.
7.- La dirección de la rutina de servicio de interrupción se carga en el contador de programa, con lo que se pasa el control a la citada rutina.
8.- La ejecución continúa hasta que el procesador encuentre la instrucción de retorno de interrupción.
9.- Cuando se encuentre la instrucción de retorno de interrupción se restaura el estado del procesador, en especial el contador de programa, y se devuelve el control al programa interrumpido.
Normalmente la primera instrucción de la rutina de servicio tendrá como fin desactivar las interrupciones para impedir el anidamiento, por otra parte, antes de devolver el control al programa interrumpido se volverán a habilitar si es necesario.
Las interrupciones constituyen quizá el mecanismo más importante para la conexión del microcontrolador con el mundo exterior, sincronizando la ejecución de programas con acontecimientos externos.
El funcionamiento de las interrupciones es similar al de las subrutinas de las cuales se diferencian principalmente en los procedimientos que las ponen en marcha. Así como las subrutinas se ejecutan cada vez que en el programa aparece una instrucción , las interrupciones se ponen en marcha al aparecer en cualquier instante un evento externo al programa, es decir por un mecanismo hardware.
El PIC16C84/PIC16F84 dispone de 4 posibles fuentes de interrupción:
- Activación del pin RB0/INT
- Desbordamiento del temporizador TMR0
- Cambio de estado en uno de los 4 pines de más peso (RB7:RB4) del PORTB
- Finalización de la escritura en la EEPROM de datos.
Cuando se produce cualquiera de los sucesos indicados anteriormente, se origina una petición de interrupción, que si se acepta, guarda el valor del PC actual en la Pila, pone a cero el bit GIE (Global Interrupt Enable), lo que prohíbe cualquier otra interrupción y se carga el PC con el valor 0004H , que es la posición del vector de interrupción, y comienza a ejecutarse el programa de atención a la interrupción que se encuentra a partir de esta dirección.
Cada causa de interrupción está controlada mediante dos bit. Uno de ellos actúa como señalizador o flag que indica si se ha producido o no la interrupción, y la otra funciona como bit de permiso o prohibición de la interrupción en sí, tal y como se muestra en la siguiente figura.
Los bits de control que se encuentran en el registro INTCON (0Bh ó 8Bh) habilitan y configuran las interrupciones. Para que se pueda producir interrupción por alguna de estas fuentes, el bit correspondiente debe estar a 1, mientras que los bits señalizadores o flags que están en los registros INTCON y EEDATA (08h) informan si se ha producido la interrupción cuando se ponen a 1. Cualquiera de las interrupciones también puede sacar al procesador del modo de reposo.
El bit GIE (Global Interrupt Enable) es el de activación global del permiso de interrupción, y se borra automáticamente cuando se reconoce una interrupción para evitar que se produzca ninguna otra mientras se está atendiendo a la primera. Al retornar de la interrupción con una instrucción RETFIE, el bit GIE se vuelve a activar poniéndose a 1. Para el resto de los bit de indicación de interrupción (es decir, el resto de los flags) no se ha previsto mecanismo de puesta a cero, por lo que es el programa de atención a la interrupción el que debe realizar el tratamiento de la correspondiente interrupción y además, el que debe poner el o los flags de indicación de interrupción a 0. De no ser así, no se podrá salir de la rutina de atención a la interrupción.
El microcontrolador solo dispone de un vector de interrupción en la dirección 0004h; esto quiere decir que, sea cual sea la fuente de la interrupción, el PC se carga con 0004h. Por lo tanto, el programa de atención a la interrupción debe encargarse de comprobar el estado de cada uno de los flags para saber cual es el dispositivo que produce la interrupción y actuar según el caso
Martínez Lucía
Reyes Yismely
PUERTO LA CRUZ, JUNIO 2006
Página anterior | Volver al principio del trabajo | Página siguiente |