Está en la página 1de 56

Controlador Programable de Interrupciones (PIC 8259A)

ARQUITECTURA DE COMPUTADORAS

Objetivos
Al finalizar esta semana el alumno ser capaz de: Definir qu es una interrupcin y para qu sirve el PIC 8259. Configurar y programar el PIC 8259 interno de la computadora personal. Identificar su estructura interna. Identificar sus registros y cmo se programa.

Interfase Perifrica Programable


11.1 11.2 11.3 11.4 11.5 Introduccin. Interrupcin de Perifricos. Descripcin de pines del PIC 8259. Programacin del PIC. Aplicaciones.

Introduccin

Las interrupciones constituyen quiz el mecanismo ms importante para la conexin del computador con el mundo exterior, sincronizando la ejecucin de programas con acontecimientos externos.
Las

interrupciones surgen de la necesidad que tienen los dispositivos perifricos de enviar informacin al procesador principal de un sistema de computacin.

Introduccin

La primera tcnica empleada para la atencin de perifricos consisti que el propio procesador se encargara de sondear (polling) el dispositivo cada cierto tiempo para averiguar si tena pendiente alguna comunicacin para l.
Este

mtodo presentaba el inconveniente de ser muy ineficiente: el procesador constantemente consume tiempo en realizar todas las instrucciones de sondeo.

Introduccin

El mecanismo de interrupciones fue la solucin que permiti al procesador desentenderse de este problema y delegar en el dispositivo la responsabilidad de comunicarse con el procesador cuando lo necesitaba.

El procesador, en este caso, no sondea a ningn dispositivo, sino que queda a la espera de que estos le avisen (le "interrumpan") cuando tengan algo que comunicarle (ya sea un evento, una transferencia de informacin, una condicin de error, etc.).

Introduccin

En resumen se implementan las interrupciones para:


Mejorar

la eficiencia de uso del CPU. Brindar atencin inmediata a dispositivos en cuanto lo soliciten.

Interrupcin
Todas estas ideas estn referidas a un tipo de interrupcin: la interrupcin hardware (hardware interrupt). En general una interrupcin es

una

seal asincrnica generada desde el hardware, que indica la necesidad de atencin (interrupcin hardware); o, un evento sincrnico generado por software que indica la necesidad de un cambio en la ejecucin (interrupcin software).

Interrupcin

Las interrupciones software se implementan y utilizan de manera similar que las llamadas a procedimientos (subrutinas) pero se diferencian de stos por el tipo de tareas que realizan, las cuales tpicamente estn ligadas al hardware de la computadora:

solicitar el cdigo de la ltima tecla presionada, envo de datos a pantalla, transmisin y recepcin de datos vas algn canal de comunicacin, etc..

Interrupcin

Las interrupciones hardware pueden ser a su vez:


Enmascarables,

cuando la atencin de estas interrupciones pueden ser permitidas o inhibidas por programa. No enmascarables, cuando la atencin de este tipo de interrupciones no pueden ser inhibidas por programa (siempre se atienden).

Interrupcin

Las interrupciones hardware tambin pueden clasificarse como:

Internas, cuando son generadas dentro del CPU. Por ejemplo:


o o o

desbordamiento de la divisin, cdigo de operacin no vlido (illegal opcode), etc..

Externas, cuando son generadas externamente al CPU, pudiendo ser generadas por dispositivos de la mainboard o por algn perifrico fuera de la mainborad conectado a sta mediante una unidad de E/S. Por ejemplo:
o o o o

temporizador, teclado, discos duros, etc..

Interrupcin

Interrupcin en los procesadores de INTEL

Las interrupciones en la totalidad de la familia de microprocesadores INTEL incluyen dos pines para peticin de interrupcin (INTR y NMI) y un pin (#INTA) para reconocimiento de la peticin de interrupcin recibida por INTR. Estos microprocesadores tambin disponen de interrupciones de software INT, INTO, INT 3, y BOUND. Dos banderas (flags), IF (Interrupt Flag) y TF (Trap Flag), son tambin usadas con la estructura de3 interrupcin y una instruccin especial para retorno de la interrupcin, IRET (IRETD en el 80386, 80486, o Pentium-Pentum 4).

PIC 8259

El controlador de interrupciones es un mdulo que tiene por funcin gestionar las interrupciones de entrada/salida para el procesador. Esto ahorra disear lgica y aadir patitas al procesador pues este maneja una nica seal de control para las interrupciones del tipo mascarables. Tambin proporciona flexibilidad porque permite idealmente, gestionar un nmero ilimitado seales de interrupcin (favoreciendo la expansin del sistema de entrada salida).

PIC 8259

El controlador:
recibe

el conjunto de seales de interrupcin procedentes de los dispositivos, toma la decisin de cual es la ms prioritaria, y enva una nica seal 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 interrupcin.

PIC 8259
Este chip admite hasta 8 seales de interrupcin. Tambin 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 mximo de 8*8 seales de interrupcin procedentes de otros tantos dispositivos de entrada salida.

Descripcin de pines del 8259


#CS Habilita la comunicacin con la CPU. Permite al 8259 aceptar comandos de la CPU. Permite al 8259 dejar informacin en el bus de datos.

#WR

#RD

Descripcin de pines del 8259


A0: En conjuncin con #CS, #WR y #RD, es empleada para enviar las palabras de control al 8259 y para solicitar informacin al mismo. Suele ir conectada a la lnea A0 de la CPU.

Descripcin de pines del 8259


#SP/#EN Pin de doble funcin: 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).

Descripcin de pines del 8259


D7..D0 Bus de datos bidireccional, por el que se transmite la informacin de control/estado y el nmero de vector de interrupcin.

Descripcin de pines del 8259


CAS0..CAS2 Lneas de cascada. En un sistema con varios 8259 interconectados, actan como salida en el 8259 maestro y como entrada en los 8259 esclavos, constituyendo un bus local.

Descripcin de pines del 8259


INT Conectado a la patilla INTR de la CPU para producir la interrupcin cuando llegue el momento. #INTA Lnea de reconocimiento de interrupcin. Por medio de esta lnea se fuerza al 8259 a depositar en el bus la informacin del vector de interrupcin. #INTA es independiente de #CS.

Descripcin de pines del 8259


IR0..IR7: Lneas asncronas de peticin de interrupcin. Una peticin de interrupcin se ejecuta manteniendo IR en alto hasta que se recibe el reconocimiento (modo por flancos) o simplemente poniendo en alto la lnea IR (modo por niveles).

Estructura del controlador

Estructura del controlador


Dispone de un conjunto de registros internos para realizar sus funciones:

Interrupt Request Register/Interrupt Service Register (IRR/ISR) 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 interrupcin atender. De aquellos bits activados en el IRR el ms prioritario queda reflejado en el bit correspondiente del ISR. Mientras la interrupcin est siendo atendida este bit se mantiene activo. Este bit se desactiva, bien automticamente o bien despus de recibir el controlador una orden de EOI (fin de interrupcin, emitido antes del IRET). Cuando se configura para que lo haga automticamente, el controlador desactiva la interrupcin en el flanco de bajada de la segunda seal INTA procedente del procesador.

Estructura del controlador


Dispone de un conjunto de registros internos para realizar sus funciones:

Interrupt Mask Register (IMR) El programador puede enmascarar algunas interrupciones de manera que si se activase la IR correspondiente, el controlador la ignorar (nunca alcanzar el ISR).

Mecanismo de arbitraje del controlador


El mecanismo de arbitraje es programable y admite algunas variantes en la resolucin:
o

Modo completamente anidado Es el modo de prioridad bsica consistente en asignar mayor prioridad a la interrupcin 0 y menor prioridad a la interrupcin 7. En este modo, cuando un bit est activo en el ISR indicando que tal interrupcin est siendo atendida (desactivado, por lo tanto el EOI automtico), ninguna interrupcin de prioridad igual o inferior va a ser considerada por el controlador. Sin embargo si entrase una interrupcin de prioridad superior, sta s pasar al registro ISR y se emitir el aviso correspondiente al procesador. (En el procesador se interrumpir la ejecucin de la rutina de atencin a la interrupcin anterior para cargar la nueva rutina, ms prioritaria. Al finalizar sta se reanudar la primera).

Mecanismo de arbitraje del controlador


El mecanismo de arbitraje es programable y admite algunas variantes en la resolucin:

Modo de rotacin automtica En este modo, cada vez que una interrupcin es atendida, como la de mxima prioridad, queda degradada al rango de menor prioridad para la siguiente ocasin. Ello permite que ninguna interrupcin pueda acaparar la atencin del procesador. Rotacin especfica 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 interrupcin de mayor prioridad y el resto se ordenarn entorno a ella. (Por ejemplo, si decide que la IR5 va a ser la de mayor prioridad, la IR6 ser la siguiente, despus IR7 y a continuacin IR0, etc.)

Programacin del controlador

Para programar este controlador existen dos puertos de lectura/escritura en el chip.


La

lnea de direccin, A0, decide a qu puerto se accede.

La programacin se realiza enviando una secuencia de palabras de control denominadas ICW.


Hay

4 palabras de control diferentes y en caso de enviarlas todas hay que hacerlo siempre en secuencia.

Programacin del controlador


o o

ICW1 Es la primera escritura que se hace sobre el 8259 y marca su reinicio. Se escribe sobre el A0=0. Siempre que se escriba en este puerto un byte con el bit 4 a 1, se interpretar como un comando de inicializacin. Otra informacin de configuracin que aporta esta palabra de inicializacin es:
a) b) c) d)

las interrupciones se activarn por flanco o por nivel el controlador funcionar slo o en modo cascada el controlador trabaja con el 8086 o con el 8085 se enviar o no la palabra de inicializacin ICW4

Programacin del controlador


o o

ICW2 Se enva por el puerto A0=1, y ha de seguir inmediatamente al envo de ICW1. Contiene el ndice en el vector de interrupciones correspondiente a la interrupcin 0. El resto de ndices lo calcular el controlador incrementando correspondientemente este valor para cada una de las dems interrupciones.

Programacin del controlador


o

o o

ICW3 Esta palabra se enva nicamente si la configuracin es en cascada (indicado en la ICW1). Se enva por el puerto A0=1 y ha de seguir inmediatamente a ICW2. Al maestro se le enviar una ICW3 indicndole en cuales de sus entradas IR hay colgado un controlador. A cada uno de los controladores esclavos se le enva una ICW3 indicndoles su nmero de identificacin, el valor que aparecer en las CAS cuando el dispositivo es seleccionado.

Programacin del controlador


o o o

ICW4 Esta es una palabra opcional que se enva tambin por A0=1, siguiendo a ICW3. En ICW1 se ha indicado en su momento si se enviar o no esta ltima palabra de inicializacin. La opcionalidad de esta palabra se debe sencillamente a que si no se usa, las caractersticas que configura estn sencillamente anuladas en su conjunto.

Programacin del controlador


o

ICW4 Estas caractersticas son:


1.

Activar un modo especial de arbitraje anidado (Special fully nested mode), que contemple la existencia de controladores esclavos. Este modo especial tiene la particularidad, frente al modo completamente anidado, de que cuando en una IR est conectado un esclavo, esta entrada no queda inhabilitada aunque haya pasado a ser atendida (activa en el ISR), de manera que el esclavo puede volver a enviar por la misma lnea una nueva interrupcin (en su caso procedente de otra IR). Programar el modo buffered. Lo que redundar en que la lnea SP#/EN# ser utilizada en su funcin EN#. Esto lleva a la siguiente pregunta: Cmo sabe ahora un controlador si l mismo es un maestro o un esclavo.?

Programacin del controlador


o

ICW4 Estas caractersticas son:


2. 3.

4.

Indicar al controlador, en el modo cascada, si se trata de un maestro o un esclavo. Programar el AEOI. Los bits en el ISR se limpiarn automticamente cuando el controlador reciba el segundo pulso de la seal INTA. Por ltimo se indica si el controlador va a trabajar con el 8085, de 8 bits de palabra y con un protocolo de reconocimiento de interrupciones diferente al del 8086 (tres pulsos de INTA, durante el primero hay que facilitarle al procesador el cdigo de la instruccin Call y durante los otros dos pulsos le enva la direccin de la rutina de atencin) o con el propio 8086.

Programacin del programador

Una vez que el controlador se ha programado, entra en funcionamiento.


A

partir de ahora, y hasta una nueva inicializacin el procesador puede intervenir en el funcionamiento del controlador a travs del intercambio de Comandos de operacin (OCW).

Programacin del programador

Hay tres comandos de operacin (OCW1-3).


Se

pueden enviar en cualquier orden y en cualquier momento y permitirn al procesador controlar actividades del controlador como:
o o

el modo de arbitraje que emplee, o el enmascaramiento de determinadas interrupciones.

Programacin del controlador


o

OCW1 Se enva al puerto A0=1 y el contenido del buffer se cargar directamente en el registro IMR. El valor de cada bit indicar:

(1): la correspondiente IR del controlador quedar inhibida para nuevas peticiones de interrupcin; (0): la correspondiente IR del controlador queda habilitada para serle atendidas las nuevas peticiones de interrupcin.

Programacin del controlador


o o

OCW2 Se enva al puerto A0=0. Para evitar que sea interpretada como una ICW1, el bit 4 estar siempre a cero.

Programacin del controlador


o

OCW2 Las acciones que se pueden realizar con este comando son:
1.

2.

Especificar el tipo de rotacin que se desea dar al registro IRR para resolver las prioridades una vez se ha atendido a la ltima interrupcin. Enviar un EOI genrico ( a la ltima interrupcin atendida - de los bits activos en el ISR el ms prioritario - ) o especfica (en el propio comando se especifica qu interrupcin se desea dar por atendida).

Programacin del controlador


o

OCW3 Igualmente se enva al puerto A0=0, con el bit 4 a cero siempre.

Programacin del controlador


o

OCW3 Este comando programa el modo especial de enmascaramiento.

Durante este modo no funcionan las prioridades y toda interrupcin que no tenga una marca en el IMR est habilitada aunque en determinado instante haya activo un bit del ISR (est siendo atendida ya una interrupcin de determinada prioridad. Recurdese que en el modo normal ocurrira que todas las interrupciones de niveles inferiores a la que est actualmente siendo atendida quedaran automticamente inhibidas).

Programacin del controlador

OCW3 permite tambin:


programar

la lectura de los registros ISR e IRR para que el procesador pueda consultar en cualquier momento las interrupciones pendientes o las que estn en servicio; configurar el controlador para que funcione en modo de consulta.

Programacin del controlador

En el modo de consulta el controlador se comporta exactamente como se ha explicado, pero es el procesador el que no lo hace.
o

En lugar de generar un ciclo de reconocimiento de interrupciones al activarse su entrada INT, el procesador genera un ciclo de lectura dirigido al controlador, el cual le responde con un registro que le indica cual de las entradas IRQ activadas en ese momento es la ms prioritaria. El procesador utilizar esta informacin para invocar a la rutina de interrupcin correspondiente.

Programacin del controlador

En el modo de consulta el controlador se comporta exactamente como se ha explicado, pero es el procesador el que no lo hace.
o

Al generarse un ciclo de lectura simple nunca se activa la seal INTA y por lo tanto el controlador no acta de la forma habitual. Este modo est previsto para que el controlador pueda trabajar con otros procesadores no x86 ya que estos generan el ciclo de reconocimiento de interrupcin de forma automtica al recibir la INT. No obstante, naturalmente, pueden aprovechar este recurso para obtener informacin del controlador.

Programacin del controlador

Igualmente el procesador puede consultar en cualquier momento el estado del registro IMR haciendo una lectura a la misma direccin a la que envi el OCW1.

Interrupcin en PC
El 80x86 tiene tan slo un par de pines INTR y INTA para interrupcin del tipo mascarable que permitira conectar un nico dispositivo de E/S. El 8259 sirve entonces para expandir el nmero de interrupciones a travs de esos dos pines.

Interrupcin en PC
Dos controladores 8259 conectados en cascada en configuracin maestroesclavo proporcionan hasta 16 lneas IR, numeradas desde el 0 hasta el 15. En las placas madres ms recientes estos circuitos estn integrado junto con el resto del chipset y permite hasta 24 interrupciones.

Interrupciones en PC
Es importante notar la conexin del esclavo a travs de IRQ2 en el maestro redefiniendo las prioridades de las peticiones de interrupcin. Aunque la ms alta prioridad dentro de cada 8259 es la IRQ0 para el maestro e IRQ8 para el esclavo, la conexin a travs de IRQ2 causa que IRQ8IRQ15 sean las siguientes peticiones de prioridad ms alta despus de IRQ1. As, el orden de prioridad por omisin para las peticiones de interrupcin es IRQ0, IRQ1, IRQ8-IRQ15, IRQ3IRQ7.

Ciclo de reconocimiento de interrupcin en el 8086


1.

2.

Tras la activacin de una lnea IR, el controlador activa la salida INTR sealndole a la CPU la existencia de una interrupcin activada. Al recibir la seal, el procesador da un pulso en su salida INTA indicando que comienza un ciclo de reconocimiento de interrupcin. (En el modo mximo la respuesta ser el cdigo de reconocimiento de interrupcin en las seales S0-2 que ser utilizado por el controlador de bus para generar la seal INTA).

Ciclo de reconocimiento de interrupcin en el 8086


3.

4.

Al recibir el controlador el pulso por su entrada INTA comienza a arbitrar las interrupciones recibidas y selecciona la ms prioritaria. Se emite un segundo pulso por la lnea INTA del procesador (o controlador de bus) que utiliza el controlador para depositar en el bus el vector correspondiente a la interrupcin de mayor prioridad.

Ciclo de reconocimiento de interrupcin en el 8086


5.

El procesador obtiene la direccin de la rutina de interrupcin a partir de este dato y salta a ella. Almacena el registro de flags y la direccin de retorno, deshabilita las interrupciones y comienza a ejecutar la rutina.

Interrupciones en PC

El 8259 es complejo de manejar, afortunadamente para nosotros, mucha de su complejidad es manejada por el BIOS, el cual pone la configuracin apropiada en el 8259 en el encendido de la PC. El 8259 (el primero de los dos en cascada, el maestro) se configura para sealar vectores de interrupcin de 08h a 0Fh correspondiendo con las fuentes IRQ0 a IRQ7 y el segundo (el esclavo), de 70h a 77h correspondiendo con las fuentes de IRQ8 a IRQ9.

Interrupciones en PC
Entrada al 8259 IRQ0 IRQ1 IRQ2 IRQ3 IRQ4 IRQ5 IRQ6 IRQ7 IRQ8 IRQ9 IRQ10 IRQ11 IRQ12 IRQ13 IRQ14 IRQ15 Vector 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 70H 71H 72H 73H 74H 75H 76H 77H Teclado 8259 esclavo COM2/COM4 COM1/COM3 Reservada/ Tarjeta de sonido Disco flexible LPT1 Reloj de tiempo real Reservada Reservada Reservada Ratn PS/2 Coprocesador matemtico Disco duro Reservada Dispositivo Timer del sistema

Interrupciones en PC

Bsicamente cualquier procesador 8086 tiene un conjunto de 256 vectores de interrupcin numerados del 0 al 255. Cada uno de estos vectores contiene un cdigo de 4 bytes el cual es una direccin de la Rutina de Servicio a Interrupcin (RSI).

Fin
Ing. Luis Raymi Romn