Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Practica4 UART PDF
Practica4 UART PDF
CLK
R/W
Chip UART Control
Select Transmisión
Control
Recepción
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:
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
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).
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.
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.
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
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.
UiBRG
UiTB
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)
Inicio:Transmision
NO SÍ
BufferVacio ? Transmitir U0TB
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)).
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
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)
NO
BufferVacio ?
SÍ
Transmitir U0TB
Recepción U2RB
(Interrupción Recepción)
SÍ
Errores?
NO
Fin
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.
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.