Story Transcript
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
Técnicas de Entrada-Salida
TÉCNICAS DE ENTRADA-SALIDA
1
1.-ARQUITECTURAS SIMPLES DE ENTRADA/SALIDA PUERTOS DE ENTRADA/SALIDA BÁSICOS. 2.-PERIFÉRICOS DE ENTRADA/SALIDA PROGRAMABLES ORIGEN DE LOS I/O PROGRAMABLES LOS REGISTROS DEL MC6821 REGISTROS DE ENTRADA/SALIDA DEL M6811 3.-SOFTWARE DE ENTRADA/SALIDA TRANSFERENCIA DE ENTRADAS Y SALIDAS PROGRAMACIÓN DE LÓGICA DE CONTROL. TABLAS E INTÉRPRETES DE LISTAS 4.-ENTRADA/SALIDA SERIE SÍNCRONA CIRCUITOS INTEGRADOS SERIE DE ENTRADA/SALIDA CONTROL DE PERIFÉRICOS DE ENTRADA/SALIDA SERIE UTILIZANDO UN PUERTO PARALELO COMUNICACIONES SÍNCRONAS DEL MC68HC11: SERIAL PERIPHERICAL INTERFACE SPI
2 2 3 3 3 5 7 7 8 9 12 12 13 14
En los capítulos anteriores nos hemos familiarizado con las herramientas básicas de programación para abordar el estudio del diseño de interfaz, que analizaremos en los siguientes capítulos. Consideramos interesante remarcar que los presentes apuntes no son mas que un resumen que intenta formalizar estas técnicas y donde se presentan algunos ejemplos concretos. Para mayor información, animamos al lector a consultar la bibliografía técnica relacionada con cada apartado. En particular los libros de características (data books) y hojas de características (data sheets) de los fabricantes que desarrollan C.I. compatibles con el MC68HC11. Consideramos este capítulo uno de los más importantes, ya que se analizan los periféricos de Entrada/Salida paralelo y serie, tanto desde el punto de vista de Software como de hardware. Estos periféricos son los más comunes y además forman parte de una u otra forma del resto de periféricos.
1-feb-a
1
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
1.-Arquitecturas simples de entrada/salida Resulta interesante analizar el periférico de entrada/salida paralelo (puerto paralelo) desde el punto de vista del programador; esto es, si se puede acceder al mismo con instrucciones directas de lectura/escritura (ej. LDAA, STAA) o es necesario utilizar varias instrucciones para acceder a la información del periférico Existen dos formas diferentes de acceder a un periférico, en función del forma en que está organizada la memoria. Utilizando instrucciones de tipo input, output (IN, OUT) (utilizada en arquitectura Intel 8080) tiene como ventajas que utiliza códigos de 1 byte así como necesita solo 1 byte para acceder el periférico. Para este tipo de instrucciones es necesario separar el mapa de memoria de forma que las posiciones que ocupan esto periféricos están aisladas de la memoria de datos y programa. Utilizando posiciones del mapa de memoria para estos periféricos: La estructura interna se simplifica, pero las instrucciones son más largas (3 bytes). Esta mayor longitud es un problema cuando se pretende optimizar o el ciclo de ejecución de una rutina de I/O o la memoria utilizada por un programa de control. Como ventajas encontramos que la decodificación de direcciones es más sencilla. Esta es la arquitectura utilizada por el MC68HC11.
Puertos de entrada/salida básicos. Un puerto de I/O paralelo básico tiene asignada una posición de memoria (desde el punto de vista del µP) donde se puede leer o escribir y que puede ser direccionado. El direccionamiento puede ser completo (cuando se especifican todas las líneas de direcciones) o incompleto (cuando algunas de ellas pueden adoptar varios valores). La técnica básica de entrada desde un periférico paralelo consiste en muestrear la señal cuando el microprocesador ejecuta una instrucción de entrada (de lectura en la posición de memoria en el periférico) Una entrada típica de un sistema microprocesador se muestra en la siguiente figura cuando se ejecuta una instrucción LDAA $4000. La decodificación de la dirección es completa y es necesario comprobar que las líneas de habilitación y de lectura se encuentran adecuadamente configuradas. Desde el punto de vista del hardware es necesario utilizar la lógica combinacional adecuada (ver figura) bien utilizando puertas U? 2 18 Nand o Nor. La entrada al bus de datos se habilita cuando en el bus 1A1 1Y1 4 16 1Y2 6 1A2 14 de direcciones aparece el valor 4000H. Para ello se puede utilizar un 1Y3 8 1A3 12 buffer triestado (74244). En caso de se quiera 1A4 1Y4 1 11 9 2Y1 13 2A1 7 habilitar parte de las entradas del bus de datos, 2Y2 15 2A2 5 2Y3 es de interés acceder a la habilitación de cada 17 2A3 3 2 3 2A4 2Y4 buffer. Para ello se debe cambiar a otro C.I. que 1 lo permita, el 74125 tiene 4 buffers 19 1G 2G U?A independientes. 74125
74244
En ocasiones es interesante que cada línea se lea por separado y se almacene en palabras diferentes, por lo que se hace necesario utilizar multiplexores. Las técnicas básicas de salida se muestra en la figura, donde una palabra de 8 bits se escribe en el periférico cuando la posición de memoria es la 4FFFH (utilizando la instrucción STA $4FFF). Es necesario utilizar la señal de Habilitación del reloj (E clock), para asegurar la salida sólo cuando esta señal se encuentra en alto. En esta situación el 68HC11 asegura que los datos en el bus de datos son estables. Es en este momento cuando debemos habilitar la entrada del registro de salida (latch). Un paso más consiste en integrar en una única circuitería las operaciones de entrada y salida. Un ejemplo lo encontramos en la siguiente figura, donde el registro de entrada/salida se encuentra en la posición 7FFFH. Además de puertas Nand, se utiliza como lógica de 1-feb-a
2
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
decodificación un decodificador “1 de 10” (74HC42) y cuyas salidas activas o la señal de reloj del registro de salida (para operaciones de escritura) o bien la habilitación de los buffers de entrada (para operaciones de lectura). Notemos que el decodificador es sensible a los valores de las líneas de habilitación E y a la R/W (lectura/escritura) para crear el flanco activo del registro de salida. Dejamos como ejercicio la modificación de este puerto para que las cuatro primeras las líneas sean de salida y el resto sean de entrada. Otra técnica que se utiliza es la generación de un pulso cuando se direcciona un puerto de entrada/salida (address trigger); esto es, el decodificador de direcciones se modifica para generar un pulso que hace algo (ej. borrar o marcar un biestable, disparar un monoestable, etc.). En este caso no es necesario utilizar el bus direcciones, ya que el hardware adicional es el que genera el pulso, pero es necesario ejecutar una instrucción que “lea” o “escriba” en la posición de memoria que es decodificada. Debemos tener cuidado de no generar esta dirección en otras operaciones no relacionadas, (ej. transferencia de datos al Stack).
2.-Periféricos de entrada/salida programables Los sistemas microprocesadores utilizan C.I. de LSI denominados Puertos de Entrada/Salida Programables, capaces de ser seleccionados bajo software. Uno de estos C.I. de la misma familia que el µC 68HC11 es el M6821, que estudiaremos primero para entender el comportamiento de los puertos internos del microcontrolador, (aunque veremos que estos son más fáciles de programar que el primero).
Origen de los I/O programables Los primeros sistemas microprocesadores tenían los periféricos de entrada/salida implementados con decenas de circuitos de tipo SSI, MSI, ocupaban mucho espacio y consumían mucho. Por este motivo los fabricantes empezaron a desarrollar LSI para periféricos I/O. Los dos problemas que aparecen para circuitos de LSI son el volumen y el número de patillas. Aunque en la actualidad el costo de desarrollo de un C.I. ha bajado considerablemente, el precio es varios órdenes de magnitud que el costo. Por este motivo se debe asegurar la venta de miles de unidades para amortizar las inversiones. Una estrategia consiste en implementar varias funciones en el mismo circuito integrado. Entonces, además de líneas de datos es necesario tener líneas de parámetros (parameter pins) para configurar adecuadamente el periférico. A medida que aumenta la complejidad del dispositivo, aumenta el número de líneas, por lo que se pone literalmente estas líneas en el interior del integrado, en forma de registros de control. Este registro es como cualquier otro del C.I. en el sentido que se puede leer y escribir como cualquier otro. Sin embargo, los valores almacenados en el mismo sirven para configurar el dispositivo. Como en cualquier otro caso en ingeniería, cuando se dan nuevas soluciones aparecen nuevos problemas. En este caso, el hecho de disponer de registros de control implica que se deben inicializar cuando el sistema se conecta a la alimentación. Es necesaria una rutina de inicio para cargar este registro y con ello configurar el dispositivo.
Los registros del MC6821 El M6821 es una PIA (peripherical interface adapter). Este C.I. dispone de dos periféricos de entrada/salida casi idénticos; cada uno de ellos tiene un registro de datos (que se puede configurar tanto de entrada como de salida) y 8 patillas de entrada al periférico. Dispone también de circuitería para la generación de interrupciones (que discutiremos en capítulos posteriores). Además cuenta con un registro de dirección de datos y otro de control. En los siguientes ejemplos, supondremos que el primer registro se encuentra el la posición de memoria $8000. El registro de direcciones indica, bit a bit, si el registro de datos es de entrada o de salida.
1-feb-a
3
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
U?
U? 40 18 22 24 23 36 35 21 25 34
CA1 CB1
PA0 PA1 PA2 PA3 PA4 PA5 PA6 PA7
CS0 CS1 CS2 RS0 RS1
PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
R/W ENABLE RESET
D0 D1 D2 D3 D4 D5 D6 D7 CA2 CB2 IRQA IRQB
5 4 3 2
2 3 4 5 6 7 8 9
38 39 6
10 11 12 13 14 15 16 17
37 40 36 1 35
33 32 31 30 29 28 27 26
A12 A13 A14 A15 AS MODE STRA E CS R/W IOTEST
AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7
RESET PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7
39 19 38 37
IRQ STRB
34 33 32 31 30 29 28 27 24 23 22 21 20 19 18 17 7 8 9 10 11 12 13 14 25 16
68HC24
6821
MC6821
68HC24: Port Replacement Unit
Dispositivos de entrada-salida programables, que Motorola ha recomendado para su uso con el 68HC11 (Explicación en el texto). En la actualidad estos dispositivos se consideran obsoletos, y es bastante difícil encontrarlos en el mercado. Una opción real es utilizar lógica programable (ej. 22V10 ó EP910) y adaptar el dispositivo de I/O a cada aplicación. LDAA $8000 STAA $8000 LDAA $8001 STAA $8001 LDAA $8002 STAA $8002
REGISTRO DE DATOS (DR) (Port A)
PA[0-7]
REGISTRO DE DIRECCION DE DATOS (DDR) (Port A) REGISTRO DE CONTROL (CR) (Port A) REGISTRO DE DATOS (DR) (Port B)
PB[0-7]
REGISTRO DE DIRECCION DE DATOS (DDR) (Port B) LDAA $8003 REGISTRO DE CONTROL (CR) (Port B) STAA $8003 Estructura de direcciones de los registros de C.I. 6821. Observar que los registros DR y DDR de cada puerto ocupan la misma posición de memoria. Se distinguen por el bit dos del CR. Las instrucciones de la columna izquierda indican que los registros son de lectura y escritura. En el siguiente ejemplo se configura el primer periférico como entrada y seguidamente como salida ; ;Configuracion del M6821 (primer ; clr $8001 ;borra el CR ldd #$0004 ;almacena en std $8000 ;y $04 en el ; ;Configuracion del M6821 (primer clr $8001 ;borra el CR ldd #$FF04 ;almacena en std $8000 ;y $04 en el ;al almacenar $04 en el CCR (bit
1-feb-a
periferico) como entrada (en particular bit 2=0) el DDR el valor $00 CCR periferico) como salida (en particular bit 2=0) el DDR el valor $FF CCR 2=1) se accede al DR.
4
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
Registros de entrada/salida del M6811 El 68HC11 dispone de 5 puertos de entrada/salida (A, B, C, D, E), que están disponibles cuando el sistema opera en modo de único chip (single chip) aunque algunos de estos puertos están relacionados con periféricos (timers, conversores A/D). Puerto
líneas de salida
A B
3 8
Líneas de entrada 3 -
C
-
-
D E
-
8
Patillas Operaciones relacionadas bidireccionales 2 Timer byte alto del bus de direcciones 8 byte bajo del bus de direcciones, bus de datos 6 SCI y SPI Conversores A/D
En modo expandido, los puertos B y C son utilizados para multiplexar el bus de direcciones y de datos, pero utilizando el C.I. M68HC24 se recupera los estos registros en este modo, de forma que opera exactamente igual que en modo único C.I.; esto es las funciones asignadas a cada uno de los bits de estos puertos es Puerto B B B B B B B B C C C C C C C C
Bit 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
Single-Chip PB0 Output PB1 PB2 PB3 PB4 PB5 PB6 PB7 PC0 Input/Output PC1 PC2 PC3 PC4 PC5 PC6 PC7 STRA Input Strobe STRB Output Strobe
Modo Expandido ADDR8 Bit de direcciones ADDR9 ADDR10 ADDR11 ADDR12 ADDR13 ADDR14 ADDR15 AD0 Direcciones/datos multiplexados AD1 AD2 AD3 AD4 AD5 AD6 AD7 AS Address Strobe (Out) R/W Read/Write Select
Los tres registros de cada periférico son accesibles al microprocesador desde dos posiciones de memoria, de la siguiente forma. Supongamos que las posiciones de memoria ocupadas por uno de los periféricos son $8000, $8001. Siempre que se lea o escriba en la dirección $8001 se accede al registro de control. En cambio, cuando se escribe o lle en la posición $8000 se accede al registro de datos o de direcciones en función del valor que tiene almacenado el bit 2 del registro de control (1 registro de datos, 0 registro de direcciones); esto es, el bit 2 del registro de control (CR) actúa como la línea 17ª del bus de direcciones para los registros de datos (DR) y de direcciones (DDR). (hat trick). En el MC68HC11 los registros de los puertos se encuentran a partir de la posición de memoria $1000 y ocupa 64 bytes ($1000-$103F). Además de los propios registros de datos y direcciones de cada uno de los puertos hay puertos de configuración del conversor A/D, timer, etc. Para mayores detalles en cuanto al significado de cada registro nos remitimos al “data book” de Motorola, aunque en la siguiente tabla se muestran los más significativos
Memoria 1-feb-a
registro
patillas 5
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
$1000 $1003 $1004 $1007 $1008 $1009 $100A $1026 $100E-$101F
Registro de datos A (port A) puerto C Puerto B Registro de direcciones de C puerto D Registro de direcciones de D Puerto E Registro de control del timer Registros relacionados con el timer
PA[0-7] PC[0-7] PB[0-7] PD[0-5] PE[0-3]
En siguientes apartados analizaremos otros registros de los periféricos relacionados con el contador, con los periféricos de entrada serie. Una ventaja que tienen los puertos integrados del 68HC11 frente a los C.I. discretos (M6821) es que el “hardware” ya está construido (no hay que cablear) por lo que sólo se debe realizar el esfuerzo de programarlos. En particular, los registros asociados al puerto C y B (puertos de entrada/salida paralelos propios del 68HC11) son los siguientes Registro PORTB PORTC DDRC PIOC PORTCL
Dirección $1004 $1003 $1005 $1002 $1005
Descripción 8 Líneas de salida 8 Líneas programables de entrada/salida mediante DDRC Registro de dirección de datos del puerto C: entrada (0), salida (1) registro de control del puerto C. Gestiona las líneas STRA y STRB Registro de retención del valor del puerto C
De estos registros, el que merece un análisis más detallado es el PIOC. El mismo se realizará en el próximo tema.
1-feb-a
6
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
3.-Software de entrada/salida El software relacionado con operaciones de entrada/salida puede ser o muy sencillo o muy complejo. Analizaremos las rutinas más sencillas e iremos incluyendo, de forma progresiva, conceptos relacionados con el control de puertos.
Transferencia de entradas y salidas En tareas tales como mover datos de un ordenador a otro, recoger información de un puerto de entrada o enviar una cadena de palabras a un puerto de salida, el diagrama temporal suele ser bastante crítico, siendo necesario, en mucha ocasiones, analizar los ciclos de reloj utilizados en cada rutina para ajustar o sincronizar diferentes bloques. Consideremos la siguiente rutina básica que lee datos de un puerto de entrada (posición 4000H) y los escribe en un puerto de salida (en 4FFFH). ;transferencia de datos a un puerto paralelo ;Se muestra la forma mas sencilla de leer o escribir datos en un puerto ;(esto es en una poscicion de memoria) .org $0100 L ldaa $4000 ;4 ciclos (3 de captura, uno de lectura) staa $4FFF ;4 ciclos (3 de captura, uno de escritura) bra L ;3 ciclos (2 de captura, uno nulo) .end
Esta rutina simula un “cable” de la entrada ($4000) a la salida ($4FFF), con un retardo de 11 ciclos. (esto es, 0.5 µsg x 11= 5.5 µsg.) Analizada la rutina en un analizador lógico aparece de esta forma R/W dirección cód. Hexadecimal operación R 0100 B6 Código de operación de la instr. LDAA R 0101 40 byte alto R 0102 00 byte bajo R 4000 34 lee la entrada R 0103 B7 Código de operación de la instr. STAA R 0104 4F byte alto R 0105 FF byte bajo W 4FFF 34 escribe en la salida R 0106 20 Código de operación de la instr. BRA R 0107 F8 Desplazamiento R FFFF 58 ciclo nulo Se observa que en la instrucción LDAA, que necesita 4 ciclos de operación, los datos son leídos en el cuarto. Análogamente en la instrucción STAA los datos se escriben en el último ciclo también. Este es el funcionamiento básico de microprocesadores que se utilizan como “sistemas de paso” (routers) en sistemas de comunicación que tienen varias entradas y varias salidas controladas bajo programa. La misma operación se puede implementar en un lenguaje de alto nivel; por ejemplo ANSI C. / * Programa que lee un byte de un puerto de entrada, en la posición $4000 * y la escribe en la posición $4FFF * Enero 23, 2000. */ #define REGISTER unsigned char #define PORTIN (*(REGISTER *)(0x4000)) #define PORTOUT (*(REGISTER *)(0x4FFF)) main { while(1) { PORTOUT=PORTIN; } }
1-feb-a
7
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
Una segunda aplicación es el muestreo de datos y almacenamiento en una zona de memoria para obtener una “película” de lo que ha ocurrido.
;Programa datos1.asm ;rutina para almacenar $100 datos que vienen de un puerto ($4000) y se ;almacena en memoria .org L
$100 ldx ldaa staa inx cpx bne
#$200 $4000 0,X #$300 L
;inicializa el registro X ;tomar una palabra del periférico de entrada ;lo almacena en la posición de memoria apuntada ;incrementa el puntero ;se han introducido todas las palabras? ;no, repetir el bucle
.end
A partir del código en C mostrado anteriormente... ¿Cómo lo modificarías para implementar este programa? Esta es la base de las memorias secundarias de periféricos y sistemas de comunicaciones como las UART. Un programa similar puede escribir hacia un puerto de salida. En cuanto al tiempo que cuesta realizar una operación de lectura se debe realizar las mismas consideraciones que en el ejemplo anterior; (en este caso la rutina tarda 18 ciclos en ejecutarse).
Programación de lógica de control. Algunas de las aplicaciones más extendidas para sistemas microcontroladores es la generación de tiempos o relojes para equipos eléctricos o mecánicos, utilizando bucles de retardos. Un ejemplo es el control de sistema de semáforos para dos calles (Norte-Sur y EsteOeste). Cada bit del registro de salida se corresponde con una luz de los semáforos. Cuando uno de estos bits tiene almacenado un “1”, la luz correspondiente se activa, a través de una etapa de potencia adecuada. El caso más sencillo de operación consiste en generar una secuencia de paso para los automóviles de ambas direcciones. Además de escribir la palabra adecuada es necesario programar adecuadamente el tiempo que dura la cada paso de la secuencia. ;Programando lógica de control de puertos paralelos ;se muestra un ejemplo de configuracion de puerto ;En el mismo se muestra un sistema secuencial de control de semaforos ;Cada bit controla la luz de una de las luces de dos semaforos. Se ;necesitan 6 variables (una para cada una de las luces) de tal forma que ;%100001 pone en rojo el semaforo NS (MSB) y en verde el EO (LSB) ;se supone que el registro de salida se encuetra en la direccion $4FFF ;El siguiente programa genera una secuencia para una combinación de luces ;luces equ $4FFF ; ldaa #%00100001 ;pone en rojo NS y en verde EO ; staa luces ;colocando la palabra en el registro de salida ; ldaa #10 ;marca el contador ;L1 ldx #41667 ;L2 dex ; bne L2 ;bucle durante 1/4 de sg. ; deca ; bne L1 ;bucle durante 10 veces el bucle interno
En esta rutina se han implementado dos bucles anidados para introducir un retraso (delay loop). En el mismo los registros de índice X e Y se utilizan como contadores. (Ejercicio: Calcular el tiempo que se tarda en ejecutar esta rutina, suponiendo que cada ciclo de operación es de ½ µsg.). 1-feb-a
8
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
obviamente se puede desarrollar código en alto nivel para acceder a una línea en concreto de un puerto de entrada/salida. Para ello es necesario definir unos ficheros (Includes) que almacenan la información relacionada con el tipo de "hardware" utilizado.
/* *Programa que utiliza máscaras para operar sobre diferentes *registros de configuración y salidas del HC11e9 * *Modo de operacion en single chip. */ #include #includo #define #define #define #define
TRUE 1 reg_salida (*(volatile REGISTER *)(0x150)) reg_entrada (*(volatile REGISTER *)(0x151)) mascara (*(volatile REGISTER *)(0x152))
void main(void) { DDRC=0xF0;
//Registro de dirección de datos del puerto C
while(TRUE) //Bucle infinito { PORTC=reg_entrada; reg_salida=PORTC; ; BITSET(PORTB,mascara)); PORTB=(PORTC && bit3); } }
Tablas e intérpretes de listas Seguimos con el ejemplo del semáforo. Una forma de generar la secuencia de control de tráfico consiste utilizar un intérprete. Un intérprete es un programa que lee valores de una estructura de datos (una tabla, un vector, etc.) y realiza una acción (controla el tráfico, ejecuta sentencia de alto nivel BASIC,…) Esta técnica es particularmente recomendable en aplicaciones de interfaz de usuario, ya que permite traducir datos de una tabla a un periférico visualizador cómodamente. Supongamos que queremos introducir la siguiente secuencia de luces en el semáforo
Verde NS 1 1 0 0
Ambar NS 0 0 0 1
Roja NS 0 0 1 0
Verde EO 0 0 1 1
Ambar EO 0 1 0 0
Roja EO 1 0 0 0
Unid. Temporal 10 4 14 4
La siguiente rutina permite implementar de forma adecuada una secuencia donde el tiempo en que está encendida cada una de las luces es diferente. Primeramente se carga una tabla (con dos columnas, una de ellas con las luces y la segunda con el tiempo). Seguidamente se escribe el programa que lee esta tabla
1-feb-a
9
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
.org $100 ; ;tabla de datos y de tiempos de cada secuencia (10-4-14-4 sg.) ; luces equ $4FFF tabla fcb %100001 fcb 10 fcb %100010 fcb 4 fcb %001100 fcb 14 fcb %010100 fcb 4 ; ;programa interprete ; L ldy #tabla ;puntero a la primera fila L0 ldaa 0,Y ;toma el valor para los semaforos iny ;incrementa el puntero staa luces ;pone la palabra en el registro de salida ldaa 0,Y ;toma el tiempo de la secuencia (en 1/4 de sg.) iny L1 ldx #!41667 ;ver los comentarios de cabecera L2 dex bne L2 deca bne L1 cpy #tabla+8 ;estamos al final de la tabla? bne L0 ;no, repetimos el bucle principal bra L ;si, reinicializamos .end
Una aplicación estrechamente relacionada a los programas intérpretes es la implementación de máquinas de estado. De forma esquemática una máquina secuencial (de Mealy) es un conjunto de S estados internos, un conjunto de I vectores de entrada y un conjunto de F funciones de salida. En cualquier momento la máquina secuencial se encuentra en un estado actual y tiene un vector de entrada y un vector de salida bien definidos. Como función de estos dos vectores la máquina evolucionará al siguiente estado. La representación de esta máquina puede ser, bien por grafo de estados o por máquina de estados (tabla). Para mostrar cómo se puede implementar una máquina de estados en un sistema programado presentamos la siguiente rutina ;rutina que implementa un sistema secuencial (de Mealy) y una salida ;con 3 de estados utilizando tablas de datos y bucles ;(ver notas en los apuntes)la tabla de evolución de estados es la siguiente ; var entrada ;Estados a b ; A B/0 A/1 ; B A/0 C/0 ; C A/1 A/0 ;esto es si el sistema empieza en el estado A y recibe la secuencia abbaba ;la secuencia de estados es BCABCA y la salida 000001 ;creamos la siguiente tabla .org $100 A fdb B ;entrada a, proximo estado B fcb 0 ;salida para el presente estado fdb A ;entraba b, proximo estado A fcb 1 ;salida para el presente estado B fdb A ;entrada a, proximo estado A fcb 0 ;salida para el presente estado fdb C ;entraba b, proximo estado C fcb 0 ;salida para el presente estado C fdb A ;entrada a, proximo estado A
1-feb-a
10
A, entrada a A, entrada b B, entrada a B, entrada b
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel fcb fdb fcb
0 A 1
;salida para el presente estado C, entrada a ;entraba b, proximo estado A ;salida para el presente estado C, entrada b
;seguidamente es necesario crea un 'interprete' de esta tabla (en ingles ;linked-list structure) y supondremos que la entrada viene de un registro ;de entrada SRC que se encuentra en la posicion $4000 y envia la salida ;a un registro DST en $4FFF. 'a' es el valor $00 y 'b' el valor $01. El ;estado del sistema se almacena en el registro X. Bajo estas suposiciones ;el programa 'interprete' es el siguiente SRC equ $4000 DST equ $4FFF
L1
L2
ldx ldaa beq inx inx inx ldaa staa ldx bra
#A SRC L2
;puntero en el estado inicial A ;lee el valor de entrada ;si la entrada es 'b' ;mover 3 posiciones el puntero
2,X DST 0,X L1
;leer el valor de salida ;y ponerlo en el registro DST ;poner la direccion del siguiente estado en X ;repetir el bucle indefinidamente
Observemos que para un sistema programado, la forma más cómoda de introducir una máquina secuencial es la máquina de estados.
1-feb-a
11
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
4.-Entrada/Salida serie síncrona Excepto para los puertos paralelos integrados en el 68HC11, este tipo de periféricos y los decodificadores asociados consumen muchos recursos de cableado y área de tarjetas (PCB). Alternativamente, una señal serie puede ser multiplexada en el tiempo enviando 8 bits en sucesivos periodos de reloj, utilizando un único canal. Esta técnica está restringida a aplicaciones que no necesitan grandes velocidades tranferencia de datos. Si se utiliza un canal de datos y una señal de reloj, la transferencia serie se denomina síncrona y es adecuada para altos valores de transferencia de datos (típicamente hasta 1 Megabit/sg.). Cuando no se utiliza una señal de reloj, se trata de una comunicación serie asíncrona y es adecuada para bajos valores de tranferencia de datos (típicamente 9600 bits/sg.). Análogamente a la comunicación en paralelo, analizaremos primero C.I. específicos para este tipo de comunicaciones para seguir con el periférico integrado en el 68HC11.
Circuitos integrados serie de entrada/salida La base de estos circuitos es un registro de desplazamiento (ej. 74HC164), dos C.I. son especialmente adecuados para esta función: 74HC595 (registro de desplazamiento con salida en paralelo) y el 74HC589 (registro de desplazamiento con entrada en paralelo) El esquema del C.I. 74HC589 se muestra en la siguiente figura. Los datos del registro de entrada paralelo se transfieren al mismo en el flanco activo (positivo) del reloj del registro RCLK. Cuando la señal de carga del registro de desplazamiento es baja (L), estos son transferidos al mismo. Y cuando LD es alta (H), estos datos son desplazados en cada flanco positivo del reloj del registro de desplazamiento (SCLK). Los datos son accesibles por la patilla OUT cuando se habilita el buffer (EN es bajo). EN
OUT Reg. Despl.
OUT Reg. Despl.
IN
D0-D7 Reg. entrada RCLK
IN Q0-Q7 Reg. de salida
LD
LD
SCLK RCLK RST EN
SCLK
Diagrama de bloques del 74HC589
Diagrama de bloques del 74HC595
U? 14 15 1 2 3 4 5 6 7 11 13 12 10
SER A B C D E F G H QH
U? 14 11 10 12 13 9
SER
QA QB SRCLK QC SRCLR QD QE RCLK QF G QG QH QH'
SRCLK SRLOAD RCLK OC
15 1 2 3 4 5 6 7 9
74HC595
74HC589
Patillaje del 74HC589 Patillaje del 74HC595 El funcionamiento del C.I. 74HC595 es análogo y dejamos al estudiante que lo analice en las correspondientes hojas de características. Estos circuitos integrados se pueden conectar en configuraciones serie o paralelo para crear registros más grandes. Como ejemplo mostramos la siguiente configuración de salida serie, utilizando 3 C.I. 74HC595 para crear un resgitro de desplazamiento de 24 bits que toma 1-feb-a 12 Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
los datos en serie del bit 3 del puerto D y utiliza los bit 4 y 5 del mismo puerto para las señales de reloj de los dos registros internos de cada C.I. Además hacemos uso de la línea de Reset del microcontrolador para inicializar los registros. Otras posibles configuraciones son salida serie o entradas serie y paralelo (en estos dos últimos casos se utiliza el C.I. 74589). Las conexiones se muestran, de forma esquematizada, en la siguiente figura.
D3
D4 D5 Reset GND
IN
SCLK RCLK RST EN
Diagrama de conexión para la conversión serie/paralelo de palabras de 24 bits (salida por el puerto D del microcontrolador) utilizando 3 C.I. 74HC595
Control de periféricos de entrada/salida serie utilizando un puerto paralelo Los C.I. serie aquí descritos se pueden controlar por software usando los bits de un puerto paralelo para las líneas de control de los mismos. Como ejemplo utilizaremos la circuitería mostrada en la figura anterior para enviar 24 bits por un puerto en serie y leerlos en paralelo en los tres registros Se debe programar el puerto de acuerdo con la configuración hardware descrita. En este caso es aconsejable utilizar instrucciones que manipulan bits individualmente. Seguidamente se muestra cómo utilizar este tipo de instrucciones (BSET, BCLR). También es necesario remarcar la forma de direccionar el puerto, (direccionamiento indexado) para que esta rutina se pueda trasladar fácilmente a otras series del MC68HC11 con la posición de los registros en otra zona de memoria.
; ;Rutina de salida serie de 24 bits por el bit 4 del puerto D ; portD equ 8 ;direccion relativa del puerto data equ 8 ;bit 3 %00001000 del puerto sclk equ $10 ;bit 4 %00010000 del puerto rclk equ $20 ;bit 5 %00100000 del puerto ldx #$1000 ;primera direccion de los registros de I/O ldy #buffer ;primera posicion de memoria de los datos a enviar outlp ldaa 0,Y ;toma una palabra de la memoria ldab #8 ;crea un bucle interno de 8 ciclos inlp lsla ;toma el bit mas significativo bcc send0 ;el carry es el bit a enviar bset portD,X data ;pone el bit a "1" bra resum send0 bclr portD,X data ;pone el bit a "0" resum bset portD,X sclk ;pulso de reloj bclr portD,X sclk decb ;decrementa el acumulador B bne inlp ;hasta que todos los bits han sido enviados iny ;mueve el puntero cpy #buffer+3 ;comprueba si se han enviado todos los bytes bne outlp ;si no, vuelve al bucle externo
1-feb-a
13
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
bset portD,X rclk ;crea un flanco positivo de reloj al registro de ;salida bclr portD,X rclk ;recupera rclk para la siguiente operacion.
Comunicaciones síncronas del MC68HC11: Serial Peripherical Interface SPI En el pasado ejemplo se ha mostrado cómo manipular periféricos de comunicación serie utilizando varios bits de un puerto paralelo. El 68HC11 tiene incluído en el puerto D una circuitería parecida a la mostrada, de forma que, de nuevo no es necesaria la etapa de diseño hardware para implementar una comunicación serie síncrona. Antes de proponer algunos ejemplos de uso de este periférico analizaremos la estructura interna del SPI. Disponemos de los siguientes registros Registro DR SPICR SPIF
Dirección $102A $1028 $1029
Descripción Registro de datos Registro de control del SPI Registro de estado del puerto SPI
♦ ♦ ♦
Registro de datos Registro de control del SPI: SPICR Registro de estatus del SPI: SPIF El SPI consta de registros de datos (de lectura/escritura, en la posición $2A, X) y un registro de direcciones del puerto de (en $9, X). Además de su uso en comunicaciones entre varios microprocesadores (como veremos posteriormente), su uso como periferico serie implica que debe estar configurado como maestro (master). Esto se consigue ejecutando la siguiente rutina de inicio. ; ;rutina para configurar el SPI como el maestro en un sistema de comunicaciones ; ldx ldd staa stab
#$1000 #$1850 9,X $28,X
;primera direccion de los registros de I/O ;configuracion de los bits 4,3 del puerto D como salida ;y el registro de control como maestro (master) ;con un reloj de 1 MHz
Para configurar el puerto D como un periférico serie el bit 6 del registro de control serie ($28, X) SPE (serial peripherical enable) debe estar a “1”, así como el bit 4 del mismo registro MSTR (master). En estas condiciones, los bits 5 al 3 del puerto D son controlados por el SPI como se describirá a continuación. De otra forma el puerto D es un puerto paralelo como los descritos anteriormente. En condiciones de operación como puerto serie, los dos bits menos significatios (LSB) del registro de control ($28, X) determinan la frecuencia del reloj desde 1 Mhz hasta 62500 Hz (ver data book). Además del registro de control, el SPI dispone de un registro de banderas (flag) denominado SPIF. La operación básica de funcionamiento del SPI para cambiar datos con registros de desplazamiento externos es bastante simple. Los datos se escriben directamente en el registro de datos del SPI. En este momento se genera una señal de control que inicializa el reloj del registro de desplazamiento. El bit 7 del SPIF se marca cuando después que han sido enviados los datos. Los bits 6 y 4 del mismo registro indican errores de transmisión, en caso de que hayan ocurrido. Un ejemplo de operación se muestra en la siguiente rutina
1-feb-a
14
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
; ; escritura de datos en el SPI y transmision serie ; staa L1
tst bpl ldaa
$2A, X ;pone los datos en el registro de desplazamiento ;inicializa el reloj $29, X ;espera hasta que el bit SPIF es "1" despues de que L1 ;todos los bits han sido enviados $2A, X ;lee datos del registros de desplazamiento, borra ;el bit SPIF para la proxima operacion
Ejercicio: Aumentemos la complejidad suponiendo que queremos leer tres bytes y almacenarlos en posiciones de memoria “apuntadas” por el registro de índice Y.
En el siguiente esquema se muestra el diagrama funcional del SPI, indicando tanto los bloques operacionales (divisor de frecuencia del reloj, el control de pines, el control del puerto, la lógica de control del reloj), como los registros ya definidos anteriormente
Diagrama lógico del SPI, según la información técnica suministrada por Motorola en sus manuales de referencia.
1-feb-a
15
Curso 00/01
Sistemas Electrónicos Digitales
Universidad de Zaragoza
Tema: 08 Técnicas de entrada/salida Teoría
Dpto. de Ingeniería Electrónica y Comunicaciones
Escuela Universitaria Politécnica de Teruel
Configuración maestro-esclavo: Se puede utilizar los SPI para comunicar varios microprocesadores 6811. Para ello es necesario conectar las líneas SCLK juntas. Uno de los microprocesadores hace el papel de maestro y el resto de esclavos. El papel está definido por la forma en cómo se conectan la línea MOSI (master output, slave input) como salida del 6811 maestro y la línea MISO (master input, slave output) como entrada. Para los 6811 esclavos los papeles de estas líneas se cambian. Para completar la configuración, el bit MSTR del registro de control debe estar a “1” para el HC11 maestro y “0” para los esclavos.
68HC11 esclavo
68HC11 esclavo
REG. DE DESPL. SCLK
68HC11 maestro
MOSI
MISO
REG. DE DESPL. SS
SCLK
MOSI
MISO
SS
SCLK MOSI MISO
REG. DE DESPL.
D0 D1 SS
+5
Comunicación entre varios sistemas microprocesadores utilizando el puerto serie SPI.
Conclusión El puerto serie es una alternativa válida al puerto paralelo en muchas ocasiones: requiere menos hardware externo y, en particular, el SPI del 68HC11 se puede configurar fácilmente vía software. Por otra parte los puertos paralelos suelen ser imprescindibles cuando la velocidad es un requerimiento importante, ya que los puertos serie suelen ser más lentos, sobre todo cuando es necesario software de control.
1-feb-a
16
Curso 00/01