Está en la página 1de 19

TUTORIAL DE ENTRADA/SALIDA

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.

Un puerto de entrada/salida en su forma más básica es un simple registro o latch.

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

Una configuración de este dispositivo como puerto de salida se muestra a continuación:

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.

 Ejemplo: Supongamos un microprocesador genérico para el que se le ha asignado la dirección de


memoria $RES al registro concreto. La secuencia de instrucciones necesarias para encender de
forma progresiva cada uno de los LEDS sería:

BUCLE: MUEVE #$80,$RES


MUEVE #$40,$RES
MUEVE #$20,$RES
MUEVE #$10,$RES
MUEVE #$08,$RES
MUEVE #$04,$RES
MUEVE #$02,$RES
MUEVE #$01,$RES
SALTO BUCLE

 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):

CLR D0 ;D0,D1,D2 son registros internos del microprocesador.


MUEVE #$FF, D1 ;D1 es un registro que contiene el valor inicia FF que
;indica que ninguna tecla ha sido pulsada.
BUCLE: MUEVE $RES,D0 ;Lectura del puerto.
MUEVE D0,D2 ;Se salva el contenido de D0 en D2
AND #$80,D0 ;El registro D0 tiene un 0 si la tecla está pulsada y ≠0
;en caso contrario.
BNE posicion
MUEVE D2,D1
SALTA BUCLE
Posicion: MUEVE D1,D
AND #$80,D0 ;Comprueba el valor del bit más significativo
BEQ BUCLE
JSR accion
MUEVE #$FF,D1
SALTA BUCLE

 Este programa comprueba si la tecla ha sido pulsada o no y lo comprueba con el valor de


pulsación de la última vez que accedió al puerto de entrada.
 PROBLEMA: Esta rutina no elimina los fenómenos físicos de los rebotes en los contactos.

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

Esto dá lugar a dos tipos de transferencias entre el microprocesador y el puerto:


 Incondicionales: el microprocesador no debe acceder al puerto de E/S para saber si este
está disponible para la transferencia.
 Condicionales: el microprocesador debe acceder para determinar si el puerto está
disponible para la transferencia.

Ejemplos de transferencia incondicionales se han presentado con anterioridad en la lectura del


teclado o la visualización de LEDs. Como ejemplo de transferencia condicional supongamos que un
determinado sistema tiene que recibir información de otro. La información recibida es leída por el
microprocesador a través de un puerto de E/S del tipo 74LS373. El sistema remoto pone 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.

El siguiente programa ilustra todo este proceso.

BUCLE: MUEVE #$PUERTO1,D0


BEQ BUCLE
MUEVE #$PUERTO2,(A0)+
SALTA BUCLE

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.

El ejemplo más común de handshake en una transferencia en paralelo es la comunicación de un


ordenador con la impresora, donde BUSY hace las veces de ACK, y el activador, de STROBE

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.

 Un mismo componente puede integrar varios latches


 integrar funciones de control de la transferencia paralela (protocolos handshake)
 programar el modo de funcionamiento de cada uno de los bits de todos los puertos, esto
es, si hacen función de entrada o salida.

 Ejemplo: Interfaz periférico programable 8255

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

El microprocesador ve en la memoria un total de cuatro direcciones consecutivas que provocan el


acceso al dispositivo. Por ejemplo: si el decodificador de direcciones activa su salida para A15-
2=$1000, entonces para las direcciones A15-0= $1000,$1001, $1002 y $1003, se accede a los
registros internos del 8255.

A1 A0 Registro
0 0 Puerto A
0 1 Puerto B
1 0 Puerto C
1 1 Registro de
comando

 Otro ejemplo: VIA 6522

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.

3.- Dispositivos o puertos de entrada/salida con transferencia en serie

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:

 el valor del enlace


 el valor de los drivers o circuitos que controlan los niveles de tensión en cada una de las líneas.
A mayor longitud de cable, mayor resistencia y capacidad presenta este, por lo que el driver
debe ser más potente.

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.

3.1 Transferencia seria asíncrona

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.

Un receptor asíncrono dispone, además de un registro de desplazamiento, un registro intermedio


(RHR) del tipo paralelo-paralelo que hace de interfaz entre el registro de desplazamiento y el bus de
datos del microprocesador. Esto hace que no sea tan crítico el momento del lectura del byte recibido.

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

Un dispositivo que permite la transmisión y recepción serie de información en modo asíncrono se


denomina con las siglas UART - Universal Asynchronous Receiver Transmiter- Transmisor Receptor
Asíncrono Universal.

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

El bloque transmisor se compone de:


- un decodificador de formato de datos que en función del número de bits de datos (5-8),
número de bits de stop (1-2) y el byte a transmitir, forma la SDU (unidad de datos serie) que
se cargará en el registro de desplazamiento del transmisor TSR (Transmitter Shift
Register) para su transmisión. La SDU contiene el bit de start, los bits de datos, paridad y
bits de stop.
- Registro de mantenimiento de transmisión, THR
- Registro de desplazamiento de transmisión TSR
- Flag de THRE ( Transmisor Holding Register Empty o buffer de transmisión vacío) que se
encuentra en un registro llamado Registro de estado de serialización, SR ( Status Register ).
Este flag se desactiva cuando el microprocesador escribe un dato en el THR.
- Flag de TSRE ( Transmitter Shift Register Empty o registro de desplazamiento vacío), que
se activa cuando el registro TSR se ha quedado vacío y que se encuentra en el registro SR.

BLOQUE DE TRANSMISION

El bloque de recepción consta de:


- registro de desplazamiento de recepción RSR (Receiver Shift Register ), que almacena los bits
de la SDU que se esperan recibir en función de los parámetros configurados de datos, stop y
paridad
- registro de mantenimiento de recepción, RHR ( Receiver Holding Register ),
- Flag RxRDY que se encuentra en el registro SR que y que se activa en cada transferencia del
RSR al RHR Cuando el registro RHR es leído, el flag RxRDY se desactiva automáticamente.
- En paralelo con la carga del nuevo dato en el registro RHR y la activación de RxRDY, se
actualizan unos bits que informan sobre los posibles errores ocurridos en la recepción. Estos

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:

- un contador cuya señal de reloj es la que recibe la UART


- un registro que almacena un determinado número depositado por el microprocesador
- un comparador cuya misión es determinar si el contenido del registro es igual o menor
que el valor de cuenta del contador. Si obtenemos un igual como resultado de la
comparación, se activa la puesta a cero del contador y se genera un pulso de salida que
es utilizado como señal de referencia para el bloque de transmisión y de recepción.
- Dentro de cada bloque, a su vez, existe un contador módulo 16 cuya salida actúa de
reloj de los registros de desplazamiento. De esta forma la señal clk_tx_rx genera los 16
ticks o pulsos de reloj por bit necesarios por el circuito de sincronización del bloque
receptor.

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

- la llegada de un nuevo dato


- el registro de transmisión se ha quedado vacío
- se ha producido un error
- cambio de estado en las líneas del modem, etc.

3.2 Transferencia serie síncrona

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.

- Registro de control SPI (SPICR): Dispone de un conjunto de bits que permiten


enmascarar o habilitar las interrupciones, selección del orden de transmisión/recepción
de bits (primero el LSB o primero el MSB, después los demás), la frecuencia de reloj, la
polaridad del mismo, si el dispositivo actúa como amo o esclavo, etc.
- Registro de estado SPI(SPISR).Da información sobre el estado del interfaz, esto es, si el
flag de petición de interrupción está activo o no, si se ha producido overrun, etc.

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.

En general, la estructura de estos dispositivos es similar a las de la UART, e incorporan un


mecanismo de identificación de un carácter de sincronismo SYN. Este carácter de sincronismo se
envía al principio de cada transmisión serie, antes de cualquier octeto de datos. El receptor está
escuchando la entrada en cada ciclo de reloj, y compara el contenido del registro de desplazamiento
con el carácter de SYN. Cuando se detecte la recepción de un carácter SYN, el receptor sabe que el
siguiente bit que se reciba se corresponde con el primero del octeto de datos, por lo que ensambla de
8 en 8 los bits que va recibiendo para formar el carácter que deposita en el registro buffer de
recepción. Este proceso continua hasta que el procesador indique al dispositivo que ya ha terminado
la recepción de caracteres o/y que el dispositivo debe estar atento para la detección de otro carácter
de sincronismo.

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

Registro de estado RxC


TxC

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.

La configuración del modo de funcionamiento de la USRT se especifica en los registros de control y


modo. En ellos se puede configurar el número de bits de datos que contiene cada octeto (5,6,7,8) si
estos tienen paridad ( y en caso afirmativo, el tipo de paridad), el número de caracteres de
sincronismo que se utilizan, la habilitación o inhabilitación del bloque de recepción o de
transmisión, configuración del modo búsqueda, etc.

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

También podría gustarte