Sie sind auf Seite 1von 11

UTN FRC Trabajo Prctico COMUNICACIONES 2004

1
PUERTO SERIE

En el interior de puerto serie hay un chip para la entrada y salida de caracteres y para la conversin de
palabras de datos en las correspondientes seales del puerto serie: lo que se denomina
UART(Universal Asynchronus Receiver Transmitter-Emisor y Receptor Asncrono Universal; su
abreviatura SIO(Serial Input/Output). Este chip lleva el nombre 8250. A continuacin se detallan los
tipos de UARTS(para PC s):

8250 Primera UART en esta serie. No contiene el scratch register.
8250 Esta UART es mas rpida desde el lado del BUS. Utiliza el mismo software que la 16450. Es una version
mejorada de la 8250.
8250B Es muy similar a la 8250.
16450 Usada en AT's (Velocidad del BUS mejorada con respecto a las 8250's). Opera bien a 38.4KBPS. Todava se
puede encontrar actualmente.
16550 Esta fu la primera generacin de buffered UART. Tiene un buffer de 16 bytes, Sin embargo no funcion y se
reemplaz con la 16550A.
16550 Es la UART mas comnmente utilizada para comunicaciones de alta velocidad. Se asegur que los buffers
FIFO funcionan en esta UART.
16650 Generacin muy reciente de UART. Contiene una FIFO de 32 bytes, Caracteres de de X-On / X-Off
programables y soporta power management.
16750 Producida por Texas Instruments. Contiene una FIFO de 64 bytes.

El UART dispone de 10 registros accesibles desde el exterior(va software) y de registros adicionales
accesibles slo internamente, tales como el Receiver Shift Register y el Transmitter Shift Register,
fundamentales en la emisin y recepcin de caracteres. Si el UART recibe un carcter , los diferentes
bits que se van recibiendo se amontonan primero en el Receiver Shift Register hasta que se completa
una palabra de datos. Si no aparece ningn fallo, el Byte es transferido al Receiver Data Register desde
donde puede ser ledo va software.
En sentido contrario, el software escribe primero la palabra de datos a enviar en el Transmitter Holding
Register. De ah el UART lo traslada al registro interno Transmitter Shift Register para desde ah
transmitir los diferentes bits uno detrs de otro a travs de la lnea.
Tabla de los Registros

Base Address DLAB Read/Write Abr. Register Name
=0 Write THR Transmitter Holding Buffer
=0 Read RBR Receiver Buffer
+ 0
=1 Read/Write DLL Divisor Latch Low Byte
=0 Read/Write IER Interrupt Enable Register
+ 1
=1 Read/Write

DLM
Divisor Latch High Byte
- Read IIR Interrupt Identification Register
+ 2
- Write FCR FIFO Control Register
+ 3 - Read/Write LCR Line Control Register
+ 4 - Read/Write

MCR
Modem Control Register
+ 5 - Read LSR Line Status Register
+ 6 - Read MSR Modem Status Register
+ 7 - Read/Write - Scratch Register



UTN FRC Trabajo Prctico COMUNICACIONES 2004
2

Programando (PC's)
Basado en Polling o en Interrupts ?

Cuando escribe un programa de comunicaciones, la comunicacin entre el software y el UART puede
darse tanto en modo polling como en modo interrupcin.
En modo polling es responsabilidad del software consultar a travs del Line Control Register el estado
del UART a espacios de tiempo regulares. Slo as puede determinar si se ha recibido un nuevo
carcter o si el ltimo carcter enviado se encuentra realmente en camino. Es decir que se consulta
primero el Line Status Register para saber si hay algn carcter disponible en el RBR. Si es as, se lee
el carcter y a continuacin se inicia el proceso de nuevo. Si todava no hay caracteres preparados en el
buffer interno, el UART, inmediatamente despus de la lectura del carcter del RBR, activar de nuevo
el bit correspondiente del Line Status Register de modo que este carcter sea automticamente
recogido en el prximo bucle. Desventaja de todos los procedimientos polling: la CPU est todo el
tiempo ocupada con el dispositivo y los caracteres comparados con la velocidad de la CPU, son
enviados y recibidos de manera muy lenta. Teniendo velocidades mximas de aproximadamente 34.8
KBPS antes de comenzar a perder datos. Algunas Pentium nuevas podran obtener mejores
velocidades.Ventaja, los correspondientes mdulos de programa son sencillos de contruir.
La otra opcin es utilizar un manejador de interrupciones. Esto nos permite soportar fcilmente
velocidades de 115.2K BPS, an con computadoras de bajas prestaciones.
Pero no debemos descartar totalmente el mtodo de hacer el poll a la UART. Es un buen mtodo de
diagnstico. Si Ud. no tiene conocimiento de la direccin de su tarjeta, cual IRQ est utilizando,
podra polear la UART a diferentes direcciones para encontrar en que puerto tiene un mdem
conectado. Luego de conocer esa informacin, Ud. Puede armar e instalar una rutina de interrupciones
para los IRQs comunes y habilitando un IRQ a la vez, usando el Programmable Interrupt Controller ,
podr encontrar su IRQ, Y sin necesidad de usar un destornillador !


Acceso a los registros

Son accesibles desde diferentes puertos que se orientan en la direccin de base del puerto serie. Esta
direccin de base puede, tericamente escogerse a voluntad, pero en la prctica:


Nombre Address
COM 1 3F8
COM 2 2F8
COM 3 3E8
COM 4 2E8

Standard Port Addresses

En la tabla se muestran los Standard port addresses. Ellos deberan funcionar para la mayora de las PC's.

Para tener la certeza de no pasar por alto al puerto serie, lo mejor es no fijar las direcciones de puerto
desde un principio en los programas y consultar una de las cuatro variables del BIOS en las que se
encuentran las direcciones de base de los cuatro como mximo puertos serie que puede soportar la
BIOS, obtenindose con seguridad la direccin actual del puerto serie deseado.
Si observamos los registros del UART existen dos direcciones de puerto (puerto base +0 y puerto base
+1) son ocupadas por varios registros. Para poder diferenciar entre los distintos registros al acceder al
puerto correspondiente se utiliza el bit ms significativo en el Line Control Register.


UTN FRC Trabajo Prctico COMUNICACIONES 2004
3

Antes de acceder a uno de los registros del primer o segundo puerto serie, cargue este bit con el valor
indicado en la tabla.


Inicializacin del UART

Para establecer conexin con otro puerto serie, el UART primero debe ser inicializado, es decir
teniendo en cuenta los diferentes parmetros de comunicacin: el ratio de baudios(velocidades de las
comunicaciones medidas en bits por segundo), la longitud de la palabra de datos y el nmero de stop
bit. Se recomienda adems efectuar un acceso de lectura al Receiver Data Register, debido a que si
algn programa anterior a dejado algn carcter, existe la posibilidad de que se interprete por error este
carcter como el primero de la conexin que se est a punto de establecer. Si por el contrario no existe
ningn carcter preparado para ser llamado, el acceso de lectura no tiene ningn efecto por lo que no
puede cometerse ningn error.

Al configurar los diferentes parmetros de la comunicacin se debe empezar por el ratio de baudios
pues al escribir los distintos registros, el UART inicializa el resto de parmetros. Si se configuran estos
registros antes de indicar el ratio de baudios, tendrn que volverse a configurar de nuevo.
Si observamos el DLAB(divisor Latch Access Bit) en la tabla de registros cuando el mismo es puesto
en 0 o en 1 algunos de los registros cambian. Ello se debe a que la UART puede tener 12 registers
(incluyendo el scratch register), pero solamente 8 port addresses. Cuando DLAB se pone en '1' por
medio del line control register, dos registros se hacen disponibles (DLL y DLM) desde los cuales Ud
puede colocar la velocidad de las comunicaciones medidas en bits por segundo.

La velocidad deseada no se entra directamente, sino como un cociente con respecto a la frecuencia del
UART(que tiene un cristal que oscila aproximadamente a 1.8432 MHZ, tambin incorpora un
Contador-Divisor por 16 que divide la seal del clock por 16). El ratio de baudios comunica al UART
cun rpido debe generar los diferentes bits con respecto a su frecuencia de reloj, la frmula sera:

Valor del registro = 1.8432 MHz / (16 * ratio de baudios)

La igualdad expresa que el UART debe dividir la duracin de un pulso por 16 y tras N(ratio de
baudios) de estos pulsos, enviar el siguiente bit a la lnea.
Como el valor del registro se obtiene, con esta frmula, un valor de 16 bits, cuyo byte menos
significativo debe escribirse en DLM. Procediendo de esta manera se puede escoger cualquier ratio de
baudios comprendiendo de esta manera se puede escoger cualquier ratio de baudios comprendido entre
1,75 baudios (valor del registro = =FFFFh) y 115200 baudios (valor del registro = 1).
El ratio de transmisin ms elevado que puede conseguirse es 115200 baudios, es decir 115 Kilobit por
segundo. Tener en cuenta que por cada palabra de datos de 8 bits deben transmitirse un mnimo de dos
bits adicionales (1 bit de inicio y un stop bit), con lo que el ratio de transmisin de datos real queda en
1,4Kbyte por segundo.
Suponiendo que tenemos la seal del reloj a 1.8432 MHZ, tendramos un mximo de 115,200 hertz
haciendo que la UART tenga la capacidad de transmitir y recibir a 115,200 Bits Por Segundo (BPS).
Esto debera ser adecuado para los modems rpidos actuales, pero algunos no pueden comunicarse a
esa velocidad. Por ello la UART se cre con un generador de velocidad programable (Programmable
Baud Rate Generator) que es controlado por dos registros.
Por ejemplo, si queremos comunicarnos solamente a 2400 BPS, deberamos dividir 115,200 por 48
para obtener el reloj de 2400 Hertz. El "Divisor", en este caso 48, es almacenado en los dos registros
controlados por el "Divisor Latch Access Bit" (DLAB). Este divisor puede ser cualquier nmero que
pueda ser almacenado en 16 bits (Por Ej.: 0 a 65535). LA UART solo tiene un bus de datos de 8 bits,
Por ello es que aqu necesitamos utilizar los dos registros. El primer registro (Base + 0), cuando DLAB
= 1, almacena el "Divisor latch low byte" mientras que el segundo registro (base + 1 cuando DLAB =
1) almacena el "Divisor latch high byte."
UTN FRC Trabajo Prctico COMUNICACIONES 2004
4

En la prctica se opera con valores muy concretos, que se especifican en la siguiente tabla. En la
misma tambin se indican los valores de registro que deben introducirse en DLL y DLM para obtener
el ratio de baudios deseado.


Velocidad (BPS) Divisor (Dec) Divisor Latch High Byte Divisor Latch Low Byte
50 2304 09h 00h
300 384 01h 80h
600 192 00h C0h
2400 48 00h 30h
4800 24 00h 18h
9600 12 00h 0Ch
19200 6 00h 06h
38400 3 00h 03h
57600 2 00h 02h
115200 1 00h 01h

Divisores de Baud rate comunmente usados

El resto de parmetros (longitud de palabra, el nmero de stop bit y la utilizacin de bits de paridad se
configuran a travs del Line Control Register(LRC) que se encuentra en la direccin relativa 3 con
respecto a la direccin de base del puerto serie. Este registro se puede escribir para llevar a cabo
nuevas reconfiguraciones, pero tambin se puede leer si se quiere averiguar la configuracin actual.

Line Control Register (LCR)

1 Divisor Latch Access Bit Bit 7
0 Access to Receiver buffer, Transmitter buffer & Interrupt Enable Register
Bit 6 Set Break Enable
Bit 5 Bit 4 Bit 3 Parity Select
X X 0 No Parity
0 0 1 Odd Parity
0 1 1 Even Parity
1 0 1 High Parity (Sticky)
Bits 3, 4 And
5
1 1 1 Low Parity (Sticky)
Length of Stop Bit
0 One Stop Bit
Bit 2
1
2 Stop bits for words of length 6,7 or 8 bits or 1.5 Stop Bits for Word
lengths of 5 bits.
Bit 1 Bit 0 Word Length
0 0 5 Bits
0 1 6 Bits
1 0 7 Bits
Bits 0 And 1
1 1 8 Bits

Line Control Register
El Line Control register setea los parmetros bsicos para las comunicaciones.




UTN FRC Trabajo Prctico COMUNICACIONES 2004
5

Por ejemplo: a travs del bit 5 se puede activar la generacin de un bit de paridad constante, cuyo
contenido se manifiesta independiente del nmero de unos en la palabra de datos actual. En la prctica
esta posibilidad no se utiliza, al igual que raramente se usa la generacin de paridad normal y ms
frecuentemente se recurre a protocolos de software de ms alto nivel.
El bit 6 se utiliza cuando se quiere enviar al contrario una especie de alarma, Esta posibilidad la
utilizan algunos programas de transmisin cuando emisor y receptor deben sincronizarse de nuevo a
nivel de su protocolo de software o cuando la actual transferencia de un bloque de datos grande debe
ser interrumpido por algn motivo. Para ello la lnea mientras no se vuelva a liberar el bit 6 permanece
en 0 lgico. Esto se denomina spacing condition situacin opuesta al marking condition (1 lgico)
que se utiliza cuando no se va a transmitir ningn carcter. El UART al otro extremo de la conexin
reconoce la situacin y pone un flag determinado en su registro de estado. Consultando este registro el
receptor puede estar alerta con respecto a dicha alarma. De esta manera se puede transmitir una
informacin (informacin de alarma) an cuando la transmisin de caracteres aislados o de bloques de
datos parece desplomarse o cuando debe interrumpirse espontneamente.
El bit 7 personifica al bit(DLAB), que se usa para acceder al registro y que se bifurca en las
direcciones 0 y 1 relativas al puerto base de la tarjeta. Primero se debe leer el contenido de este
registro para no modificar los parmetros de comunicacin en los otros bits. Es decir borrar o activar el
bit 7 y por ltimo escribir el byte as obtenido de nuevo en el registro.

Estado actual del UART

Las informaciones de estado sobre la emisin y recepcin de caracteres y el estado de la lnea de
transmisin se consultan a travs del Line Status Register(LSR).

Line Status Register (LSR)

Bit Notes
Bit 7 Error in Received FIFO
Bit 6 Empty Data Holding Registers
Bit 5 Empty Transmitter Holding Register
Bit 4 Break Interrupt
Bit 3 Framing Error
Bit 2 Parity Error
Bit 1 Overrun Error
Bit 0 Data Ready


El bit 0 muestra si un carcter recibido se encuentra en el registro de recepcin(RBR). Este bit se
inicializa automticamente tan pronto como el carcter recibido es ledo del registro. Si esto no sucede
de manera rpida, puede suceder que bajo ciertas circunstancias haya un nuevo carcter preparado
antes que el ltimo haya podido ser ledo. En este caso el carcter anterior sera sobreescrito y se
perdera. Esto se indica a travs del bit 1 del LSR.

Los bit 2 y 3 se emplean para errores de paridad y los Overrun Errors, que aparecen cuando no se
respeta el protocolo, en lo que respecta al nmero de bits de datos, stop bit o bit de paridad en la
recepcin de un carcter, normalmente debido a un fallo de la lnea.

El UART muestra todos los errores pero sin tomar medidas al respecto, pues corresponde al software
de comunicacin desarrollar un protocolo y unos mecanismos capaces de avisar a emisor y receptor

UTN FRC Trabajo Prctico COMUNICACIONES 2004
6

sobre transmisiones defectuosas y provocar la repeticin de la transmisin de los datos
correspondientes.

Cuando el emisor activa una alarma a travs del bit 6 del Line Control Register, esta se refleja en el bit
4 del LSR del receptor con lo que ste puede reaccionar inmediatamente.
Informacin sobre el estado actual de la emisin la suministran los bits 5 y 6 del LSR.
Registros de emisin : Transmitter Holding Register(THR) y el Transmitter Shift Register (TSR).

Bit 5 = 0 >>>> THR contiene un byte que se ha de transmitir
= 1 >>>> THR est vaco

Bit 6 = 0 >>>> TSR an contiene un byte que se est enviando
= 1 >>>> TSR est vaco


Modo Interrupcin

Si la UART debe ser alimentada con caracteres va interrupciones, lo que significa que la lectura de los
caracteres que van llegando se realiza mediante la ayuda de las interrupciones, se requieren para ello
de dos registros de interrupcin:

I nterrupt Enable Register (I ER)

Bit Notes
Bit 7 Reserved
Bit 6 Reserved
Bit 5 Enables Low Power Mode (16750)
Bit 4 Enables Sleep Mode (16750)
Bit 3 Enable Modem Status Interrupt
Bit 2 Enable Receiver Line Status Interrupt
Bit 1 Enable Transmitter Holding Register Empty Interrupt
Bit 0 Enable Received Data Available Interrupt

Interrupt Enable Register

El IER determina las situaciones en que las interrupciones deben ser llevadas a cabo.
El Interrupt Enable Register es uno de los ms fciles de comprender. Colocando el Bit 0 en alto,
habilita el Received Data Available Interrupt que genera un interrupt cuando el registro receptor
/FIFO contiene datos a ser ledos por la CPU.
El Bit 1 habilita el Transmit Holding Register Empty Interrupt. Este interrumpe la CPU cuando el
buffer de transmisin est vaco. El Bit 2 habilita el receiver line status interrupt. La UART pondr
un interrupt cuando cambia el estado de la lnea receptora. Similarmente el bit 3 habilita el modem
status interrupt. Los Bits 4 to 7 son reservados.

UTN FRC Trabajo Prctico COMUNICACIONES 2004
7
Interrupt Identification Register (IIR)

Bit Notes
Bit 6 Bit 7
0 0 No FIFO
0 1 FIFO Enabled but Unusable
Bits 6 and 7
1 1 FIFO Enabled
Bit 5 64 Byte Fifo Enabled (16750 only)
Bit 4 Reserved
0 Reserved on 8250, 16450 Bit 3
1 16550 Time-out Interrupt Pending
Bit 2 Bit 1
0 0 Modem Status Interrupt
0 1 Transmitter Holding Register Empty Interrupt
1 0 Received Data Available Interrupt
Bits 1 and 2
1 1 Receiver Line Status Interrupt
0 Interrupt Pending Bit 0
1 No Interrupt Pending

Interrupt Identification Register

El IIR indica al administrador de interrupciones del puerto serie al llamarlo con que objeto se le ha
requerido.
Los administradores de interrupciones deben estar disponible va software. Para que el administrador
pueda ser llamado, su direccin debe estar contenida en el vector de interrupciones existente para los
puertos serie. Cuando conocemos el IRQ, el prximo paso es encontrar el interrupt vector o interrup
de software como a veces se lo llama. Bsicamente cualquier procesador 8086 tiene un set de 256
vectoresde interrupcin numerados de 0 a 255. Cada uno de esos vectores contiene un cdigo de 4
bytes que es una direccin (o puntero ) a la Interrupt Service Routine (ISR).
La tabla a continuacin muestra solamente los interrupts asociados con IRQ's. Los otros 240 no son de
inters cuando programamos en comunicaciones del tipo RS-232.

Por ejemplo, si utilizamos el COM3 que tiene un IRQ de 4, entonces el interrupt vector sera 0C en
hex.
De todas maneras, antes de proceder con la implantacin de la rutina servicio para administrar la
interrupcin, deberamos resguardar las anteriores direcciones de los vectores para poder restaurarlos
al finalizar el programa.
UTN FRC Trabajo Prctico COMUNICACIONES 2004
8


INT (Hex) IRQ Common Uses
08 0 System Timer
09 1 Keyboard
0A 2 Redirected
0B 3 Serial Comms. COM2/COM4
0C 4 Serial Comms. COM1/COM3
0D 5 Reserved/Sound Card
0E 6 Floppy Disk Controller
0F 7 Parallel Comms.
70 8 Real Time Clock
71 9 Reserved
72 10 Reserved
73 11 Reserved
74 12 PS/2 Mouse
75 13 Maths Co-Processor
76 14 Hard Disk Drive
77 15 Reserved

Interrupt Vectors (Slo para el Hardware)

A travs del IER se pueden configurar de modo selectivo los eventos que la llamada al administrador
de interrupciones del puerto serie debe conllevar. Por ejemplo: activar el bit 0 cuando se trate de la
recepcin de caracteres a travs del administrador de interrupciones y por tanto tenga que llamarlo tan
pronto como un carcter se encuentre en el RBR. En cambio para enviar un carcter se activar
tambin el bit 1. Con ello se producir una interrupcin cada vez que el Transmitter Holding Register
quede vaco.

Antes de llamar al administrador de interrupciones serie primero siempre se tiene que consultar el
IIR. Sobre todo inspeccionar primero el bit 0 de este registro pues indica si el puerto serie realmente ha
iniciado una interrupcin, de ser as, ya se puede llamar al administrador de interrupciones.

Si varios puertos serie utilizan la misma interrupcin, primero se debe comprobar cul de todos los
puertos serie ha llamado a la interrupcin en primer lugar. Para ello hay que consultar uno tras otro los
IIR de los puertos serie conocidos y detenerse en aquel puerto para el que el bit 0 del IRR est activo,
que sera el puerto buscado.

Adems, los bit 1 y 2 de este registro suministran informacin acerca de porqu motivo se ha iniciado
la interrupcin del UART, para que pueda reaccionar consecuentemente.
El IIR es un registro de solo lectura. Los Bits 6 y 7 dan los estados del buffer FIFO. Cuando ambos
bits son '0' no hay buffers FIFO activos. Si el bit 7 est activo pero el bit 6 no est activo, entonces la
UART tiene sus buffers habilitados pero no pueden ser usados. Esto ocurre en la UART 16550 donde
una falla en el buffer FIFO hace la FIFO intil. Si ambos bits estn en '1', entonces los buffers FIFO
buffers estn habilitados y totalmente operacionales.
Los Bits 4 y 5 son reservados. El Bit 3 Muestra el estado de la interrupcin de time-out en una 16550 o
superior.
Antes de que el UART comience a generar interrupciones en las situaciones deseadas, no slo debe
activarse el IER sino tambin un bit del Modem Control Register:


UTN FRC Trabajo Prctico COMUNICACIONES 2004
9

Modem Control Register (MCR)

Bit Notes
Bit 7 Reserved
Bit 6 Reserved
Bit 5 Autoflow Control Enabled (16750 only)
Bit 4 LoopBack Mode
Bit 3 Aux Output 2
Bit 2 Aux Output 1
Bit 1 Force Request to Send
Bit 0 Force Data Terminal Ready


.
As como el Line Status Register y el Line Control Register se ocupan de controlar y gobernar la
conexin entre dos puertos serie, el Modem Control Register y :
Modem Status Register (MSR)

Bit Notes
Bit 7 Carrier Detect
Bit 6 Ring Indicator
Bit 5 Data Set Ready
Bit 4 Clear To Send
Bit 3 Delta Data Carrier Detect
Bit 2 Trailing Edge Ring Indicator
Bit 1 Delta Data Set Ready
Bit 0 Delta Clear to Send


Se responsabilizan de vigilar y gobernar la conexin entre el puerto serie y uno de los modems
conectados.

El Modem Control Register es un registro de lectura/escritura.en el mismo se halla un flag(bit 3) con el
que se puede activar y desactivar la generacin de interrupciones a travs de la UART.
El Bit 0 del modem status register muestra delta clear to send, delta significa que ocurri un
cambio, por lo que delta clear to send significa que existi un cambio en la lnea clear to send
desde la ltima vez que se ley el registro. Lo mismo para los bits 1 y 3. El Bit 2 es el Trailing Edge
Ring Indicator que indica que existi un cambio desde bajo a alto en la lnea Ring Indicator line.
Los Bits 4 al 7 muestran el estado actual de las lneas al momento de la lectura.
La comunicacin entre el puerto serie y el modem se da a travs de cuatro lneas, DTR(Dara Terminal
Ready) y RTS(Ready To Send), que van del PC al modem.
Estas lneas se pueden gobernar mediante los bit 0 y 1 del Modem Control Register.
Segn el protocolo RS-232, el PC primero tiene que poner el flag DTR a 1, con lo que la lnea DTR se
pone en 0 lgico y el modem reconoce con ello que el Pc est preparado. Acto seguido el PC debe
poner el flag RTS tambin en 1, con lo que la lnea RTS se pone en 0 lgico y el modem se sita en
disposicin de recibir la deseada transmisin de datos. En ambos casos el modem debe responder con
la correspondiente seal de saludo....
UTN FRC Trabajo Prctico COMUNICACIONES 2004
10
Recepcin y Transmisin

La falta de buffer habra limitado el funcionamiento del chip en ratios de baudios elevados. Ya que era
frecuente que un carcter recin llegado al Receiver Data Register fuera eliminado por la sobrescritura
del siguiente carcter dndose as un Overrun Error, teniendose que reducirse el ratio de baudios, de
modo que funcionase la comunicacin entre el emisor y el receptor.
A partir del 16550A(UART) se disponen de buffer: Receiver Buffer Register(recepcin) y el
Transmitter Holding Register(envo). Ambos buffer trabajan bajo el principio FIFO(First in first out).
El de envo juega un papel secundario pues el ordenador, al enviar, puede determinar por s mismo la
cadencia del envo, con lo que apenas existe la posibilidad de autoexigirse en exceso. El buffer de
recepcin representa una gran ayuda, aunque va software se tendr que realizar la inicializacin del
UART y la estructuracin de la rutina para la lectura de caracteres.
En el modo de funcionamiento por Polling, se consulta primero el Line Status Register para saber si
hay algn carcter disponible en el RBR. Si es as, se lee el carcter y a continuacin se inicia el
proceso de nuevo. Si todava no hay caracteres preparados en el buffer interno, el UART,
inmediatamente despus de la lectura del carcter del RBR, activar de nuevo el bit correspondiente
del Line Status Register de modo que este carcter sea automticamente recogido en el prximo bucle.
Es un bucle de este tipo lo primero que falta en la mayora de administradores de interrupciones de
puertos serie, pues, mientras el UART no tiene ningn carcter en un buffer interno, es suficiente con
leer una vez el RBR al llamar a la interrupcin y entonces esperar a la siguiente llamada a una
interrupcin para recibir el siguiente carcter. Al instalar el buffer tiene que implementarse en cambio
en el administrador de interrupciones un bucle en cuyo proceso continuamente se lee un carcter del
RBR hasta que el Line Status Register indica que ya no hay ms caracteres en el RBR para ser ledos.
En este momento se han ledo todos los caracteres del buffer interno pues por su parte el UART habra
empujado el resto de caracteres que todava se encontrasen en el buffer, tras la lectura de sus
precedentes, hacia el RBR.
Para continuar siendo compatible con sus antecesores el 16550 desactiva su buffer interno mientras no
se le diga explcitamente lo contrario. Para ello existe un nuevo registro el Interrupt ID Register. Mien
tras que el Interrupt ID Register slo puede ser ledo, el nuevo registro del 16550 para el

funcionamiento en FIFO slo puede ser escrito. Con ello es posible dividir la direccin entre uno y
otro registro con lo que en funcin del tipo de acceso, el UART diferencia a qu registro se quiere
acceder.
First In / First Out Control Register (FCR)

Bit Notes
Bit 7 Bit 6 Interrupt Trigger Level
0 0 1 Byte
0 1 4 Bytes
1 0 8 Bytes
Bits 6 and 7
1 1 14 Bytes
Bit 5 Enable 64 Byte FIFO (16750 only)
Bit 4 Reserved
Bit 3
DMA Mode Select. Change status of RXRDY & TXRDY pins from mode 1 to mode
2.
Bit 2 Clear Transmit FIFO
Bit 1 Clear Receive FIFO
Bit 0 Enable FIFO's


El registro FIFO es de solo escritura. Se lo utiliza para controlar los buffers FIFO.

UTN FRC Trabajo Prctico COMUNICACIONES 2004
11


A travs del bit 0 de este registro se activan los buffer tipo FIFO. Si en algn momento se necesita
borrar uno de los dos buffer, basta con escribir el valor 1 en el bit 1(buffer de recepcin) o en el bit
2(buffer de emisin). Para ello no olvide poner tambin el bit o pues de lo contrario el buffer FIFO se
activar simultneamente.
Los bits 6 y 7 para configurar el nmero de caracteres a partir de cuya recepcin se iniciar una
interrupcin siempre que el UART est configurado para generar interrupciones a travs del Interrupt
Enable Register. Escogiendo los valores 4,8 o 14 en estos bits se motivar que el UART no enve una
interrupcin cada vez que se reciba un carcter. Esto es importante pues, en trminos de medida de
procesador, la ejecucin de una interrupcin conlleva mucho tiempo, por lo que toda reduccin del
nmero de stas es positiva. El bucle de consulta dentro de la rutina de la interrupcin se ocupa de que
realmente se lean todos los caracteres del buffer y no slo el primero.
Pero Qu sucede cuando el lado opuesto enva tres caracteres configurando con ello por primera
vez la transmisin, porque estos tres caracteres le dicen al receptor ahora me devuelves los caracteres
y la informacin? En ciertas circunstancias puede suceder que al receptor no le lleguen estos tres
caracteres porque el buffer todava no tiene los cuatro, ocho o catorce caracteres mnimos necesarios
antes de que sea lanzada una interrupcin y de esta manera el emisor podra estar esperando
eternamente una respuesta del receptor. Para que esto no suceda el UART provoca siempre una
interrupcin cuando el buffer no est lleno pero ha transcurrido el tiempo suficiente para

la transmisin de tres caracteres y no se ha recibido ninguno. Este Time Out le es indicado al
administrador de interrupciones a travs de un nuevo bit adicional en el Interrupt ID register. Este bit
bsicamente puede ser ignorado pues el UART contina teniendo como argumento para lanzar una
interrupcin el que haya caracteres disponibles en el RBR.


Scratch Register
El scratch register no se usa para comunicaciones.

Das könnte Ihnen auch gefallen