El puerto serie: UART 8250. |
Parte 8: Programación del 8250
|
|
El 8250 se programa
a través de los registros de control LCR, IER, DLL, DLM y MCR. Aunque
los registros de control pueden ser escritos en cualquier orden,
IER debe ser escrito al final porque controla la habilitación de
las interrupciones. Una vez que el 8250 ha sido programado, los
registros pueden ser actualizados en cualquier momento en que el
8250 no se encuentre enviando o recibiendo datos.
EL 8250 EN EL ORDENADOR.
Los ordenadores compatibles pueden tener
conectados, de manera normal, hasta 4 puertos serie, nombrados COM1-COM4.
En el área de datos de la BIOS (segmento 40h) y justo al principio de
la misma, hay 4 palabras con la dirección de memoria base de los puertos
serie. A esta dirección de memoria base habrá que sumar el desplazamiento
relativo del número de registro a ser accedido.
El principal problema reside en que sólo
están previstas 2 interrupciones para los puertos serie. Ello implica
que generalmente sólo 2 de los puertos podrán emplear interrupciones a
un tiempo, debido a la arquitectura del bus ISA. Generalmente COM1 y COM3
compartirán la IRQ4 (INT 0Ch) y COM2/COM4 la IRQ3 (INT 0Bh). Estas asignaciones
pueden ser cambiadas por el usuario actuando sobre los switches de configuración
de las tarjetas (que en ocasiones permiten incluso elegir la IRQ5). Por
tanto, no está de más tener cuidado en los programas y permitir un cierto
grado de configuración en estas cuestiones.
| OFFSET |
DLAB |
MODO |
NOMBRE |
SIGNIFICADO |
| 0 |
0 |
R |
RBR |
Receiver Buffer Register (Registro buffer de
recepción) |
| 0 |
1 |
R/W |
DLL |
Divisor Latch LSB (Divisor de velocidad, parte
baja |
| 0 |
0 |
W |
THR |
Transmitter Holding Register (Registro de retención
de transmisión) |
| 1 |
0 |
R/W |
IER |
Interrupt Enable Register (Registro de habilitación
de interrupciones) |
| 1 |
1 |
R/W |
DLM |
Divisor latch MSB (Divisor de velocidad, parte
alta) |
| 2 |
X |
R |
IIR |
Interrupt Identification Register (Registro
de identificación de interrupciones) |
| 2 |
X |
W |
FCR |
FIFO Control Register (Registro de control
FIFO) - SOLO 16550 - |
| 3 |
X |
R/W |
LCR |
Line Control Register (Registro de control
de línea) ¡¡EL BIT 7 ES DLAB!! |
| 4 |
X |
R/W |
MCR |
Modem Control Register (Registro de control
del modem) |
| 5 |
X |
R/W |
LSR |
Line Status Register (Registro de estado de
la línea) |
| 6 |
X |
R/W |
MSR |
Modem Status Register (Registro de estado del
modem) |
| 7 |
X |
R/W |
SCR |
Scratch Register (Registro
residual) |
El cuadro superior muestra
los desplazamientos (offsets) que hay que sumar a la dirección E/S base
del puerto serie para acceder a sus registros. COM1 suele estar en 3F8h,
COM2 en 2F8h, COM3 en 3E8h y COM4 en 2E8h. Sin embargo, es mejor acceder
a las variables de la BIOS para obtener la dirección.
La INT 14h de la BIOS se encarga de controlar
el puerto serie. El trabajo del DOS a través de los dispositivos COM1:
(conocido también como AUX:) al COM4: se realiza también apoyándose en
esta interrupción. El comando MODE del sistema permite inicializar el
puerto serie a alto nivel. Sin embargo, tanto el DOS como la BIOS
no permiten exceder los 9600 baudios, velocidad excesivamente baja para
la transmisión de datos entre dos ordenadores cercanos o el trabajo con
un modem.
El cristal que gobierna el 8250 oscila a
1.8432 MHz. Nosotros debemos considerar esta frecuencia dividida por 16
de cara a calcular el valor para el divisor. Por tanto, la velocidad máxima
que puede alcanzar el puerto serie de los PC es de 1843200/16 = 115200
baudios. Con datos de 8 bit se pueden empaquetar los bytes en 10 baudios (1 bit de inicio, 8 de datos, 1 de stop), lo que permite alcanzar 11520
bytes/seg (11.25 Kb/seg). Para distancias de pocos metros (no decenas
ni centenas) no habrá problemas, incluso para distancias algo mayores
si los cables se diseñan con cuidado. La programación del puerto serie
en el PC a nivel de hardware es necesaria a menudo por dos razones de
mucho peso: poder utilizar interrupciones y emplear velocidades superiores
a 9600 baudios. Por supuesto, en estas transferencias los paquetes deberían
llevar algún control de errores, aunque no precisamente basado en la paridad.
Nota: El bit OUT2 del MCR
controla en los PC la salida de la línea INTRPT. Esto significa que si
dicho bit, por defecto inicializado a 0, es puesto a 1, las interrupciones
del puerto serie quedan inhibidas. El bit OUT1, por el contrario, debe
estar a 1 por motivos no muy claros. También se podría inhibir la INTRPT
a través del 8259, por lo que este dato no es muy importante, con la excepción
de evitar que una involuntaria e incorrecta asignación de OUT1 y OUT2
inhiba las interrupciones. La ventaja de inhibir las interrupciones en
el 8250 radica en la posibilidad de utilizar plenamente todas sus funciones
incluso en el modo de no interrupciones: el olvido del diseñador de incluir
esta característica obligó a IBM a utilizar para este fin OUT2. Realmente,
el 8250 está concebido para ser utilizado por medio de interrupciones,
y hay quien duda incluso de la veracidad de la afirmación del fabricante
acerca del double buffering (buffers duplicados) que son muy aconsejables
al trabajar sin interrupciones. |
|
|