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.
|