DISEÑO DE UNA MICROCOMPUTADORA DIDÁCTICA 1

Anuncio
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
Descargar