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.

Cuadro de texto:

     

 

© 2007
Todos los derechos reservados