El puerto serie: UART 8250.

Parte 4: Registros del 8250 (4-8)

 

4) MSR (Modem Status Register).

     

Además de la información de estado del modem, los 4 bits bajos (DDCD, TERI, DDSR, DCTS) indican si la línea correspondiente, en los 4 bits superiores, ha cambiado de estado desde la última lectura del MSR; en el caso de TERI sólo indica transiciones bajo-<alto en -RI (y no las de sentido contrario). La línea CTS del modem indica si está listo para recibir datos del 8250 a través de SOUT (en el modo lazo este bit equivale al bit RTS del MCR). La línea DSR del modem indica que está listo para dar datos al 8250 (en el modo lazo -o LOOP- equivale al bit DTR del MCR). RI y DCD indican el estado de ambas líneas (en el modo lazo se corresponden con OUT1 y OUT2 respectivamente). Al leer el MSR, se borran los 4 bits inferiores (que en una lectura posterior estarían a 0) pero no los bits de estado (los 4 más significativos).

Los bits de estado (DCD, RI, DSR y CTS) reflejan siempre la situación de los pines físicos respectivos (estado del modem). Si DDCD, TERI, DDSR ó DCTS están a 1 y se produce un cambio de estado durante la lectura, dicho cambio no será reflejado en el MSR; pero si están a 0 el cambio será reflejado después de la lectura. Tanto en el LSR como en el MSR, la asignación de bits de estado está inhibida durante la lectura del registro: si se produce un cambio de estado durante la lectura, el bit correspondiente será activado después de la misma; pero si el bit ya estaba activado y la misma condición se produce, el bit será borrado tras la lectura en lugar de volver a ser activado.


5) y 6) BRSR (Baud Rate Select Register). Son los registros DLL (parte baja) y DLM (parte alta).

     Estos dos registros de 8 bits constituyen un valor de 16 bits que será el divisor que se aplicará a la frecuencia base para seleccionar la velocidad a emplear. Dicha frecuencia base (por ejemplo, 1.8432 MHz) será dividida por 16 veces el valor almacenado aquí. Por ejemplo, para obtener 2400 baudios:

 
                                  1843200
                                 --------- = 48 ->  DLL=48, DLM=0
                                 16 * 2400

7) RBR (Receiver Buffer Register).

     El circuito receptor del 8250 es programable para 5, 6, 7 u 8 bits de datos. En el caso de emplear menos de 8, los bits superiores de este registro quedan a 0. Los datos entran en serie por SIN (comenzando por el bit D0) en un registro de desplazamiento gobernado por el reloj de RCLK, sincronizado con el bit de inicio. Cuando un carácter completa el registro de desplazamiento de recepción, sus bits son volcados al RBR y el bit DR del LSR es activado para indicar a la CPU que puede leer el RBR. El diseño del 8250 permite la recepción continua de datos sin pérdidas: el RBR almacena siempre el último carácter recibido dando tiempo suficiente a la CPU para leerlo mientras simultáneamente está cargando el registro de desplazamiento con el siguiente; si la CPU tarda demasiado un nuevo dato podría aparecer en el RBR antes de haber leído el anterior (condición de overrun, bit OE del LSR).

8) THR (Transmitter Holding Register).

     
El registro de retención de transmisión almacena el siguiente carácter que va a ser transmitido en serie mientras el registro de desplazamiento de transmisión está enviando el carácter actual. Cuando el registro de desplazamiento se vacíe, será cargado desde el THR para transmitir el nuevo carácter. Al quedar vacío THR, el bit THRE del LSR se activa. Cuando estén vacíos tanto el THR como el registro de desplazamiento de transmisión, el bit TEMT del LSR se activa.

© 2007
Todos los derechos reservados