Está en la página 1de 29

__________________________________________________________________________ITSP

USART del AVR


8.1 INTRODUCCIN
El Transmisor/Receptor Universal Sncrono y Asncrono (USART) es un dispositivo altamente flexible para comunicacin serial. Las principales caractersticas son: Operacin Full Duplex (Registros independientes de recepcin y transmisin serial). Operacin Asncrona y Sincrona. Operacin sincrona Maestro-Esclavo. Generador de alta resolucin de Baud rate. Soporte de frames con 5, 6, 7, 8 o 9 bits de datos y 1 o 2 bits de stop. Generacin de paridad Par o Impar y Chequeo soportado por hardware. Deteccin de datos OverRun. Deteccin de framing de error. Filtrado de ruido incluid, deteccin de bit de inicio falso y filtro pasa-bajo ideal. Tres interrupciones separadas: Finalizacin de Tx, Registro de datos vaco Tx, Recepcin Completa Rx. Modo de comunicacin Multiprocesador. Modo de comunicacin de doble velocidad Asncrona. A continuacin de muestra el diagrama a bloques del transmisor USART. Registros accesibles de I/O del CPU y pines de I/O se muestran en negritas.

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP

Los recuadros punteados en el diagrama de bloques muestran las tres partes principales del USART (listadas de arriba hacia abajo): Generador de reloj, transmisor y receptor. Los registros de control son compartidos por todas las unidades. La generacin de reloj lgica consiste de sincronizacin lgica para la entrada de reloj externa usada por la operacin de esclavo sincrnica. El pin XCK (reloj de transferencia) solamente se usa para el modo de transferencia sincrnica. El transmisor consiste de un solo buffer de escritura, un registro de corrimiento serial, el generador de paridad y el control lgico para manejar los diferentes formatos de frames seriales. El buffer de escritura permite una continua transferencia de datos sin ningn retardo entre frames. El receptor es la parte ms compleja del mdulo USART debido a su reloj unidad de recuperacin de datos. La unidad de recuperacin es usada para la recepcin de datos asncronos. En resumen para la unidad de recuperacin, el receptor incluye un chequeador de paridad, control lgico, un registro de corrimiento y un buffer de recepcin de dos niveles (UDR). El receptor soporta el mismo formato del frame como el transmisor, y puede detectar un error de frame, y errores de paridad y de overrun de datos. Documento traducido de la hoja de datos del ATmega32
2

__________________________________________________________________________ITSP Generacin de Reloj La generacin de reloj lgica genera la base de reloj para el transmisor y receptor. El USART soporta cuatro modos de operacin de reloj: Asncrono normal, asncrono de doble velocidad, Modo sncrono maestro y Modo sncrono esclavo. El bit UMSEL en el registro C de control de estado del USART (UCSRC) selecciona entre operacin asncrona y sincrona. La doble velocidad (en el modo asncrono solamente) es controlado por U2X encontrado en el registro UCSRA. Cuando se usa el modo sncrono (UMSEL = 1), el registro de direccin de datos para el pin XCK (DDR_XCK) controla si la fuente de reloj es interna (Modo Maestro) o externa (Modo Esclavo). El pin XCK esta solamente activo cuando se usa el modo sncrono. La figura siguiente muestra el diagrama a bloques de la generacin de reloj lgica.

Descripcin de seales: txclk Reloj transmisor (Seal interna). rxclk Reloj base del receptor (Seal interna). xcki Pin de entrada de XCK (Seal interna). Usada para operacin de esclavo sncrono. xcko Salida de reloj al pin XCK (Seal interna). Usada para operacin maestro sncrono. fosc Frecuencia del XTAL (Reloj del sistema). Generacin del Reloj Interno Generador de Baud Rate. La generacin del reloj interno se usa para los modos de operacin maestro asncrono y sncrono. La descripcin se refiere a la siguiente figura. El registro de Baud Rate USART (UBRR) y el contador de bajada conectado a su funcin como un preescalador programable o generador de baud rate. El contador de bajada, corriendo a la frecuencia del reloj (fosc), se carga con el valor de UBRR cada vez que el contador llega a cero o cuando el registro UBRRL se escribe. Un ciclo de reloj se genera cada vez que el contador alcanza el cero. Este ciclo es el generador de baud rate a la salida del reloj (= fosc/(UBRR+1)). El transmisor divide la salida de reloj Documento traducido de la hoja de datos del ATmega32
3

__________________________________________________________________________ITSP del generador de baud rate por 2, 8 o 16 dependiendo del modo. La salida del generador de baud rate se usa directamente para el reloj del receptor y unidad de recuperacin de datos. Sin embargo, la unidad de recuperacin usa un estado de maquina que usa 2, 8 o 16 estados dependiendo del modo colocado por el estado de los bits UMSEL, U2X y DDR_XCK. La tabla siguiente contiene las ecuaciones para calcular el baud rate (en bits por segundo) y para calcular el valor de UBRR para cada modo de operacin usando una fuente de reloj generada internamente.

BAUD Baud rate (en bits por segundo, bps). fosc Frecuencia de reloj del sistema oscilador. UBRR contiene los registros UBRRH y UBRRL, (0 - 4095). Operacin de Doble Velocidad (U2X) La razn de transferencia puede ser duplicada ajustando el bit U2X en el UCSRA. Ajustando este bit solamente tiene efecto sobre la operacin asncrona. Colocar este bit a cero cuando se usa la operacin sincrona. Ajustando este bit reducir el divisor del baud rate de 16 a 8, efectivamente el doble de la razn de transferencia para la comunicacin asncrona. Sin embargo note que el receptor solamente en este caso usara la mitad del nmero de muestras (reduce de 16 a 8) por cada dato muestreado y el reloj de recuperacin, y por consiguiente ms precisin para el ajuste del baud rate y el sistema de reloj son requeridos cuando este modo se usa. Para el transmisor no existen inconvenientes. Reloj externo El reloj externo se usa para el modo de operacin sncrono en esclavo. Esta descripcin se refiere a la figura siguiente. La entrada de reloj externo del pin XCK es muestreada por un registro de sincronizacin para minimizar el cambio de la meta-estabilidad. La salida del registro de sincronizacin debe pasar a travs de un detector de flanco antes que pueda usarse en el transmisor y receptor. Este proceso introduce dos periodos de reloj de retardo del CPU y por

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP consiguiente la frecuencia de reloj externa mxima XCK esta limitada por la siguiente ecuacin: Note que fosc depende de la estabilidad de la fuente de reloj del sistema. Es por consiguiente recomendado adicionar algn margen para evitar posibles perdidas de datos debido a variaciones de la frecuencia. Operacin de reloj sncrono Cuando se usa el modo sncrono (UMSEL = 1), el pin XCK se usara ya sea como entrada de reloj (esclavo) o salida de reloj (maestro). La dependencia entre el flanco de reloj y el muestreo de datos o el cambio de datos es el mismo. El principio bsico es que la entrada de datos (en RxD) es muestreada en el flanco del reloj opuesto a XCK o en el flanco de la salida de datos (TxD) cuando se cambia. El bit UCPOL de UCRSC selecciona cual transicin del reloj XCK se utiliza para el muestreo de datos y cual se usa para el cambio de datos. Como se muestra en la figura siguiente, cuando UCPOL es cero el dato ser cambiado en la transicin de subida XCK y se muestrea en la transicin de bajada XCK. Si UCPOL es puesto a uno, el dato ser cambiado a la transicin de bajada XCK y se muestrea en la transicin de subida XCK.

Formatos del frame Un frame serial se define como un carcter de bits de datos con bits de sincronizacin (bits de inicio y de stop), y opcionalmente un bit de paridad para el chequeo de errores. El USART acepta todas las 30 combinaciones de los siguientes formatos de frame validos: 1 bit de inicio. 5, 6, 7, 8 o 9 bits de datos. Bit de paridad par, impar o ninguna. 1 o 2 bits de stop. Un frame inicia con el bit de inicio seguido por el bit de datos menos significativo. Y los prximos bits de datos, son sucesivos, finalizando con el bit ms significativo, siendo un total de nueve. Si se habilita, el bit de paridad se le inserta despus de los bits de datos, Documento traducido de la hoja de datos del ATmega32
5

__________________________________________________________________________ITSP antes de los bits de stop. Cuando un frame se completa se transmite, puede seguirse directamente un nuevo frame, o la lnea de comunicacin puede ajustarse para permanecer en estado libre (alto). La siguiente figura ilustra las posibles combinaciones de los formatos del frame. Los bits dentro de corchetes son opcionales.

St Bit de inicio, siempre en bajo. (n) Bits de datos (0 a 8). P Bit de paridad. Puede ser impar o par. Sp Bit de Stop, siempre en alto. IDLE Ninguna transferencia en la lnea de comunicacin (RxD o TxD). Una lnea LIBRE debe de estar en alto. El formato de frame usado por el USART es ajustado a los bits de UCSZ2:0, UPM1:0 y USBS en UCSRB y UCSRC. El receptor y el transmisor usan el mismo ajuste. Note que cuando se cambia el ajuste de estos bits se corromper todas las comunicaciones de salida para ambos receptor y transmisor. Los bits del tamao del carcter del USART (UCSZ2:0) seleccionan el nmero de bits de datos dentro del frame. Los bits del modo de paridad del USART (UCSZ2:0) seleccionan y ajustan el tipo del bit de paridad. La seleccin entre uno o dos bits de stop se hace por el bit de seleccin de bit de stop del USART (USBS). El receptor ignora el segundo bit de stop. Un error de frame (FE) solamente ser detectado en los casos donde el primer bit de stop es cero. Clculo del bit de paridad. El bit de paridad se calcula haciendo una or-exclusiva a todos los bits de datos. Si la paridad impar se usa, el resultado de la or exclusiva es ivertida. La relacin entre el bit de paridad y los bits de datos es como sigue:

Peven Bit de paridad usando paridad par. Podd Bit de paridad usando la paridad impar. dn Bit de datos n del carcter. Si se usa, el bit de paridad esta localizado entre el ltimo bit de datos y el primer bit de stop del frame serial. Documento traducido de la hoja de datos del ATmega32
6

__________________________________________________________________________ITSP Inicializacin del USART El USART tiene que ser inicializado antes que cualquier comunicacin tome lugar. El proceso de inicializacin consiste normalmente de ajustar el baud rate, el formato de frame y habilitar el transmisor o el receptor dependiendo del uso. Para una operacin de interrupcin que conduzca el USART, las banderas de interrupcin globales debern ser limpiadas (y las interrupciones globales deshabilitadas) cuando se realiza la inicializacin. Antes de la reinicializacin cuando se cambie el baud rate u el formato del frame, tenga cuidado de que no se estn usando transmisiones de salida durante el periodo que los registros se cambien. La bandera TXC puede usarse para checar si el transmisor ha completado su transferencia, y la bandera de RCX puede usarse para checar que no exista un dato sin leerse en el buffer receptor. Note que la bandera TXC debe de limpiarse antes de cada transmisin (antes que el UDR se escriba) si se usa para este propsito. El siguiente cdigo simple de ejemplo de inicializacin del USART meuestra ona funcin en ensamblador y una en C y son iguales en cuestin de funcionalidad. Los ejemplos asumen una operacin asncrona usando el polling (ninguna interrupcin esta habilitada) y un formato de frame fijo. El baud rate esta dado como un parmetro en la funcin. Para el cdigo ensamblador, el parmetro de baud rate se asume que se almacena en los registros r17:r16. Cuando la funcin escribe al registro UCSRC, el bit de URSEL (MSB) debe ser ajustado debido a que comparte la localidad de I/O de UBRRH y UCSRC. Una rutina ms avanzada de inicializacin puede ser que incluya el formato del frame como parmetros, la deshabilitacin de las interrupciones y as sucesivamente. Sin embargo, muchas aplicaciones usan un ajuste fijo de Baud rate y los registros de control, y para este tipo de aplicaciones el cdigo de inicializacin puede ser colocado directamente en la rutina main, o estar combinada con el cdigo de inicializacin para otros mdulos de I/O.

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP

Transmisin de Datos El Transmisor del USART El transmisor del USART es habilitado ajustando el bit Habilitacin de Transmisin (TXEN) en el registro UCSRB. Cuando el transmisor es habilitado, la operacin normal del puerto del pin TxD es overridden por el USART dando la funcin de transmisor de salida serial. El baud rate, modo de operacin y el formato del frame deben establecerse antes que inicie cualquier transmisin. Si la operacin sincrona es utilizada, el reloj en el pin XCK ser overridden y usada como transmisin del reloj. Enviando Frames de 5 a 8 bits de datos Una transmisin de datos es iniciada cargando al buffer del trasmisor con los datos a ser transmitidos. El CPU puede cargar al buffer de trasmisin con solo escribir en la localidad de I/O de UDR. Los datos almacenados en el buffer de transmisin sern movidos al registro de corrimiento cuando este registro este listo para enviar un nuevo frame. El registro de corrimiento es cargado con un nuevo dato si se encuentra en el estado libre (ninguna transmisin de salida) o inmediatamente despus del ltimo bit de stop del frame previo transmitido. Cuando el registro de corrimiento es cargado con un nuevo dato, transferir un frame completo a una razn dada por el registro del Baud, el bit U2X o por XCK dependiendo del modo de operacin. Documento traducido de la hoja de datos del ATmega32
8

__________________________________________________________________________ITSP El siguiente ejemplo del cdigo muestra una funcin simple de transmisin del USART en polling la bandera del registro de datos vaco (UDRE). Cuando se usan frames con menos de ocho bits, los bits ms significantes escritos en el UDR son ignorados. El USART tiene que estar inicializado antes que la funcin se utilice. Para el cdigo ensamblador, el dato a ser enviado se asume que esta almacenado en el registro R16. la funcin simple espera que el buffer trasmita para que quede vaco checando la bandera UDRE, antes que se cargue un nuevo dato para ser transmitido. Si la interrupcin de registro de datos vaco se utiliza, la rutina de interrupcin escribe el dato en el buffer transmisor.

Enviando Frames con 9 bits de datos Si los caracteres de 9 bits son usados (UCSZ = 7), el noveno bit deber ser escrito al bit TXB8 en el UCSRB antes que el byte bajo del carcter se escriba en UDR. El siguiente cdigo de ejemplo muestra una funcin para transmitir caracteres de 9 bits. Para el cdigo en ensamblador, los datos a ser enviados se asumen que estn almacenados en los registros R17:R16.

Documento traducido de la hoja de datos del ATmega32

__________________________________________________________________________ITSP

El noveno bit puede usarse para indicar la direccin de un frame cuando se usa la comunicacin en modo multi procesador o para otro tipo de protocolo como por ejemplo la sincronizacin. Bandera del Transmisor e Interrupciones El trasnmisor USART tiene dos banderas que indican u estado: Registro de Datos Vaco (UDRE) y Transmisin Completada (TXC). Ambas banderas pueden usarse para generar interrupciones. La bandera del registro de datos vaca (UDRE) indica si el buffer del transmisor esta listo para recibir nuevos datos. Este bit se pone a uno cuando el buffer del transmisor esta vaco., y se limpia cuando el buffer del transmisor contiene datos para ser transmitidos que an no se han movido al registro de corrimiento. Por compatibilidad para dispositivos futuros, siempre escriba a este bit un cero cuando se escriba al registro UCSRA. Cuando el bit de habilitacin de interrupcin del registro de datos vaco (UDRIE) en el UCSRB se escriba a uno, la interrupcin del registro de datos vaco del USART ser ejecutada tan pronto como UDRE pase a uno (siempre y cuando las interrupciones globales estn habilitadas). UDRE se limpia escribiendo en UDR. Cuando se usa una Documento traducido de la hoja de datos del ATmega32
10

__________________________________________________________________________ITSP transmisin de datos dirigida por interrupcin, la rutina de interrupcin de registro vaco debe ya sea escribir un nuevo dato a UDR para limpiar UDRE o deshabilitar la interrupcin de datos de registro vaco, de lo contrario una nueva interrupcin puede ocurrir una vez que la rutina de interrupcin termine. El bit de la bandera de la transmisin completada (TXC) se coloca a uno cuando el frame entero en el registro de corrimiento de transmisin ha sido enviado serialmente y ningn dato actualmente se encuentra en el buffer de transmisin. El bit de la bandera TXC automticamente se limpia cuando una interrupcin de trasmisin completa se ejecute, o puede ser borrado escribiendo a uno en esa localidad del bit. La bandera TXC es til para interfaces de comunicacin half-duplex (como el estndar RS485), donde una transmisin debe entrar a modo de recepcin y se libere el bus de comunicacin inmediatamente despus de completar la transmisin. Cuando el bit de habilitacin de interrupcin de transmisin completa en el UCSRB se ponga a uno, la interrupcin de transmisin completa del USART ser ejecutada cuando la bandera TXC llegue a ponerse a uno (siempre y cuando las interrupciones globales estn habilitadas). Cuando la interrupcin de transmisin completa se use, la rutina de del manejo de interrupcin no tiene que limpiar la bandera TXC, esto se realiza automticamente cuando la interrupcin se ejecute. Generador de Paridad El generador de paridad calcula el bit de paridad para el frame de datos serial. Cuando el bit de paridad esta habilitado (UPM1 = 1), el control lgico del transmisor inserta el bit de paridad entre el ltimo bit de datos y el primer bit de stop del frame que se enva. Deshabilitando el Transmisor La deshabilitacin del transmisor (ajustando el TXEN a cero) no llevara a cabo hasta que transmisiones de salida o pendientes se hayan completado, por ejemplo, cuando el registro de corrimiento de trasmisin y el registro del buffer de transmisin no contengan datos para ser trasmitidos. Cuando se deshabilite, el transmisor no enviara ms datos pro el pin TxD. El Receptor del USART Recepcin de Datos El receptor del USAR se habilita escribiendo en el bit de habilitacin de recepcin (RXEN) en el registro UCSRB a uno. Cuando el receptor se habilita, la operacin normal del pin de RxD es overridden por el USART y se comporta como receptor de serial de entrada. El Baud Rate, el modo de operacin y el formato del frame deben de ajustarse antes que cualquier recepcin serial se lleve a cabo. Si se usa la operacin sincrona, el reloj en el pin XCK se usara como transferencia de reloj. Recibiendo frames de 5 a 8 bits de datos El receptor inicia la recepcin de datos cuando detecta un bit de inicio valido. Cada bit que siga al bit de inicio ser muestreado a un baud rate o al reloj XCK, y se correr dentro del registro de corrimiento del receptor hasta que el primer bit de stop de un Documento traducido de la hoja de datos del ATmega32
11

__________________________________________________________________________ITSP frame se reciba. Un segundo bit de stop ser ignorado por el receptor. Cuando el primer bit de stop sea recibido, por ejemplo, un frame serial completo este presente en el registro de corrimiento del receptor, el contenido de registro de corrimiento ser movido dentro del buffer del receptor. El buffer del receptor puede entonces leerse por lectura de la localidad del registro de I/O UDR. El siguiente cdigo ejemplo muestra una funcin de recepcin simple del USART basada en la tcnica de polling la bandera de recepcin completa (RXC). Cuando se usan frames con menos de ocho bits, los bits ms significativos de datos ledos en el UDR sern enmascarados a cero. El USART tiene que ser inicializado antes que la funcin pueda usarse.

La funcin simplemente espera que el dato este presente en el buffer de recepcin checando la bandera RXC antes que se de lectura al buffer, retornando el valor. Recibiendo Frames con 9 bits de datos Si se usan caracteres de 9 bits (UCSZ = 7) el noveno bit debe leerse del bit RXB8 en el UCSRB antes que se lean los bits bajos del UDR. Esta regla aplica para las banderas de estado de Error de Frame, Dato Sobrescrito y Error de Paridad (FE, DOR y PE). Lea el estado de UCSRA, entonces los datos de UDR. Leyendo la localidad de I/O de UDR cambiara el estado del buffer de recepcin FIFO (Cola) y consecuentemente los bits de TXB8, FE, DOR y PE, los cuales estn todos almacenados en la FIFO, y cambiaran. El siguiente ejemplo de cdigo muestra una funcin simple de recepcin del USART que maneja los bits de los caracteres de 9 bits los bits de estado.

Documento traducido de la hoja de datos del ATmega32

12

__________________________________________________________________________ITSP

El ejemplo de la funcin de recepcin lee todos los registros de I/O dentro del archivo de registros antes que cualquier clculo se realice. Esto da una utilizacin optima del

Documento traducido de la hoja de datos del ATmega32

13

__________________________________________________________________________ITSP buffer de recepcin ya que la localidad de lectura del buffer estar libre para aceptar un nuevo datos tan pronto como sea posible. Bandera de Recepcin Completa e Interrupcin El receptor del USART tiene una bandera que indica el estado del receptor. La bandera de recepcin completa (RXC) indica si existen datos presentes sin leerse en el buffer de recepcin. Esta bandera esta en uno cuando existen datos sin haberse ledo en el buffer de recepcin y esta en cero cuando el buffer de recepcin esta vaco (por ejemplo, no contiene ningn dato sin leerse). Si el receptor esta deshabilitado (RXEN = 0), el buffer receptor ser flushed y consecuentemente el bit RXC llega a se cero. Cuando el bit de habilitacin de interrupcin de recepcin completa (RXCIE) en el UCSRB es puesto a uno, la interrupcin de recepcin completa del USART ser ejecutada tan pronto como la bandera RXC se ponga a uno (siempre y cuando las interrupciones globales estn habilitadas). Cuando se usa la recepcin de datos dirigida por interrupcin, la rutina de recepcin completa debe leer el dato recibido de UDR para limpiar la bandera de RXC, de lo contrario una nueva interrupcin puede ocurrir una vez que la rutina de interrupcin termina. Bandera de Error en la Recepcin El receptor USART tiene tres banderas de error: Error de frame (FE), Dato Sobre escrito (DOR) y Error de Paridad (PE). Todas pueden accesarse leyendo el UCSRA. Algo similar para las banderas de Error es que ellas estn localizadas juntas en el buffer de recepcin con el frame para las cuales ellas indican el estado del error. Debido a que las banderas de error son almacenadas, el UCSRA deber de leerse antes que el buffer de recepcin (UDR), ya que leyendo la localidad de I/O del UDR cambia la localidad de lectura del buffer. Otra similaridad para las banderas de error es que ellas no pueden ser alteradas por software poniendo una escritura e la localidad de la bandera. Sin embargo, todas las banderas deben ponerse a cero cuando el UCSRA es escrito para incrementar la compatibilidad de futuras implementaciones del USART. Ninguna de las banderas de Error pueden generar interrupciones. La bandera de error del frame (FE) indica el estado del primer bit de stop del prximo frame legible almacenado en el buffer de recepcin. La bandera de error del frame es cero cuando el bit de stop fue correctamente ledo (como uno), y la bandera de error del frame ser uno cuando el bit de stop haya sido incorrecto (cero). Esta bandera puede ser usada para detectar condiciones de fuera de sincronizacin, detectando condiciones de ruptura y manejo de protocolo. La bandera de error de frame no ser afectada por los ajustes del bit USBS en el UCSRC ya que el receptor ignora todo, excepto para los primeros bits de stop. Por compatibilidad con futuros dispositivos, siempre ponga a cero este bit cuando se escriba a UCSRA. La bandera de Datos Sobre escritos (DOR) indica la perdida de datos debido a la condicin de buffer de recepcin lleno. Una sobre escritura de datos ocurre cuando el buffer del receptor esta lleno (dos caracteres), y esta un nuevo carcter esperando en el registro de corrimiento del receptor, y un nuevo bit de inicio es detectado. Si la bandera DOR es puesta a uno entonces hubo una o ms perdidas de frames seriales entre el ltimo frame ledo del UDR y el prximo frame ledo de UDR. Para compatibilidad con Documento traducido de la hoja de datos del ATmega32
14

__________________________________________________________________________ITSP futuros dispositivos, siempre escriba a este bit a cero cuando escriba en UCSRA. La bandera DOR se limpia cuando el frame recibido fue exitosamente movido del registro de corrimiento al buffer de recepcin. La bandera de Error de Paridad (PE) indica que el prximo frame en el buffer de recepcin tuvo un error de paridad cuando se recibi. Si el chequeo de paridad no esta habilitado el bit PE siempre leer cero. Para compatibilidad con futuros dispositivos, siempre escriba a este bit a cero cuando escriba en UCSRA. Checador de Paridad El checador de paridad esta activo cuando el bit del modo de paridad alto del USART (UPM1) es puesto a uno. El tipo de paridad ser ejecutado (par o impar) al seleccionarse el bit UPM0. Cuando es habilitado, el checador d eparidad calcula la paridad de los bits de datos en frames de entrada y compara el resultado con el bit de paridad del frame serial. El resultado del chequeo es almacenado en el buffer de recepcin junto con el dato recibido y los bits de stop. La bandera de Error de Paridad (EP) puede entonces ser leda por software para checar si el frame tuvo un error de paridad. El bit PE es puesto a uno en el prximo carcter que es ledo del buffer de recepcin que tuvo un error de paridad cuando se recibi y el checador de paridad fue habilitado en ese punto (UPM1 = 1). Este bit es valido hasta que el buffer del receptor (UDR) sea ledo. Deshabilitando el Receptor En contraste con el transmisor, la deshabilitacin del receptor ser inmediata. Los datos de las recepciones que estn en proceso sern perdidos. Cuando se deshabilita el receptor (por ejemplo, RXEN se coloca a cero) la operacin de recepcin no se ejecutara ms en el pin del puerto de RxD. El buffer receptor FIFO ser flushed cuando el receptor se deshabilita. El resto de los datos en el buffer sern perdidos. Flushing el Buffer del Receptor El buffer del receptor FIFO ser flushed cuando el receptor se deshabilita, por ejemplo, el buffer vaciara su contenido. Datos no ledos sern perdidos. Si el buffer tiene que ser flushed durante la operacin normal, debido a una condicin de error, lea la localidad de I/O del UDR hasta que la bandera RxC este limpia. El siguiente cdigo ejemplo muestra como flush el buffer del receptor.

Documento traducido de la hoja de datos del ATmega32

15

__________________________________________________________________________ITSP

Recepcin de Datos Asncrono El USART incluye una recuperacin de reloj y una unidad de recuperacin de datos para el manejo en la recepcin de datos asncronos. La lgica de recuperacin de reloj es usada para la sincronizacin del reloj del baud rate interno generadote los frames seriales asncronos de entrada en el pin RxD. La lgica de recuperacin de datos muestrea y pasa al filtro pasa-bajos por cada bit, mejorando la inmunidad al ruido del receptor. El rango de operacin de la recepcin asncrona depende de la precisin del reloj del baud rate interno, la razn de los frames de entrada y el tamao del frame en nmero de bits. Recuperacin del Reloj Asncrono La lgica de recuperacin de reloj sincroniza el reloj interno con los frames seriales de entrada. La figura siguiente ilustra el proceso de muestreo del bit de inicio de un frame de entrada. La razn de muestreo es 16 veces el baud rate para el modo normal, y 8 veces el baud rate para el modo de Doble Velocidad. Las flechas horizontales ilustran la variacin en la sincronizacin debido al proceso de muestreo. Note el tiempo de variacin ms largo cuando se usa el modo de doble velocidad (U2X = 1). Las muestras denotadas en cero son muestras hechas cuando la lnea RxD esta libre (por ejemplo, no existe actividad en la comunicacin).

Documento traducido de la hoja de datos del ATmega32

16

__________________________________________________________________________ITSP Cuando la unidad de recuperacin del reloj detecta una transicin de alto (lnea libre) a bajo (inicio) en la lnea RxD, la deteccin de la secuencia del bit de inicio comienza. La muestra 1 denota la primer muestra a cero como se muestra en la figura. La lgica de recuperacin del reloj usa entonces las muestras 8, 9 y 10 para el modo normal y las muestras 4, 5 y 6 para el modo de doble velocidad (se indican con nmeros de la muestra dentro de casillas en la figura), para decidir si el bit de inicio vlido se recibi. Si dos o ms de estas tres muestras tienen niveles lgicos altos, el bit de inicio se rechaza como si fuera un pico de ruido y el receptor comienza su verificacin hasta la siguiente transicin de alto a bajo. Sin embargo, un bit de inicio valido se detecta, la lgica de recuperacin d reloj se sincroniza y el de recuperacin de datos comienza. El proceso de sincronizacin se repite por cada bit de inicio. Recuperacin de Datos Asncrona Cuando el reloj receptor se sincroniza con el bit de inicio, la recuperacin de datos comienza. La unidad de datos de recuperacin usa un estado de maquina que tiene 16 estados por cada bit en el modo normal y 8 estados por cada bit en el modo de doble velocidad. La figura siguiente ilustra el muestreo de los bits de datos y el bit de paridad. Cada una de las muestras esta dada por un nmero que es igual al estado de la unidad de recuperacin.

La decisin del nivel lgico del bit recibido se toma por una votacin por mayora de los valores lgicos de las tres muestras en el centro del bit recibido. Las muestras del centro se enfatizan en la figura por nmeros encerrados en casillas. El proceso de mayora de votacin se realiza como sigue: si dos o de las tres muestras tiene niveles lgicos en bajo, el bit recibido se registra como un cero lgico. Este proceso de votacin por mayora acta como un filtro pasa-bajo para seales de entrada en el pin RxD. El proceso de recuperacin se repite hasta que se completa el frame recibido. Incluyendo el primer bit de stop. Note que el receptor solamente usa el primer bit de stop de un frame. La figura siguiente muestra el muestreo del bit de stop y los comienzos de un posible bit de inicio del prximo frame.

Documento traducido de la hoja de datos del ATmega32

17

__________________________________________________________________________ITSP

La misma votacin por mayora se realiza para el bit de stop como se hace para los otros bits del frame. Si el bit de stop se registra para tener un valor de 0 lgico, la bandera de error de frame (FE) ser puesta a uno. Una nueva transicin de alto a bajo indica el bit de inicio de un nuevo frame que puede venir justo despus de los ltimos bits usados para la votacin por mayora. Para el modo normal de velocidad, la primer muestra en nivel bajo puede ser como l punto marcado (A) de la figura anterior. Para el modo de doble velocidad el primer nivel bajo deber ser desplazado a (B). (C) marca un bit de stop de la longitud completa. Al principio de la deteccin del bit de inicio influye en el rango de operacin del receptor. Rango Operacional Asncrona El rango de operacin del receptor depende de la diferencia entre el bit recibido y el baud rate generado internamente. Si el transmisor esta enviando frames muy rpidos o a velocidad muy baja, o el baud rate internamente generado en el receptor no es similar a la frecuencia base, el receptor no ser capaz de sincronizar los frames con el bit de inicio. La siguiente ecuacin puede usarse para calcular la razn de la razn de datos entrantes y el baud rate interno del receptor.

D Suma del tamao del carcter y la paridad (D = 5 a 10 bits). S Muestras por bit. S = 16 para el modo normal de velocidad y S = 8 para el modo a doble velocidad. SF Nmero de la primer muestra usada por mayora de votos. SF = 8 para valocidad ormal y SF = 4 para el modo de doble velocidad. SM Nmero de muestra media usada por mayora de votos. SM = 9 para velocidad normal y SF = 4 para el modo de velocidad doble. Rslow es la razn de la razn de datos entrante ms baja que puede ser aceptada en relacin al baud rate del receptor. Rfast en la razn de la razn de datos entrante ms alta que puede ser aceptada en relacin al baud rate del receptor.

Documento traducido de la hoja de datos del ATmega32

18

__________________________________________________________________________ITSP Las tablas siguientes listan el mximo error de baud rate para el receptor que puede ser tolerado. Note que el modo de velocidad normal tiene una mayor tolerancia de variaciones del baud rate. Table 61. Recommended Maximum Receiver Baud Rate Error for Normal Speed Mode (U2X =0).

Table 62. Recommended Maximum Receiver Baud Rate Error for Double Speed Mode (U2X = 1)

Las recomendaciones del error mximo en el receptor del baud rate fue hecha bajo la suposicin que el transmisor y receptor igualmente divide el error mximo total. Existen dos posibles fuentes para el error de baud rate en el receptor. El reloj del sistema del receptor (XTAL) siempre tiene menos inestabilidad sobre el rang de la fuente de voltaje y el rango de temperatura. Cuando se usa un cristal para generar el sistema de reloj, esto rara vez es un problema, pero para un resonador el reloj del sistema puede diferir ms del 2% dependiendo de la tolerancia del resonador. La segunda fuente de reloj es ms controlable. El generador de baud rate no puede siempre hacer una divisin exacta de la frecuencia del sistema para obtener el baud Documento traducido de la hoja de datos del ATmega32
19

__________________________________________________________________________ITSP rate deseado. En este caso un valor en UBRR que da un error bajo aceptable puede usarse si es posible. Accesando a los Registros UBRRH/UCSRC Los registros UBRRH y UCSRC comparten la misma localidad de I/O. por consiguiente algunas consideraciones especiales debern ser tomadas en cuenta cuando se accesa a esta localidad de I/O. Acceso a Escritura Cuando se realiza un acceso a escritura a esta localidad de I/O, el bit alto del valor escrito, el bit del Registro de Seleccin del USART (URSEL), controla cual de los dos registros ser escrito. Si URSEL es cero durante una operacin de escritura, el valor de UBRRH ser actualizado. Si URSEL es uno, el valor de UCSRC ser actualizado. El siguiente cdigo de ejemplo muestra como accesar a los dos registros.

Como ilustra el cdigo ejemplo, el acceso a escritura de los dos registros no se afectan al compartir la misma localidad de I/O

Documento traducido de la hoja de datos del ATmega32

20

__________________________________________________________________________ITSP Acceso a Lectura Al realizar la operacin de acceso a lectura a los registros UBRRH y UCSRC es una operacin ms compleja. En la mayora de las aplicaciones, es rara vez necesario leer cualquiera de estos registros. El acceso a lectura, se controla por una secuencia de tiempo. Leyendo la localidad de I/O una vez regresa el contenido del registro UBRRH. Si la localidad del registro fue leda en un ciclo de reloj del sistema previo, leyendo el registro en el actual ciclo de reloj retornara el contenido de UCSRC. Note que la secuencia de tiempo para la lectura de UCSRC es una operacin atmica. Las interrupciones deben ser controladas (por ejemplo, deshabilitando las interrupciones globales) durante la operacin de lectura. El siguiente cdigo de ejemplo muestra como leer el contenido del registro UCSRC.

El ejemplo del cdigo en ensamblador regresa el valor de UCSRC en r16. Leyendo el contenido de UBRRH no es una operacin atmica y por consiguiente puede leerse como un registro ordinario, tan pronto como la instruccin previa no accese a la localidad del registro. Ejemplos del Ajuste del Baud Rate Para un cristal estndar y frecuencias resonadoras, el baud rate usado ms comn para operaciones asincronas puede ser generado usando los ajustes del UBRRH. Los valores de UBRR los cuales producen un baud rate con una diferencia de menos del 0.5% de baud rate establecido, estn en negritas en la tabla. Razones de error mayores

Documento traducido de la hoja de datos del ATmega32

21

__________________________________________________________________________ITSP son aceptables, especialmente para frames seriales largos. Los valores de error son calculados usando la siguiente ecuacin:

Documento traducido de la hoja de datos del ATmega32

22

__________________________________________________________________________ITSP

REGISTROS DEL USART

Registro de Datos de E/S del USART UDR

El buffer de registro de datos de transmisin del USART y el buffer de registro de datos de recepcin del USART comparten la misma direccin de E/S referida como Registro de Datos del USART o UDR. El buffer de registro de transmisin de datos (TXB) ser el destino para los datos escritos en la localidad del registro UDR. Leyendo la localidad del registro UDR retornara el contenido del buffer de registro de datos de recepcin (RXB). Para los caracteres de 5-, 6- o 7- bits los bits altos no usados sern ignorados por el transmisor y se ajustaran a cero por el receptor. El buffer de transmisin solamente se puede escribir cuando la bandera UDRE en el registro UCSRA esta en alto. Los datos escritos a UDR cuando la bandera UDRE no esta en alto, seran ignorados por el transmisor del USART. Cuando el dato se escribe al buffer de transmisin, y el transmisor es habilitado, el transmisor cargara los datos

Documento traducido de la hoja de datos del ATmega32

23

__________________________________________________________________________ITSP dentro del registro de corrimiento del transmisor cuando el registro de corrimiento este vaco. Entonces los datos sern serialmente transmitidos por el pin TxD. El buffer de recepcin consiste de una FIFO (Fila de Primero en Entrar, Primero en Salir) de dos niveles. La FIFO cambiara su estado cuando el buffer de recepcin se accesa. Debido a su conducta del buffer receptor, no use instrucciones de lectura de modificacin (SBI y CBI) en esta localidad. Tenga cuidad cuando use instrucciones a bits (SBIC o SBIS), ya que estas tambin cambian el estado de la FIFO.

Registro A de Estado y Control del USART

Bit 7 RXC: Recepcin Completa del USART Este bit de bandera se coloca a uno cuando existen datos sin leerse en el buffer de recepcin y se limpia cuando el buffer de recepcin esta vaco (por ejemplo, que no contenga datos sin leerse). Si el receptor se deshabilita, el buffer del receptor ser limpiado y consecuentemente el bit RXC llegara a ser cero. La bandera RXC puede usarse para generar una interrupcin de recepcin completa. Bit 6 TXC: Transmisin Completa del USART Este bit de bandera se pone a uno cuando el marco entero en el registro de corrimiento de transmisin ha sido recorrido y no existe ningn bit actualmente presente en el buffer de transmisin (UDR). El bit de bandera TXC automticamente se limpia cuando la interrupcin de transmisin completa se ejecuta, o puede limpiarse escribiendo a uno en su localidad. La bandera TXC puede generar una interrupcin completa de transmisin. Bit 5 UDRE: Registro de Datos Vaco del USART La bandera UDRE indica si el buffer de transmisin (UDR) esta listo para recibir un nuevo dato. Si UDRE es uno, el buffer esta vaco, y por consiguiente listo para escribirse. La bandera UDRE puede generar una interrupcin de registro de datos vaco. UDRE se pone a un despus de un reset para indicar que el transmisor esta listo. Bit 4 FE: Error de Frame Este bit se pone a uno si el prximo carcter en el buffer de recepcin tuvo un error de marco cuando se recibi. Por ejemplo, cuando el primer bit de stop del prximo carcter es cero. Este bit es valido hasta que el buffer de recepcin (UDR) se lea. El bit FE es cero cuando el bit de stop de los datos recibidos es uno. Siempre ponga a cero este bit cuando escriba a UCSRA. Bit 3 DOR: Datos Sobre escritos Este bit se pone a uno si la condicin de datos sobrescritos se detecta. Un dato sobrescrito ocurre cuando el buffer del receptor esta lleno (dos caracteres), y esta un nuevo carcter esperando en el registro de corrimiento del receptor, y un nuevo bit de Documento traducido de la hoja de datos del ATmega32
24

__________________________________________________________________________ITSP inicio se detecta. Este bit es valido hasta que el buffer del receptor (UDR) se lea. Siempre ponga este bit a cero cuando escriba a UCSRA. Bit 2 PE: Error de Paridad Este bit se pone a uno si el prximo carcter en el buffer receptor tuvo un error de paridad cuando se recibe y el chequeo de paridad esta habilitado en ese punto (UPM1 = 1). Este bit es valido hasta que el buffer del receptor se lea (UDR). Siempre ponga este bit a cero cuando escriba a UCSRA. Bit 1 U2X: Doble Velocidad de Transmisin del USART Este bit solamente tiene efecto para la operacin asncrona. Escriba este bit a cero cuando se usa la operacin sincrona. Escribiendo este bit a uno reducir el divisor del baud rate de 16 a 8 doblando efectivamente la razn de transferencia para comunicacin asncrona. Bit 0 MPCM: Modo de Comunicacin Multi-procesador Este bit habilita el modo de comunicacin multi-procesador. Cuando el bit MPCM se escribe a uno, todos los marcos de entrada recibidos por el receptor del USART que no contengan la direccin sern ignorados. El transmisor no es afectado por los ajustes de MPCM.

Registro B de Estado y Control del USART

Bit 7 RXCIE: Habilitacin de Interrupcin de RX Completa Escribiendo a este bit un uno habilita la interrupcin en la bandera RXC. Una interrupcin de recepcin completa del USART ser generada solamente si el bit RXCIE esta a uno, la bandera de interrupcin global en SREG en uno y el bit RXC en UCSRA a uno. Bit 6 TXCIE: Habilitacin de Interrupcin de TX Completa Escribiendo a este bit un uno habilita la interrupcin en la bandera TXC. Una interrupcin de transmisin completa del USART ser generada solamente si el bit TXCIE esta a uno, la bandera de interrupcin global en SREG en uno y el bit TXC en UCSRA a uno. Bit 5 UDRIE: Habilitacin de Interrupcin de Registro de Datos Vaco del USART Escribiendo a uno este bit habilita la interrupcin en la bandera UDRE. Una interrupcin de registro de datos vaco ser generada solamente si el bit UDRIE esta a uno, la bandera de interrupcin global en SREG en uno y el bit UDRE en UCSRA a uno.

Documento traducido de la hoja de datos del ATmega32

25

__________________________________________________________________________ITSP Bit 4 RXEN: Habilitacin del Receptor Escribiendo este bit a uno habilita el receptor del USART. El receptor sobrescribir la operacin normal del puerto para el pin RxD cuando se haya habilitado. Deshabilitando el receptor limpiara el buffer del receptor invalidando las banderas FE, DOR y PE. Bit 3 TXEN Habilitacin del Transmisor Escribiendo este bit a uno habilita el transmisor del USART. El transmisor sobrescribir la operacin normal del puerto para el pin TxD cuando se haya habilitado. Deshabilitando el transmisor (escribiendo TXEN a cero) no tendr efecto hasta que transmisiones actuales o pendientes se completen, por ejemplo, cuando el registro de corrimiento del transmisor y el registro del buffer del transmisor no contengan datos a ser transmitidos. Cuando se deshabiliten, el transmisor no sobrescribir mas al puerto TxD. Bit 2 UCSZ2: Tamao del Carcter Los bits UCSZ2 combinados con el bit UCSZ1:0 en UCSRC ajustan el nmero de bits de datos (tamao del carcter) en un marco de uso del receptor y transmisor. Bit 1 RXB8: 8vo Bit de Datos de Recepcin RXB8 es el noveno bit de datos del carcter recibido cuando se operan marcos seriales con 9 bits de datos. Debe ser ledo antes de la lectura de los bits bajos de UDR. Bit 0 TXB8: 8vo Bit de Datos de Transmisin TXB8 es el noveno bit de datos del carcter transmitido cuando se operan marcos seriales con 9 bits de datos. Debe ser escrito antes de la escritura de los bits bajos de UDR. Registro C de Estado y Control del USART

El registro UCSRC comparte la misma localidad de E/S del Registro UBRRH. Bit 7 URSEL: Registro de Seleccin Este bit selecciona entre accesar al registro UCSRC o el registro UBRRH. Se lee como uno cuando se lee UCSRC. El URSEL debe ser uno cuando se escribe a UCSRC. Bit 6 UMSEL: Seleccin del Modo del USART Este bit selecciona entre el modo de operacin asncrono o sncrono.

Documento traducido de la hoja de datos del ATmega32

26

__________________________________________________________________________ITSP
UMSEL 0 1 Modo Operacin Asncrona Operacin Sincrona

Bits 5:4 UPM1:0. Modo de Paridad Estos bits habilitan y ajustan el tipo de generacin de paridad y chequeo. Si se habilita, el transmisor automticamente generara y enviara la paridad de los bits de datos transmitidos dentro de cada marco. El receptor generara un valor de paridad para los datos de entrada y compararlo con los ajustes de UPM0. Si una igualdad se detecta, la bandera PE en UCSRA ser puesta a uno.

UPM1 0 0 1 1

UPM0 0 1 0 1

Modo de Paridad Deshabilitado Reservado Paridad Par Habilitada Paridad Impar Habilitada

Bit 3 USBS: Seleccin del Bit de Stop Este bit selecciona el nmero de bits de stop para ser insertados en el transmisor. El receptor ignora estos ajustes.
USBS 0 1 Bit(s) de Stop 1 bit 2 bits

Bits 2:1. Tamao del Carcter La combinacin de bits UCSZ1:0 con el bit UCSZ2 en UCSRB ajustan el nmero de bits de datos (tamao del carcter) en un marco del receptor o transmisor en uso.

UCSZ2 0 0 0

UCSZ1 0 0 1

UCSZ0 0 1 0

Tamao del Caracter 5 bits 6 bits 7 bits

Documento traducido de la hoja de datos del ATmega32

27

__________________________________________________________________________ITSP
0 1 1 1 1 1 0 0 1 1 1 0 1 0 1 8 bits Reservado Reservado Reservado 9 bits

Bit 0 UCPOL: Polaridad de Reloj Este bit se usa para el modo sincronico solamente. Escriba a este bit en cero cuando el modo asincrono se use. El bit UCPOL ajusta la relacin entre el cambio de datos de salida y el muestreo de datos de entrada, y el reloj sncrono (XCK).
UCPOL 0 1 Datos Cambiados Transmitidos (Salida del pin TxD) Transicin Positiva XCK Transicin Negativa XCK Datos Muestreados Recibidos (Entrada al pin RxD) Transicin Negativa XCK Transicin Positiva XCK

Registro del Baud Rate del USART UBRRL y UBRRH

El registro comparte la misma localidad de E/S como el registro UCSRC. Bit 15 URSEL: Seleccin de Registro Este bit selecciona entre accesar al registro UBRRH o el registro UCSRC. Se lee como cero cuando se lee UBRRH. El URSEL debe ser cero cuando se escribe a UBRRH. Bit 14:12 Bits Reservados Estos bits estn reservados para uso futuro. Por compatibilidad con dispositivos futuros, estos bits deben escribirse a cero cuando se escriba en UBRRH. Bits 11:0 UBRR11:0. Registro del Baud Rate del USART

Documento traducido de la hoja de datos del ATmega32

28

__________________________________________________________________________ITSP Este es un registro de 12 bits el cual contiene el baud rate del USART. El UBRRH contiene los cuatro bits ms significativos, y el UBRRL contiene los 8 bits menos significativos del baud rate del USART. Para transmisiones actuales para el transmisor y receptor sern corrompidas si el baud rate se cambia. Escribiendo UBRRL disparara una actualizacin inmediata del preescalador del baud rate.

Documento traducido de la hoja de datos del ATmega32

29

También podría gustarte