Vista previa del material en texto
MICROCONTROLADOR ATmega328P USART USART Organización de la USART USART ➢ La USART se compone de 3 bloques principales: ▪ Generación de reloj ▪ Transmisión de datos ▪ Recepción de datos ➢ También tiene los registros UCSRA, UCSRB y UCSRC, con estos registros se realiza la configuración y se conoce el estado de la USART (UCSR, USART Configuration and State Register). ➢ Los bloques de transmisión y recepción son independientes entre sí. ➢ El bloque generador de reloj proporciona las señales de sincronización a los otros 2 bloques. Generación de Reloj y Modos de Operación ➢ CLK1: reloj utilizado para transmisión/recepción asíncrona o bien para transmisión síncrona. ➢ CLK2: es el reloj utilizado para recepción síncrona Generación de Reloj y Modos de Operación ➢ Registro UBRR (USART Baud Rate Register): es la base para la generación de la señal CLK1. Se compone de 2 registros de 8 bits (12 de los 16 bits son utilizados). ➢ El Generador de Baud Rate tiene un contador descendente cuyo valor máximo está en el registro UBRR. El contador recarga su valor máximo cuando llega a 0 o cuando se escribe en UBRR[L]. Una señal interna es conmutada cuando el contador es 0. La frecuencia base para CLK1 es la frecuencia del oscilador dividida entre UBRR + 1. ➢ Dependiendo del modo de operación de la USART, esta señal interna es dividida entre 2, 8 ó 16. Generación de Reloj y Modos de Operación La USART tiene cuatro modos de operación: ➢ Normal asíncrono: la frecuencia de CLK1 es la frecuencia base entre 16. ➢ Asíncrono a doble velocidad: la frecuencia de CLK1 es la frecuencia base entre 8, el doble del modo normal. ➢ Síncrono como maestro: La frecuencia de CLK1 es la frecuencia base entre 2, se pueden alcanzar velocidades más altas al transmitir la señal de reloj. ➢ Síncrono como esclavo: En este caso, el microcontrolador está funcionando como un receptor síncrono, por lo que también recibe la señal de reloj en XCK. La señal externa debe sincronizarse con el oscilador interno. También se puede configurar el flanco en el que se obtienen los datos. La señal CLK2 queda disponible como el reloj para recepción síncrona. Generación de Reloj y Modos de Operación ➢ La selección del modo de operación se realiza en los registros de configuración y estado de la USART. ➢ Bit UMSEL (registro UCSRC): operación síncrona (UMSEL = ‘1’), y asíncrona (UMSEL= ‘0’). ➢ Bit U2X (bit 1 del registro UCSRA): modo normal asíncrono (U2X = ‘0’) y el modo asíncrono a doble velocidad (U2X = ‘1’). Generación Reloj - Cálculo del Baud Rate Generación Reloj - Cálculo del Baud Rate Al calcular el valor de UBRR se obtiene un número real, por ello, al redondear a entero se produce un error en el Baud Rate. El porcentaje de error se puede cuantificar con la expresión: un error en el rango de ± 5 % no afecta la comunicación Generación Reloj - Cálculo del Baud Rate Ejemplo: Se planea una transmisión asíncrona a 9600 bps con un oscilador de 1 MHz. Calcular el valor del registro UBRR y obtener el porcentaje de error, para una transmisión asíncrona normal y a doble velocidad. Generación Reloj - Cálculo del Baud Rate En el modo normal asíncrono se tiene que: Redondeando UBRR a 5, se calcula el baud rate: El porcentaje de error generado es de: Generación Reloj - Cálculo del Baud Rate Para el modo asíncrono a doble velocidad se tienen los siguientes resultados: Redondeando UBRR a 12, se tiene que: El porcentaje de error generado es de: El error se reduce drásticamente al usar el modo a doble velocidad. Generación Reloj - Cálculo del Baud Rate Algunos valores a emplear en el registro UBRR para razones de transmisión típicas, con diferentes osciladores y sus correspondientes porcentajes de error. Generación Reloj - Modo Síncrono En el modo síncrono esclavo la USART recibe la señal de reloj en la terminal XCK, esta señal es sincronizada con el oscilador interno, requiriendo algunos ciclos de reloj para ello. Por esta razón, la frecuencia de la señal de reloj externa debe estar acotada por: Generación Reloj - Modo Síncrono En operaciones síncronas se debe definir el flanco de reloj en el cual son ajustados los datos (cuando se está transmitiendo) o en el que son muestreados (cuando se está recibiendo), esto se determina con el bit UCPOL (bit 0 del registro UCSRC). En la tabla se muestran los flancos de activación (polaridad), dependiendo del valor del bit UCPOL (Clock Polarity). Transmisión de Datos Los datos a ser transmitidos deben ser escritos en el Registro de Datos de la USART (UDR, USART Data Register). Con UDR realmente se hace referencia a dos registros ubicados en la misma dirección, un registro sólo de escritura para transmitir datos y un registro sólo de lectura para recibirlos. Transmisión de Datos ➢ El bloque de transmisión de datos requiere de una habilitación: bit TXEN=‘1’ (bit 3 - registro UCSRB). ➢ La transmisión de un dato inicia cuando éste se escribe en el registro UDR. Previamente se deben configurar los parámetros: velocidad, número de bits por dato, bit de paridad y número de bits de paro. ➢ Un registro de desplazamiento se encarga de la conversión de paralelo a serie. Transmisión de Datos ➢ El fin de la transmisión de un dato se indica con la bandera TXC=‘1’ (bit 6 - registro UCSRA). ➢ Esta bandera puede sondearse por software o se puede configurar al recurso para que genere una interrupción. Si se utiliza sondeo, la bandera se limpia al escribirle un 1 lógico. ➢ No es posible escribir en el registro UDR mientras hay una transmisión en proceso. Por ello, además del uso de la bandera TXC es posible usar la bandera UDRE (bit 5 - registro UCSRA). ➢ UDRE: USART Data Register Empty. Transmisión de Datos ➢ La bandera UDRE está en alto cuando el buffer transmisor (registro de desplazamiento) está vacío, por lo tanto, indica que es posible iniciar con una nueva transmisión. ➢ Esta bandera puede sondearse por software o configurar el recurso para que genere una interrupción. ➢ El estado de UDRE cambia automáticamente, dependiendo de la actividad que ocurra en el registro UDR. ➢ En la práctica se emplea TXC o UDRE. Usar ambas banderas puede complicar la estructura de un programa, porque indican eventos similares cuando se transmite una sucesión de datos. Al finalizar con la transmisión de un dato, el buffer transmisor queda vacío. Transmisión de Datos ➢ El bit de paridad se genera por hardware conforme los datos se van transmitiendo. Éste queda disponible para ser transmitido después de los bits del dato. Recepción de Datos El bloque para la recepción de datos tiene un Registro de Datos de la USART (UDR), el cual es usado para recibir datos seriales por medio de la USART. La recepción serial es llevada a cabo con un registro de desplazamiento que realiza la conversión de serie a paralelo. Recepción de Datos ➢ El receptor debe habilitarse para que en cualquier momento pueda recibir un dato. La habilitación se realiza con el bit RXEN=‘1’ (bit 4 - registro UCSRB). ➢ El dato recibido es ubicado en el registro UDR. La indicación de que hay un dato disponible se realiza con la bandera RXC=‘1’ (Bit 7 del registro UCSRA). ➢ Esta bandera puede sondearse por software o configurar al recurso para que genere una interrupción. La lectura del registro UDR limpia a la bandera y libera al registro, quedando disponible para recibir un nuevo dato. Recepción de Datos ➢ El cálculo del bit de paridad y su validación, comparándola con el valor del bit de paridad recibido, se realizan por hardware. Si existe un error, la bandera UPE=‘1’ (bit 2 - registro UCSRA). UPE: USART Parity Error. ➢ El hardware es capaz de indicar la ocurrencia de otros 2 errores durante la recepción, con la puesta en alto de banderas. ▪ Bandera FE (bit 4 – registro UCSRA): Un error de marco (Frame Error) se debe a la existencia de un bit de paro con un nivel bajo y se indica con la bandera FE. ▪Bandera DOR (bit 3 - registro UCSRA. DOR, Data Over Run): El otro error es debido a un exceso de datos por recepción, ocurre cuando el registro UDR tiene un dato listo para su lectura, el registro de desplazamiento contiene otro dato y hay un nuevo bit de inicio, este error se indica con la bandera DOR. Registros USART Registros UCSR Registros UCSR Bit 7 - RXC0: (USART Receive Complete) Indica dato disponible por recepción. Puede generar una interrupción. Se limpia al leer al registro UDR0. Bit 6 - TXC0: (USART Transmit Complete) Indica que se ha concluido con la transmisión de un dato (el buffer de salida está vacío). Puede generar una interrupción, con su atención se limpia automáticamente a la bandera. También puede limpiarse si se reescribe un 1 lógico en TXC0. Bit 5 - UDRE0: (USART Data Register Empty) Indica que el registro UDR0 de transmisión está vacío (es posible transmitir un dato). También puede generar una interrupción. Su estado se ajusta automáticamente, de acuerdo con la actividad en el registro UDR0. Bit 4 - FE0: (Frame Error) Esta bandera se pone en alto cuando el bit de paro en el buffer receptor es 0, indicando un error de marco. Se mantiene con ese valor hasta que se haga la lectura del registro UDR0. Registros UCSR Bit 3 - DOR0: (Data OverRun) Indica un exceso de datos por recepción, esto significa que el registro receptor (UDR0) tiene un dato disponible, el registro de desplazamiento contiene otro dato y se tiene un nuevo bit de inicio. Cuando la bandera es puesta en alto, mantiene su valor hasta que se haga la lectura del registro UDR0. Bit 2 - PE0: (Parity Error) Se pone en alto cuando el bit de paridad generado no coincide con el bit de paridad recibido. Se mantiene con ese valor hasta que se haga la lectura del registro UDR0. Bit 1 - U2X0: (Double the USART Transmission Speed) En operaciones asíncronas, este bit debe ponerse en alto para configurar el modo asíncrono a doble velocidad. Bit 0 - MPCM0: (Multi-processor Communication Mode) Habilita un modo de comunicación entre multiprocesadores, bajo un esquema maestro-esclavos y datos de 9 bits. Registros UCSR Bit 7 - RXCIE0: (RX Complete Interrupt Enable) Habilita la interrupción por recepción de un dato (RXC0 en alto). Bit 6 - TXCIE0: (TX Complete Interrupt Enable) Habilita la interrupción por finalización de transmisión de un dato (TXC0 en alto). Bit 5 - UDRIE0: (USART Data Register Empty Interrupt Enable) Habilita interrupción cuando el buffer transmisor está vacío (UDRE0 en alto). Bit 4 - RXEN0: (Receiver Enable) RXEN0=‘1’ para poder recibir datos a través de la USART, con esto, la terminal RXD ya no se puede utilizar como entrada o salida de propósito general. Registros UCSR Bit 3 - TXEN0: (Transmitter Enable) TXEN0=‘1’ para poder transmitir datos a través de la USART, con esto, la terminal TXD ya no se puede utilizar como entrada o salida de propósito general. Bit 2 - UCSZ02: (Character Size) Junto con los bits UCSZ0[1:0]del registro UCSR0C definen el tamaño de los datos a enviar o recibir (ver Tabla). Bit 1 - RXB80: (Receive Data Bit 8 ) Durante la recepción de datos de 9 bits, los 8 bits menos significativos se reciben en el registro UDR0, en RXB80 se recibe al bit más significativo. Bit 0 - TXB80: (Transmit Data Bit 8 ) Para transmitir datos de 9 bits, los 8 bits menos significativos deben ubicarse en el registro UDR0, en TXB80 debe colocarse al bit más significativo. Registros UCSR Bits [7:6] - UMSEL0[1:0]: (USART Mode Select) Bits para seleccionar el modo de operación de la USART0 (ver tabla). Bits [5:4] - UPM0[1:0]: (Parity Mode) Bits para determinar el uso del bit de paridad y se define su tipo (ver tabla). Bit 3 - USBS0: (Stop Bit Select) Una trama para un dato concluye con el bit de paro (‘1’), si el bit USBS0 se pone en alto, serán dos bits de paro. Registros UCSR Bits [2:1] - UCSZ0[1:0]: (Character Size) Junto con el bit UCSZ02 del registro UCSR0B definen el tamaño de los datos a enviar o recibir (ver tabla). Bit 0 - UCPOL0: (Clock Polarity) En operaciones síncronas, el bit UCPOL0 determina el flanco de reloj en el cual se escriben los datos (cuando se está transmitiendo) o en el que son leídos (cuando se está recibiendo) (ver tabla). Registros UCSR Registros UCSR INTERRUPCIONES USART0 ➢ USART0 puede interrumpir a la CPU por 3 eventos: ▪ Recepción completa (bandera RXC0). ▪ Transmisión completa (bandera TXC0). ▪ Buffer transmisor vacío (bandera UDRE0). ➢ Las interrupciones se deben habilitar (bits: RXCIE0, TXCIE0 y UDRIE0). Vectores de interrupción para la USART0 BIBLIOGRAFÍA Los Microcontroladores AVR de ATMEL. Capítulo 6. http://www.utm.mx/~fsantiag/Libro_Micros_AVR.htm QEEWiki, USART https://sites.google.com/site/qeewiki/books/avr- guide/usart ATmega328P 8-bit AVR Microcontroller with 32K Bytes In-System Programmable Flash, DATASHEET Capítulo 7. El microcontrolador ATMega328P de Microchip. Felipe Santiago Espinosa. http://www.utm.mx/~fsantiag/Libro_Micros_AVR.htm https://sites.google.com/site/qeewiki/books/avr-guide/usart