El puerto serie: UART 8250. |
Parte 3: Registros del 8250 (1-3)
|
|
El 8250 dispone de
11 registros (uno más el 16550) pero sólo 3 líneas de dirección
para seleccionarlos. Lo que permita distinguir unos de otros será,
aparte de las líneas de direcciones, el sentido del acceso (en lectura
o escritura) y el valor de un bit de uno de los registros: el bit
DLAB del registro LCR, que es el bit 7 de dicho registro. La notación
para hacer referencia a un bit de un registro se escribe REG(i);
en este ejemplo, el bit DLAB sería LCR(7). Realmente, DLAB se emplea
sólo puntualmente para poder acceder y programar los registros que
almacenan el divisor de velocidad; el resto del tiempo, DLAB estará
a 0 para acceder a otros registros más importantes.
| A2 |
A1 |
A0 |
DLAB |
MODO |
NOMBRE |
SIGNIFICADO |
| 0 |
0 |
0 |
0 |
R |
RBR |
Receiver Buffer Register (Registro buffer de
recepción) |
| 0 |
0 |
0 |
1 |
R/W |
DLL |
Divisor Latch LSB (Divisor de velocidad, parte
baja |
| 0 |
0 |
0 |
0 |
W |
THR |
Transmitter Holding Register (Registro de retención
de transmisión |
| 0 |
0 |
1 |
0 |
R/W |
IER |
Interrupt Enable Register (Registro de habilitación
de interrupciones) |
| 0 |
0 |
1 |
1 |
R/W |
DLM |
Divisor latch MSB (Divisor de velocidad, parte
alta) |
| 0 |
1 |
0 |
X |
R |
IIR |
Interrupt Identification Register (Registro
de identificación de interrupciones) |
| 0 |
1 |
0 |
X |
W |
FCR |
FIFO Control Register (Registro de control
FIFO) - SOLO 16550 - |
| 0 |
1 |
1 |
X |
R/W |
LCR |
Line Control Register (Registro de control
de línea) ¡¡EL BIT 7 ES DLAB!! |
| 1 |
0 |
0 |
X |
R/W |
MCR |
Modem Control Register (Registro de control
del modem) |
| 1 |
0 |
1 |
X |
R/W |
LSR |
Line Status Register (Registro de estado de
la línea) |
| 1 |
1 |
0 |
X |
R/W |
MSR |
Modem Status Register (Registro de estado del
modem) |
| 1 |
1 |
1 |
X |
R/W |
SCR |
Scratch Register (Registro
residual) |
1) LCR (Line Control Register). Controla el formato del
carácter de datos.

Los bits WLS seleccionan
el tamaño del dato empleado. STB indica el número de bits de stop, que
pueden ser 1 (STB=0) ó 2 (STB=1), al trabajar con datos de 5 bits
STB=1 implica 1.5 bits de stop. PEN (Parity Enable) permite habilitar
o no la generación de bit de paridad, EPS (Even Parity Select) selecciona
paridad par si está a 1 (o impar en caso contrario). Stick Parity permite
forzar el bit de paridad a un estado conocido según el valor de EPS. Cuando
Break Control es puesto a 1, la salida SOUT se pone en estado espacio
(a 0), sólo afecta a SOUT y no a la lógica de transmisión. Esto permite
a la CPU alertar a un terminal del sistema sin transmitir caracteres erróneos
o extraños si se siguen estas fases: 1) cargar un carácter 0 en respuesta
a THRE, 2) activar Break Control en respuesta al próximo THRE, 3) esperar
a que el transmisor esté inactivo (TEMT=1) y bajar Break Control. Durante
el Break, el transmisor puede usarse como un preciso temporizador de carácter.
El bit DLAB (Divisor Latch Access Bit) puesto
a 1 permite acceder a los Latches divisores DLL y DLM del BRG en lectura
y escritura. Para acceder al RBR, THR y al IER debe ser puesto a 0.
2) LSR (Line Status Register).
Este suele ser el primer registro consultado tras una interrupción.

DR está activo cuando hay un carácter listo
en el RBR y es puesto a 0 cuando se lee el RBR. Los bits 1 al 4 de este
registro (OE, PE, FE y BI) son puestos a 0 al consultarlos -cuando se
lee el LSR- y al activarse pueden generar una interrupción de prioridad
1 si ésta interrupción está habilitada. OE se activa para indicar que
el dato en el RBR no ha sido leído por la CPU y acaba de llegar otro que
lo ha sobreescrito. PE indica si hay un error de paridad. FE indica si
el carácter recibido no tiene los bit de stop correctos. BI se activa
cuando la entrada de datos es mantenida en espacio (a 0) durante un tiempo
superior al de transmisión de un carácter (bit de inicio + bits de datos
+ bit de paridad + bit de parada).
THRE indica que el 8250 puede
aceptar un nuevo carácter para la transmisión: este bit se activa
cuando el THR queda libre y se desactiva escribiendo un nuevo carácter
en el THR. Se puede producir, si está habilitada; la interrupción
THRE (prioridad 3); INTRPT se borra leyendo el IIR. El 8250 emplea
un registro interno para ir desplazando los bit y mandarles en serie
(el Transmitter Shift Register), dicho registro se carga desde el
THR. Cuando ambos registros (THR y el Transmitter Shift) están vacíos,
TEMT se activa; volverá a desactivarse cuando se deje otro dato
en el THR hasta que el último bit salga por SOUT.
|
|
3) MCR (Modem Control Register). Controla el interface con el MODEM. 
Las líneas de salida -DTR,
-RTS, -OUT1 y -OUT2 están directamente controladas por estos bits; como
se activan a nivel bajo, son puestas a 0 escribiendo un 1 en estos bits
y viceversa. Estas líneas sirven para establecer diversos protocolos de
comunicaciones.
El bit LOOP introduce el 8250 en un modo
lazo (o bucle) de autodiagnóstico. Con LOOP activo, SOUT pasa a estado
de marca (a 1) y la entrada SIN es desconectada. Los registros de desplazamiento
empleados en la transmisión y la recepción son conectados entre sí. Las
cuatro entradas de control del modem (-CTS, -DSR, DC y -RI) son desconectadas
y en su lugar son internamente conectadas las cuatro salidas de control
del modem (-DTR, -RTS, -OUT1 y -OUT2) cuyos pines son puestos en estado
inactivo (alto). En esta modalidad de operación (modo lazo o bucle), los
datos transmitidos son inmediatamente recibidos, lo que permite comprobar
el correcto funcionamiento del integrado. Las interrupciones son completamente
operativas en este modo, pero la fuente de estas interrupciones son ahora
los 4 bits bajos del MCR en lugar de las cuatro entradas de control. Estas
interrupciones están aún controladas por el IER.
|