5.2 Comunicacin USART (Transmisin y recepcin serie asincrnica y
sincrnica)
5.2.1 Descripcin general
La interface USART (Universal Synchronous and Asynchronous serial Receiver and Transmitter) est implementada dentro del Controlador Atmega 168 como un hardware independiente que le permite establecer una comunicacin serie full duplex . La interface provee tanto comunicacin sincrnica como asincrnica. Nosotros describiremos aqu el modo de operacin asincrnico. La interface USART es muy flexible dado que permite: - Seleccionar un gran nmero de baud rates - Transmitir caracteres entre 5 y 9 bits de longitud - Insertar en forma automtica los bits de start y stop en el carcter transmitido. - Calcular en forma automtica el bit de paridad e insertarlo en el carcter transmitido. - Comprobar automticamente si hay error de paridad en el carcter recibido.
En la figura siguiente se muestra un diagrama en bloques simplificado de la USART
2
Las lneas interrumpidas delimitan las tres partes principales de la USART: - Generador de reloj - Transmisor - Receptor Los registros de control son compartidos por todas las unidades.
5.2.2 Generador de baud rate
El Generador de reloj provee el reloj para la transmisin y recepcin. El Generador de reloj se divide en dos partes: - El registro de 16 bits de baud rate UBRRn - Un contador hacia abajo Utilizando la USART en modo asincrnico (bit U2Xn del registro UCSRnA en 0) el baud rate se determina de acuerdo a la siguiente expresin:
5.2.3 Transmisin y recepcin de datos
El transmisor posee dos unidades principales: - Un registro buffer de datos de transmisin de 8 bits (TXB) - Un registro de desplazamiento. Los datos a transmitir se escriben en primer lugar en el registro buffer. Los bits de start y stop son aadidos automticamente a los de datos en el registro de desplazamiento. La paridad es calculada automticamente y el bit correspondiente agregado en el registro de desplazamiento. El dato es luego desplazado bit a bit hacia el pin TxDn al baud rate especificado .
El transmisor posee dos banderas de estado: - UDREn (bit 5 del registro UCSRnA). Esta bandera se pone en 1 cuando el registro buffer est vaco, indicando que est listo para recibir datos y se pone en 0 cuando se escribe en el registro buffer. La CPU puede escribir en el registro buffer solo si el bit UDREn est en 1. Estando en 0 toda operacin de escritura ser ignorada. Una vez que el dato a transmitir est escrito en el registro buffer, que el transmisor est habilitado (TXENn en 1 en el registro UCSRnB) y que el registro de desplazamiento se encuentra vaco, el transmisor carga el dato en el registro de desplazamiento y a continuacin es transmitido en serie hacia el pin TXDn al baud rate seleccionado. Esta bandera genera tambin el evento de interrupcin de Vaciado del Registro de Dato (vector de interrupcin N 20) que es habilitado por el bit UDRIEn (bit 5 del registro UCSRnB). Si se maneja la transmisin por interrupcin, durante la ejecucin de la misma se debe escribir el registro UDRn para que se claree la bandera UDREn, si esto no se hace se produce una nueva interrupcin una vez finalizada.
3 - TXCn (bit 6 del registro UCSRnA). Esta bandera se pone en 1 cuando todo el cuadro del registro de desplazamiento es desplazado a la salida y cuando el registro buffer est vaco. Esta bandera genera el evento de interrupcin por Transmisin Completa (vector N 21) que es habilitado por el bit TXCIEn (bit 6 del registro UCSRnB). TXCn se pone en cero automticamente cuando se ejecuta la interrupcin por Transmisin Completa o escribiendo un 1 en la direccin del bit.
El receptor posee tambin dos unidades principales: - Un registro buffer de datos de recepcin de 8 bits (RXB) que comparte la misma direccin (UDRn) en el mapa de memoria con el registro buffer de transmisin. - Un registro de desplazamiento
El receptor de la USART se habilita poniendo un 1 en el bit RXENn (bit 4 del registro UCSRnB). El receptor empieza a recibir datos cuando detecta un bit de start vlido. Cada bit que sigue al start bit ser muestreado al baud rate elegido y desplazado dentro del Registro de Desplazamiento hasta que se recibe el primer stop bit. Cuando esto ltimo sucede, es decir cuando se completa un cuadro en el registro de desplazamiento, su contenido se mueve hacia el registro buffer de recepcin. El receptor posee la bandera RXCn (bit 7 del registro UCSRnA) que indica el estado del mismo. Cuando est en 1 significa que hay datos sin leer en el registro buffer. Esta bandera se pone en cero cuando se vaca el registro buffer de recepcin. Si la recepcin se inhabilita poniendo un 0 en el bit RXENn, el buffer se vaca y el bit RXCn se pondr en cero. Esta bandera genera el evento de interrupcin por Recepcin Completa (vector N 19) que es habilitado por el bit RXCIEn (bit 7 del registro UCSRnB). Si la recepcin se maneja por interrupcin, durante la ejecucin de la misma se debe leer el registro UDRn para que se claree la bandera RXCn, si esto no se hace se produce una nueva interrupcin una vez finalizada.
5.2.4 Descripcin de registros
UDRn Registro de Datos de I/O de la USART n.
Los dos registros comparten la misma direccin. El Registro Buffer de Datos de Transmisin (TXB) ser el destino de los datos escritos en la direccin de UDRn. La lectura de la direccin de UDRn retornar el contenido del Registro Buffer de Datos de Recpcin (RXB).
4
UCSRnA Registro de Control y Estado A de la USART n
Bit 7 RXCn: USART Receive Complete Ver pgina 8. Bit 6 TXCn: USART Transmit Complete Ver pginas 7 y 8. Bit 5 UDREn: USART Data Register Empty Ver pginas 7 y 8. Bit 4 FEn: Frame Error Este bit se pone en 1 cuando el carcter entrante en el registro buffer de recepcin present un Error de Frame al ser recibido, es decir, cuando el primer bit de Stop del carcter entrante en el registro buffer de recepcin es cero. Este bit es vlido hasta que se lee el registro buffer de recepcin. El bit FEn es cero cuando el bit de stop del dato recibido es 1. Este bit debe ponerse en 0 cuando se escribe el registro UCSRnA. Bit 3 DORn: Data OverRun Este bit se pone en 1 cuando se detecta una condicin de Data OverRun. Esto sucede cuando el registro buffer de recepcin est lleno, hay un nuevo carcter esperando en el registro de desplazamiento y un nuevo bit de Start es detectado. El bit es vlido hasta que se produce la lectura del registro buffer de recepcin. Este bit debe ponerse en 0 cuando se escribe el registro UCSRnA. Bit 2 UPEn: USART Parity Error Este bit se pone en 1 cuando el carcter entrante en el registro buffer de recepcin present un Error de Paridad al ser recibido y al mismo tiempo la Comprobacin de Paridad estaba habilitada (UPMn1=1 en el registro UCSRnC) Este bit es vlido hasta que se lee el registro buffer de recepcin. Este bit debe ponerse en 0 cuando se escribe el registro UCSRnA. Bit 1 U2Xn: Double The USART Transmission Speed En modo asincrnico controla el valor del divisor de baud rate: - U2Xn = 0 , divisor de baud rate = 16. - U2Xn = 1, divisor de baud rate = 8. Bit 0 MPCMn: Multi-processor Communication Mode Este bit habilita el modo de comunicacin Multi-procesador. No ser de aplicacin en este curso por lo tanto se pondr en 0.
UCSRnB Registro de Control y Estado A de la USART n
Bit 7 RXCIEn : RX Complete Interrupt Enable n
5 Este bit en 1 habilita la interrupcin por la bandera RXCn
Bit 6 TXCIEn Complete Interrupt Enable n Este bit en 1 habilita la interrupcin por la bandera TXCn Bit 5 UDRIEn: USART Data Register Empty Interrupt Enable n Este bit en 1 habilita la interrupcin por la bandera UDREn. Bit 4 RXEn: Receiver Enable n Este bit en 1 habilita el receptor de la USART y deshabilita el normal funcionamiento del pin RXDn como puerto. Un cero en el bit RXEn deshabilita el receptor, vaca el registro buffer de recepcin e invalida las banderas Fen, DORn y UPEn. Bit 3 TXEn: Transmitter Enable n Este bit en 1 habilita el transmisor de la USART y deshabilita el normal funcionamiento del pin TXDn como puerto. La deshabilitacin del transmisor (TXEn = 0) no se hace efectiva hasta tanto los registros buffer y de desplazamiento del receptor no contengan datos a ser transmitidos. Bit 2 UCSZn2: Character Size n El bit UCSZn2 combinado con los bits UCSZ1:0 del registro UCSRnC configura el nmero de bits de datos en el cuadro utilizado tanto en la recepcin como en la transmisin. Bit 1 RWB8n: Receive Data Bit 8 n Se utiliza en la recepcin de cuadros de 9 bits. No ser de aplicacin en este curso. Bit 0 TXB8n: Transmit Data Bit 8 n Se utiliza en la transmisin de cuadros de 9 bits. No ser de aplicacin en este curso.
UCSRnC Registro de Control y Estado C de la USART n
Bits 7:6 UMSELn1:0 USART Mode Select Estos bits seleccionan el modo de operacin de la USART como se muestra en la tabla.
Bits 5:4 UPMn1:0: Parity Mode Estos bits habilitan y configuran la generacin y comprobacin de paridad de acuerdo a la tabla siguiente.
6 Bit 3 USBS: Stop Bit Select Selecciona el nmero de bits de Stop insertados por el transmisor. El receptor ignora esta configuracin.
Bits 2:1 UCSZn1:0: Character Size Los bits UCSZn1:0 combinados con el bit UCSZn2 del registro UCSRnB configuran el nmero de bits de datos en el cuadro a transmitir y recibir
Bit 0 UCPOLn: Clock Polarity Utilizado slo en modo sincrnico. No ser de aplicacin en este curso.
UBRRnL and UBRRnH Registros de Baud Rate de la USART
Bits 15:12 Reserved Bits
Bits 11:0 UBRR11:0: Registro de Baud Rate de la USART
El registro UBRRnH contiene los cuatro bits ms significativos y el registro UBRRnL los ocho menos significativos de control de baud rate de la USART. Al escribir el registro UBRRnL se iniciar un actualizacin inmediata del preescalador de baud rate.
7 5.2.5 Diagramas de flujo de la Transmisin y de la Recepcin Inicializacin
Transmisin
Interrupciones de transmisin
TXENn = 1 TXCn = 1 NO S PROGRAMA escribe un byte en UDRn TSR vaco NO UDR carga el TSR TSR desplaza byte TXDn Auto I =1 UDREn = 1 UDRIEn = 1 DREI Vector 20 UDREn = 0 UDRn lleno UDRIE = 0 UDRn vaco NO S Se configuran los registros UCSRnA, UCSRnB, UCSRnC, UBRRnH y UBRRnL 8
Recepcin
Interrupcin de recepcin
I =1 TXCn = 1 TXCIEn = 1 TCI Vector 21 TXCn = 0 Auto TXCn = 1 NO S UDRn vaco & RXENn = 1 START Bit NO S RSR recibe caracter de RXD RXD n STOP Bit NO UDRn recibe caracter de RSR Auto I =1 RXCn = 1 RXCIEn = 1 RCI Vector 19 RXCn = 0 Leyendo UDRn RXEN = 0 NO S UDRn lleno TSR vaco PROGRAMA chequea errores FE, DOR, UPE y lee registro UDRn S