Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1.- Introducción
Los dispositivos o puertos de entrada/salida permiten realizar transferencias de información entre el
exterior y el microprocesador. Existen dos modos de transferencia:
paralelo: el puerto utiliza un conjunto de líneas, tantas como bits a transmitir
simultáneamente, por las que cada una pasa un bit en un intervalo de tiempo.
Serie: el puerto utiliza una única línea por la que, en intervalos de tiempo diferentes, se
transmiten, uno a uno, todos los bits del dato.
Téngase en cuenta que las transferencias entre el microprocesador y el puerto concreto, que se
realizan a través del bus de datos, son, siempre, de tipo paralelo.
1
2.- Dispositivos o puertos de entrada/salida con transferencia en paralelo.
OC
I0 D
Q O0
I1 D
Q O1
I2 D
O2
Q
I3 D
Q O3
LATCH 74LS373 I4 D
Q O4
I5 D
Q O5
I6 D
Q O6
I7 D
G Q O7
Decodificador
de
BUS direcciones
DE
DIRECCIONES
G OC
LATCH
373
BUS
DE
DATOS
En la figura anterior, el latch siempre muestra su contenido en la salida, puesto que el pin /OC =0.
A su vez, las salidas del latch se conectan con diodes LEDS que permiten visualizar su contenido,
de forma que un 1 en alguna salida del LATCH provoca que el LED asoicado se ilumine, mientras
que un 0, lo apaga. Las entradas del latch se conectan al bus de datos del sistema (que se ha
2
supuesto de 8 bits). Por otro lado, la entrada de habilitación, G, se conecta, a través del sistema de
decodificación, al bus de direcciones del microprocesador, por lo que para una dirección de
memoria concreta, el latch se habilitará y almacenará el contenido del bus de datos. Desde el punto
de vista del programador, el encendido o apagado de los LEDs, sólo es cuestión de una escritura en
una posición de memoria.
PROBLEMA: La rapidez con la que se ejecuta ese código provocaría que se vean todos
lo LEDs encendidos. (El ojo humano no distingue frecuencias superiores a 30Hz)
Una configuración del mismo registro, pero como puerto de entrada, se representa en la siguiente
figura.
R
Decodificador 5v
de 5v
BUS direcciones
DE
DIRECCIONES
OC G
LATCH 5v
373
BUS
DE
DATOS
Puesto que la entrada G está a 1 lógico, el LATCH, permanentemente, almacena el contenido de sus
entradas. A su vez, las entradas del registro están conectadas a pulsadores mecánicos que disponen
de una resistencia de pull-up. Si un pulsador está presionado, el latch se carga con un 0 lógico, sino,
con un 1 lógico. Las salidas del latch se conectan al bus de datos del microprocesador (que hemos
3
supuesto igualmente de 8 bits), para lo que se necesita la alta impedancia, por lo que, ahora, la
entrada OE, que controla la lectura del latch, se conecta al bus de dirección a través de un
decodificador de dirección. Para evitar conflictos en el bus de datos, el decodificador dispone de un
habilitador conectado a la señal de R que genera el microprocesador en todo acceso de lectura ya sea
memoria o a entrada/salida. Desde el punto de vista del programador, la lectura de una dirección de
memoria permitirá determinar si las teclas están pulsadas o no.
Ejemplo: Se desea desarrollar un programa que permita realizar una acción si se pulsa el botón
situado en la posición más significativa del bus. (Se supone un microprocesador genérico y que el
registro está mapeado en la dirección de memoria $RES):
Los puertos de entrada/salida suelen incluir alguna circuitería adicional con información de estado,
que incluye:
disponibilidad del periférico para la lectura de un dato o registro interno
disponibilidad del periférico para la escritura de un dato
4
nuevo en la entrada del latch cada cierto tiempo. La lectura del latch está condicionada a que el
sistema remoto coloque un nuevo dato en él. Una lectura incondicional del latch, en la que no
sabríamos si el sistema remoto a situado un nuevo dato, provocaría multiplicidades y pérdidas de
datos. Para conseguir una transferencia condicional, debe utilizarse cierto hardware que informe al
microprocesador de que el sistema remoto ha depositado un nuevo dato en el latch. En la siguiente
figura se aprecian estos cambios.
LATCH DATOS
BUFFERS DEL
TRIESTADO DISPOSITIVO
DE
ENTRADA
BUS
DE
DATOS
ACTIVADOR
DESDE
EL DISPOSITIVO
D 1 DE ENTRADA
Q
puerto1
puerto2
El dispositivo de entrada dispone de un bus por el que se transfiere los datos y una línea adicional
que avisa de la existencia de un nuevo dato en el bus. El cambio del valor lógico de dicha línea (de
0 a 1) produce la carga del nuevo dato en el latch y la puesta a 1 del biestable D. Este biestable,
puede considerarse como otro puerto de entrada/salida que se sitúa en una dirección de memoria
(puerto1) diferente a la del latch (puerto2). Las direcciones puerto1 y puerto2 se obtienen mediante
sendos decodificadores conectados al bus de direcciones. La salida del biestable se conecta a una
línea del bus de datos (supongamos la línea 7) a través de un buffer triestado que se activa cuando el
microprocesador hace una operación de lectura sobre la dirección puerto1. El latch coloca su
contenido en el bus de datos cuando el microprocesador realiza una operación de lectura sobre la
dirección de memoria puerto2, lo cual pone a 0 el contenido del biestable D. El microprocesador
debe consultar el contenido del bit 7 de la posición de memoria puerto2 para determinar si existe un
nuevo dato (si está a 1), o no (si está a 0). Si existe dato nuevo, se aplica lectura sobre la posición de
memoria puerto1, lo cual borra el bit 7 de la posición puerto2.
Uno de los principales problemas que plantea la transferencia paralelo es la velocidad a la que esta
puede tener lugar. Si el dispositivo externo envía datos con mayor velocidad que la que el receptor
es capaz de leer los datos, se puede dar el caso de pérdidas de información: OVERRUN. La
solución de este problema se encuentra en el diálogo con el dispositivo externo. Este último sólo
manda cuando el primero está disponible para recibir el dato. Este diálogo se denomina
HANDSHAKE. Una posible solución para el caso del ejemplo anterior sería:
5
LATCH DATOS
BUFFERS DEL
TRIESTADO DISPOSITIVO
DE
ENTRADA
BUS
DE
DATOS
ACTIVADOR
DESDE
EL DISPOSITIVO
D 1 DE ENTRADA
Q
BUSY
puerto1 (LINEA DE
puerto2 OCUPADO)
El emisor dispone de una entrada adicional, BUSY generada por el equipo que recibe los datos. La
salida BUSY se obtiene de la salida del biestable D.(BUSY=Q). La lectura del latch por parte del
microprocesador local pone a 0 el biestable y la línea BUSY que solicita al emisor un nuevo dato.
Emisor Receptor
Bus de datos
#Strobe
#ACK
BUS DE
DATOS
#Strobe
#ACK
6
Muchas de las funciones de transferencia de entrada/salida paralelo vienen integradas en chips cuyas
funciones pueden ser programadas dinámicamente por el microprocesador en función de las
necesidades.
PA3 1 40 PA4
PA2 2 39 PA5
PA1 3 38 PA6
PA0 4 37 PA7
/RD 5 36 /WR
/CS 6 35 RESET
GND 7 34 D0
A1 8 33 D1
A0 9 32 D2
PC7 10 8255 31 D3
PC6 11 30 D4
PC5 12 29 D5
PC4 13 28 D6
PC3 14 27 D7
PC2 15 26 VCC
PC1 16 25 PB7
PC0 17 24 PB 6
PB0 18 23 PB5
PB1 19 22 PB4
PB 2 20 21 PB 3
Dispone de un bus de datos de 8 bits (D7-0), un bus de direcciones con dos líneas para la selección
de los registros internos (A1-0), un bus de control (/CS,RESET,/WR,/RD) y tres puertos
bidireccionales de 8 bits cuyas salidas son PA7-0,PB7-0,PC7-0.
El microprocesador se conecta con este dispositivo mediante su bus de datos D0-7, el bus de
direcciones, cuyas líneas de menor peso, A1,A0 se conectan directemente a las entradas del mismo
nombre del 8255, mientras que las restantes líneas de direcciones del microprocesador se utilizan
para la decodificación de las direcciones de memoria donde se haya ubicada este chip y que activan
la entrada /CS del mismo. Además las líneas de entrada /RD y /WD distinguen si la transferencia se
realiza desde al microprocesador al 8255 (escritura) o desde el 8255 al microprocesador (lectura).
La línea de RESET inicializa el integrado y se conecta con la señal RESET general que inicializa
todo el sistema.
7
Ejemplo de conexión:
BUS Decodificador
DE de
DIRECCIONES direccion
A0-A15
A15-2
PA7-0
/CS
A1
A0 PB 7-0
/WR /WR
/RD /RD PC7-0
8255
BUS
DE
DATOS
MICROPROCESADOR
A1 A0 Registro
0 0 Puerto A
0 1 Puerto B
1 0 Puerto C
1 1 Registro de
comando
8
Dispone de un bus de datos de 8 bits (D7-D0), un bus de direcciones con cuatro líneas (RS3-RS0)
para seleccionar 16 registros internos, bus de control y dos puertos PA7-0 y PA7-0 entre otras
funciones avanzadas.
La transferencia en paralelo permite una velocidad de transmisión mayor que la serie, por eso se utiliza
en sistema que requieren un volumen de intercambio de información importante. La transferencia en
paralelo tiene un gran coste (proporcional al número de bits a transmitir y la distancia entre emisor y
receptor). Dos factores influyen en el coste:
Otro problema de la transferencia paralelo es el skewing, que aumenta cuando las longitudes de
los cables son mayores. El skewing se realaciona con las diferencias entre los tiempos de
propagación de las distintas señales por sus respectivos cables.
A distancias cortas la transferencia paralelo es más ventajosa, pero cuando la distancia aumenta, el
incremento en el coste e la instalación se hace tan grande que es razonable plantearse una pérdida de
velocidad en beneficio de una bajada en el coste. La transferencia en paralelo se limita a sistemas
cerrados en que las distancias no son muy grandes (p.ej.: la interconexión entre los distintos circuitos
integrados de una placa) y la transferencia en serie se emplea para sistemas que están relativamente
alejados.
El interfaz serie es un circuito integrado que realiza transferencias de datos en paralelo con el
procesador y las convierte en trasferencias serie con el exterior. El núcleo de un periférico serie es un
registro de desplazamiento
9
Toda transferencia de información requiere de sincronización entre el receptor y el transmisor. El
receptor de una transferencia en serie debe saber en qué instantes debe generar el desplazamiento del
contenido de su registro de recepción para capturar, correctamente, los bits de información. (la clk de
ambos periféricos debe ser la misma). Existen dos modalidades de transferencia en serie atendiendo al
modo de sincronización:
síncrona
asíncrona
En la transferencia seria síncrona el transmisor envía, en una línea adicional a la de datos, la señal de
reloj de su registro de desplazamiento. El receptor recupera la señal de esta línea y la utiliza como reloj
de su registro de desplazamiento. En esta técnica se requiere dos líneas como mínimo, lo que produce
efectos de skewing y coste no deseados. Existen técnicas de comunicación síncrona que permiten
eliminar una de las dos línea (autoreloj).
En el método por transferencia en serie asíncrona, el transmisor sólo envía los datos, por tanto la forma
en que el receptor se sincroniza es bien diferente. Los sistemas involucrados en una transferencia serie
asíncrona tienen que cumplir algunos requisitos para que ésta tenga lugar:
los relojes del transmisor y del receptor deben operar a la misma frecuencia(aunque esto no es
posible por la existencia de tolerancias en los componentes).
la hilera de bits transmitidos debe incluir alguna información de sincronización además de los
bits de los datos (especie de Ready)
los bits de sincronización activan el modo de recepción avisando que a partir de ellos se
reciben, uno tras otro, los bits de datos
Frecuentemente se necesitara intercalar bits de sincronismo entre los bits de los datos para
conseguir resincronizar el reloj del receptor.
La transferencia en serie asíncrona está orientada al carácter. Esto es, cada byte que se deseatransmitir
se va a rodear de cierta información que permite su sincronización y la posible detección de errores.
10
Si el transmisor está en reposo, es decir, no tiene nada que transmitir, su salida se mantiene a 1 lógico
(MARK). Si el transmisor va a iniciar una transferencia, primero pone su salida a 0,(SPACE) durante el
mismo tiempo que la duración de un bit de datos (Tbit). Esto se conoce como el bit de inicio o bit de
start. A continuación, se envían de 5 a 8 bits de datos, comenzando por el menos significativo del
grupo. Después del último bit del dato, y de manera opcional, se envía un bit de paridad que puede ser
par, impar o fija (1 o 0 lógicos). Finalmente se envía un bit de stop cuya duración varía entre 1 y 2 Tbit y
que se corresponde con un 1 lógico (MARK). Si el transmisor no tiene un nuevo byte que enviar, este
pasa al estado de reposo y, su salida, a 1 lógico. Por contra, si existe un nuevo dato que transmitir, a
continuación del bit de stop se envía el bit de start del siguiente byte.
El formato asíncrono requiere, como mínimo, de 2 bits adicionales a los de datos para su
sincronización y 1 bit opcional, como la paridad, para la detección de errores. Pero, ¿Cómo se
sincroniza el receptor?. El receptor continuamente muestrea la entrada en busca de un bit de start. La
frecuencia con la que realiza este muestreo es 16 veces superior a la frecuencia de la señal que debe
servir como desplazamiento de su registro. O sea, el receptor, en el tiempo de duración de un bit (Tbit),
muestrea su entrada 16 veces.
Si comienza la transmisión de un byte. La línea de salida del transmisor pasa de 1 lógico (reposo) a 0
lógico (bit de start) . Cuando el primer tick (o pulso de reloj) de muestreo del receptor detecta esta
transición en su entrada, se activa un contador cuya misión consiste en esperar 8 ciclos de reloj o ticks.
Transcurridos estos ciclos, el receptor vuelve a muestrear la entrada ( aproximadamente esto coincide
con el punto medio del bit de start ). Si esta es 1, el receptor se reinicializa buscando una nueva
transición de bajada ( asume que se ha recibido un falso bit de start ). Si la entrada es un 0, el receptor
da como válida la llegada de un bit de start. Si se detecta un bit de start válido, se activa el mecanismo
de sincronización, gracias a la habilitación de un contador módulo 16 por el que se obtiene, a partir de
la señal de muestreo, el reloj de desplazamiento del registro de recepción.
11
Reposo
LS
Bit de Start B
1º 8º 1º 16º
Entonces, ¿Para qué un bit de stop?. El bit de stop interviene en la función sincronizadora en el sentido
de que permite asegurar una transición de MARK (bit de stop del carácter anterior) a SPACE (bit de
start del carácter actual) cuando se transmiten datos de forma continuada.
Registro de Desplazamiento
RxD
Flag
Registro de
Mantenimiento
RHR
Al computador
Gracias al RHR el procesador tiene un tiempo igual al de duración de la recepción de un nuevo byte
para leer este registro antes de que su contenido se pierda por la sobreescritura. En algunos receptores
este registro, denominado registro de mantenimiento de recepción (RHR - Receiver Holding Register -
o simplemente registro de recepción, RR - Receiver Register -), es sustituido por una cola o FIFO.
Asociado al registro de recepción existe un banderín o flag que se activa cada vez que el registro de
desplazamiento transfiere un dato nuevo hacia el registro de recepción. También podemos encontrar un
flag de Overrun o de sobreescritura. Todos los receptores asíncronos tienen una circuitería adicional
que muestrea y chequea el bit de stop. Si este no es 1, se dice que existe un error de trama o Framming
error que es recogido por un flag del mismo nombre.
12
Los transmisores asíncronos también son implementados mediante un registro de desplazamiento. Un
circuito simplificado se muestra a continuación.
El procesador carga en paralelo el carácter a transmitir dentro de este registro gracias a la activación de
la línea "Carga". Durante este proceso la posición menos significativa y la más significativa del
registro, se escriben con 0 y 1 respectivamente ( bit de start y bit de stop ). Finalizado el proceso de
carga ( desactivación de la línea "Carga" y habilitación del reloj ) se inicia el de desplazamiento, gracias
al cual primero sale el bit de start, después los bits del dato y por último el bit de stop, atravesando,
todos ellos, un biestable llamado Línea. Este biestable está conectado a la línea de comunicaciones e,
inicialmente, se encuentra a 1 lógico. Después de transmitir todos los bits del formato asíncrono, el
biestable mantiene el bit de stop, de esta forma se asegura que la salida se mantiene a 1 antes de que se
inicie la transmisión de un nuevo dato. Asimismo, se dispone de un flag asociado con el registro de
desplazamiento que informa si este se encuentra vacío y, por tanto, disponible para aceptar un nuevo
dato.
Para una transmisión lo más eficiente posible en el sentido de aprovechamiento del canal, o sea, que
este se encuentre desocupado el menor tiempo posible, se realiza un doble "buffering" en los
transmisores.
13
El procesador no accede directamente al registro de desplazamiento. Carga el byte que quiere enviar en
un registro de mantenimiento (THR - Transmitter Holding Register - o TR - Transmitter Register -) el
cual transfiere automáticamene su contenido al de desplazamiento cuando este se encuentra vacío.
Asociado al registro de transmisión, también existe un flag que avisa de cuándo este está disponible
para aceptar un nuevo dato.
3.1.1 UART
Externamente la UART dispone de líneas de conexión con el microprocesador además de las propias
de transmisión y recepción. Estas son:
- bus de datos
14
- líneas de direcciones,
- líneas de control y sincronismo
BLOQUE DE TRANSMISION
15
bits son: overrun, framming error y parity error.
BLOQUE DE RECEPCIÓN
El generador de baudios programable genera la temporización necesaria para los bloques transmisor y
receptor. La frecuencia de la señal de reloj generada es 16 veces mayor que la velocidad con la se desea
transmitir y recibir los bits por el interfaz serie. Esta constituido por:
16
Tbit = 16* Tclk*[registro]
Vbps= Fclk/(16*[registro])
GENERADOR DE BAUDIOS
La lógica de interrupciones permite activar su línea INTRPT si suceden los siguientes eventos
En este tipo de transferencia, además de los bits de datos se requiere el envío de la señal de reloj. La
técnica más fácil es la que implementan muchos microcontroladores en el denominado interfaz SPI
(Serial peripheral interface).
En el interfaz SPI existen dos dispositivos: el AMO, que genera la señal de reloj para la comunicación
serie síncrona y el ESCLAVO. Los registros de desplazamiento del amo y del esclavo se configuran a
modo de registro circular, por lo que se puede realizar una transmisión full-duplex siempre que los dos
dispositivos tengan información que enviar simultáneamente. La señal de reloj generada por el AMO
sólo está activa el tiempo necesario para la transmisión de todos los bits del registro de desplazamiento.
En el interfaz SPI el registro de desplazamiento no es accesible directamente por la CPU, sino que se
17
accede a través de un registro de mantenimiento. Obsérvese que a diferencia de la UART, el mismo
registro de desplazamiento se utiliza tanto para transmisión como recepción. Lo mismo ocurre con el
registro de mantenimiento que es accedido por la CPU. Además de los registros anteriores, existen
otros registros, dentro del interfaz, que permiten la programación del modo de funcionamiento del
mismo.
Existen otros dispositivos algo más complejos, que al estilo de la UART, disponen de dos canales
diferentes para transmisión y recepción y en el que no existe un amo que cuenta los pulsos de reloj
necesarios para transmitir todos los bits del dato. Para estos dispositivos se plantea el problema de
saber cuándo empieza el primer bit de un carácter.
Estos dispositivos tienen una estructura similar a las UART, de hecho existen integrados que
mezclan tanto la función síncrona como la asíncrona (8251).
18
Registro de modo
SYN
BUS DE DATOS
Registro de control
RxD
RSR
RHR
THR
TxD
TSR
clk
La parte emisora y la parte receptora tienen entradas de reloj diferentes (RxC y TxC) y disponen de
dos registros de desplazamiento. Estos últimos, no son accesibles por la CPU directamente, sino a
través de los registros de mantenimiento THR,RHR.
Existe un registro de SYN que permite seleccionar el tipo de carácter que se emplea para la
sincronización de las USRT. Cuando se habilita el transmisor síncrono, el carácter SYN se envía en
primer lugar, de forma automática, antes de que se envíe el primer dato. Cuando se habilita el
receptor de la USRT, este comienza automáticamente en la fase de detección del carácter SYN, tras
el que se comienza el proceso de ensamblado del octeto entrante y transferencia hacia el RHR para
su posterior lectura de la CPU. En muchos sistemas se utiliza un segundo registro de SYN que
asegura una mayor eficacia en la detección del inicio de la trama.
El registro de estado contiene información del estado interno del dispositivo, esto es, si es buffer de
transmisión está vacío, si el buffer de recepción está lleno, error de overrun, de paridad, etc.
19