RECEPCIÓN DE DATOS
La figura siguiente de Recepción de datos muestra un diagrama de bloques del Receptor de la UART. (Si desea ver esta figura en una página completa pulse AQUÍ) |
Figura. Receptor del UART
La lógica "front-end" del receptor prueba la señal del pin RXD a una frecuencia 16 veces el baud rate. Mientras la línea está en modo Idle, una sola muestra de "0" lógico se interpretará como el flanco descendente de un bit de start y la secuencia de detección del bit de start es comenzada. Siguiendo la transición de 1 a 0, el receptor prueba el pin RXD en las muestras 8, 9 y 10. Si dos o más de estas tres muestras se encuentran a "1" lógico, el bit de start se rechaza como un pico de ruido y el receptor empieza buscando la próxima transición de 1 a 0. Si, sin embargo, se detecta un bit de start válido, se realiza la prueba de los bits de datos que siguen al bit start. Estos bits también se prueban en las muestras 8, 9 y 10. El valor lógico encontrado en por lo menos dos de las tres muestras se toma como el valor del bit. Todos los bits se desplazan en el registro de desplazamiento Transmisor cuando son probados. La prueba de un carácter entrante se muestra en la siguiente figura. |
Figura. Prueba del dato recibido
Cuando el bit de stop entra en el receptor, la mayoría de las tres muestras debe ser "1" para aceptar el bit de stop. Si dos o más muestras son "0"s lógicos, el flag de Error de estructura (FE) del registro de estado de la UART (USR) está a set. Antes de leer el registro UDR, el usuario siempre debe verificar el bit FE para detectar errores en la estructura. Si se descubre o no un bit de stop válido al final de un ciclo de recepción del carácter, el dato se transfiere a UDR y el flag RXC en USR está a set. UDR es de hecho dos registros físicamente separados, uno para los datos transmitidos y otro para los datos recibidos. Cuando UDR es leído, se accede al registro de datos de recepción, y cuando UDR es escrito, se accede al registro de datos de transmisión. Si se selecciona una palabra de datos de 9-bit (el bit CHR9 en el registro de control del UART (UCR) está a set), el bit RXB8 en UCR está cargado con el bit 9 en el registro de desplazamiento de transmisión cuando el dato se transfiere a UDR. Si, después de haber recibido un carácter, el registro UDR no se ha leído desde el último recibido, el flag de desbordamiento (OR) en USR está a set. Esto significa que el último byte de datos desplazado en el registro de desplazamiento no podía transferirse a UDR y que se ha perdido. El bit OR pasa por un buffer y se actualiza cuando un byte de datos válido se lee en UDR. Así, el usuario siempre debe verificar el bit OR después de leer el registro UDR para descubrir cualquier desbordamiento si el baud rate es alto o la carga de la CPU es alta. Cuando el bit RXEN en el registro UCR es borrado (cero), el receptor está deshabilitado. Esto significa que el pin PD0 puede usarse como un pin de I/O general. Cuando RXEN está a set, el Receptor del UART se conectará a PD0 que está obligado a ser un pin de entrada sin tener en cuenta la situación del bit DDD0 en DDRD. Cuando se obliga a PD0 a ser entrada por la UART, el bit PORTD0 todavía puede usarse para controlar la resistencia de pull-up en el pin. Cuando el bit CHR9 en el registro UCR está a set, los caracteres transmitidos y recibidos son de 9 bits de longitud, más los bits de start y stop. El noveno bit de dato para ser transmitido es el bit TXB8 del registro UCR. Este bit debe ponerse al valor deseado antes de que una transmisión sea comenzada escribiendo en el registro UDR. El noveno bit de datos recibido es el bit RXB8 del registro UCR. |