myespaciogreta - Controlador de Interrupciones
|
|
|
|
|
arquitectura de computacion |
|
|
|
Controlador de Interrupciones
El controlador de interrupciones es un módulo que tiene por función gestionar las interrupciones de entrada/salida para el procesador. Esto ahorra diseñar lógica y añadir patitas al procesador. También proporciona flexibilidad porque permite idealmente, gestionar un número ilimitado señales de interrupción (favoreciendo la expansión del sistema de entrada salida).
El controlador recibe el conjunto de señales de interrupción procedentes de los dispositivos, toma la decisión de cual es la más prioritaria, y envía una única señal al procesador. La respuesta del procesador es transmitida al dispositivo y el propio controlador se encarga de depositar en el bus el vector de la interrupción.
En un sistema basado en la familia de procesadores 8086, esta labor la realiza el chip 8259. Este chip admite hasta 8 señales de interrupción, pero también admite ser configurado en cascada (sus entradas proceden a su vez de otro controlador) de modo que un conjunto de controladores 8259 pueden gestionar hasta un máximo de 8*8 señales de interrupción procedentes de otros tantos dispositivos de entrada salida.
-CS: Habilita la comunicación con la CPU.
-WR: Permite al 8259 aceptar comandos de la CPU.
-RD: Permite al 8259 dejar la información en el bus de datos.
D7..D0: Bus de datos bidireccional, por el que se transmite la información de control/estado y el número de vector de interrupción.
CAS0..CAS2: Líneas de cascada, actúan como salida en el 8259 maestro y como entrada en los 8259 esclavos, en un sistema con varios 8259 interconectados, constituyendo un bus local.
-SP/-EN: Pin de doble función: en el buffered mode del 8259 actuará como -EN, para habilitar los buffers del bus; en el modo normal indicará si el 8259 es maestro o esclavo (-SP).
INT: Conectado a la patilla INT de la CPU para producir la interrupción cuando llegue el momento.
IR0..IR7: Líneas asíncronas de petición de interrupción. Una petición de interrupción se ejecuta manteniendo IR en alto hasta que se recibe el reconocimiento (modo por flancos) o simplemente poniendo en alto la línea IR (modo por niveles).
-INTA: Línea de reconocimiento de interrupción, por medio de esta línea se fuerza al 8259 a depositar en el bus la información del vector de interrupción.
INTA es independiente de -CS.
A0: En conjunción con -CS, -WR y -RD es empleada para enviar las palabras de comando al 8259 y para solicitar información al mismo. Suele ir conectada a la línea A0 de la CPU.
Ciclo de reconocimiento de interrupción.
Antes de describir la estructura y programación del controlador resultará interesante conocer en qué consiste un ciclo de reconocimiento de interrupción en el 8086.
1.- Tras la activación de una línea IR, el controlador activa la salida INTR señalándole a la CPU la existencia de una interrupción activada.
2.- Al recibir la señal, el procesador da un pulso en su salida INTA indicando que comienza un ciclo de reconocimiento de interrupción. (En el modo máximo la respuesta será el código de reconocimiento de interrupción en las señales S0-2 que será utilizado por el controlador de bus para generar la señal INTA)
3.- Al recibir el controlador el pulso por su entrada INTA comienza a arbitrar las interrupciones recibidas y selecciona la más prioritaria.
4.- Se emite un segundo pulso por la línea INTA del procesador (o controlador de bus) que utiliza el controlador para depositar en el bus el vector correspondiente a la interrupción de mayor prioridad.
5.- El procesador obtiene la dirección de la rutina de interrupción a partir de este dato y salta a ella. Almacena el registro de flags y la dirección de retorno, deshabilita las interrupciones y comienza a ejecutar la rutina.
Estructura del controlador:
El controlador dispone de un conjunto de registros internos para realizar sus funciones:
IRR/ISR: Interrupt request register/Interrupt service register: Cuando se activan una o varias de las entradas IR, estas quedan reflejadas en los bits correspondientes del IRR. Entonces el controlador usa este registro para decidir a qué interrupción atender. De aquellos bits activados en el IRR el más prioritario queda reflejado en el bit correspondiente del ISR. Mientras la interrupción está siendo atendida este bit se mantiene activo. Este bit se desactiva, bien automáticamente o bien después de recibir el controlador una orden de EOI (fin de interrupción, emitido antes del IRET). Cuando se configura para que lo haga automáticamente, el controlador desactiva la interrupción en el flanco de bajada de la segunda señal INTA procedente del procesador.
IMR: Interrupt mask register. El programador puede enmascarar algunas interrupciones de manera que si se activase la IR correspondiente, el controlador la ignorará (nunca alcanzará el ISR).
El mecanismo de arbitraje es programable y admite algunas variantes en la resolución:
Modo completamente anidado: es el modo de prioridad básica consistente en asignar mayor prioridad a la interrupción 0 y menor prioridad a la interrupción 7. En este modo, cuando un bit está activo en el ISR indicando que tal interrupción está siendo atendida (desactivado, por lo tanto el EOI automático), ninguna interrupción de prioridad igual o inferior va a ser considerada por el controlador. Sin embargo si entrase una interrupción de prioridad superior, ésta sí pasará al registro ISR y se emitirá el aviso correspondiente al procesador. (En el procesador se interrumpirá la ejecución de la rutina de atención a la interrupción anterior para cargar la nueva rutina, más prioritaria. Al finalizar ésta se reanudará la primera).
Modo de rotación automática.: en este modo, cada vez que una interrupción es atendida, como la de máxima prioridad, queda degradada al rango de menor prioridad para la siguiente ocasión. Ello permite que ninguna interrupción pueda acaparar la atención del procesador.
Rotación específica: es un tercer modo en el cual el programador puede indicarle al controlador, por medio de un comando, cual es el orden de prioridad que desea darle a las interrupciones, concretamente le indica cual es la interrupción de mayor prioridad y el resto se ordenarán entorno a ella. (Por ejemplo, si decide que la IR5 va a ser la de mayor prioridad, la IR6 será la siguiente, después IR7 y a continuación IR0, etc.)
|
Hoy habia 6 visitantes (24 clics a subpáginas) ¡Aqui en esta página!
|
|
|
|