Temporizadores, registros, controladores e interfaces de teclados y displays
en microcontroladores
2.
Definición de las
terminales
3. Lectura de un
contador
4. Controlador programable 8237
DMA
5.
Definiciones de terminales
6. Registros
internos
7. Comando de
programación.
8. Transferencia de memoria a memoria con el
8237
9. Controlador programable de interrupciones
8259A
10. Descripción general del
8259A
11.
Programación del 8259A
12. Controlador programable 8279 para
teclado y display
13. Definición de
terminales para la 8279
14. Interface del 8279 con el
microprocesador
15. Interface con el
teclado
16. Interface programable para comunicaciones
8251
17. Función de las
terminales
18. Programación del
8251A
19. Controlador
programable de monitor o TRC
8275
20. Descripción
Funcional
21. Definiciones de lo
Pines
22. Controlador Programable de
discos flexibles 8271
23. Descripción
funcional
24. Descripción de
interface del CPU
25. Operación
DMA
26. Interface de manejo de
disco
27. Separación de
datos
28. Interfaces de control de
manejo de disco
29. El interfaz de
periféricos 8255
30. Descripción del
integrado
31. Descripción
funcional
32. Programación del
8255
33. Modos de operación del
8255
34. El 8255 en el
PC
1. Temporizador programable de intervalos
8254
El temporizador programable de intervalos 8254, consta
de tres contadores (temporizadores) programables de 16 bits. Cada
contador puede contar en binario o en decimal codificado en
binario (BCD). La frecuencia máxima permisible de entrada
a cualquier contador es de 10 Mhz. Este contador es útil
cuando el microprocesador
debe controlar eventos en
tiempo real.
Algunos ejemplos de su empleo son:
reloj de tiempo real,
contador de eventos y
control de la
velocidad y
sentido de funcionamiento del motor.
Este temporizador también aparece en las computadoras
personales en los puertos 40H hasta 43H para (1) generar una
interrupción básica del temporizador que ocurre a,
más o menos, 18.2 Hz; (2) hacer que se refresque la memoria
DRAM del sistema; (3)
constituir una fuente de temporización para la bocina
interna y otros dispositivos. E temporizador en la computadora
personal es un
8253 en vez de un 8254.
Cada temporizador tiene una entrada de reloj CLK, una
entrada de compuerta, y una conexión de salida (OUT). La
entrada de reloj suministra la frecuencia básica de
funcionamiento del temporizador, la terminal de compuerta
controla al temporizador en algunos modos de operación y
en la terminal OUT es donde se obtiene la salida del
temporizador.
Las señales que se conectan con cl microprocesador
son las terminales del canal de datos
(D7-D0) RD,
WR, CS y las entradas de direccionamiento A1 y
A0. Las entradas direccionamiento están presentes para
seleccionar a cualquier de los cuatros registros
internos utilizados para la programación, la lectura o
la escritura en
un contador. La computadora
personal tiene
un temporizador 8253 o su equivalente, decodificado en los
puertos de E/S 40H-43H. El temporizador cero se programa para
generar una señal de 18.2 Hz que interrumpa al
microprocesador en el vector de interrupciones 8 para un "tic" de
reloj. El pulso se utiliza a menudo para temporizar programas y
eventos. El temporizador 1 se programa para una
salida cada 15 microsegundos que se utiliza en la
microcomputadora PC/XT para solicitar un ciclo de DMA utilizado
para refrescar la RAM dinámica. El temporizador 2 está
programado para generar un tono en la bocina de la computadora
personal.
2. Definición de las
terminales
1. A1, A0, Entradas de direccionamiento: seleccionan uno
de los cuatro registros internos del 8254. En la tabla 9-6
aparecen las funciones de los
bits de dirección Al y A0.
2. CLK. Entrada de Reloj: se utiliza como fuente de
temporización para cada uno de los contadores internos.
Esta entrada está conectada a menudo con la señal
PCLK del controlador de canal del sistema del
microprocesador.
3. CS.
Selección de Integrado: habilita al 8254 para programarlo,
leer o escribir en un contador.
4. G. Entrada de compuerta: controla el funcionamiento
del contador en algunos modos de funcionamiento.
5. GND. Tierra:
conectada a la tierra del
sistema.
6. OUT. Salida del contador: la salida es en donde se
encuentra disponible la forma de onda generada por el
temporizador.
7. RD.
Lectura: lee
los datos del 8254
con la señal IORC.
8. Vcc. Alimentación
conectada a + 5.0 volts.
9. WR.
Escribir: escribe datos en el 8254 con la señal de
habilitación estroboscópica IOWC.
Cada contador se programa al escribir una palabra de
control seguida
de un conteo inicial. La palabra de control le permite al
programador seleccionar el contador, el modo de funcionamiento y
el tipo de operación (lectura o
escritura). La
palabra de control también selecciona un conteo binario o
en BCD. Cada contador se puede programar con un conteo desde 1
hasta FFFFH. Un conteo de 0 es igual a FFFFH + 1 (65 536) o 10
000 en BCD. El conteo mínimo de 1 se aplica a todos los
modos de funcionamiento, excepto los modos 2 y 3, que tienen un
conteo mínimo de 2. El temporizador 0 se utiliza en la
computadora
personal con un conteo para dividir entre 64K (FFFFH) para
generar el pulso de reloj de 18.2 Hz (18.19638 Hz) para
interrupción. El temporizador 0 tiene una frecuencia de
entrada de reloj de 4.77 MHz/4 o 1.1925 MHz.
La palabra de control emplea el bit BCD para seleccionar
un conteo en BCD (BCD = 1) o un conteo binario (BCD = 0). Los
bits M2, M1 y M0 seleccionan uno de los 6 diferentes modos de
funcionamiento (000-101) del contador Los bits RW1 y RW0
determinan cómo se leerán o escribirán los
datos en el contador Los bits SC1 – SC0 seleccionan un
contador o el modo especial de funcionamiento de retrolectura que
se describe más adelante en esta
sección.
Cada contador tiene una palabra de control que se
utiliza para seleccionar la forma en que trabajará el
contador. Si se programan 2 bytes en un contador, entonces el
primer byte (LSB) detendrá el conteo y el segundo byte
(MSB) empezará el conteo con una nueva cuenta. El orden de
la programación de cada contador es
importante, pero se puede intercalar la programación de
diferentes contadores para tener mejor control. Por ejemplo, la
palabra de control se puede enviar a cada contador antes que los
conteos para la programación de cada uno. En el ejemplo
9-21 se ilustran unas cuantas formas de programar los contadores
1 y 2. En el primer método se
programan ambas palabras de control, luego la parte menos
significativa del (LSB) del conteo de cada contador, que les
detiene su conteo. Después, se programa la parte
más significativa (MSB) del conteo, y se ponen a trabajar
ambos contadores con el nuevo conteo. En la segunda parte del
ejemplo, se muestra un
contador programado antes que el otro.
Modos de funcionamiento. Están disponibles seis
modos de funcionamiento (modo 0-modo 5) en cada uno de los
contadores del 8254. A continuación se describe cada
modo:
1. El Modo 0 permite utilizar el contador 8254 como
contador de eventos. En este modo, la salida se vuelve un 0
lógico cuando se escribe la palabra de control y permanece
allí hasta que hay N más el número de conteo
programado. Por ejemplo, si se programa un conteo de 5, la salida
seguirá siendo 0 lógico durante seis conteos a
partir de N. Se debe tener en cuenta que la entrada de la
compuerta (G) debe ser un l lógico a fin de permitir el
conteo del contador. Si G se vuelve un 0 lógico en la
mitad de un conteo, se detendrá el contador hasta que G
vuelva a ser otra vez 1 lógico.
2. El Modo 1 hace que el contador funcione como
multivibrador monoestable. En este modo, la entrada G dispara al
contador de modo que produzca un pulso en la salida OUT, que se
convierte en 0 lógico mientras dura el conteo. Si el
conteo es de 10, entonces la salida va bajo durante 10 periodos
de reloj cuando se le dispara. Si la entrada G ocurre mientras
dura el pulso de salida, se vuelve a cargar el contador con el
total de cuenta y la conexión en la salida continua
mientras dure el conteo.
3. El Modo 2 permite que el contador genere una serie de
pulsos continuos que tienen un ancho de un pulso de reloj. La
separación entre los pulsos determina el conteo. Por
ejemplo, para un conteo de 10, la salida es un 1 lógico
durante 9 periodos de reloj y está en un nivel bajo
durante un periodo de reloj. Este ciclo se repite hasta que se
programe el contador con un nuevo conteo o hasta que se lleve la
terminal G a un 0 lógico. La entrada G debe ser un 1
lógico para que este modo genere una serie continua de
impulsos.
4. El Modo 3 genera una onda cuadrada continua en la
salida, siempre y cuando la terminal 0 sea un 1 lógico. Si
el conteo es par, la salida es alta durante la mitad del conteo y
baja durante la otra mitad. Si el conteo es impar, la salida es
alta durante un periodo de reloj más largo que aquel en
que está baja. Por ejemplo, si se programa el contador
para un conteo de 5, la salida está en alto durante 3
pulsos de reloj y en bajo durante 2.
5. El Modo 4 permite que el contador produzca un solo
pulso en la salida. Si se programa un conteo de 10, la salida
está en alto durante l0 periodos de reloj y, luego, en
bajo durante uno. El ciclo no empieza hasta que el contador tiene
su carga completa. Este modo funciona como un multivibrador
monoestable disparado por programa. En este modo, igual que en
los modos 2 y 3, se emplea la entrada G para habilitar el
contador. La entrada G debe ser un 1 lógico para que el
contador funcione en estos tres modos.
6. El Modo 5 es un multivibrador monoestable disparado
externamente, que funciona como en modo 4, excepto que lo dispara
un pulso de disparo en la terminal G, en vez de que lo haga el
programa. Este modo es también similar al modo 1 porque se
puede volver a disparar.
Las direcciones se decodifican con un PAL l 6L8 que
también genera una señal de habilitación
para escritura para el 8254, que está conectado con las
conexiones de orden bajo del canal de datos. El PAL
también genera una señal de espera para el
microprocesador que ocasiona 2 estados de espera cuando se accesa
al 8254. El generador de estados de espera conectado con el
microprocesador, en la práctica, controla el número
de estados de espera insertados en la temporización. El
programa para el PAL no se ilustra aquí porque es casi el
mismo que en muchos de los ejemplos anteriores.
Cada contador tiene un registro interno
que se lee con la operación dc leer un puerto del contador
Estos registros, por lo general, siguen el conteo. Si se necesita
el contenido del contador en un momento determinado, entonces el
registro puede
"recordar" el conteo si se programa la palabra de control (figura
9-35) que ocasiona que se retenga el contenido del contador en un
registro, hasta que se lea. Siempre que se programa una lectura
del registro contador se retiene el contenido del
contador.
Cuando es necesario leer el conten al mismo tiempo, se
utiliza palabra de control de retrolectura. Con esa palabra de
retrolectura, el bit CNT
es un 0 lógico para hacer que se retengan los
contenidos de los contadores seleccionados por CNT0, CNT1 y CNT2
Si se va a retener el registro de estado
entonces se hace al bit ST
un 0 lógico. En la figura 9-37 se muestra el
registro de estado que a
su vez muestra el estado la
terminal de salida, ya sea que el contador está en un
estado nulo (0) o la forma como se programo.
Una aplicación del temporizador 8254 es como
controlador de velocidad de
un motor de CD. El
funcionamiento de los circuitos
manejadores es muy sencillo. Si la salida Q del 74ALS112 es un 1
lógico, la base de Q2 va a +12 volts por medio del
resistor elevador de nivel de la base y la base de Q1 va a
circuito abierto. Esto significa que Q1 está apagado y Q2
encendido y la terminal positiva del motor se conecta a + 12 V.
Las bases de Q3 y Q4 van a tierra a
través de los inversores. Esto hace que Q3 conduzca o se
encienda y que Q4 se apague conectando a tierra la terminal
negativa del motor. Por tanto, el 1 lógico en la salida Q
del flip-flop conecta +12 V a la terminal positiva del motor y a
tierra la terminal negativa. Esta conexión hace que el
motor gire hacia el frente o sentido normal. Si el estado de
la salida Q del flip-flop se vuelve un 0 lógico, entonces
se invierten las condiciones de los transistores y se
aplican +12V a la terminal negativa del motor y se conecta a
tierra la positiva. Esto hace que el motor tenga rotación
inversa.
Si se alterna la salida del flip-flop entre un 1 y un 0
lógicos, entonces el motor gira en un sentido u otro a
diversas velocidades. Si el ciclo de trabajo de la salida Q es de
50%, el motor no girará y tendrá algo de par
(torsión) de retención, porque la corriente pasa
por él. En la figura 9-39 se muestran algunos diagramas de
temporización y sus efectos en la velocidad y sentido de
rotación del motor Se verá la forma en que cada
contador genera pulsos en diferentes posiciones, para variar el
ciclo de trabajo en la salida Q del flip-flop. Esta salida se
llama también modulación por ancho de
pulso.
Para generar estas formas de onda, se programan los
contadores 0 y 1, para dividir el reloj de entrada (PCLK) entre
30720. Para cambiar el ciclo de trabajo de Q se cambia el punto
en el cual se pone a funcionar el contador 1 en relación
con el contador 0. Con ello, se cambian la velocidad y el sentido
de rotación del motor. Pero, ¿por qué
dividir el reloj de 8 MHz entre 30 720? Este número es
divisible entre 256 por lo cual se puede establecer un programa
corto que permita 256 velocidades diferentes. Esto produce
también una frecuencia básica de funcionamiento
para el motor de alrededor de 260 Hz, que es lo suficiente baja
para impulsar el motor. Es importante mantener esta frecuencia de
funcionamiento por abajo de 1000 Hz, pero mayor a 60
Hz.
La velocidad se controla con el valor de AH
cuando se llama a este procedimiento.
Debido a que se tiene un número de 8 bits para representar
la velocidad, entonces un ciclo de trabajo de 50% para un motor
parado, es un conteo de 128. Si se cambia el valor en AH
cuando se llama a este procedimiento, se
puede ajustar o graduar la velocidad del motor. Cuando se llama a
este procedimiento y se cambia el valor de AH, se
aumentará la velocidad del motor en cualquier sentido de
rotación. Conforme el valor de AH se aproxima a 00H, el
motor empieza a aumentar su velocidad en la rotación
inversa. Cuando el valor de AH se aproxima a FFH, aumenta la
velocidad del motor en el sentido normal.
4. Controlador
programable 8237 DMA
El controlador de DMA 8237 suministra a la memoria y al E/S
señales de control e información y direccionamiento a la memoria
durante la transferencia de DMA. El 8237 es, en realidad, un
microprocesador de propósito especial cuya labor es la
transferencia de datos a alta velocidad entre la memoria y el
espacio de E/S. Aunque este controlador quizá no aparezca
como componente discreto en sistemas modernos
basados en microprocesador, se emplea en los conjuntos de
controladores integrados (chip-set) que hay en los sistemas
más nuevos.
El 8237 tiene cuatro canales y es compatible con los
microprocesadores 8086 y 8088. El 8237 puede
expandirse para incluir cualquier número de entradas de
canal de DMA, aunque parece ser que cuatro canales son adecuados
para muchos sistemas pequeños. El 8237 puede efectuar
transferencias de DMA a velocidades de hasta 1.6 Mbytes por
segundo. Cada una puede direccionar a una sección completa
de 64 Kbytes de la memoria y puede transferir hasta 64 Kbytes con
una sola programación.
1. CLK (reloj) está conectada con la señal
de reloj del sistema siempre y cuando ésta sea de 5 MHz o
menos. En el sistema de 8086 y 8088, hay que invertir el reloj
para tener buen funcionamiento del 8237.
2. CS
(selección de integrado) selecciona al 8237 durante
la programación. Esta terminal, por lo general,
está conectada con la salida de un decodificador, el cual
no utiliza la señal de control IO/M (M/IO) del 8086 y 8088 porque contiene las
nuevas señales de control de la memoria y E/S:
(MEMR,
MEMW, IOR e IOW).
3. RESET (Inicializar) borra los registros de comandos, estado,
solicitud y temporales. También borra el primero y
último flip-flop e inicializa el registro de
enmascaramiento. Esta entrada reinicializa al 8237
deshabilitándolo hasta que se programa.
4. READY (Listo) hace que el 8237 inserte estados de
espera para los componentes de memoria o E/S más
lentos.
5. HLDA (reconoce cesión) le señala al
8327 que el microprocesador ha cedido el control de los canales
de dirección, datos y control.
6. DREQ3, DRQ0: (solicitud de DMA) son entradas que se
emplean para solicitar transferencias de DMA para cada uno de los
cuatro canales de DMA. Debido a que la polaridad de estas
entradas es programable, son entradas activas en alto o
bajo.
7. DB7 hasta DB0 (canal de datos). Son las conexiones al
canal de datos del microprocesador Y se emplean durante la
programación del controlador de DMA.
8. IOR (leer
E/S) es una terminal bidireccional utilizada durante la
programación del controlador de DMA.
9. IOW
(escribir en E/S) es una terminal bidireccional utilizada
durante la programación y durante un ciclo de escritura de
DMA.
10. EOP (final
del proceso) es
una señal bidireccional que se emplea como entrada para
terminar un proceso de DMA
o como salida para señalar el final de una transferencia
de DMA. Esta entrada se emplea a menudo para interrumpir una
transferencia de DMA al final de un ciclo de DMA
11. A3 hasta A0 (direcciones) son terminales que se
utilizan para seleccionar un registro interno durante la
programación y también son parte de la
dirección de DMA durante una acción de
DMA.
12. A7 hasta A4 (direcciones) son salidas que
proporcionan parte de la dirección de transferencia de DMA
durante una acción de DMA.
13. HRQ (retener solicitud), es una salida que se
conecta a la entrada HOLD del microprocesador a fin de solicitar
una transferencia de DMA.
14. DACK3-DACK0 (reconocimiento de canal de DMA) son
salidas que aceptan o reconocen una solicitud de un canal de DMA,
Estas salidas se pueden programar como activas en alto o activas
bajo. Las salidas DACK se emplean a menudo para seleccionar el
dispositivo de E/S controlado por DMA durante la transferencia de
DMA.
15. AEN (habilitación de dirección)
habilita el registro de direccionamiento DMA conectado a las
terminales DB7-DB0 del 8237. También se utiliza para
deshabilitar cualquier acoplamiento a microprocesador del sistema
conectada con el microprocesador.
16. ADSTB (señal estroboscópica de
habilitación de dirección) funciona como ALE, salvo
que se emplea en el controlador de DMA para capturar los bits de
dirección A15-A18 durante la transferencia de
DMA.
17 MEMR
(lectura a memoria) es una salida que hace que se lean
datos de la memoria durante un ciclo de lectura de
DMA.
18. MEMW
(escritura a memoria) es una salida que hace que se
escriban datos en la memoria durante un ciclo de escritura de
DMA.
1. Registro de dirección actual (CA R) contiene
la dirección de memoria de 16 bits utilizada para la
transferencia de DMA. Cada canal tiene su propio registro CAR
para ello. Cuando se transfiere un bit de datos durante una
operación de DMA, se incrementa o decrementa el CAR,
según se programó.
2. Registro de contador (CWCR) programa a un canal para
el número de bits (hasta 64) transferidos durante una
acción de DMA. El número cargado en este registro
es uno menos que el número de bits transferidos. Por
ejemplo, si se carga un 10 en el CWCR, entonces se transfieren 11
bits durante la acción de DMA.
3. Dirección base (BA) y contador de palabras
base (BWC), son registros que se emplean para seleccionar la
autoinicialización automática de un canal. En el
modo de autoinicialización, estos registros se emplean
para volver a cargar los registros CAR y CWCR después de
que ha concluido la acción de DMA. Estos permiten que el
mismo conteo y dirección se utilicen para transferir datos
de la misma área de memoria.
4. Registro de comandos (CR)
programa la operación del controlador 8237. La figura 11-4
ilustra la función del registro de comandos.
En el registro de comandos se utiliza la posición
de bit 0 para seleccionar el modo de transferencia de memoria a
memoria de DMA. En esas transferencias se emplea el canal 0 de
DMA para la dirección fuente y el canal de DMA 1 para la
dirección de destino. (Esto es semejante al funcionamiento
de una instrucción MOVSB). Se lee un byte en la
dirección accesada por el cana 0 y se salva en el 8237 en
un registro temporal. Luego, el 8237 inicia un ciclo de escritura
a la memoria, en donde el contenido del registro temporal se
escribe a la dirección seleccionada por el canal 1 de DMA.
El número de bytes transferidos lo determina el registro
contador del canal 1.
El bit de habilitación de retención de la
dirección del canal 0 (posición de bit 1) programa
al canal 0 para transferencias de memoria a memoria. Por ejemplo,
supóngase que se debe llenar una zona de la memoria con
datos; el canal 0 puede tener la misma dirección mientras
el canal 1 cambia para hacer transferencia de memoria a memoria.
Así se copia el contenido de la dirección a del
canal 0, en un bloque de memoria al que apunta y accesa el canal
1.
El bit de habilitación y deshabilitación
controlador (posición de bit 2) enciende y apaga todo el
controlador. El bit normal y compresión (posición
de bit 3) determina si un ciclo de DMA consta de 2 periodos de
reloj (comprimido) o de 4 (normal). La posición de bit 5
se emplea en la temporización normal para extender el
pulso de escritura por lo cual aparece un pulso de reloj
más temprano en la temporización para dispositivos
de E/S requieren un pulso de escritura más
ancho.
La posición de bit 4 selecciona la prioridad de
las entradas DRWQ de los 4 canales de DMA. En el esquema de
prioridad fija, el canal 9 tiene máxima prioridad y el
canal 3 la mínima. En el esquema de prioridad rotatoria,
el canal al cual se acaba de dar servicio,
torna la mínima. Por ejemplo, si el canal 2 acaba de tener
acceso a una transferencia de DMA, toma la mínima
prioridad y el canal 3 toma la máxima prioridad. El
esquema rotatorio es un intento por dar igual prioridad a todos
los canales.
Los dos bits restantes (posiciones de bit 6 y 7),
programan las polaridades de las entradas DRWQ y de las salidas
DACK.
5. Registro de modo (MR), programa de modo de
operación de un canal. Se debe tener en cuenta que cada
canal tiene su propio registro de modo (figura 11-5),
seleccionado por las posiciones de bit 1 y 0. Los bits restantes
del registro de modo seleccionan operación,
autoinicialización, incremento/decremento y modo para el
canal. Las operaciones de
verificación generan las direcciones de DMA, sin generar
las señales de control de DMA memoria y de E/S.
Los modos de funcionamiento, incluyen: modo de demanda, modo
único, modo de bloque y modo cascada. El modo de demanda
transfiere datos hasta que entra una señal
EOP externa o hasta que la
entrada DREQ se vuelve inactiva. El modo único o sencillo
libera la señal HOLD después de transferir cada
byte de datos. Si se mantiene activa la terminal DREQ el 8237
solicita de nuevo una transferencia de DMA a través de la
línea DRQ a la entrada HOLD del microprocesador. El modo
de bloque transfiere en forma automática el número
de bytes indicado por el registro contador del canal. No se
necesita mantener activa a DREQ durante el modo de transferencia
de bloque. El modo cascada se emplea cuando hay más de un
8237 que trabaje en un sistema.
6. Registro de solicitud (RR) se emplea para solicitar
una transferencia de DMA por programa (figura 11-6). Esto es muy
útil en las transferencias de memoria a memoria, cuando no
está disponible una señal externa para iniciar la
transferencia de DMA.
7. Activar o desactivar registro de enmascaramiento
(MRSR), activa o desactiva el registro cíe enmascaramiento
de cada canal como se ilustra en la figura 11-7. Si se activa el
enmascaramiento, se deshabilita el canal. Recuerde que la
señal RESET activa todos los enmascaramientos
deshabilitando todos los canales.
8. Registro de enmascaramiento (OMSR) (figura 11-8)
habilita o deshabilita todos los enmascaramientos con un comando,
en lugar del enmascaramiento individual de cada canal como con
MRSR.
9. Registro de estado (SR) muestra el estado de cada
canal de DMA (figura 11-9) los bits TC indican si el canal ha
llegado a su cuenta terminal (transferencia de todos sus
bytes).
Cuando se llega a la cuenta final o terminal, se termina
la transferencia de DMA para casi todos los modos de
funcionamiento. Los bits de solicitud indican si está
activa la entrada DREQ para un canal especifico.
Se emplean tres comandos para controlar la
operación del 8237. Estos comandos no tienen un
patrón de bits, como ocurre con los diversos registros de
control dentro del 8237. Una salida sencilla al número de
puerto debido, habilita el comando de
programación
A continuación se explican las funciones de
los comandos de programación:
1. Borrar el primero/último flip-flop borra el
primero/último (F/L) flip-flop dentro del 8237. Ese
flip-flop selecciona cuál byte (alto o bajo) se lee o
escribe en los registros de dirección y de conteo
actuales. Si F/L = 0, se selecciona el byte de orden bajo; si es
F/L = 1 se selecciona el de orden alto. Cualquier lectura o
escritura en la dirección o el registro de conteo produce
inversión del flip-flop F/L.
2. Inicio maestro. Actúa en la misma forma exacta
que la señal RESET para el 8237. Este comando, igual que
la señal RESET deshabilita a todos los canales.
3. Desactivar registro de enmascaramiento habilita a los
cuatro canales de DMA.
Programación de los registros de dirección
y de conteo.
En la figura 11-11 se ilustran las localidades de los
puertos de E/S para programar los registros de dirección y
de contadores de cada canal. Se verá que el estado del
flip-flop F/L determina si se programa el byte menos
significativo (LSB) o el más significativo (MSB). Si se
desconoce el estado del flip-flop F/L, los registros de
dirección y contador se podrían programar en forma
incorrecta.
Hay cuatro pasos para programar el 8237: (1) se
desactiva el flip-flop F/L mediante el comando para desactivarlo;
(2) se deshabilita el canal; (3) se programa primero el LSB y
luego el MSB de la dirección; (4) se programan el LSB y el
MSB del contador. Una vez efectuado lo anterior, el canal
está programado y listo para usarse. Se necesita
programación adicional para seleccionar el modo de
funcionamiento antes de que se habilite y ponga a funcionar el
canal.
8.
Transferencia de memoria a memoria con el 8237
La transferencia de memoria a memoria es mucho
más potente que incluso la instrucción MOVS con
repetición automática. Para el 8088 opera a 4.2
microsegundos por bit, el 8237 sólo necesita 2.0
microsegundos por bit. Es casi el doble de rápido que un
programa de transferencia de datos.
Muestra de transferencia de DMA de memoria a memoria.
Supóngase que se va a transferir el contenido de las
localidades de memoria 10000H hasta 13FFH a las localidades de
memoria 14000H hasta 17FFFH. Se logra con una instrucción
repetida de mover cadena o, con mucha más velocidad, con
el controlador de DMA.
La programación del controlador de DMA requiere
pocos pasos como se ilustra en el ejemplo. El dígito de la
extrema izquierda de la dirección de 5 dígitos se
envía al registro B. Luego borra el flip-flop F/L y se
programan los canales. Se debe tener en cuenta que se utiliza el
canal 0 como fuente y el canal l como destino para la
transferencia de memoria a memoria. Después programa el
contador con un valor que es uno menos que el número de
bits que se va a transferir. Ahora se programa el registro de
modo de cada canal y el registro de comando selecciona una
transferencia en bloque, se habilita al canal 0 y se inicia una
solicitud de DMA por programa. Antes de hacer el retorno desde el
procedimiento, se prueba el bit de cuenta terminal del registro
estado. Se recordará que la bandera de cuenta terminal
indica que ha concluido la transferencia de DMA. El bit TC
también deshabilita al canal e impide transferencias
adicionales.
Muestra de llenado de la memoria con el 8237. Para
poder llenar
una zona de la memoria con un mismo dato, se programa como
registro fuente el canal 0 para que apunte hacia la misma
dirección durante toda la transferencia, lo cual se logra
con el modo de retención del canal 0. El controlador copia
el contenido de esta única localidad de la memoria en un
bloque completo memoria direccionado por el canal 1. Esto tiene
muchas aplicaciones útiles. Por ejemplo, supóngase
que se debe borrar la memoria de vídeo del monitor. Esto
se puede efectuar con el empleo del
canal 0 del controlador de DMA en el modo de retención y
una transferencia de memoria a memoria. Si el monitor de
vídeo tiene SO columnas y 24 líneas, tiene 1920
posiciones para exhibición que se deben inicializar a 20H
(un espacio en ASCII) para
apagar la pantalla del monitor.
El registro se emplea para capturar los datos que le
envían la impresora
durante la transferencia de DMA. El pulso de escritura pasado a
través del registro durante la acción de DMA
también genera la señal de habilitación de
datos (DS) a la
impresora por
medio del multivibrador monoestable. La impresora envía la
señal ACK cada
vez que está lista para datos adicionales. En este
circuito, se emplea para solicitar una acción de DMA por
medio del flip-flop.
Se debe tener en cuenta que para seleccionar el
dispositivo E/S no se decodifica la dirección en el canal
de direcciones. Durante la transferencia de DMA el canal de
direcciones contiene dirección de la memoria y no puede
contener la dirección del puerto de E/S. En lugar de la
dirección de E/S la salida DACK3 del 8237 selecciona el
registro pasando el pulso de escritura a través de una
compuerta OR.
El programa que controla esta interface es sencillo,
porque sólo se programan la dirección de los datos
y el número de caracteres que se van a imprimir. Una vez
programados, se habilita el canal y la acción de DMA
transfiere un bit cada vez que la interface recibe la
señal ACK desde
la impresora.
9.
Controlador programable de interrupciones 8259A
El controlador programable de interrupciones (PIC) 8259A
agrega ocho interrupciones con vector y prioridades codificadas
al microprocesador.
10. Descripción
general del 8259A
En la figura 10-4 se ilustra el diagrama de
base del 8259A, cl cual es fácil de conectar con el
microprocesador, porque todas las terminales, son conexiones
directas excepto CS que
se deben decodificar y la terminal , que debe tener un pulso de
escritura de un banco de E/S. A
continuación se describen todas las terminales del
8259A.
1. D7 -D0: Conexiones bidireccionales de datos. Estas
terminales se conectan al bus de datos del
8085.
2. IR7-IR0: Entradas de solicitud de
interrupción. Se emplean para solicitar una
interrupción y para conectar con un esclavo en un sistema
que tenga 8259A múltiples.
3. WR:
Escribir. Una entrada conectada con la señal de
habilitación estroboscópica superior o inferior de
escritura.
4. : Leer. Entrada conectada con la señal
IORC.
5. INT: Interrupción. Salida conectada con la
terminal INTR del microprocesador, desde el amo, y conectada con
una terminal IR del amo en un esclavo.
6.: Reconocimiento de interrupción. Una entrada
conectada con la señal Ien el sistema. En un sistema con amo y
esclavos, sólo se conecta la señal
Idel maestro.
- A0: Dirección. Entrada que selecciona
diferentes palabras de comando dentro del 8259A.
8. : Seleccionar integrado. Se emplea para habilitar al
8259A para programa y control.
9 : Programa esclavo/habilitar acoplador. Una terminal
de doble función. Cuando el 8259A está en el modo
acoplador, es una salida que controla a los transreceptores en el
canal de datos. Cuando el 8259A no esta en este nodo. esta
terminal programa al controlador como amo (1) o como esclavo
(0).
10. CAS2 hasta CAS0: Líneas de cascada. Se
emplean como salidas del maestro hacia los esclavos para conectar
en cascada a 8259A múltiples en un sistema.
En la figura 10-16 se ilustran dos 8259A conectados con
el microprocesador en una forma que se encuentra a menudo en la
computadora AT, la cual tiene dos 8259A para
interrupciones.
En este circuito se emplean los vectores 08H-0FH
y los puertos 0300H y 0302H de E/S para U1, que es el amo y los
vectores 70H-77H
y los puertos 0304H y 0306H de E/S para U2, que es el
esclavo.
El 8259A se programa con comandos de
inicialización y de operación. Las palabras de
comando de inicialización (ICW) se programan antes de que
el 8259A pueda funcionar en el sistema y sirven para ordenar el
funcionamiento básico del 8259. Las palabras de comando de
operación (OCW) se programan en la operación normal
y permiten el buen funcionamiento del 8259A.
Palabras de comando de inicialización: Hay cuatro
palabras (ICW) de comando de inicialización para el 8259A
que se seleccionan cuando la terminal A es un 1 lógico.
Cuando el 8259A se alimenta por primera vez, hay que enviarle
ICW1, ICW2 e ICW4. Si el 8259 se programa en el modo de cascada
con ICW1, también hay que programar ICW3. Por ello, si se
utiliza un solo 8259A en un sistema, se deben programar ICWI,
ICW2 e ICW4. Si se utiliza el modo de cascada en un sistema,
entonces hay que programar las cuatro ICW. En la figura 10-17
aparece el formato de las cuatro ICW, que se describen a
continuación:
1. ICW1: Programa el funcionamiento básico del
8259A. Para programar el 8259A para trabajar con el 8086-80486,
se pone un Ilógico en el bit 1c4. Los bits ADI, A7, A6 y
A5 son no importa para el funcionamiento del microprocesador y
sólo se aplican al 8259A cuando se utiliza con el
microprocesador 8085 de 8 bits. Esta ICW selecciona
funcionamiento sencillo o en cascada porque programa al bit SNGL
(sencillo). Si se selecciona funcionamiento en cascada,
también se debe programar ICW3. El bit LTIM determina si
las entradas de solicitud de interrupción son positivas,
disparadas por flanco o disparadas por nivel.
2. ICW2: Selecciona el número de vector utilizado
con las entradas de solicitud de interrupción. Por
ejemplo, si se decide programar a 8259A para que funcione en las
localidades de vector 08H-OFH, se pone un 08H en esta palabra de
comando. Asimismo, si se decide programar al 8259A para los
vectores 70H-77H se pone un 70H en esta ICW.
3. ICW3: Sólo se utiliza cuando ICW1 indica que
el sistema está funcionando en el modo de cascada. Esta
ICW3 indica en donde está conectado el esclavo con el amo.
Por ejemplo, en la figura 10-16 aparece conectado un esclavo con
IR2.
4. ICW4: Se programa para trabajar con los microprocesadores
8086-80486. Esta ICW no se programa en un sistema que trabaje con
el microprocesador 8085.
Palabras de comando de operación. Las palabras de
comando de operación (OCW) se emplean para ordenar la
operación del 8259A una vez que se programa con las ICW.
Las OCW se seleccionan cuando la terminal A0 es un 0
lógico, excepto en OCW1, que se selecciona cuando A0 es un
1 lógico. En la figura 10-18 se ilustrarías
configuraciones o patrones de bits binarios para las tres
palabras de comando de funcionamiento del 8259A. A
continuación se describe la función de cada
OCW:
1. OCW1: Se emplea para inicializar y leer el registro
de la máscara de interrupción. Cuando se hace uno
un bit de máscara, apagará (enmascara) la
correspondiente entrada de interrupción. El registro de la
máscara se lee cuando se lee OCW1. Debido a que el estado
de la máscara se desconoce cuando se inicializa el 8259A,
OCW1 se debe programar después de programar las ICW
durante la inicialización.
2. OCW2: Sólo se programa cuando no se selecciona
el modo AEOI para el 8259A. En este caso, la OCW selecciona la
forma en que el 8259A responde a una interrupción. Estos
modos son los siguientes:
a. Final no específico de la interrupción.
Un comando enviado por el procedimiento de servicio de la
interrupción para señalar el final de la
interrupción. El 8259A determina y forma automática
cuál nivel de interrupción estaba activo y
restablece al bit correspondiente del registro de estado de las
interrupciones. Al restablecer al bit en el registro de estado se
permite que la interrupción actúe de nuevo o que se
produzca una interrupción de menor prioridad.
b. Final especifico de la interrupción. Un
comando que permite restablecer una solicitud específica
de interrupción. La posición exacta se determina
con los bits L2-L0 de OCW2.
c. Rotación con EOI no específico. Un
comando que funciona en la misma forma exacta que el comando no
especifico de fin de interrupción, salvo que rota las
prioridades de interrupción después de restablecer
su bit en el registro de estado de las interrupciones. FI valor
restablecido por este comando se vuelve interrupción de
mínima prioridad. Por ejemplo, si se acaba de dar servicio
a IR con este comando, se convierte en la entrada de
interrupción de mínima prioridad y IR5 se vuelve de
máxima prioridad.
d. Rotación con EOI automático. Un comando
que selecciona un EOI automático con prioridad para la
rotación. Este comando sólo se debe enviar al 8259
una vez, si se desea este modo. Si se va a apagar este modo, se
debe emplear el comando para borran
e. Rotar con EOI específico. Su función es
similar a la de EOI específico, excepto que selecciona una
prioridad de rotación.
f. Inicializar prioridad. Permite al programador
inicializar la entrada de interrupción de mínima
prioridad con el empleo de los bits L2 hasta L0.
3. OWC3: Selecciona el registro que se leerá, la
operación del registro de máscara especial
v.· cl comando para "encuesta". Si
se selecciona encuesta, se
debe activar el bit P y, luego, enviarlo al 8259A. La siguiente
operación de lectura leerá la palabra de encuesta.
Los tres bits de extrema derecha de la palabra de encuesta
indican la solicitud de interrupción en activo con la
máxima prioridad. El bit a la extrema izquierda indica si
hay interrupción y hay que comprobarlo para determinar si
los 3 bits de la extrema derecha contienen o no informacion
válida.
Registro de estado. En el 8259A se pueden leer tres
registros de estado, registro de solicitud de interrupción
(IRR), registro de servicio (ISR) y registro de máscara de
interrupción (IMR). Estos tres registros de estado se ven
en la figura 10-19. El IRR es un registro de 8 bits que indica
cuáles entradas de solicitud de interrupción
están activadas. El ISR es un registro de 8 bits que
contiene el nivel de la interrupción que se atiende. El
IMR es un registro de 8 bits que contiene los bits de la
máscara de interrupción y señala
cuáles interrupciones están enmascaradas. Para leer
IRR e ISR se programa OCW3 e IMR se lee por medio de OCW1. Para
leer el IMK A0 = 1 y para leer IRR o ISR, A0 = 0. Las posiciones
de bits D0 y Dl de OCW3 seleccionan cuál registro (IRR o
ISR) se lee cuando A0 = 0.
Recepción de datos desde el 825lA. Los datos
recibidos por el 8251A se almacenan en una memoria FIFO hasta que
el programa principal los pueda utilizar. La memoria FIFO para
los datos recibidos tiene 16K bytes de longitud por lo cual es
fácil almacenar y recibir muchos caracteres antes de que
se requiera la intervención del 8086 para vaciar la FIFO
del receptor, la cual se almacena en el segmento extra para
poder emplear
instrucciones para cadenas, con el registro DI para accesar la
cadena. La recepción de datos desde el 8251A requiere dos
procedimientos: uno lee el registro de datos del
8251A cada vez que la terminal RxRDY solicita una
interrupción y la almacena en la FIFO; el otro, lee los
datos de la FIFO desde el programa principal.
En el ejemplo 10-9 se presenta el procedimiento
utilizado para leer los datos de la FIFO en el programa
principal. En este procedimiento, se supone que los apuntadores
(IN y IOUT) son inicializados en el programa de
inicialización del sistema (que no se ilustra). El
procedimiento (LEE) retorna con AL conteniendo un carácter
leído de la FIFO. Sí la FIFO está
vacía, el procedimiento retorna con el carácter FEH
en AL. Esto significa que no se permite a FFH como un
carácter en el receptor.
12. Controlador
programable 8279 para teclado y
display
La 8279 es una interface programable para teclado y
exhibición visual, que rastrea y codifica hasta 64 teclas
y controla una exhibición visual hasta de 16
dígitos. La interface para el teclado tiene una memoria de
primero en entrar, primero en salir (FIFO) que le permite
almacenar hasta seis tecleos antes de que el microprocesador deba
tomar un carácter La sección de la
exhibición visual controla hasta 16 dígitos con una
RAM interna de 16
x 8 que almacena la información codificada para
exhibición visual.
Página siguiente |