Descargar

Temporizadores, registros, controladores e interfaces de teclados y displays en microcontroladores

Enviado por reptilee


Partes: 1, 2

    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 827520. Descripción Funcional21. Definiciones de lo Pines22. Controlador Programable de discos flexibles 827123. Descripción funcional24. Descripción de interface del CPU25. Operación DMA26. Interface de manejo de disco27. Separación de datos28. Interfaces de control de manejo de disco29. El interfaz de periféricos 825530. Descripción del integrado31. Descripción funcional32. Programación del 825533. Modos de operación del 825534. 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.

    3. Lectura de un contador

    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.

    5. Definiciones de terminales

    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.

    6. Registros internos

    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.

    7. Comando de programación.

    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.

    1. 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.

    11. Programación del 8259A

    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.

    Partes: 1, 2
    Página siguiente