Está en la página 1de 19

TUTORIAL DE ENTRADA/SALIDA

1.- Introduccin Los dispositivos o puertos de entrada/salida permiten realizar transferencias de informacin entre el exterior y el microprocesador. Existen dos modos de transferencia: paralelo: el puerto utiliza un conjunto de lneas, tantas como bits a transmitir simultneamente, por las que cada una pasa un bit en un intervalo de tiempo. Serie: el puerto utiliza una nica lnea por la que, en intervalos de tiempo diferentes, se transmiten, uno a uno, todos los bits del dato.

Tngase en cuenta que las transferencias entre el microprocesador y el puerto concreto, que se realizan a travs del bus de datos, son, siempre, de tipo paralelo.

2.- Dispositivos o puertos de entrada/salida con transferencia en paralelo. Un puerto de entrada/salida en su forma ms bsica es un simple registro o latch.
OC I0 D Q I1 D Q I2 D Q I3 D Q O3 O2 O1 O0

LATCH 74LS373

I4

D Q O4

I5

D Q O5

I6

D Q O6

I7 G

D Q O7

Una configuracin de este dispositivo como puerto de salida se muestra a continuacin:

BUS DE DIRECCIONES

Decodificador de direcciones

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 habilitacin, G, se conecta, a travs del sistema de decodificacin, al bus de direcciones del microprocesador, por lo que para una direccin 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, slo es cuestin de una escritura en una posicin de memoria. Ejemplo: Supongamos un microprocesador genrico para el que se le ha asignado la direccin de memoria $RES al registro concreto. La secuencia de instrucciones necesarias para encender de forma progresiva cada uno de los LEDS sera: BUCLE: MUEVE MUEVE MUEVE MUEVE MUEVE MUEVE MUEVE MUEVE SALTO #$80,$RES #$40,$RES #$20,$RES #$10,$RES #$08,$RES #$04,$RES #$02,$RES #$01,$RES BUCLE

PROBLEMA: La rapidez con la que se ejecuta ese cdigo provocara que se vean todos lo LEDs encendidos. (El ojo humano no distingue frecuencias superiores a 30Hz)

Una configuracin del mismo registro, pero como puerto de entrada, se representa en la siguiente figura.
R Decodificador de direcciones 5v

5v

BUS DE DIRECCIONES

OC

LATCH 373

5v

BUS DE DATOS

Puesto que la entrada G est a 1 lgico, el LATCH, permanentemente, almacena el contenido de sus entradas. A su vez, las entradas del registro estn conectadas a pulsadores mecnicos que disponen de una resistencia de pull-up. Si un pulsador est presionado, el latch se carga con un 0 lgico, sino, con un 1 lgico. 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 direccin a travs de un decodificador de direccin. Para evitar conflictos en el bus de datos, el decodificador dispone de un habilitador conectado a la seal 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 direccin de memoria permitir determinar si las teclas estn pulsadas o no. Ejemplo: Se desea desarrollar un programa que permita realizar una accin si se pulsa el botn situado en la posicin ms significativa del bus. (Se supone un microprocesador genrico y que el registro est mapeado en la direccin de memoria $RES): CLR MUEVE BUCLE: MUEVE MUEVE AND BNE MUEVE SALTA MUEVE AND BEQ JSR MUEVE SALTA D0 #$FF, D1 $RES,D0 D0,D2 #$80,D0 posicion D2,D1 BUCLE D1,D #$80,D0 BUCLE accion #$FF,D1 BUCLE ;D0,D1,D2 son registros internos del microprocesador. ;D1 es un registro que contiene el valor inicia FF que ;indica que ninguna tecla ha sido pulsada. ;Lectura del puerto. ;Se salva el contenido de D0 en D2 ;El registro D0 tiene un 0 si la tecla est pulsada y 0 ;en caso contrario.

Posicion:

;Comprueba el valor del bit ms significativo

Este programa comprueba si la tecla ha sido pulsada o no y lo comprueba con el valor de pulsacin de la ltima vez que accedi al puerto de entrada. PROBLEMA: Esta rutina no elimina los fenmenos fsicos de los rebotes en los contactos.

Los puertos de entrada/salida suelen incluir alguna circuitera adicional con informacin de estado, que incluye: disponibilidad del perifrico para la lectura de un dato o registro interno disponibilidad del perifrico 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 visualizacin de LEDs. Como ejemplo de transferencia condicional supongamos que un determinado sistema tiene que recibir informacin de otro. La informacin recibida es leda por el microprocesador a travs 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 sabramos si el sistema remoto a situado un nuevo dato, provocara multiplicidades y prdidas 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.
BUFFERS TRIESTADO BUS DE DATOS LATCH DATOS DEL DISPOSITIVO DE ENTRADA

D Q

ACTIVADOR DESDE EL DISPOSITIVO DE ENTRADA

puerto1

puerto2

El dispositivo de entrada dispone de un bus por el que se transfiere los datos y una lnea adicional que avisa de la existencia de un nuevo dato en el bus. El cambio del valor lgico de dicha lnea (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 sita en una direccin 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 lnea del bus de datos (supongamos la lnea 7) a travs de un buffer triestado que se activa cuando el microprocesador hace una operacin de lectura sobre la direccin puerto1. El latch coloca su contenido en el bus de datos cuando el microprocesador realiza una operacin de lectura sobre la direccin de memoria puerto2, lo cual pone a 0 el contenido del biestable D. El microprocesador debe consultar el contenido del bit 7 de la posicin 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 posicin de memoria puerto1, lo cual borra el bit 7 de la posicin puerto2. El siguiente programa ilustra todo este proceso. BUCLE: MUEVE BEQ MUEVE SALTA #$PUERTO1,D0 BUCLE #$PUERTO2,(A0)+ 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 enva datos con mayor velocidad que la que el receptor es capaz de leer los datos, se puede dar el caso de prdidas de informacin: OVERRUN. La solucin de este problema se encuentra en el dilogo con el dispositivo externo. Este ltimo slo manda cuando el primero est disponible para recibir el dato. Este dilogo se denomina HANDSHAKE. Una posible solucin para el caso del ejemplo anterior sera:

BUFFERS TRIESTADO BUS DE DATOS

LATCH

DATOS DEL DISPOSITIVO DE ENTRADA

D Q

ACTIVADOR DESDE EL DISPOSITIVO DE ENTRADA

puerto1

puerto2

BUSY (LINEA DE 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 lnea BUSY que solicita al emisor un nuevo dato. El ejemplo ms comn de handshake en una transferencia en paralelo es la comunicacin de un ordenador con la impresora, donde BUSY hace las veces de ACK, y el activador, de STROBE

Emisor Bus de datos #Strobe #ACK BUS DE DATOS #Strobe #ACK

Receptor

Muchas de las funciones de transferencia de entrada/salida paralelo vienen integradas en chips cuyas funciones pueden ser programadas dinmicamente por el microprocesador en funcin 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 funcin de entrada o salida.

Ejemplo: Interfaz perifrico programable 8255


PA3 PA2 PA1 PA0 /RD /CS GND A1 A0 PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 PB0 PB1 PB 2 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 PA4 PA5 PA6 PA7 /WR RESET D0 D1 D2 D3 D4 D5 D6 D7 VCC PB7 PB 6 PB5 PB4 PB 3

8255

Dispone de un bus de datos de 8 bits (D7-0), un bus de direcciones con dos lneas para la seleccin 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 lneas de menor peso, A1,A0 se conectan directemente a las entradas del mismo nombre del 8255, mientras que las restantes lneas de direcciones del microprocesador se utilizan para la decodificacin de las direcciones de memoria donde se haya ubicada este chip y que activan la entrada /CS del mismo. Adems las lneas 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 lnea de RESET inicializa el integrado y se conecta con la seal RESET general que inicializa todo el sistema.

Ejemplo de conexin:
BUS DE DIRECCIONES A0-A15

Decodificador de direccion A15-2

A1 A0 /WR /RD BUS DE DATOS MICROPROCESADOR /WR /RD

/CS

PA7-0 PB 7-0 PC7-0

8255

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 A152=$1000, entonces para las direcciones A15-0= $1000,$1001, $1002 y $1003, se accede a los registros internos del 8255.

A1 0 0 1 1 Otro ejemplo: VIA 6522

A0 0 1 0 1

Registro Puerto A Puerto B Puerto C Registro comando

de

Dispone de un bus de datos de 8 bits (D7-D0), un bus de direcciones con cuatro lneas (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 transmisin mayor que la serie, por eso se utiliza en sistema que requieren un volumen de intercambio de informacin importante. La transferencia en paralelo tiene un gran coste (proporcional al nmero 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 tensin en cada una de las lneas. A mayor longitud de cable, mayor resistencia y capacidad presenta este, por lo que el driver debe ser ms 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 propagacin de las distintas seales por sus respectivos cables. A distancias cortas la transferencia paralelo es ms ventajosa, pero cuando la distancia aumenta, el incremento en el coste e la instalacin se hace tan grande que es razonable plantearse una prdida 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 interconexin entre los distintos circuitos integrados de una placa) y la transferencia en serie se emplea para sistemas que estn 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 ncleo de un perifrico serie es un registro de desplazamiento

Toda transferencia de informacin requiere de sincronizacin 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 recepcin para capturar, correctamente, los bits de informacin. (la clk de ambos perifricos debe ser la misma). Existen dos modalidades de transferencia en serie atendiendo al modo de sincronizacin: sncrona asncrona

En la transferencia seria sncrona el transmisor enva, en una lnea adicional a la de datos, la seal de reloj de su registro de desplazamiento. El receptor recupera la seal de esta lnea y la utiliza como reloj de su registro de desplazamiento. En esta tcnica se requiere dos lneas como mnimo, lo que produce efectos de skewing y coste no deseados. Existen tcnicas de comunicacin sncrona que permiten eliminar una de las dos lnea (autoreloj).

En el mtodo por transferencia en serie asncrona, el transmisor slo enva los datos, por tanto la forma en que el receptor se sincroniza es bien diferente. Los sistemas involucrados en una transferencia serie asncrona 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 informacin de sincronizacin adems de los bits de los datos (especie de Ready) los bits de sincronizacin activan el modo de recepcin 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 asncrona La transferencia en serie asncrona est orientada al carcter. Esto es, cada byte que se deseatransmitir se va a rodear de cierta informacin que permite su sincronizacin y la posible deteccin de errores.

10

Si el transmisor est en reposo, es decir, no tiene nada que transmitir, su salida se mantiene a 1 lgico (MARK). Si el transmisor va a iniciar una transferencia, primero pone su salida a 0,(SPACE) durante el mismo tiempo que la duracin de un bit de datos (Tbit). Esto se conoce como el bit de inicio o bit de start. A continuacin, se envan de 5 a 8 bits de datos, comenzando por el menos significativo del grupo. Despus del ltimo bit del dato, y de manera opcional, se enva un bit de paridad que puede ser par, impar o fija (1 o 0 lgicos). Finalmente se enva un bit de stop cuya duracin vara entre 1 y 2 T y bit que se corresponde con un 1 lgico (MARK). Si el transmisor no tiene un nuevo byte que enviar, este pasa al estado de reposo y, su salida, a 1 lgico. Por contra, si existe un nuevo dato que transmitir, a continuacin del bit de stop se enva el bit de start del siguiente byte. El formato asncrono requiere, como mnimo, de 2 bits adicionales a los de datos para su sincronizacin y 1 bit opcional, como la paridad, para la deteccin de errores. Pero, Cmo 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 seal que debe servir como desplazamiento de su registro. O sea, el receptor, en el tiempo de duracin de un bit (Tbit), muestrea su entrada 16 veces.

Si comienza la transmisin de un byte. La lnea de salida del transmisor pasa de 1 lgico (reposo) a 0 lgico (bit de start) . Cuando el primer tick (o pulso de reloj) de muestreo del receptor detecta esta transicin en su entrada, se activa un contador cuya misin 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 transicin de bajada ( asume que se ha recibido un falso bit de start ). Si la entrada es un 0, el receptor da como vlida la llegada de un bit de start. Si se detecta un bit de start vlido, se activa el mecanismo de sincronizacin, gracias a la habilitacin de un contador mdulo 16 por el que se obtiene, a partir de la seal de muestreo, el reloj de desplazamiento del registro de recepcin.

11

Reposo Bit de Start LS B

16

Entonces, Para qu un bit de stop?. El bit de stop interviene en la funcin sincronizadora en el sentido de que permite asegurar una transicin de MARK (bit de stop del carcter anterior) a SPACE (bit de start del carcter actual) cuando se transmiten datos de forma continuada. Un receptor asncrono dispone, adems 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 crtico 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 duracin de la recepcin 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 recepcin (RHR - Receiver Holding Register o simplemente registro de recepcin, RR - Receiver Register -), es sustituido por una cola o FIFO. Asociado al registro de recepcin existe un bandern o flag que se activa cada vez que el registro de desplazamiento transfiere un dato nuevo hacia el registro de recepcin. Tambin podemos encontrar un flag de Overrun o de sobreescritura. Todos los receptores asncronos tienen una circuitera 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 asncronos tambin son implementados mediante un registro de desplazamiento. Un circuito simplificado se muestra a continuacin.

El procesador carga en paralelo el carcter a transmitir dentro de este registro gracias a la activacin de la lnea "Carga". Durante este proceso la posicin menos significativa y la ms significativa del registro, se escriben con 0 y 1 respectivamente ( bit de start y bit de stop ). Finalizado el proceso de carga ( desactivacin de la lnea "Carga" y habilitacin del reloj ) se inicia el de desplazamiento, gracias al cual primero sale el bit de start, despus los bits del dato y por ltimo el bit de stop, atravesando, todos ellos, un biestable llamado Lnea. Este biestable est conectado a la lnea de comunicaciones e, inicialmente, se encuentra a 1 lgico. Despus de transmitir todos los bits del formato asncrono, 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 transmisin de un nuevo dato. Asimismo, se dispone de un flag asociado con el registro de desplazamiento que informa si este se encuentra vaco y, por tanto, disponible para aceptar un nuevo dato. Para una transmisin lo ms 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 automticamene su contenido al de desplazamiento cuando este se encuentra vaco. Asociado al registro de transmisin, tambin existe un flag que avisa de cundo este est disponible para aceptar un nuevo dato. 3.1.1 UART Un dispositivo que permite la transmisin y recepcin serie de informacin en modo asncrono se denomina con las siglas UART - Universal Asynchronous Receiver Transmiter- Transmisor Receptor Asncrono Universal.

Externamente la UART dispone de lneas de conexin con el microprocesador adems de las propias de transmisin y recepcin. Estas son: - bus de datos 14

lneas de direcciones, lneas de control y sincronismo

El bloque transmisor se compone de: - un decodificador de formato de datos que en funcin del nmero de bits de datos (5-8), nmero 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 transmisin. La SDU contiene el bit de start, los bits de datos, paridad y bits de stop. - Registro de mantenimiento de transmisin, THR - Registro de desplazamiento de transmisin TSR - Flag de THRE ( Transmisor Holding Register Empty o buffer de transmisin vaco) que se encuentra en un registro llamado Registro de estado de serializacin, 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 vaco), que se activa cuando el registro TSR se ha quedado vaco y que se encuentra en el registro SR.

BLOQUE DE TRANSMISION
El bloque de recepcin consta de: - registro de desplazamiento de recepcin RSR (Receiver Shift Register ), que almacena los bits de la SDU que se esperan recibir en funcin de los parmetros configurados de datos, stop y paridad - registro de mantenimiento de recepcin, 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 ledo, el flag RxRDY se desactiva automticamente. - En paralelo con la carga del nuevo dato en el registro RHR y la activacin de RxRDY, se actualizan unos bits que informan sobre los posibles errores ocurridos en la recepcin. Estos 15

bits son: overrun, framming error y parity error.

BLOQUE DE RECEPCIN
El generador de baudios programable genera la temporizacin necesaria para los bloques transmisor y receptor. La frecuencia de la seal 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 seal de reloj es la que recibe la UART un registro que almacena un determinado nmero depositado por el microprocesador un comparador cuya misin 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 comparacin, se activa la puesta a cero del contador y se genera un pulso de salida que es utilizado como seal de referencia para el bloque de transmisin y de recepcin. Dentro de cada bloque, a su vez, existe un contador mdulo 16 cuya salida acta de reloj de los registros de desplazamiento. De esta forma la seal clk_tx_rx genera los 16 ticks o pulsos de reloj por bit necesarios por el circuito de sincronizacin del bloque receptor.

16

Tbit = 16* Tclk*[registro] Vbps= Fclk/(16*[registro])

GENERADOR DE BAUDIOS
La lgica de interrupciones permite activar su lnea INTRPT si suceden los siguientes eventos la llegada de un nuevo dato el registro de transmisin se ha quedado vaco se ha producido un error cambio de estado en las lneas del modem, etc.

3.2 Transferencia serie sncrona En este tipo de transferencia, adems de los bits de datos se requiere el envo de la seal de reloj. La tcnica ms fcil 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 seal de reloj para la comunicacin serie sncrona 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 transmisin full-duplex siempre que los dos dispositivos tengan informacin que enviar simultneamente. La seal de reloj generada por el AMO slo est activa el tiempo necesario para la transmisin 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 travs de un registro de mantenimiento. Obsrvese que a diferencia de la UART, el mismo registro de desplazamiento se utiliza tanto para transmisin como recepcin. Lo mismo ocurre con el registro de mantenimiento que es accedido por la CPU. Adems de los registros anteriores, existen otros registros, dentro del interfaz, que permiten la programacin del modo de funcionamiento del mismo. Registro de control SPI (SPICR): Dispone de un conjunto de bits que permiten enmascarar o habilitar las interrupciones, seleccin del orden de transmisin/recepcin de bits (primero el LSB o primero el MSB, despus los dems), la frecuencia de reloj, la polaridad del mismo, si el dispositivo acta como amo o esclavo, etc. Registro de estado SPI(SPISR).Da informacin sobre el estado del interfaz, esto es, si el flag de peticin de interrupcin est activo o no, si se ha producido overrun, etc.

Existen otros dispositivos algo ms complejos, que al estilo de la UART, disponen de dos canales diferentes para transmisin y recepcin 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 cundo empieza el primer bit de un carcter. En general, la estructura de estos dispositivos es similar a las de la UART, e incorporan un mecanismo de identificacin de un carcter de sincronismo SYN. Este carcter de sincronismo se enva al principio de cada transmisin 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 carcter de SYN. Cuando se detecte la recepcin de un carcter 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 carcter que deposita en el registro buffer de recepcin. Este proceso continua hasta que el procesador indique al dispositivo que ya ha terminado la recepcin de caracteres o/y que el dispositivo debe estar atento para la deteccin de otro carcter de sincronismo. Estos dispositivos tienen una estructura similar a las UART, de hecho existen integrados que mezclan tanto la funcin sncrona como la asncrona (8251).

18

Registro de modo SYN Registro de control RSR RxD

BUS DE DATOS

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 travs de los registros de mantenimiento THR,RHR. Existe un registro de SYN que permite seleccionar el tipo de carcter que se emplea para la sincronizacin de las USRT. Cuando se habilita el transmisor sncrono, el carcter SYN se enva en primer lugar, de forma automtica, antes de que se enve el primer dato. Cuando se habilita el receptor de la USRT, este comienza automticamente en la fase de deteccin del carcter 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 deteccin del inicio de la trama. La configuracin del modo de funcionamiento de la USRT se especifica en los registros de control y modo. En ellos se puede configurar el nmero 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 nmero de caracteres de sincronismo que se utilizan, la habilitacin o inhabilitacin del bloque de recepcin o de transmisin, configuracin del modo bsqueda, etc. El registro de estado contiene informacin del estado interno del dispositivo, esto es, si es buffer de transmisin est vaco, si el buffer de recepcin est lleno, error de overrun, de paridad, etc.

19

También podría gustarte