Profr. Salvador Saucedo IPN - ESIME ZACATENCO COMPUTACIÓN V DISEÑO DE UNA MICROCOMPUTADORA DIDÁCTICA RESUMEN Se presenta el diseño de un sistema didáctico para enseñaza y experimentación con base en el microprocesador 8088 de INTEL, con 16 KBytes de memoria EPROM, 8 KBytes de memoria RAM, salida y entrada paralela, teclado, despliegue de cristal líquido, circuito contador temporizador, salida audible, interrupciones de hardware, área de experimentación, interfaz RS-232C para comunicación serial asíncrona, fuente de poder estándar y dos conectores de expansión. 1. Características Generales Se usará el microprocesador 8088 por su bajo costo y facilidad de encontrarlo en el mercado. Para reducir el número de circuitos integrados se empleará el modo mínimo del 8088. Los circuitos de soporte a emplear son: el generador de reloj 8284A-1, el controlador programable de interrupciones 8259A-2, la interfaz paralela programable 8255A-5 y el temporizador programable 82C54. Se tendrán dos circuitos integrados de memoria EPROM 27C64, de 8KB cada uno, para obtener 16KB de memoria EPROM, donde residirá el programa monitor. Se tendrá memoria RAM poniendo el circuito integrado 6164 de ocho Kbytes de capacidad. Se contará con despliegue de cristal líquido con dos líneas de caracteres ASCII de veinte posiciones cada una, esto es, se pueden exhibir hasta 40 caracteres alfanuméricos al mismo tiempo. El dispositivo de entrada para el usuario será un teclado de 20 teclas para ejecutar los comandos que brindará el programa monitor. Se emplea la USART 8251 de INTEL para tener comunicación serial asíncrona a través de un conector macho DB9. 2. Generador de reloj Se usará el circuito integrado 8284A-1 de INTEL que produce tres señales que se aplican directamente al 8088 y que son: 1) La señal RELOJ que es un tercio de la frecuencia del cristal usado, esto es, 4.9M/3 = 1.63MHz; 2) la señal INIC que arranca al 8088, haciendo que éste ejecute la instrucción en la localidad física FFFF0h y 3) la señal LISTO que al estar activa hace que el 8088 trabaje a velocidad normal, pero si se hace "0", entonces el 8088 inserta estados de espera, reduciendo, en consecuencia, su velocidad de operación. Figura 1 Generación de señales de inicio y de reloj. 1 Profr. Salvador Saucedo El 8284A produce además otras dos señales: una es OSC que no se usa en el sistema, pero si se envía al conector de expansión; la otra señal es RELP que es el reloj de periféricos y cuya frecuencia es la sexta parte del valor del cristal. El 8284A recibe por su entrada RES- la señal que activa, tras cierto lapso, a la señal INIC que inicia a la CPU. La entrada RDY1 es activa alta y sirve para indicar que el dato ya se recibió o que él está disponible. Para que RDY1 pueda pasar la entrada AEN1- debe estar activa (en bajo). Los dispositivos lentos deben inactivar la señal RDY1 para insertar estados de espera en la CPU. Las entradas RDY2 y AEN2- se comportan de manera idéntica a las anteriores. En este caso se inactiva a esta última pareja conectando AEN2- a "1". 3. Amplificación de señales Con el fin de poder conectar algunas señales a varios circuitos integrados se hace necesario darles mayor capacidad de entregar corriente por lo que se empleará el circuito integrado 74HCT367 que puede lograr que una señal lógica se pueda conectar hasta a quince compuertas TTL. Figura 2 Acondicionamiento de señales. En este caso se acondicionan las señales IO/M-, RD-, WR- e INIC, que ya amplificadas reciben los nombres ES/M-, LEER-, ESCR- e INICIO, respectivamente. Quedan disponibles dos entradas para amplificar otras dos señales lógicas del sistema. El 74HCT367 es un buffer no inversor de tres estados de tecnología CMOS de alta velocidad. La señal IO/M- cuando está en "1" indica que se hará una transferencia de datos con algún puerto; y cuando está en "0" indica que se hará una transferencia de datos con memoria. La señal LEER- es activa baja, por lo que si está en "0" indica que la CPU tomará un dato externo a ella. Del mismo modo, si la señal ESCR- es la que está activa (en bajo) la CPU enviará un dato hacia afuera de ella. Ambas señales nunca están activas al mismo tiempo. 4. Generación de direcciones de puertos Para poder direccionar los puertos de entrada salida se propone el empleo del circuito integrado 74HC138, que activa sólo una de sus salidas cuando la señal ES/M- está en alto y la línea de dirección Y8 se encuentra en su nivel bajo. En la tabla siguiente se dan las direcciones para cada uno de los dispositivos que están en la tarjeta principal de la computadora. 2 Profr. Salvador Saucedo Figura 3 Generación de señales para seleccionar puertos. DISPOSITIVO TECLADO PIC 8259 TEMPORIZADOR PPI 8255 DESPLIEGUE USART SEÑAL STECS59S54S55SLDCS51- DIR. 00H 20H 40H 60H 80H E0H Las líneas de selección A0H- y C0H- se envían al conector de expansión para su uso en el desarrollo de experimentos. 5. El microprocesador 8088 Este microprocesador tiene un ducto de datos de ocho bits y un ducto de direcciones de 20 bits, por lo que su espacio de direcciones es de un megabyte. Internamente tiene un ducto de 16 bits y su juego de instrucciones es el mismo que el del 8086. Figura 4 CPU de INTEL en modo mínimo. El 8088 tiene cuatro registros aritméticos, cuatro registros índices, cuatro registros de segmento, registro de banderas y cola de instrucciones. 3 Profr. Salvador Saucedo Puede trabajar en uno de dos modos: máximo (usando el 8288) o mínimo (como aquí) que no requiere del controlador de ductos 8288. Puede direccionar 64K localidades de E/S, cuenta con doce modos de direccionamiento y se puede interfazar con un coprocesador numérico. En la actualidad está obsoleto desde el punto de vista comercial, pero como elemento de aprendizaje conserva mucha importancia, tomando en cuenta que INTEL preserva el juego de instrucciones en los procesadores más nuevos. Notar que la entrada INTR recibe la señal INTR proveniente del controlador de interrupciones, lo que significa que la CPU reconoce interrupciones de hardware, cuando su bandera de interrupciones está en "1". La CPU indica al 8259 que ha reconocido una interrupción activando la señal INTA-. La entrada para la interrupción no mascarable, NMI, se desactiva conectándola a tierra lógica, pues dicha interrupción queda sin uso. Como la CPU no tiene otro procesador que le solicite el control de los ductos del sistema, la entrada HOLD es también desactivada conectándola a tierra lógica. 6. Controlador programable de interrupciones Para controlar las interrupciones de hardware en un esquema de niveles de prioridad se emplea el 8259A que permite habilitar hasta ocho interrupciones en forma individual. Figura 5 Controlador Programable de interrupciones. La figura muestra la manera de conectarlo al sistema: su salida INT se conecta a la entrada INTR del 8088 y su entrada INTA- se conecta a la salida INTA- del 8088. La salida EN- se usa para deshabilitar al tranceptor HC245 cuando el PIC debe enviar un dato hacia la CPU. Las líneas CAS0-CAS2 no se conectan, pues éstas sólo se usan cuando varios 8259s se conectan en cascada, cosa que aquí no ocurre. El 8259A cuenta con tres registros: el registro IRR salva todos los niveles que están pidiendo servicio; el registro ISR salva todos los niveles que están recibiendo servicio; y el registro IMR salva los niveles de interrupción que están permitidos. Cuando una o más de las señales IRQx está en "1", el PIC pone en "1" los bits correspondientes. A continuación el 8259 evalúa dichas peticiones y si procede activa la salida INT para avisar a la CPU. Si así procede la CPU reconoce la interrupción activando la señal INTA- (un pulso) por lo que el 8259A pone a "1" el bit de más prioridad del registro ISR y el correspondiente bit del registro IRR es regresado a "0". 4 Profr. Salvador Saucedo El 8088 manda un segundo pulso por su salida INTA- con lo que el 8259A envía el tipo de interrupción (ocho bits) por el ducto de datos. Para que el 8259A regrese a "0" el bit del registro ISR debe recibir el comando EOI (fin de interrupción) desde la CPU, a menos que esté funcionando en el modo AEOI, en cuyo caso regresa dicho bit a "0" en cuanto recibe el segundo pulso en INTA-. La programación del 8259A es algo complicada pero vale la pena el esfuerzo pues es la única manera de poder hacer aplicaciones en tiempo real con la computadora (y también en una PC). 7. Transceptor de datos y cerrojo de direcciones Para poder demultiplexar las ocho líneas más bajas de dirección es necesario usar un cerrojo que permita capturar el valor de la dirección durante el pulso de reloj en que dicha información está presente. Se usará para ello el cerrojo de tres estado 74HCT573, que se comporta igual que el 74HCT373, pero que tiene todas las entradas de un solo lado del paquete y todas sus salidas en el otro lado, para facilitar el diseño del circuito impreso. Figura 6 Demultiplexaje de datos y direcciones. Tranceptor de datos. El HCT573 captura la dirección cuando se activa la señal ALE (Address Latch Enable) que se activa justamente cuando el valor de la dirección está presente. Algo semejante sucede con el tranceptor de datos 74HCT245 que, como su nombre lo indica, permite transferir la información en los dos sentidos. El circuito HCT245 está controlado por dos señales: la señal DEN- producida por el 8088 le indica que es momento de transferir un dato, por lo que el tranceptor sólo se activa cuando dicha señal está activa (en bajo). La señal EN-, generada por el PIC, impide que la señal DEN- actúe sobre el tranceptor pues ENse activa cuando el 8259A usa el bus local para transferir un dato. La otra señal que afecta al HCT245 es DT/R- que fija la dirección del flujo de información, cuando es "1" transmite de A a B, y en caso contrario recibe de B a A. En el diagrama general se aprecia que se usan otros dos cerrojos 74HCT573 para abarcar a todas 5 Profr. Salvador Saucedo las líneas de direccionamiento. 8. Puertos de entrada/salida paralela Para dotar al sistema de capacidad de salida paralela se propone el uso del CI 8255A-5 que es una interfaz programable con 24 terminales de entrada o salida. Se usará a dicho dispositivo en el modo 0, de tal suerte que el puerto A es siempre de entrada y los puertos B y C son siempre de salida (palabra de control = 90H). Figura 7 Puertos paralelos (PPI). La forma de operar del 8255A se da en la siguiente tabla. Y1 0 Y0 0 LEER0 ESCR1 S550 Operaciones de lectura 0 1 0 1 0 Pto. B ⇒ ducto de datos 1 0 0 1 0 Pto. C ⇒ ducto de datos Operaciones de escritura 0 0 1 0 0 Ducto de datos ⇒ pto. A 0 1 1 0 0 Ducto de datos ⇒ pto. B 1 0 1 0 0 Ducto de datos ⇒ pto. C 1 1 1 0 0 x 1 x x 1 x x 0 1 x 1 1 1 0 0 Ducto de datos ⇒ control Funciones de deshabilitar Salida de datos a 3er edo Condición ilegal Salida de datos a 3er edo Pto. A ⇒ ducto de datos En la figura se ilustra la forma de conectar la interfaz PPI al sistema. La entrada RESET se conecta a la señal INICIO la que al ponerse en "1" limpia los tres registros A, B y C y al registro de control. Define a A, B y C como entradas. El 8255A es un medio muy poderoso para poder conectar un sistema digital a muchos periféricos, ta6 Profr. Salvador Saucedo les como impresoras, monitores, convertidores A/D y D/A, etc. En este caso se envían doce de sus líneas de E/S hacia un conector de expansión para aplicaciones de tipo experimental. 9. Temporizador programable El dispositivo 82C54 es un contador/temporizador diseñado para resolver problemas de generación precisa de eventos en tiempo real en microcomputadoras. Cuenta con tres contadores independientes, cada uno de 16 bits, capaces de recibir entradas de reloj de hasta 10 MHz. Cada canal puede trabajar en cualquiera de los seis modos de operación. La siguiente tabla muestra cómo se opera al dispositivo. Y1 0 0 1 1 0 0 1 1 x x Y0 0 1 0 1 0 1 0 1 x x LEER1 1 1 1 0 0 0 0 x 1 ESCR0 0 0 0 1 1 1 1 x 1 S54 0 0 0 0 0 0 0 0 1 0 Operación Escribe contador 0 Escribe contador 1 Escribe contador 2 Escribe reg de control Lee contador 0 Lee contador 1 Lee contador 2 No hay operación 3er edo No hay operación 3er edo No hay operación 3er edo El canal 0 se usará en el modo 2 (Generador de interrupciones) el cual envía un pulso negativo con duración de un pulso de reloj cada vez que transcurren N pulsos de reloj, donde N es el valor cargado en el contador. El canal 2 se usará en el modo 3 que genera una señal periódica cuadrada y se empleará para excitar una pequeña bocina. El canal 1 se programará en el modo 2 con la idea de medir la duración de eventos externos, pues su señal de compuerta, G1, viene desde el conector de expansión. 7 Profr. Salvador Saucedo Figura 8 Temporizador programable. Altavoz. Cuando un contador es escrito, toda su lógica de control es iniciada y su salida OUT se pone en un estado conocido, sin que se requieran pulsos en su entrada CLK. 10. Memoria EPROM El programa monitor debe residir en memoria que no pierda su contenido cuando se desenergiza el sistema. Ello se logra poniendo memoria de sólo lectura que pueda ser grabada en un programador comercial estándar. Dicha memoria es conocida como memoria EPROM. El sistema emplea dos circuitos integrados 27C64, cada uno de los cuales tiene una capacidad de 8Kx8, que son 16 Kbytes en total de memoria permanente. En tal memoria radicará el firmware de la computadora. En la siguiente figura se muestra como se conecta la memoria mencionada. 8 Profr. Salvador Saucedo Figura 9 Memoria de sólo lectura. Como la memoria permanente debe estar en la parte más alta del espacio de memoria se usa una compuerta NAND de cuatro entradas, la 74HC20 que genera el permisivo general para poder acceder a ambos CIs. Para evitar colisiones, en la excitación para activar cualquiera de las salidas de datos se incluye a la señal LEER- con el fin de que si se hace una operación de escritura sobre dichos dispositivos, éstos permanezcan con su salida de datos en el estado de alta impedancia. Las localidades de la memoria de la izquierda van de la FC000H a la FDFFFH con espejo de la FE000H a la FFFFFH, por lo que es aquí donde debe residir el programa monitor, incluyendo el salto inicial grabado en la localidad física FFFF0H. Las localidades de la memoria de la derecha van de la F8000H a la F9FFFH con espejo de la FA000H a la FBFFFH, por lo que es aquí donde debe residir la aplicación del usuario, que pueden ser rutinas aritméticas, control de dispositivos externos, etc. La existencia del espejo se explica porque Y13 no se usa para direccionar a la memoria. 11. Memoria de trabajo Toda computadora requiere de memoria que pueda leer y también escribir para poder salvar datos que necesita procesar. Por dicha razón se agrega memoria volátil conocida como RAM. Se propone usar la memoria RAM 6164 que tiene una organización de 8Kx8, esto es, tiene una capacidad de 8 KB. Ver la siguiente figura. 9 Profr. Salvador Saucedo Figura 10 Memoria volátil (RAM). En virtud de que los vectores de interrupción necesitan ser colocados en la parte más baja del espacio de memoria, para producir el permisivo general para acceder a esta memoria, se usa una compuerta OR de tres entradas, la HC4075, cuya salida se combina con las señales Y16 y ES/M- para seleccionar al CI 6164. La memoria 6164 comprende las localidades 00000H a 01FFFH, con varios espejos, entre los que está el que va de la localidad 02000H a la localidad 03FFFH. La señal SELM-, para expansión, elige localidades a partir de la dirección 10000H. 12. Teclado El sistema contará con un teclado de veinte teclas controlado mediante el circuito integrado 74C923, según muestra la siguiente figura. Al oprimirse y soltarse una tecla se genera la interrupción IRQ0 hacia el 8259A, mismo que activa la señal INTR para que la CPU efectúe la lectura de la tecla oprimida 10 Profr. Salvador Saucedo Figura 11 Teclado con el 74C923. Los comandos que tendrá el programa monitor son los siguientes: ER DAR EM DAM MBM CBM ABCD DESC IPSP PAS RUP FLAG EJ USU E/S Comando para examinar y modificar los registros. Comando para despliegue automático de registros. Comando para examinar y modificar localidades de memoria. Comando para despliegue automático de memoria. Comando para mover bloques de memoria. Comando para comparar bloques de memoria. Comando para exhibir los registros AX, BX, CX y DX. Comando para exhibir los registros DS, ES, SS y CS. Comando para exhibir los registros IP, SP, SI y DI. Comando para ejecutar sólo una instrucción. Comando para insertar un punto de ruptura o removerlos todos. Comando para ver las banderas y el registro BP. Comando para correr un programa. Comando para ejecutar comando del usuario. Comando para leer y escribir puertos. Uso de las teclas La tecla ESC sirve para abortar el comando en que se encuentra trabajando el usuario. La tecla EJEC sirve para terminar el comando normalmente. Las teclas + y - sirven para avanzar o retroceder una localidad o un registro al estar examinando/modificando memoria o registros. 11 Profr. Salvador Saucedo 13. Despliegue de cristal líquido Figura 12 Despliegue de cristal líquido. Para examinar el estado del sistema se emplea un despliegue de 40 caracteres alfanuméricos en dos hileras de 20 posiciones cada una. En la siguiente figura se muestra como se conecta el dispositivo LCM2020 que permite desplegar la información sobre el sistema. El LCM requiere de una inicialización y cuenta con varios modos de operación. 14. Conectores de expansión y de E/S Figura 13 Conectores para expansión y puertos paralelos. El sistema contará con posibilidad de ser expandido, para poder agregarle más memoria o más puertos mediante un conector de expansión. También cuenta con doce líneas de E/S usando un conector de entradas y salidas paralelas. Además, contará con una pequeña área para alambrar dentro de la tarjeta principal. 12 Profr. Salvador Saucedo HOJA RAIZ Revisado: Octubre 18, 2003 COMPUTADORA DIDACTICA Revisión: Lista de Materiales Octubre 18, 2003 12:24:07 Item Cantidad Referencia 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 31 1 1 2 1 1 1 1 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 BZ1 C1 C21, C27 C24 C25 JP3 JP4 R1 R’ R? U1 U2 U3 U4, U5, U6 U7 U8 U9 U10 U11 U12 U13 U14 U15, U16 U17 U18 U19 U20 U21, U28 U25 U22 U23 U24,U26 U27 Y1 Parte Zumbador 1µF 10n .18 1.8 Header 17x2 Header 12x2 10K 470 330 8284A-1 Generador de reloj 8088MIN Microprocesador 74HCT245 Tranceptor octal 74HCT573 Cerrojo de 3 estados 82C59A Controlador de interrupción 74HCT367 Buffer de 3 estados 74HC00 NAND de 2 entradas 74ACT138 Codificador 3 a 8 74HC04 Inversor séxtuple 8255A-5 Interfaz programable 82C54 Contador / Temporizador 74HCT32 OR de 2 entradas 27C64 EPROM de 8kx8 74HC20 NAND de 4 entradas 74HC4075 NOR de 3 entradas 6164 SRAM de 8kx8 USART 8251 74LS74 Flip Flor tipo D 74C923 Controlador teclado LCM2020 Display C. líquido 7438 NAND colector abierto SN75150 intefaz RS232 SN75154 inter RS232 4.9 MHz Cristal Figura 14 Usar una fuente de PC para el prototipo. 15. El controlador programable de interrupciones 8259A Este dispositivo maneja hasta ocho interrupciones vectorizadas, bajo un esquema de prioridades, para la CPU. Se pueden conectar hasta ocho 8259A's en cascada, para obtener 64 interrupciones 13 Profr. Salvador Saucedo con niveles de prioridad, sin necesidad de circuitería adicional. El dispositivo no necesita señal de reloj para sincronizarse con la CPU. En la figura se ofrece un diagrama a bloques del controlador. Figura 15 Diagrama a bloques del PIC. Diagrama a bloques del 8259A El controlador programable de interrupciones funciona como un administrador en un sistema cuyo ambiente es manejado a base de interrupciones. Acepta peticiones provenientes de equipos periféricos (como el teclado, el manejador de disquete, las comunicaciones, etc.), determina cual de las interrupciones tiene la mayor prioridad, compara dicha prioridad con la prioridad de la interrupción que está siendo atendida y, si es aún mayor, envía una interrupción a la CPU. La rutina de servicio es el módulo del programa asociado a una interrupción particular, por lo que el 8259A debe informar al 8088 de cual interrupción se trata. Eso lo hace enviando a la CPU un byte durante la secuencia de reconocimiento (aceptación) de interrupción. En referencia a la figura vista, se tiene el registro de peticiones, IRR, que registra todos los niveles de interrupción que solicitan servicio en el momento actual. El registro de servicio, ISR, que indica los niveles de interrupción en servicio, es decir aquellos cuya rutina de servicio está en ejecución. El arbitro de prioridades determina los niveles de prioridad de los bits en "1" del registro IRR. La más alta prioridad es elegida y el bit correspondiente es puesto a "1" en el registro ISR, durante el ciclo de bus INTA-. El registro de enmascaramiento de interrupciones, IMR, contiene los bits que inhiben individualmente a los niveles de interrupción. El registro IMR opera sobre el registro IRR. La inhibición de una entrada de alta prioridad no afecta a las inferiores. La señal de interrupción, INT, se conecta directamente a la CPU. INT es activa alta, es decir, se pone a "1" para indicar una interrupción. La señal de reconocimiento de interrupción, INTA-, es sensada por la lógica de control de 8259A para saber si la activación de INT ha sido contestada positivamente por el 8088, y que se ha iniciado el ciclo INTA-, de reconocimiento de interrupción. La lógica de control de lectura escritura se emplea para aceptar los comandos del 8088, me14 Profr. Salvador Saucedo diante instrucciones OUT, que se almacenan en los registros ICWs, palabras de inicialización, y los OCWs, palabras de operación que salvan los diferentes formatos de control. Esta lógica también transfiere el estado del 8259A hacia el bus de datos local. La señal de selección del dispositivo, CS-, indica en su estado activo (bajo) al dispositivo que se hará una lectura o escritura de sus registros. La escritura se indica activando la señal WR-, mientras que una lectura se indica activando la señal RD-. Las señales WR- y RD- son activas bajas. La entrada A 0 se combina con WR- o RD- para escribir comandos a los diferentes registros de comando, o bien para leer alguno de los registros de estado. La lógica para cascada salva y compara las IDs de todos los 8259As usados en el sistema. Tiene tres terminales (CAS0-2) asociadas a esta lógica son salidas cuando el 8259A es definido como maestro, y son entradas cuando es definido como esclavo. El 8259A que es maestro debe enviar por dichas señales la ID del esclavo cuya interrupción será servida. El esclavo seleccionado de este modo debe responder al ciclo de INTA- iniciado por la CPU, y poner en el bus de datos el vector de la interrupción. Dicho vector se le preprograma por la CPU. Programación del 8259A El 8259A acepta dos tipos de comando desde el 8088: palabras de inicialización, ICWs, antes de que empiece la operación normal, y que son de 2 a 4 bytes, enviados al 8259A en ciclos de escritura de E/S; y palabras de comandos de operación, OCWs, que colocan al 8259A en uno de los siguientes modos de operación: a.- Modo completamente anidado b.- Modo de prioridad rotatoria c.- Modo de inhibición especial d.- Modo encuesta (desactiva a INT) Un comando con A 0 = 0 y D 4 = 1 es interpretada por el 8259A como el inicio de la secuencia de inicialización. La palabra ICW1 arranca la inicialización y automáticamente se limpia el registro de inhibición IMR, y limpia las peticiones existentes. Ver siguiente figura 15 Profr. Salvador Saucedo Las palabras de comando de operación, OCWs, pueden enviarse al 8259A después de que éste ha sido inicializado. Mediante los comandos de operación se puede cambiar el modo de operación del controlador de interrupciones, según muestra la figura: 16 Profr. Salvador Saucedo ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• • • • A0 D7 D6 D5 D4 D3 D2 D1 D0 • • ••••••••••••••••••••••••••••••••••••• MASCARA DE INT. • • • 1 •M7 •M6 •M5 •M4 •M3 •M2 •M1 •M0 • •••••••••••• • • ••••••••••••••••••••••••••••••••••••• •1: INHIBE • • • OCW1 ••••••••••••••••••••••••••••••••••0: PERMITE• • • •••••••••••• • • • • A0 D7 D6 D5 D4 D3 D2 D1 D0 NIVEL IR A AFECTAR • • ••••••••••••••••••••••••••••••••••••• ••••••••••••••••••• • • • 0 • H •SL •EOI• 0 • 0 •L2 •L1 •L0 • • 0 1 2 3 4 5 6 7 • • • ••••••••••••••••••••••••••••••••••••• ••••••••••••••••••• • • OCW2••• • • • • •••••••0•1•0•1•0•1•0•1•• • • • ••••• • • •••••••••••0•0•1•1•0•0•1•1•• • • • • ••••••• •••••••••••••••0•0•0•0•1•1•1•1•• • • • • • ••••••••••••••••••• • • • • • ••••••••••••••••••• • • ••••••••••••••••••••••••••••••••••••••••••••••••••••• • • • 0•0•1• COMANDO EOI NO ESPECIFICO •• FIN DE • • • • 0•1•1• COMANDO EOI ESPECIFICO •• INTERRUP. • • • • 1•0•1• ROTAR EN MODO EOI NO ESPECIF •• ROTACION • • • • 1•0•0• ROTAR EN MODO EOI AUTO (PONE)) • AUTOMA• • • • 0•0•0• ROTAR EN MODO EOI AUTO (QUIT •• TICA • • • • 1•1•1• ROTAR EN EOI ESPECIFICO * •• ROTACION • • • • 1•1•0• PONER PRIORIDAD * •• ESPECIF. • • • • 0•1•0• NO OPERACION * COMBINA CON L2-0 • • • ••••••••••••••••••••••••••••••••••••••••••••••••••••• • • LEE REGISTROS• • A0 D7 D6 D5 D4 D3 D2 D1 D0 ••••••••••••••••••••• • • ••••••••••••••••••••••••••••••••••••• •NO ACCION•LEE •LEE • • • • 0 • 0 •ESM•SMM• 0 • 1 • P •RR •RIS• • •IRR •ISR • • • ••••••••••••••••••••••••••••••••••••• ••••••••••••••••••••• • • OCW3 •••••• • • • •••••• 0 • 1 • 0 • 1 • • • • •••••••• • •••••••••• 0 • 0 • 1 • 1 • • • •••••••••••••••••••••••• ••••••••••••••••••••• • • • 0 0 NO ACCION •• •••••••••••••••••• • • • 0 1 NO ACCION •••••••••••••••1:MODO ENCUESTA • • • • 1 0 QUITA MASC ESP. • •0: MODO NORMAL • • • • 1 1 PONE MASCARA ESP• •••••••••••••••••• • • •(MASCARA ESPECIAL) • (POLL) • • ••••••••••••••••••••••• • • • ••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••• Formato de las palabras de comando de operación. El modo completamente anidado consiste en que cuando la señal INT es reconocida la petición de más alta prioridad es elegida y su vector es puesto en el bus de datos. Además, el bit que corresponde al nivel servido se pone a "1" en el registro de interrupción en servicio, ISR. Dicho bit permanece puesto hasta que el microprocesador envía el comando EOI (fin de interrupción), justamente antes de finalizar la rutina de servicio o, si el bit AEOI (fin de interrupción automático) está activo, hasta el último filo del postrer pulso recibido en INTA. Mientras el bit de ISR esté puesto todas las interrupciones de igual o menor prioridad estarán inhibidas, mientras que las de mayor, podrán generar una interrupción (siempre que la bandera IF haya sido habilitada por software). Al ser inicializado, el 8259A tiene la más alta prioridad en IR0, y la más baja en IR7. El comando de fin de interrupción EOI lo envía la CPU antes de terminar la rutina de servicio al controlador de interrupciones. El comando EOI debe ser enviado dos veces cuando hay varios 8259As en cascada, una vez al maestro, u una vez al esclavo implicado. 17 Profr. Salvador Saucedo Existen dos formas del comando EOI: específico y no específico. El primero consiste en que la CPU determina cual bit del registro ISR poner a "0"; mientras que en el no específico, el comando EOI es enviado al 8259A el que automáticamente pondrá a "0" el bit de más alta prioridad en servicio. El fin automático de interrupción ocurre cuando el 8259A opera en el modo AEOI. En este caso no se requiere recibir el comando EOI desde la CPU, sino que el bit de ISR se regresa a "0" al recibir el último filo de la secuencia de reconocimiento de interrupción, por la terminal INTA. La rotación automática de prioridades se usa cuando se quiere dar la misma prioridad a todos los dispositivos conectados al sistema. En este modo, un dispositivo después de ser servido recibe la prioridad más baja, así que un dispositivo que solicita servicio deberá esperar, en el peor de los casos, hasta que cada uno de los otros siete dispositivos es servido una vez. La rotación específica de prioridades puede ser usada por el programador para fijar la prioridad más baja, lo que fija el resto de las prioridades, por ejemplo si se fija a IR4 como la más baja, IR5 será la más alta, seguida por IR6, etc. Cada petición de interrupción puede ser inhibida individualmente por el registro de enmascaramiento de interrupciones IMR, programado a través de OCW1. Cada bit en IMR inhibe un canal de interrupción si está en "1". El bit 0 inhibe a IR0, el bit 1 a IR1, y así sucesivamente. El modo de enmascaramiento especial se usa cuando se desea habilitar a interrupciones de menor nivel que la que se está ejecutando. En este caso el nivel que se ejecuta queda inhabilitado y todos los demás que no estén inhabilitados por el IMR, quedan habilitados, por lo que una interrupción de nivel inferior puede interrumpir. El modo de encuesta no usa la señal INT o la CPU tiene la bandera IF desactivada, lo que inhabilita las interrupciones. El servicio a los dispositivos la hace la CPU mediante el comando Poll. El 8259A responde a dicho comando, durante el ciclo de lectura subsiguiente, con el canal que necesita ser servido, si procede. La lectura del estado del 8259A consiste en leer los registros IMR, ISR e IRR. El primero, el registro de enmascaramiento, puede ser leído mediante OCW1, pero ejecutando un ciclo de lectura, con la instrucción IN. El registro ISR, puede ser leído cuando, antes del consabido pulso de lectura, se le envía un comando OCW3 con RR=1 y RIS=1. Lo mismo se hace para IRR, pero aquí se usa RR=1 y RIS=0. Los modos de filo y nivel de disparo se eligen en ICW1 y fijan si las interrupciones se generan cuando las IRs tienen una transición de bajo a alto, en el modo de filo; o generan interrupciones por estar en el nivel alto, en el modo de nivel. En ambos casos, las entradas IR deben permanecer en alto hasta después del primer filo negativo en INTA. En el modo de nivel, la petición debe ser removida antes de que se reciba el EOI, para evitar que se genere una segunda interrupción. El modo especial completamente anidado se usa cuando en el sistema existen uno o varios 8259As esclavos y se desea conservar las prioridades dentro de cada esclavo. En este caso, el modo completamente anidado debe programarse en el maestro, con ICW4. Cuando una petición de interrupción proveniente de cierto esclavo está en servicio, dicho esclavo no queda bloqueado en la lógica de prioridad del maestro y cualquier interrupción posterior de mayor prioridad que la que está en servicio, proveniente del mismo esclavo será atendida. (En el modo normal, un esclavo es enmascarado cuando una de sus interrupciones es atendida). Antes de terminar la rutina de servicio, el software debe indagar si la rutina en servicio era la única de ese esclavo. Eso se hace enviando a tal esclavo un EOI no específico y leer a continuación su ISR. Si todos los bits son "0", enviar un EOI no específico al maestro, también. Si hay algún "1", no enviar EOI alguno. 18 Profr. Salvador Saucedo MODO EN CASCADA El 8259A puede conectarse fácilmente en cascada hasta un máximo de ocho esclavos, para tener hasta 64 niveles de prioridad. El maestro controla a los esclavos a través de las tres líneas CAS, que funcionan como selectoras de esclavo, durante la secuencia INTA-, de reconocimiento de interrupción. En la configuración en cascada las salidas INT de los esclavos se conectan a las entradas IR del maestro. Ver próxima figura Cada 8259A del sistema debe seguir una inicialización separada y pueden programarse para trabajar en modos diferentes. El decodificador de direcciones de E/S debe generar señales de selección separadas para los diferentes 8259As. 19 Profr. Salvador Saucedo 20 Profr. Salvador Saucedo 21 Profr. Salvador Saucedo 22 Profr. Salvador Saucedo 23