Está en la página 1de 10

Tema 6.

Comunicaciones asíncronas (UART's)

El receptor/transmisor asíncrono universal (Universal Asynchronous


Receiver/Transmitter, UART) es el dispositivo clave de un sistema de comunicaciones
serie. Su función principal es convertir los datos serie a paralelos cuando se trata de
datos recibidos (de entrada) y de convertir datos paralelos a serie para transmisión (de
salida). En la figura 6.3.1. se muestra el esquema general con los bloques básicos de un
UART. Se distinguen los registros de datos, tanto de recepción como de transmisión y
sus correspondientes registros de desplazamiento (RxD, TxD), los registros de control
de transmisión y recepción y señales de sincronización para comienzo de la
transmisión/recepción (RTS, CTS). Aunque la transmisión es realmente síncrona,
tradicionalmente se les ha llamado asíncrona para hacer referencia al hecho de que
existe flexibilidad para la transmisión de la siguiente palabra de datos.

CLK

R/W
Chip UART Control
Select Transmisión

Registro Registro TxD


D0 Transmisión de
D1 Buffer
de datos Desplazamiento
D2
Bus RTS
D3 Control Transmisión
D4
Control Recepción
D5 de CTS
D6
Registro Registro
D7
Datos Recepción de
D8 RxD
de datos Desplazamiento

Control
Recepción

Figura 6.3.1. Diagrama de bloques de un Receptor/Transmisor Asíncrono Universal

Los UART's también suministran otran funciones como las señales handshaking
necesaria para interfaces RS-232-C. Entre las aplicaciones básicas de la UART se puede
citar a las comunicaciones con el PC o con PDA’s, transmisiones de audio, vídeo,
juegos por infrarrojos o bluetooth (teléfonos móviles), y a matrices de diodos para
paneles de atención al cliente, vallas publicitarias, etc. Ejemplos de UART's son el
MC6850 de Motorola, llamado ACIA (Asynchronous Communication Interface
Adapter) y el i8256 de Intel, por citar los más conocidos.

La familia M16C/60 dispone de dos UART's, cada una con su propio temporizador y
con dos modos de operación: modo síncrono serie y modo asíncrono serie (modo UART
propiamente dicho). El M16C/62 tiene tres UART’s. En ambos sistemas de desarrollo,
siempre la UART 1 está dedicada a la comunicación del microcontrolador con el
programa monitor. No es aconsejable su uso.
Los parámetros que se han de definir para el correcto diseño de un interfaz de
comunicaciones usando un UART son los siguientes:

- Sincronismo entre el receptor y el transmisor.


- Codificación de los datos.
- Prioridad en el envío de los bits.
- Tasa de envío de datos.
- Señales handshaking.
- Señales eléctricas de los valores lógicos.

La sincronización en la transmisión de los datos se lleva a cabo colocando en primer


lugar un bit de comienzo (start bit), después se envían los datos (data bits) usualmente
entre 5 y 9 bits empezando siempre por el bit menos significativo, LSB, y por último, se
envía un bit de parada (stop bit). Los UART's que trabajan con 8 bits añaden un bit de
detección de error o bit de paridad. Esto se realiza secuencialmente hasta completar la
transmisión. En la figura 6.3.2. se muestra el esquema de transmisión del M16C/60.

1 o 2 B IT S
M A R C A D E P A R A D A
L S B M S B

7 a 9 B IT S D E D A T O S

E S P A C IO

B IT D E B IT D E
C O M IE N Z O P A R ID A D

Figura 6.3.2. Esquema de transmisión/recepción asíncrona serie de los UART's del


M16C.

La codificación puede ser cualquier código binario. El más utilizado es el código ASCII
(American Standard Code for Information Interchange) que utiliza 7 bits para codificar
96 caracteres imprimibles y 32 caracteres de control.

Los niveles eléctricos para definir valores lógicos se suelen llamar marcas (1-lógico)
(mark) y espacios (0-lógico) (space). Cuando no se realiza transmisión se mantiene el
estado de marca (llamado también estado iddle). El comienzo de la transmisión se
realiza con el estado de espacio o 0-lógico (figura 6.3.2).

La tasa de transmisión se mide en baudios o número de bits que se transmiten por


segundo (bps). (J.M. Baudot inventó el código de 5 bits para el sistema telegráfico
francés, convirtiéndose posteriormente en un estándar de las comunicaciones
telegráficas). En principio puede ser cualquier valor, pero las tasas estándares son: 110,
150, 300, 600, 900, 1.200, 2.400, 4.800, 9.600, 14.400, 19.200, 28.800, 31.250, 38.400
y 57.800. El M16C tiene un registro generador de la tasa de bits (UiBRG) de 8 bits para
cada una de las UART´s. La tasa de baudios viene dada como:
fi
baudios =
16 * (n + 1)

donde fi es la frecuencia de reloj (tanto interno como externo (pin CLKi)) y n puede ser
cualquier valor entre 0016 y FF16, que coincide con el contenido del registro UiBRG de 8
bits (dirección de memoria 03A116 y 03A916). En la tabla 6.3.1. se muestran los valores
de n en hexadecimal para la frecuencias de reloj de 10 MHz para conseguir algunas de
las tasas estándares de transmisión. Adaptar la tabla 6.3.1 para vuestra frecuencia de
reloj.
n (10 MHz.) Tasa de baudios (bps)
8116 4807
4016 9615
2A16 14534
2016 18939
1516 28409
1316 31250

Tabla 6.3.1. Tasa de transmisión para distintos valores de n y para una frecuencia de
reloj de 10 MHz.

Registros de control de la transmisión/recepción serie

En este apartado se hace referencia a los registros de control, especificando para tres
UART’s, pero si el sistema de desarrollo sólo tiene dos, no son válidas las opciones
comentadas para la UART2, pero sí que serán válidas las opciones de las UART0 y 1
salvo casos excepcionales. Se recomienda consultar los manuales del M16C/60.

El registro del modo de operación de transmisión/recepción (UiMR, i=0,1) permite


configurar a cada UART en modo de E/S serie con los bits SMD0, SMD1 y SMD2.
También se pueden seleccionar el tipo de reloj utilizado, interno o externo (pin CLKi),
la longitud de los bits de parada, la paridad y su tipo, par o impar. En la figura 6.3.3 se
muestra de forma detallada este registro.
7 (Dirección: 03A016 a 03A816) 0

UiMR SLEP PRYE PRY STPS CKDIR SMD2 SMD1 SMD0

SMD2, 1, 0: Bits de selección del modo E/S serie. El modo síncrono se selecciona con 001,
y con 100,101,110 se selecciona el modo asíncrono de longitud de transferencia de
7, 8 y 9 bits,respectivamente.

CKDIR: Bit de selección del tipo de reloj. 0 para reloj interno y 1 para reloj externo.

STPS: Bit de selección de la longitud del bit de parada. Inválido para modo síncrono,
y para modo asíncrono 0 se refiere a 1 bit de parada y 1 a dos bits de parada.

PRYE, PRY: Bits de habilitación de paridad y tipo de paridad, respectivamente. Inválido en modo
síncrono y para modo asíncrono: 0X sin paridad, 10 paridad impar y 11 paridad par.

SLEP: Bit de selección modo reposo (sleep). Debe ser cero para modo síncrono. En modo
asíncrono se selecciona con 1

Figura 6.3.3. Registro del modo de operación de las UART’s.

La figura 6.3.4 muestra el registro de control de la transmisión/recepción de la UARTi

7 (Dirección: 03A4H, 03ACH, 037CH) 0


UiC0 UFORM CKPOL NCH CRD TXEPT CRS CLK1 CLK0

Después de un reset, se inicializa con 08H. Se tiene permiso de lectura y escritura., excepto escritura de TXEPT

CLK1, 0: Bits de selección del reloj para la tasa de transmisióne de UiBRG. 00 para f1 o f2
si es el M16C/62PU, 01 para f8 y 10 para f32. 11 no válido 0.
CRS: Bit de selección de la función CTS/RTS siempre que se haya puesto CRD a cero. Con 0 se
selecciona CTS y con 1 se selecciona RTS.
TXEPT: Bit que indica si el registro de transmisión está vacío. Si es 1 no hay datos e indica
que la transmisión se ha completado. No permiso de escritura, lo ignora.
CRD: Bit de habilitación de la función CTS/RTS. Si es 0 se habilita y si es 1 se deshabilita
y los pines asociados P6_0, P6_4 y P7_3 se pueden usar como puertos de E/S.
NCH: Bit de selección de la salida de datos. Si es 0, los pines de salida TXDi y SCLi, son salidas
CMOS, y si es 1 son drenador abierto de canal N. TXD2 son drenador fuente de canal N.
CKPOL: Bit de selección de la polaridad de CLK. Si es 0, los datos se transmiten en el flanco
de bajada y se reciben en el flanco de subida, o al revés si es 1.
UFORM: Bit de selección del formato de transmisión Si es 0 se transmite primero el bit LSB, y
si es 1 el bit MSB. Sólo es válido para modo serie síncrono o modo UART de 8-bits. En
modo I2Cse debe poner a 1 y en modo UART de 7 o 9 bits a 0.
Por ejemplo: mov.b #10H, U0C0 ; f1 o f2, sin función CTS/RTS, salidas CMOS, con transmisión
flanco de bajada del reloj, transmitiendo primero el bit LSB.

Figura 6.3.4. Registro de control de la transmisión/recepción de las UART’s

La figura 6.3.5 muestra el registro generador de la tasa de transmisión, en la que se


especifican algunas restricciones como escribir en él con la instrucción MOV, pero no
mientras se está transmitiendo o recibiendo datos, y siempre después de haber
seleccionado los valores de los bits CLK1, 0 del reloj f de cuenta (00 para f1 o f2 si es el
M16C/62PU, 01 para f8 y 10 para f32. 11 no válido) del registro UiC0.

(Dirección: UiBRG-> 03A1H, 03A9H, 0379H, i = 0..2)


7 0

UiBRG

Registro Generador de la tasa de transmisión, n. No se debe escribir en este registro


cuando se esté transmitiendo o recibiendo. Se debe escribir con la instrucción MOV,
y después de seleccionar los bits CLK1 y CLK0 del registro UiC0.
Por ejemplo: mov.b #81h, U0BRG ;tasa transmisión/recepción. Para 10

Figura 6.3.5. Registro generador de la tasa de transmisión, UiBRG (Bit Rate


Generador).

(Dirección: UiTB-> 03A3H, 03ABH, 037BH, i = 0..2)


7 0

UiTB

Registro del Buffer de transmisión. Cuando se lee su contenido es indeterminado y


cuando se escribe se pone a cero.
Práctica de Laboratorio: Transmisión con la UART0. 2 horas

Objetivos: - Aprender el funcionamiento de una UART en modo transmisión.


- Analizar los parámetros característicos de la transmisión serie
asíncrona.

Especificación de la práctica
Configurar la UART0 para enviar datos periódicamente por la línea TxD0 (modo
transmisión asíncrono). Con la ayuda del osciloscopio se debe verificar dicha
transmisión (figura 6.5.2). En la figura 6.5.3 se muestra el diagrama de flujo de la
transmisión. Puedes hacer uso del código mostrado a continuación o inicializar
libremente los parámetros de la transmisión.

Transmite

UART0 TxD0
P6_3 (35)

Figura 6.5.2. Diagrama de bloques para la transmisión con UART0.

Inicio:Transmision

NO SÍ
BufferVacio ? Transmitir U0TB

Figura 6.5.3 Diagrama de flujo de la transmisión con UART0.

Inicialización:

mov.b #45h U0MR ;modo asíncrono de transmisión, de 8 bits, con 1 bit de parada y
;paridad impar con frecuencia del reloj interno.
mov.b #10h, U0C0 ;f1 como reloj interno (f2 para M16C/62PU), sin función CTS/RTS,
;puesto que el receptor (osciloscopio) no envía señal de ready
mov.b #00h, UCON ;señales CTS/RTS por el mismo pin. Las demás funciones son
;inválidas. Válido también #04h, ¿Por qué?
mov.b #81h, U0BRG ;tasa transmisión/recepción. Para 10 MHz es 4870Hz. f1/(16(n+1)).

Activar modo transmisión:

or.b #01h, U0C1 ; habilita transmisión UART0.

Transmitir el dato:
mov.b #55h, U0TB ;transmite 01010101 para facilitar su observación en el osciloscopio.
;marca(1), inico(0), LSB(1),0,1,0,1,0,1, MSB(0), paridad(1).parada (1)
Para realizar una correcta transmisión, se debe esperar que el buffer de transmisión esté vacío, antes de
enviar el siguiente dato. Por ello, realiza con un temporizador una espera de, por ejemplo, 4 ms. Aunque,
lo correcto es chequear el bit de fin de transmisión del registro U0C1, en cuyo caso, no se apreciará en el
osciloscopio los bit de marca, o utilizar el bit de señalización de que el buffer de transmisión se ha
vaciado.

BufferVacio:
btst 1, U0C1
jnc BufferVacio
mov.b #55h, U0TB ;transmite 01010101
jmp BufferVacio

BufferVacio:
btst TXEPT_U0C0
jnc BufferVacio
mov.b #55h, U0TB ;transmite 01010101
jmp BufferVacio

Contesta a esta cuestión: ¿Es posible ver en el depurador el contenido de lo que se transmite (contenido
del registro UiTB)?.
Práctica de Laboratorio: Recepción con la UART0. 4 horas

Objetivos: - Aprender el funcionamiento de una UART en modo recepción.


- Analizar los parámetros característicos de la recepción serie asíncrona.

Especificación de la práctica

Configurar una UART para enviar datos periódicamente por la línea TxDi (modo
transmisión asíncrono) y otra UART para recibirlos (línea RxDi). Con la ayuda del
osciloscopio se debe verificar la recepción. También, se puede usar algún dispositivo
para verificarlo (led, altavoz, motor paso a paso, display, …). Además, se puede
chequear la paridad de los datos recibidos y si ha habido errores en la
transmisión/recepción (overrun error, framing error, parity error, error-sum flag).
Nota: se debe puentear P6_0 con P6_4 y P6_3 con P6_6 si usas UART0 para
transmisión y UART1 para recepción. Si usas la UART2 comprueba las señales a
puentear. (figura 6.6.2). La figura 6.6.3 muestra el diagrama de flujo de la transmisión-
recepción.

Transmite Recibe
TxD0 RxD
UART0 P6_3 (35) P7 1 (29) UART2
RTS CTS
P6_0 (38) P7 3 (27)

Figura 6.6.2. Diagrama de bloques para la transmisión-recepción (UART0-UART2).


Inicio:Transmision/
Rrecepción

NO
BufferVacio ?

Transmitir U0TB

Recepción U2RB
(Interrupción Recepción)


Errores?

NO

Fin

Figura 6.6.3 Diagrama de flujo de la transmisión-recepción.

Inicialización transmisión UART0:

mov.b #45h U0MR ;modo asíncrono de transmisión, de 8 bits, con 1 bit de parada y
;paridad impar con frecuencia del reloj interno.
mov.b #00h, U0C0 ;f1 como reloj interno, CON función CTS, ahora el receptor ;(otra
UART) envía señal de ready RTS. Válido #04h
mov.b #00h, UCON ;señales CTS/RTS por el mismo pin. Las demás funciones son
;inválidas.
mov.b #??h, U0BRG ;tasa transmisión/recepción.

Activar modo transmisión:

or.b #01h, U0C1 ; habilita transmisión UART0.

Inicialización recepción UART2:

mov.b #45h U2MR ;iguales parámetros que la transmisión.


mov.b #00h, U2C0 ;f1 como reloj interno, CON función RTS. Válido #04h
mov.b #00h, UCON ;señales CTS/RTS por el mismo pin. Los demás bits son inválidos.
mov.b #??h, U2BRG ;igual tasa transmisión/recepción.
fclr I
mov.b #03h, S2RIC ;prioridad 3.
fset I

Activar modo recepción:

or.b #04h, U2C1 ; habilita recepción UART2.


El dato transmitido por la UART0 se almacena en el registro U2RB, siendo los bits más significativos de
este registro los de detección de errores, con 0 no error , y 1 error:
Bit 15 es el bit o flag de error suma (SUM); bit 14 es el bit de error paridad (PER); bit 13 es el bit de
error framming o error de los bits de parada (FER); y bit 12 es el bit de error producido cuando los datos
son escritos sin haber sido leídos, error de sincronización, overrun, (OER);

Tratamiento de los errores overrun:


error:
btst OER_U2RB
jeq mensaje_error

mensaje_error
mov.w #0FFFFh, R0
jmp.w inicio

Bibliografía.

[Luecke, 2005] Luecke, J., Analog and Digital Circuits for Electronic Control
System Applications, Embedded Technology Series, Elsevier, 2005 (Cap.8. Data
Communications).
[Colomar, 1993] Colomar, E., Garrigues, J., Ballester, F.J., Y Roig, D., Diseño y
programación del mp 68000 y periféricos. SPU. Valencia, 1993 (Cap. 9).
Manuales del fabricante. Disponibles en el laboratorio en formato pdf.

También podría gustarte