Puerto Serie: UART 8250.

Puerto Serie: UART 8250.
Información sobre la plantilla
UART8250.jpg
Concepto:Circuito integrado diseñado para implementar la interfaz de las comunicaciones seriales


Puerto Serie: UART 8250. Es un circuito integrado diseñado para implementar la interfaz de las comunicaciones seriales. La pieza fue fabricada originalmente por National Semiconductor Corporation. Fue de uso común en los PC y el equipo relacionado como impresoras o módems. El 8250 incluyó en el chip un generador de bit rate programable, permitiendo el uso, tanto de los bit rates comunes, como los de propósitos especiales, que podían ser precisamente derivados desde una arbitraria frecuencia de referencia de oscilador de cristal.

Descripción del Integrado

El ACE 8250 (Asynchronous Communication Element) integra en un solo chip una UART (Universal Asynchronous Receiver/Transmitter) y un BRG (Baud Rate Generator). Soporta stándar es de hasta 625000 baudios con relojes de hasta 10 MHz. El BRG incorporado divide la frecuencia base para conseguir las stándar es stándar de la RS-232-C.

Significado de las líneas del 8250

  • ISTR: Data In Strobe. Línea de entrada que indica al 8250 que deje los datos en el bus (D0..D7), los datos dejados dependen del registro seleccionado con A0..A2. Son necesarias CS0..CS2 para habilitar DISTR. En vez de DISTR se puede usar DISTR, pero sólo una de las dos.
  • DOSTR: Data Out Strobe. Idéntico a DISTR pero en salida.
  • D0..D7: Data Bits 0..7: Bus triestado bidireccional de 8 líneas para transmitir datos, información de control y de estado entre la CPU y el 8250. El primer bit enviado/recibido es D0.
  • A0..A2: Register Select. Líneas de entrada que indican el registro del 8250 usado en la operación.
  • XTALx: Crystal/Clock: Conexiones para el cristal del cuarzo del BRG. XTAL1 puede actuar como entrada de reloj externa, en cuyo caso XTAL2 debería quedar abierto.
  • SOUT: Serial Data Output: Salida de datos en serie del 8250. Una marca es un '1' y un espacio es un '0'. SOUT está en marca cuando el transmisor está inhibido, MR está a 1, el registro de transmisión está vacío o en el modo lazo (LOOP) del 8250. No es afectado por -CTS.
  • CTS: Clear To Send: Línea de entrada. El estado lógico de esta señal puede consultarse en el bit CTS del Modem Status Register (MSR) -como el bit CTS es el bit 4 del MSR se referencia MSR(4)-. Un cambio en el estado de -CTS desde la última lectura del MSR provoca que se active DCTS (bit MSR(0)). Cuando -CTS está activo (a 0) el modem indica que el dato en SOUT puede ser transmitido. -CTS no afecta al modo lazo (LOOP) del 8250.
  • DSR: Data Set Ready: Línea de entrada. El estado lógico de esta señal puede consultarse en MSR(5). DDSR (bit MSR(1)) indica si -DSR ha cambiado desde la última lectura del MSR. Cuando -DSR está activo el modem indica que está listo para intercambiar datos con el 8250; ello depende del estado del DCE (Data Communications Equipment) local y no implica que haya comunicación con la estación remota.
  • DTR: Data Terminal Ready. Línea de salida que puede activarse (poner a 0) escribiendo un 1 en MCR(0), y desactivarse escribiendo un 0 en dicho bit o ante la activación del pin MR. Con -DTR activo se indica al DCE que el 8250 puede recibir datos. En algunas circunstancias, esta señal se usa como LED de 'power on'. Si está inactivo, el DCE desconecta el modem del circuito de telecomunicaciones.
  • RTS: Request To Send. Línea de salida que habilita el modem. Se activa (poner a 0) escribiendo un 1 en MCR(1). Esta señal se pone en alto en respuesta a MR. -RTS indica al DCE que el 8250 tiene un dato listo para transmitir. En la modalidad half-duplex, esta señal se utiliza para controlar la dirección de la línea.
  • BAUDOUT: Esta línea de salida contiene una señal de reloj 16 veces mayor que la frecuencia usada para transmitir. Equivale a la frecuencia de entrada en el oscilador dividida por el BRG. La estación receptora podría emplear esta señal conectándola a RCLK (para compartir el mismo reloj).
  • OUTx: Estas dos salidas de propósito general se pueden activar (poner a 0) escribiendo un 1 en MCR(2) y MCR(3). Son desactivadas por la señal MR. En el modo lazo (LOOP o bucle), están también inactivas.
  • RI: Ring Indicator. Esta línea de entrada indica si el modem ha detectado que llaman por la línea y puede consultarse en MSR(6). El bit TERI (MSR(2)) indica si esta línea ha cambiado desde la última lectura del MSR. Si las interrupciones están habilitadas (IER(3) activo) esta patilla provoca una interrupción al activarse. -RI permanece activo durante el mismo intervalo de tiempo que la zona activa del ciclo de llamada e inactivo en los intervalos de la zona inactiva (o cuando el DCE no detecta la llamada). El circuito no se corta por culpa de -DTR.
  • DCD: Data Carrier Detect. Línea de entrada que indica si el modem ha detectado portadora. Se puede consultar su estado lógico en MSR(7). El bit MSR(3) indica si esta línea ha cambiado desde la última lectura del MSR. Esta línea no tiene efecto sobre el receptor. Si las interrupciones están permitidas, una interrupción será generada ante el cambio de esta línea.
  • MR: Master Reset. Esta línea de entrada lleva el 8250 a un estado inactivo interrumpiendo su posible actividad. El MCR y las salidas ligadas al mismo son borradas. El LSR es borrado en todos sus bits salvo THRE y TEMT (que son activados). El 8250 permanece en este estado hasta volver a ser programado.
  • INTRPT: Interrupt Request. Línea de salida que se activa cuando se produce una interrupción de alguno de estos tipos y está permitida: Recepción de banderín de error, dato recibido disponible, registro de retención de transmisión vacío, y estado del modem. Esta línea se desactiva con el apropiado servicio de la interrupción o ante MR.
  • SIN: Serial Data Input. Es la línea de entrada de datos desde el modem. En el modo lazo (LOOP o bucle) están inhibidas las entradas en SIN.
  • CS0..2: Chip Select. Estas entradas actúan como líneas de habilitación para las señales de escritura (DOSTR, -DOSTR) y lectura (DISTR, -DISTR).
  • CSOUT: Chip Select Out. Esta línea de salida se activa cuando el chip ha sido seleccionado con CS0..2. No comenzará transferencia de datos alguna hasta que CSOUT se active.
  • DDIS: Driver Disable. Esta salida está inactiva cuando la CPU lee datos del 8250. Una salida activa puede emplearse para inhibir un transceiver externo cuando la CPU está leyendo datos.
  • ADS: Address Strobe. Cuando esta línea de entrada está activa se enclavan las líneas A0..A2 y CS0..2; esto puede ser necesario si los pines de selección de registro no son estables durante la duración de la operación de lectura o escritura (modo multiplexado). Si esto no es preciso, esta señal se puede mantener inactiva (modo no-multiplexado).
  • RCLK: Esta línea se corresponde con la entrada de reloj para la sección receptora, equivalente a 16 veces la frecuencia empleada en la transmisión y puede proceder del BAUDOUT de la estación remota o de un reloj externo.

Registros del 8250

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.

LCR (Line Control Register).

Controla el formato del carácter de datos

Registro de control de línea

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.

LSR (Line Status Register)

Primer registro consultado tras una interrupción.

Registro de estado de línea

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.

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.

La transmisión y la recepción en el 8250

La sección de transmisión del 8250 consiste en el Registro de Retención de transmisión (THR), el Registro de Desplazamiento de la Transmisión (TSR) y en la lógica de control asociada. Dos bits en el LSR indican si está vacío el THR (bit THRE) o el TSR (bit TEMT). El carácter de 5-8 bits a ser transmitido es escrito en el THR; la CPU debería realizar esta operación sólo si THRE está activo: este bit es activado cuando el carácter es copiado del THR al TSR durante la transmisión del bit de inicio.

Cuando el transmisor está inactivo, tanto THRE como TEMT están activos. El primer carácter escrito provoca que THRE baje; tras completarse la transferencia vuelve a subir aunque TEMT permanecerá bajo mientras dure la transferencia en serie del carácter a través de TSR. Si un segundo carácter es escrito en THR, THRE vuelve a bajar y permanecerá bajo hasta que el TSR termine la transmisión, porque no es posible volcar el contenido de THR en TSR hasta que este último no acabe con el carácter que estaba transmitiendo. Cuando el último carácter ha sido transmitido fuera del TSR, TEMT vuelve a activarse y THRE también lo hará tras un cierto tiempo (el que tarda en escribirse THR en TSR).

En la recepción, los datos en serie asíncronos entran por la patilla SIN. El estado inactivo de la línea se considera el '1' lógico. Un circuito de detección de bit de inicio está continuamente buscando una transición alto-<bajo que interrumpa el estado inactivo. Cuando la detecta, se resetea un contador interno y cuenta 7½ pulsos de reloj (tener en cuenta que la frecuencia base es dividida por 16), posicionándose en el centro del bit de inicio. El bit de inicio se considera válido si SIN continúa aún bajo en ese momento. La validación del bit de inicio evita que un ruido espúreo en la línea sea confundido con un nuevo carácter.

El LCR tiene toda la información necesaria para la recepción: tamaño del carácter (5-8 bits), número de bits de stop, si hay paridad o no... la información de estado que se genere será depositada en el LSR. Cuando un carácter es transmitido desde el Registro de Desplazamiento de la Recepción (RSR) al Registro Buffer de Recepción (RBR), el bit DR del LSR se activa. La CPU lee entonces el RBR, lo que hace bajar de nuevo DR. Si el carácter no es leído antes de que el siguiente carácter que se está formando pase del RSR al RBR, el bit OE (overrun) del LSR se activa. También se puede activar PE en el LSR si hay un error de paridad. Finalmente, la circuitería que chequea la validez del bit de stop podría activar el bit FE del LSR en caso de error.

El centro del bit de inicio se define como 7½ pulsos de reloj; si los datos que entran por SIN constituyen una onda cuadrada simétrica, el centro de las celdas que contienen los bits se desviará a lo sumo un ±3.125% del centro real, lo que deja un margen de error del 46.875%; el bit de inicio puede comenzar, como mucho, 1 ciclo de reloj (de los 16) antes de ser detectado.

EL B.R.G. (BAUD RATE GENERATOR)

El Generador de Velocidad en Baudios genera las señales de reloj para el funcionamiento de la UART, permitiendo los ratios de transferencia del estándar ANSI/CCITT. Se puede conectar un cristal a XTAL1 y XTAL2 ó una señal de reloj a XTAL1. La salida -BAUDOUT puede excitar la línea XTAL1 de otro 8250. La velocidad es determinada por los registros DLL y DLM almacenando un valor divisor de la frecuencia del reloj conectado al 8250. El resultado debe ser 16 veces mayor que la frecuencia en baudios deseada, ya que el 8250 utiliza 16 pulsos de reloj para cada bit. El siguiente cuadro resume los valores que hay que asignar al divisor para lograr las frecuencias más usuales con los cristales más comunes.

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

Véase también

Fuentes

  • CD, Carrera de Informática. MINED. Materiales Bibliográficos para los ISP, Versión 4 y 5