practica de unidad uart

53
DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES 1 UART (UNIVERSAL ASYNCHRONOUS RECEIVER/TRANSMITER) OBJETIVO.- Descripción de la Unidad Universal de Transmisión y Recepción Asincrona ( UART). TIEMPO ESTIMADO.- PARTE TEORICA.- INTRODUCCIÓN A LA UART 8250. TIPOS DE UART DESCRIPCIÓN FUNCIONAL DE LOS PINES DE LA UART 8250. SEÑALES DE ENTRADA SEÑALES DE SALIDA SEÑALES DE ENTRADA/SALIDA DESCRIPCIÓN DE LOS REGISTROS SELECCIÓN DEL REGISTRO: REGISTRO DE RETENCIÓN DE TRANSMISIÓN (THR) REGISTRO DE ESTADO DE LINEA (LSR) REGISTRO (BUFFER) DE RECEPCIÓN (RBR) REGSITRO DIVISOR (MENOS SIGNIFICATIVO) (DLL) REGISTRO DIVISOR (MAS SIGNIFICATIVO)(DLM) GENERADOR DE VELOCIDAD DE TRANSMISIÓN PROGRAMABLE REGISTRO ACTIVADOR DE INTERRUPCIONES (IER) REGISTRO IDENTIFICADOR DE INTERRUPCIONES (IIR) REGISTRO DE CONTROL DE LINEA (LCR) REGISTRO DE CONTROL DE MODEM (MCR REGISTRO DE ESTADO DE MODEM (MSR) ACCESO A LOS REGISTROS. INTERCONEXIÓN DE LOS REGISTROS OPERATIVA DE TRABAJO DE LA UART LA TRANSMISIÓN Y LA RECEPCIÓN EN EL 8250 PROGRAMACIÓN DE LA UART. PROGRAMA CON VELOCIDAD DE 9600. PROGRAMA CON SALIDA ORDENADA. PROGRAMA CON DETECCIÓN DE ERRORES. PROGRAMA EN ENSAMBLADOR. UTILIZACIÓN DE LAS INTERRUPCIONES 14H DE LA BIOS. EJEMPLOS DE PROGRAMAS UTILIZANDO LAS INTERRUPCIONES 14H DE LA BIOS. OPCIONES DEL PROGRAMA DEBUG. EJEMPLO DE USO DE FUNCIONES DEBUG EN LA EDICIÓN CORRECION Y EJECUCIÓN DE UN PROGRAMA CON ERRORES DE CODIFICACIÓN. MEDIANTE LAS FUNCIONES 3H Y 4H DE LA INTERRUPCION 21H DEL DOS. OTROS COMPONENTES ASÍNCRONOS. DRIVERS FOSSIL. PROGRAMA DE DIAGNOSTICO DE LA UART EN TURBO C. DOCUMENTACION.- Documentación en pdf PARTE PRACTICA.- V

Upload: julieth-gomez

Post on 28-Dec-2015

85 views

Category:

Documents


0 download

TRANSCRIPT

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

1

UUAARRTT ((UUNNIIVVEERRSSAALL AASSYYNNCCHHRROONNOOUUSS RREECCEEIIVVEERR//TTRRAANNSSMMIITTEERR)) OBJETIVO.- Descripción de la Unidad Universal de Transmisión y Recepción Asincrona ( UART). TIEMPO ESTIMADO.- PARTE TEORICA.- INTRODUCCIÓN A LA UART 8250. TIPOS DE UART DESCRIPCIÓN FUNCIONAL DE LOS PINES DE LA UART 8250.

SEÑALES DE ENTRADA SEÑALES DE SALIDA SEÑALES DE ENTRADA/SALIDA

DESCRIPCIÓN DE LOS REGISTROS SELECCIÓN DEL REGISTRO:

REGISTRO DE RETENCIÓN DE TRANSMISIÓN (THR) REGISTRO DE ESTADO DE LINEA (LSR) REGISTRO (BUFFER) DE RECEPCIÓN (RBR) REGSITRO DIVISOR (MENOS SIGNIFICATIVO) (DLL) REGISTRO DIVISOR (MAS SIGNIFICATIVO)(DLM)

GENERADOR DE VELOCIDAD DE TRANSMISIÓN PROGRAMABLE REGISTRO ACTIVADOR DE INTERRUPCIONES (IER) REGISTRO IDENTIFICADOR DE INTERRUPCIONES (IIR) REGISTRO DE CONTROL DE LINEA (LCR) REGISTRO DE CONTROL DE MODEM (MCR REGISTRO DE ESTADO DE MODEM (MSR)

ACCESO A LOS REGISTROS. INTERCONEXIÓN DE LOS REGISTROS OPERATIVA DE TRABAJO DE LA UART LA TRANSMISIÓN Y LA RECEPCIÓN EN EL 8250 PROGRAMACIÓN DE LA UART. PROGRAMA CON VELOCIDAD DE 9600. PROGRAMA CON SALIDA ORDENADA. PROGRAMA CON DETECCIÓN DE ERRORES. PROGRAMA EN ENSAMBLADOR. UTILIZACIÓN DE LAS INTERRUPCIONES 14H DE LA BIOS. EJEMPLOS DE PROGRAMAS UTILIZANDO LAS INTERRUPCIONES 14H DE LA BIOS. OPCIONES DEL PROGRAMA DEBUG. EJEMPLO DE USO DE FUNCIONES DEBUG EN LA EDICIÓN CORRECION Y

EJECUCIÓN DE UN PROGRAMA CON ERRORES DE CODIFICACIÓN. MEDIANTE LAS FUNCIONES 3H Y 4H DE LA INTERRUPCION 21H DEL DOS. OTROS COMPONENTES ASÍNCRONOS. DRIVERS FOSSIL. PROGRAMA DE DIAGNOSTICO DE LA UART EN TURBO C. DOCUMENTACION.- Documentación en pdf PARTE PRACTICA.- V

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

2

IINNTTRROODDUUCCCCIIÓÓNN:: La comunicación entre los diferentes dispositivos de la unidad central de proceso de un ordenador se desarrolla comúnmente en paralelo siendo este parámetro importante a la hora de determinar la potencia de un sistema de proceso de datos. Sin embargo dicha forma de comunicación no es tecnológicamente rentable cuando la distancia entre los equipos que han de transferirse los datos excede de pocos metros (Interface de instrumentación IEEE-488). Para solucionar dicho problema se recurre a los diferentes interfaces adaptados cada uno de ellos a las diferentes peculiaridades del entorno donde ha de desarrollarse la comunicación y a las características particulares de esta. Dichos interfaces son definidos por los diferentes organismos de normalización (UIT-T, EIA, IEEE,..), siendo usualmente recomendaciones dadas a los diferentes fabricantes de equipo informático. Dentro de estas recomendaciones se encuentra la V24 (RS232C) estudiada en practica anterior. Dicho interface acaba en ambos extremos en circuitos denominados "adaptadores de interface" (1488,1489,..) encargados de adaptar las tensiones de trabajo de los circuitos digitales (comúnmente de ±5V) a las tensiones de funcionamiento del interface correspondiente. Logrado este objetivo, queda por resolver el proceso de transformar una señal digital serie, portadora de información, en otra paralelo portadora de la misma información. Dicho proceso se desarrolla en dispositivos conocidos como UART, acrónimo de Universal Asynchronous Receiver / Transmiter (Transmisor Receptor Asíncrono Universal) o Síncronos (USART), en este ultimo caso suelen poderse programar de ambas formas. La comunicación asíncrona es de gran sencillez y los protocolos asociados a esta también lo son. La comunicación síncrona permite velocidades de transferencia de datos superiores usando el mismo interface, sin embargo los protocolos implicados en dicha comunicación son significativamente mas complejos (tales como los COP – orientados al carácter-, siendo un ejemplo el BSC, o los BOP - orientados al bit- siendo un ejemplo HDLC, LAP-B) y precisan por ello una circuiteria de mayor complejidad. Estas son razones por las que la mayor parte de los equipos informáticos de uso comercial dispongan de elementos sencillos y económicos de comunicación como es la mencionada comunicación asíncrona soportada por las UART. Existiendo una elevada cantidad de diferentes fabricantes y tipos de circuitos asíncronos, el conocido circuito UART INS-8250 de National Semiconductor (Se la conoce también como ACE 8250 - Elemento de Comunicación Asíncrona) y sus posteriores versiones, se han convertido de hecho en un standard del mercado.

TTIIPPOOSS DDEE UUAARRTT:: Las UART son conocidas también como “SIO” Serial Input/Output. Es un circuito integrado que controla los circuitos de interfaz entre el ETCD y el ETTD.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

3

La UART es un subsistema integrado en un único chip que convierte, los datos paralelo del bus de datos, en serie. Añade, si procede, bit de paridad, verifica la paridad de los bits recibidos, añade el bit de inicio, inserta los de parada, fija el número de bits por carácter, detecta posibles errores en la comunicación, controla el estado del modem y de la línea.

Una relación de dichos circuitos tal y como se han desarrollado históricamente en el entorno del PC será como el siguiente:

UART 8250 (NS8250) Fue la primera en usarse en un PC, desafortunadamente tuvo errores de diseño. Dispone de 7 registros y su velocidad teórica máxima es de 56 Kbps. Es muy lenta lo que obliga a los programas a ralentizarse con el fin de no saturarla.

UART 8250A (NS8250A). Es la 8250 con los errores de diseño corregidos. Se le añadió un registro más con el único fin de poder comprobar que se trataba de la versión A. Actualmente es ya un dispositivo muy superado, sin embargo en los dispositivos posteriores se ha realizado un importante esfuerzo por mantener la compatibilidad con este circuito. Dispone de 8 registros y mantiene la misma velocidad de 56 Kbps.

UART 16450 (NS16450), Es una evolución de la 8250A adaptada a la arquitectura del bus AT estándar ISA de E/S para tarjetas de expansión y puede transferir datos a velocidades de hasta 115.200 bps, mas que suficiente para un sistema monotarea que se comunique con otros dispositivos asíncronos. Este circuito integrado supera las exigencias de velocidad de aplicaciones típicas de comunicación con módems, terminales y transferencias directas de datos entre ordenadores. Dispone de 8 registros. UART 16C451 (NS16C451), Idéntica a la anterior pero construida con tecnología CMOS de bajo consumo. UART 16550 Non A (NS16550 Non A). Modelo poco usual puede encontrarse en algunos PS/2. Fue la primera UART con colas “FIFO” (First In, First Out) aunque por un error de diseño estaban desactivadas. Aumento de velocidad máxima teórica hasta los 256 Kbps (en la práctica, debido a diseño en el hardware del PC, se mantiene a 115 Kbps) continuó con 8 registros.

UART: 16550A, 16550AF, 16550AFN (NS16550x). UART´s muy similares entre si. Se diferencian solo en la técnica de fabricación y en pequeños errores corregidos. Disponen de colas “FIFO” en transmisión y recepción de 16 bytes plenamente operativas, lo cual permite que el software no tenga que dedicarle tanta atención a los circuitos de comunicación como en sistemas anteriores, facilitando enormemente el funcionamiento en sistemas multitarea al no tener que interrumpir el proceso que se esté llevando a cabo cada vez que llega un carácter al puerto de comunicación. El circuito es además totalmente intercambiable

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

4

con la UART 8250. Dispone de nivel de activación de interrupción programable, es decir, la interrupción se dispara cuando el nivel de datos en la FIFO llegan a donde el usuario indicó. Implementa un sistema de control de registro vacío que impide generar dos interrupciones seguidas en transmisión por la misma condición. Puede funcionar en modo DM (acceso directo a memoria) para la transferencia de datos. En particular, la UART 16550AF mejora el tiempo de acceso al bus de la CPU de un 20% con respecto a la UART 16450 con una velocidad máxima teórica de 256 Kbps. Se reducen las llamadas a las interrupciones desde programa tanto en transmisión como en recepción aumentando la flexibilidad software en cuanto a la maquina que ejecuta el programa de comunicaciones. Los buffers actúan como amortiguadores de la comunicación. UART 16C551 (NS16551C). Versión CMOS de bajo consumo de la 16550AF. Incorpora un puerto paralelo “Micro Channel” y es compatible con el bus ISA-AT. UART 16C552 (NS16C552). Encapsula en su chip a dos UART 16C551 completas, el interfaz con la CPU transfiere datos a 25 MHz sin estados de espera. La velocidad teórica máxima del enlace serie alcanza los 1,5 Mbps. utilizada frecuentemente en tarjetas de comunicaciones multipuerto. Bajo consumo. UART 82510 (NS82510). Usada en ordenadores portátiles por su pequeño tamaño. Puede trabajar en varios modos siendo el UART16450 el que adopta por defecto. Tiene un cola de 4 Bytes con lo que mejora ampliamente las prestaciones del 16450.

Con el fin de ir identificando esta unidad estudie mediante el comando MSD que UART tiene en su equipo.

La comprobación mas inmediata del correcto funcionamiento de esta unidad es efectuar un bucle a nivel digital o lo que es lo mismo realizar la conexión en el puerto serie tal como se representa en la figura y que ya se trato en la practica de

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

5

bucles. (esto es adecuado realizarlo sobre el BRKBOX). 2 TD 103

3 RD 104

4 RTS 105

5 CTS 106

6 DSR 107

8 DCD 109

15 TC 114

17 RC 115

20 DTR 108 2

24 TSED 113

7 SG 102

CIRCUITOS

DE DATOS

CIRCUITOS

DE CONTROL

DDEESSCCRRIIPPCCIIÓÓNN FFUUNNCCIIOONNAALL DDEE LLOOSS PPIINNEESS DDEE LLAA UUAARRTT 88225500.. Aunque como se ha mencionado dicho circuito no es muy actual aun se encuentra en una gran cantidad de placas de comunicación y dado que es directamente substituible por lo modelos mucho mas avanzados (16550x...) podremos trabajar con estos como si fuese aquel, indicando cuando proceda las mínimas diferencias de programación que se refieren fundamentalmente al control de los buffers de comunicación. Se describen a continuación las señales de entrada y salida del circuito que en la figura siguiente se representan sobre el chip que lo integra:

Nota: Las señales que aparecen negadas equivalen a ser activas a nivel bajo, en la descripción siguientes dichas señales aparecen precedidas por un guión (-).

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

6

SSEEÑÑAALLEESS DDEE EENNTTRRAADDAA Chip Select (CS0,CS1,-CS2) Pins 12-14: Circuitos de selección y habilitación del chip. Estas señales habilitan las señales de lectura y escritura DOSTR y DISTR.

Data Input Strobe (DISTR, DISTR negado) Pins 22 y 21: Al activarse se vuelcan los datos del bus de datos D0..D7 en el registro seleccionado por A0,A1,A2. Es necesario activar la señales CS0..CS2. Ha de usarse únicamente una de las señales DISTR o DISTR negado.

Data Output Strobe (DOSTR, DOSTR negado) Pins 19 y 18: Al revés que la anterior permite descargar el registro seleccionado al bus de datos.

Address Strobe (ADS negado) Pin 25: Esta línea permite el enclavamiento de las señales de selección de registro A0..A2 y CS0..CS2. Usualmente se mantiene inactiva. Solo se usa en modo multiplexado.

Register Select (A0,A1,A2) Pins 26-28: Líneas de selección de uno de los diez registros del 8250. Solo se puede acceder directamente a ocho registros, mediante A0, A1 y A2), a los otros dos registros se accede en conjugando el bit conocido como “DLAB” que se menciona posteriormente.

Master Reset (MR) Pin 35: Inicialización del circuito 8250. Borra el registro de control de modem (MCR-Modem Control Register). Se activan los bit 5 y 6 del registro :Estado de Línea (LSR-Line Status Register), que se refieren respectivamente a: registro de transferencia de transmisión vacío y transmisor vacío.

Receiver Clock (RCLK) Pin 9: Entrada de reloj de recepción, es 16 veces la frecuencia de transmisión del equipo remoto, generalmente se extrae del reloj externo, dicha señal es internamente dividida entre 16. En raras ocasiones se obtiene de la señal BAUDOT del equipo remoto. La señal de salida -BAUDOT del propio circuito esta íntimamente ligada a RCLK.

Serial Input (SIN) Pin 10: Es la línea de datos serie de entrada desde el modem. En modo bucle (LOOP) esta señal se inhibe.

Clear To Send (CTS negado) Pin 36: Borrado para enviar. Línea de entrada proveniente del modem. El estado lógico de esta señal puede consultarse leyendo el cuarto bit del registro de estado del modem (MSR-Modem Status Register). El cambio de estado del bit -CTS desde la ultima lectura del registro MSR provoca la activación del primer bit de dicho registro DCTS, Delta-CTS. Cuando -CTS esta activo, a cero (ya que es una entrada activa a nivel bajo) , el modem indica a la UART que el dato que ésta tiene situado en SOUT pueda ser transmitido a dicho modem. El estado de CTS no afecta al modo bucle (LOOP) del 8250.

Data Set Ready (DSR negado) Pin 37: Conjunto de datos preparados. Línea de entrada proveniente del modem. El estado lógico de esta señal puede consultarse leyendo el quinto bit del registro de estado del modem (MSR-Modem Status Register). Cuando el modem activa esta línea indica a la UART que esta

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

7

preparado para intercambiar datos, aunque no implica que dicho intercambio se esté produciendo. El cambio de estado del bit DSR negado, desde la ultima lectura del registro MSR provoca la activación del segundo bit de dicho registro DDSR, Delta-DSR. DSR es una entrada activa a nivel bajo, por tanto valdrá cero cuando esté activa.

Data Carrier Detect (DCD negado) Pin 38: Esta línea indica a la UART que el modem a detectado portadora. Si se han habilitado las interrupciones se generara una al cambiar de estado esta línea. El bit siete bit del registro de estado del modem (MSR-Modem Status Register) contiene el estado lógico de dicha línea, recuerda que es una entrada activa a nivel bajo. Si ha habido cambio de estado desde la ultima lectura se habrá activado el bit tres DDCD Delta-DCD del mismo registro.

Ring Indicator (RI negado) Pin 39: Indicador de llamada, se activa cuando el modem ha detectado una llamada por la línea de comunicaciones y puede consultarse en el bit seis del registro MSR. El bit dos de dicho registro indica un cambio desde la ultima lectura (Trailing Edge of Ring Indicator). El circuito permanece activo durante el intervalo activo del ciclo de llamada e inactivo durante este mismo intervalo. Si se han activado las interrupciones, bit tres del registro activador de interrupciones (IER-Interrupt Enable Register) se provocara una interrupción al activarse. Entrada activa a nivel bajo.

Vcc Pin 40: Tensión de alimentación +5V.

Vss Pin 20: Tierra de referencia 0V (Ground).

SSEEÑÑAALLEESS DDEE SSAALLIIDDAA Data Terminal Ready (DTR negado) Pin 33: Esta señal indica al modem que el equipo esta preparado para recibir datos. Se activa, esta línea de salida, poniendo un uno en el bit menos significativo, el cero, del registro de control de modem (MCR-Modem Control Register). Recuerde que activar una línea de salida significa nivel bajo lo que consiste en que la línea tome valor cero. Se inactiva dicha línea si cargamos con cero el bit menos significativo del registro MCR o activando el circuito de inicialización del chip (MR-Master Reset). Si esta línea no esta activa el modem se desconecta del circuito de comunicaciones del chip (MR-Master Reset).

Request To Send (RTS negado) Pin 32: Indica al modem que la UART tiene un dato preparado para transmitir. En la modalidad semiduplex esta señal indica la dirección de la transmisión en la línea de comunicación. La línea de salida se activa, poniéndose a cero, cuando se carga un uno en el bit cero del registro de control de modem (MCR-Modem Control Register). La línea puede desactivarse poniendo a cero dicho bit o cuando se activa el circuito de inicialización del chip (MR-Master Reset)

.Output 1 (OUT1 negado) Pin 34: Salida de propósito general se activa, salida a cero, cargando un uno en el bit dos del registro de control de modem (MCR-Modem Control Register). Es desactivada cambiando dicho bit o cuando se activa el circuito de inicialización del chip (MR-Master Reset).

Output 2 (OUT2 negado) Pin 31: Igual que la anterior pero actuando sobre el

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

8

bit tres del registro MCR.

Chip Select Out (CSOUT) Pin 24: Esta línea indica que el chip ha sido seleccionado con CS0..CS2 y esta preparado para funcionar. El chip no trabajara hasta que CSOUT se haya activado. El PC en la práctica la ignora.

Driver Disable (DDIS) Pin 23: Esta salida se desactiva cuando la CPU lee datos de la UART. En la práctica el PC no la utiliza.

Baud Out (BAUDOT negado) Pin 15: En la practica, en el PC, esta salida se conecta a la entrada del reloj de recepción RCLK. Esta salida podría usarse conectada directamente a la entrada de reloj de una estación receptora en el supuesto de una conexión ETD-ETD sin modem.

Interrupt (INTRPT) Pin 30: Línea de salida que se activa a nivel alto cuando se ha programado la habilitación de interrupciones en los siguientes casos: dato recibido disponible, registro de retención de transmisión vacío, estado del modem y error de comunicación.

Serial Output (SOUT) Pin 11: Salida de datos serie de la UART. El estado de MARCA es un uno, el ESPACIO es un cero. El estado de MARCA se mantiene: cuando no hay comunicación, cuando se activa MR (Master Reset), cuando el registro de transmisión esta vacío y cuando la UART está en bucle.

SSEEÑÑAALLEESS DDEE EENNTTRRAADDAA//SSAALLIIDDAA Data Bus (D0-D7) Pins 1-8: Bus triestado bidireccional de ocho líneas que permite la transferencia de datos, información de estado, programación y control entre la CPU y la UART.

External Clock Input/Output (XTAL1/XTAL2) Pins 16 y 17: Entre estos dos pines se conecta el cristal de cuarzo que permite la actuación del generador de velocidad interno del chip 8250. Este generador divide entre 16 la frecuencia de oscilación del cristal. La frecuencia final de transmisión de datos se logra programando los registros internos de la UART conocidos como DLL y DLM (Divisor Lach LSB y MSB -Byte menos significativo y mas significativo). El cristal puede trabajar a una velocidad de hasta 10 Mhz. XTAL1 Puede actuar como entrada de reloj externa, en este caso habrá que dejar al aire XTAL2. En la figura se representan algunas de las señales descritas anteriormente:

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

9

BU

SD

ED

AT

OS

RELOJ DE RECEPCION

LINEA DATOS SERIE ENTRADA

LINEA DATOS SERIE SALIDA

HABILITAN LAS SENALES DELECTURA Y ESCRITURADOSTR Y DISTR

CRISTAL CUARZO

ORDEN DE DESCARGARREGISTRO AL BUS DE DATOS

INICIALIZACION DE LA UART

CIRCUITOS DECONTROL DEL MODEM

SELECCION DE LOS DIEZREGISTROS JUNTO CON

EL BIT DLAB

VOLCAR LOS DATOS DE DO A D1AL REGISTRO SELECCIONADO

ENCLAVAMIENTO AO..A2, CSO..CS2

Un esquema de la unidad representando las conexiones y el entorno externo seria como el de la figura.

"0"

"1"

CS2

CS1

CS0

ADS

DOSTR

DISTR

MEMR or I/OR

MEMW or I/OWINTR

RESET

A0A1A2

D0-D7

BUS

XTAL1

XTAL2BAUDOT

RCLK

3.072 Mhz

DRIVERSEIA

A INTERFACERS232

SOUT

SIN

RTS

DTR

DSR

DCD

CTS

RI

INS8250A

En el anterior diseño podemos ver el caso general de conexión de la UART al PC. Se puede ver que no se utilizan todas la señales disponibles del circuito.

DDEESSCCRRIIPPCCIIÓÓNN DDEE LLOOSS RREEGGIISSTTRROOSS.. El circuito INS-8250 dispone en su estructura interna de diez registros accesibles por el usuario, tal como se presenta en la siguiente tabla, a los cuales se accede a través de las entradas A0, A1 y A2 (Pines 28, 27 y 26 respectivamente de dicho circuito), en combinación con un bit de estado que llamaremos DLAB (Divisor Latch Access Bit). En dicha tabla figuran 11 registros y esto es debido a que el bit DLAB activa el buffer de transmisión o el buffer de recepción.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

10

NOMBRE DEL REGISTRO IDENTIFICAD. COM1/COM2

REGISTRO DE LA RETENCION DE LA TRANSMISION TX THR 3F8/2F8

REGISTRO DE DATOS DE RECEPCION RX RBR 3F8/2F8

DIVISOR VELOCIDAD BAUDIOS, BYTE MENOS SIGNIFICATIVO LSB DLL 3F8/2F8

DIVISOR VELOCIDAD BAUDIOS, BYTE MAS SIGNIFICATIVO MSB DLM 3F9/2F93F9/2F9

REGISTRO ACTIVADOR DE INTERRUPCION IER 3F9/2F9

REGISTRO IDENTIFICADOR DE INTERRUPCION IIR 3FA/2FA

REGISTRO DE CONTROL DE LINEA LCR 3FB/2FB

REGISTRO DE CONTROL DE MODEM MCR 3FC/2FC

REGISTRO DE ESTADO DE LINEA LSR 3FD/2FC

REGISTRO DE ESTADO DE MODEM MSR 3FE/2FE

REGISTRO DE CONTROL DE ERRORES SCR 3FF/2FF

DLAB 0

DLAB 1

La identificación de un registro es en base a su contenido en los bits de dicho registro. En este, las posiciones A9 y A0 identifican el valor de la dirección a partir de la cual se trata el registro, que si contrastamos con las direcciones de los puertos serán COM1 Y COM2, las posiciones A9 y A8: 3 y 2 respectivamente Un ejemplo de esta identificación seria:

A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 DLAB

3F8/3FF

2F8/2FF

THR, RBR DLAB 0MSR, SCR DLAB 1

F de 8 a F

IDENTIFICACION DEL REGISTROCOM1 COM2

1 1 1 1 1 1 1 X X X

1 0 1 1 1 1 1 X X X

En ella se observa que los valores de las posiciones A7 a A4 representan la F y las posiciones A3 a A0 la gama de valores desde 8 a F. Por otro lado, tendremos el valor de un elemento decisorio en lo relativo al registro con el que se trabaja y este es el ya mencionado bit DLAB (posición 7 del registro de Control de Linea (LCR). Supondremos que dicha UART formara parte de la circuitería de un PC, conectada a las correspondientes "Address" (A0-A2) del bus de direcciones del microprocesador. Es usual en los programas de comunicaciones para agilizar la programación, trabajar a nivel de puerto y manipular directamente los registros, accediendo a estos por el desplazamiento de los registros respecto al puerto base. El control de estas direcciones a partir de la cual se efectúa el desplazamiento se lleva a cabo en el ordenador según la descripción de la siguiente tabla.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

11

NOMBRE DEL REGISTRO IDENTIFICAD. DIR BASE

REGISTRO DE LA RETENCION DE LA TRANSMISION TX THR +0

REGISTRO DE DATOS DE RECEPCION RX RBR +0

DIVISOR VELOCIDAD BAUDIOS, BYTE MENOS SIGNIFICATIVO LSB DLL +0

DIVISOR VELOCIDAD BAUDIOS, BYTE MAS SIGNIFICATIVO MSB DLM +1

REGISTRO ACTIVADOR DE INTERRUPCION IER +1

REGISTRO IDENTIFICADOR DE INTERRUPCION IIR +2

REGISTRO DE CONTROL DE LINEA LCR +3

REGISTRO DE CONTROL DE MODEM MCR +4

REGISTRO DE ESTADO DE LINEA LSR +5

REGISTRO DE ESTADO DE MODEM MSR +6

REGISTRO DE CONTROL DE ERRORES SCR +7

DLAB 0

DLAB 1

Así el acceso al Registro THR será Puerto Base +0 (con el DLAB=0), mientras que para el registro DLL será Puerto Base +0 (con DLAB=1) y para el registro MSR será Puerto Base +6, etc En cuanto a los registros, el direccionamiento será como se detalla en la tabla.

A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 DLAB

IDENTIFICACION DEL REGISTRO

1 1/0 1 1 1 1 1 X X X

0 0 0 0

0 0 1 00 1 0 X0 1 1 X1 0 0 X1 0 1 X1 1 0 X1 1 1 X0 0 0 10 0 1 1

BUFFER TRANSMISION,RECEPCIONY REGISTRO DE RETENCION

ACTIVA INTERRUPCION

CONTROL DE LINEA

IDENTIFICA INTERRUPCION

DIVISOR MAS SIGN IFICATIVO MSB

CONTROL DE MODEM

ESTADO DE LINEA

ESTADO DE MODEM

NO SE USA

DIVISOR MENOS SIGNIFICATIVO LSB

NOMBRE DEL REGISTRO

2 o 3F

SIEMPRE

SSEELLEECCCCIIÓÓNN DDEELL RREEGGIISSTTRROO:: La selección de registro se lleva a cabo utilizando las tres entradas A0, A1 y A2. Durante las operaciones de lectura y escritura en dichos registros ha de tenerse en cuenta que no se tiene, en todos los casos, un acceso directo a cada uno de los diez registros de usuario disponibles en la UART. Para acceder a algunos registros se hace necesario, como ya se ha mencionado, tener en cuenta el estado del bit DLAB. Dicho bit es el más significativo del Registro de Control de Línea, es decir el bit 7, que debe encontrarse en estado alto para poder acceder a los registros divisores de la velocidad de reloj tal como se remarca en la tabla anterior. RREEGGIISSTTRROO DDEE RREETTEENNCCIIÓÓNN DDEE TTRRAANNSSMMIISSIIÓÓNN ((TTHHRR)) Este registro es el dispositivo de salida de la información en serie y por lo tanto. contiene el carácter que se va a enviar, el bit 0 es el menos significativo y es el

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

12

primero que se envía. Se constituye como buffer de transmisión que genera una cola en la que se almacenan los datos que esperan su transformación a serie. Mejora la eficiencia de transmisión

DIRECCION PUERTO BASE+0 REGISTRO DE ESCRITURADLAB 0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Posicion del bit

Posicion del bit de datos

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

DATOS

Existen una interacción entre este registro y el de Estado de Línea (LSR), de modo que cuando el registro de desplazamiento de transmisión (registro interno creado por el 8250 para ir desplazando los bits y mandarles en serie - el Transmitter Shift Register) que esta enviando el carácter actual se vacíe, será cargado desde el THR para transmitir el nuevo carácter. Al quedar vacío THR, el bit THRE del Registro de Estado de Línea (LSR) que indica que el 8250 puede aceptar un nuevo carácter para la transmisión se activa. En la figura se identifica esta operativa y el bit THRE del LSR.

Contenido del registro THR

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

DATOS

REGISTRO DE DESPLAZAMIENTO DE TRANSMISION

0bit 7

TEMTbit 6

DRbit 0

THREbit 5

BIbit 4

FRbit 3

PEbit 2

OEbit 1

REGISTRO LSR

EL 8250 PUEDEACEPTAR OTRO

CARACTER

Contenido del registro THR

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

REGISTRO DE DESPLAZAMIENTO DE TRANSMISION

Registro THR vacio

Cuando estén vacíos tanto el THR como el registro de desplazamiento de transmisión, el bit TEMT del LSR se activa indicando que esta vacío y puede atender a un nuevo carácter.

REGISTRO THR

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

DATOS

REGISTRO DE DESPLAZAMIENTO DE TRANSMISION

VACIO

VACIO

0bit 7

TEMTbit 6

DRbit 0

THREbit 5

BIbit 4

FRbit 3

PEbit 2

OEbit 1

REGISTRO LSR

TRANSMISORVACIO

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

13

RREEGGIISSTTRROO DDEE EESSTTAADDOO DDEE LLIINNEEAA ((LLSSRR)) Este suele ser el primer registro consultado tras una interrupción. Siendo un registro de lectura y sobre el que se recomienda no efectuar escritura se accede a él a través del puerto base +5 con arreglo a la tabla ya expuesta. En la figura se identifica cada posible valor de los bits de dicho registro.

0bit 7

TEMTbit 6

DRbit 0

THREbit 5

BIbit 4

FRbit 3

PEbit 2

OEbit 1

TRANSMISORVACIO

INDICADOR DEQUE EL THR PUEDE ACEPTAR

OTRO CARACTER SE DESACTIVAAL ESCRIBIR UN NUEVOCARACTER EN EL THR

INTERRUPCIONBREAK

ERROR DETRAMA

ERROR DETRAMA DESBORDE

DATOSPREPARADOS

El bit de Datos Preparados DR esta activo cuando hay un carácter listo en el Registro de Datos en Recepción RBR y el DR se pone a 0 cuando se lee el contenido del registro 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.

• El bit OE trata el tema de la sobrescritura y 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 sobrescrito.

• El bit PE indica si hay un error de paridad. • El bit FE indica si el carácter recibido no tiene los bit de stop

correctos. • El bit 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. El bit THRE tal como se indica en la figura informa de que el 8250 puede aceptar un nuevo carácter. Tal como se explico en el registro de THR (Retención de Transmisión se activa al quedar libre THR y se desactiva escribiendo un nuevo carácter en el THR. RREEGGIISSTTRROO ((BBUUFFFFEERR)) DDEE RREECCEEPPCCIIÓÓNN ((RRBBRR)) Este registro es de lectura y a el se accede por puerto +0 siendo el dispositivo de entrada de la información serie y por lo tanto contiene el carácter que se ha recibido, el bit 0 es el menos significativo y es el primero que se recibe después del bit de arranque (START). La lectura de este registro captura el byte de flujo de datos serie para pasar a estructura paralelo.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

14

DIRECCION PUERTO BASE+0 REGISTRO DE LECTURADLAB 0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Posicion del bit

Posicion del bit de datos

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

DATOS

En el caso de que DLAB (bit 7 del registro LCR) no este activo, este registro actuara como el buffer de recepción y los datos entran en serie por SIN (comenzando por el bit D0) en un registro de desplazamiento gobernado por el reloj de RCLK, sincronizado con el bit de inicio. Cuando un carácter completa el registro de desplazamiento de recepción, sus bits son volcados al RBR y el bit DR del LSR es activado para indicar a la CPU que puede leer el RBR.

REGISTRO RBR

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

REGISYTRO DE DESPLAZAMIENTODE RECEPCION

DATOS SERIE POR PATILLA SINDO

D1D2

D3D4

0bit 7

TEMTbit 6

DRbit 0

THREbit 5

BIbit 4

FRbit 3

PEbit 2

OEbit 1

REGISTRO LSR

ACTIVADOEl contenido del registro RBRpuede leerse

Cuando el bit 7 del registro de control de línea (LCR), es decir el denominado DLAB, esta a 1 este registro (RBR) pasa a ser el registro DLL es decir el registro que contiene le byte menos significativo del divisor de velocidad

REGISTRO RBR

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

DLAB =1

BYTE MENOS SIGNIFICATIVO DELDIVISOR DE VELOCIDAD

DLABbit 7

BREAKbit 6

WLS2bit 0

PARIDADbit 5

EPSbit 4

PENbit 3

STBbit 2

WLS1bit 1

REGISTRO DLL

REGISTRO LRC

La UART esta diseñada para permitir la recepción continua de datos sin pérdidas: el RBR almacena siempre el último carácter recibido dando tiempo suficiente a la CPU para leerlo mientras simultáneamente está cargando el registro de desplazamiento con el siguiente; si la CPU tarda demasiado un nuevo dato podría aparecer en el RBR antes de haber leído el anterior (condición de overrun, bit OE del LSR).

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

15

RREEGGIISSTTRROO DDIIVVIISSOORR ((MMEENNOOSS SSIIGGNNIIFFIICCAATTIIVVOO)) ((DDLLLL)).. Este registro contendrá el byte menos significativo del divisor de reloj y se obtendrá de dividir 115000 por la velocidad.

DIRECCION PUERTO BASE+0 REGISTRO LECT/ESCRITURADLAB 1

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Posicion del bit

8 bits del divisorde velocidad de reloj

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

BYTE MENOS SIGNIFICATIVO

RREEGGIISSTTRROO DDIIVVIISSOORR ((MMAASS SSIIGGNNIIFFIICCAATTIIVVOO))((DDLLMM)) Este registro contendrá el byte mas significativo del divisor de reloj y se obtendrá de dividir 115000 por la velocidad.

DIRECCION PUERTO BASE+1 REGISTRO LECT/ESCRITURADLAB 1

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Posicion del bit

8 bits del divisorde velocidad de reloj

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Bit 15 Bit 14Bit 13Bit 12 Bit 11Bit 10 Bit 9 Bit 8

BYTE MAS SIGNIFICATIVO

La conjunción del contenido de ambos registros divisores da el dato con el cual ha de tratarse la información en lo relativo a velocidad con arreglo a lo que en el siguiente apartado se detalla.

DIRECCION PUERTO BASE+1 REGISTRO LECT/ESCRITURADLAB 1

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Posicion del bit

8 bits del divisorde velocidad de reloj

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Bit 15 Bit 14Bit 13Bit 12 Bit 11Bit 10 Bit 9 Bit 8

BYTE MAS SIGNIFICATIVO

DIRECCION PUERTO BASE+0 REGISTRO LECT/ESCRITURADLAB 1

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Posicion del bit

8 bits del divisorde velocidad de reloj

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

BYTE MENOS SIGNIFICATIVO

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

BYTE MENOS SIGNIFICATIVO

Bit 15 Bit 14Bit 13Bit 12 Bit 11Bit 10 Bit 9 Bit 8

BYTE MAS SIGNIFICATIVO

DIVISOR DE VELOCIDAD

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

16

GGEENNEERRAADDOORR DDEE VVEELLOOCCIIDDAADD DDEE TTRRAANNSSMMIISSIIÓÓNN PPRROOGGRRAAMMAABBLLEE.. La UART contiene un generador de velocidad de transmisión que es capaz a partir de la entrada de reloj (1.8432Mhz) y dividiendo por algún valor comprendido entre 1 y 216-1 conseguir un elevado numero de velocidades posibles tal como se muestra en la tabla 4. El generador de velocidades consta de un contador en el que con cada ciclo de reloj se reduce en una unidad. Cuando dicho contador llega a cero se envía o recibe un bit por los circuitos de transmisión, reinicializandose dicho contador. Inicialmente dicho valor se encuentra en los dieciséis bits situados en la dirección F000:E729 de la ROM BIOS. A este valor se le denomina divisor de transferencia de baudios y corresponde a lo incluido en los registros DLM y DLL que en el párrafo anterior se detallaron, su valor se calcula dividiendo entre dieciséis la señal de reloj dando un resultado de 115.000, el divisor (que es el número que deberemos cargar en el registro) lo obtendremos al dividir éste número entre la velocidad deseada en baudios (115.000/Xbaudios = Divisor). El cristal de cuarzo que utiliza el reloj para obtener las velocidades de comunicación no es único, en algunas ocasiones pueden usarse cristales de frecuencias superiores los mas usuales son: el ya mencionado cristal de 1.8432 Mhz y cristales de frecuencias 2.4576 y 3.072 Mhz respectivamente. En estos casos los valores del divisor se incrementaran proporcionalmente. Aplicando la operación antes detallada, para 2400 bps seria 48 lo que significa carga los hexadecimales 00 en el registro DLL y 30 en el registro DLM. Para 4800 bps:

0 0 1 8 -------- 00 1800 1800000000 00011000

-------- 00 1800 18BYTE MAS SIGNIFICATIVO

EJEMPLO:VELOCIDAD DE 4800 BAUDIOS115000/4800=23,958 ------ 2424 ------------ 2424 ------

BYTE MENOS SIGNIFICATIVO

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

17

TABLA 4 Velocidad en Baudios a 1.8432 Mhz

Velocidad deseada en

Baudios

Divisor usado para generar 16 x Clock (Decimal

Hex)

Byte mas significativo DLM (Hex.)

Byte menos significativo DLL (Hex.)

Porcentaje de error entre la

velocidad deseada y la

real

50 2300 900 09 00 -

75 1536 600 06 00 -

110 1047 417 04 17 0.026

134.5 857 359 0.058

150 768 300 -

300 384 180 01 80 -

600 192 0C0 00 C0 -

1200 96 060 00 60 -

1800 64 040 00 40 -

2000 58 03A 00 3A 0.69

2400 48 030 00 30 -

3600 32 020 00 20 -

4800 24 018 00 18 -

7200 16 010 00 10 -

9600 12 00C 00 0C -

14400 8 00 08 -

19200 6 00 06 -

28800 4 00 04 -

38400 3 00 03 -

57600 2 00 02 2.86

115200 1 00 01 -

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

18

RREEGGIISSTTRROO AACCTTIIVVAADDOORR DDEE IINNTTEERRRRUUPPCCIIOONNEESS ((IIEERR)) A este registro se accede por puerto +1 y con el DLAB a 0 es de escritura y se utiliza para seleccionar qué interrupciones activan la patilla 30 del chip UART identificada INTRPT y, por consiguiente, van a ser solicitadas a la CPU. Deshabilitar el sistema de interrupciones inhibe el IIR y desactiva la salida INTRPT.

0bit 7

0bit 6

IER0bit 0

0bit 5

0bit 4

IER3bit 3

IER2bit 2

IER1bit 1

A 1 activa la interrupcion dedato recibido disponible

A 1 activa la interrupcion deregistro temporal de

transmision vacio

A 1 activa la interrupcion delestado de la linea de

recepcion

A 1 activa la interrupcion delestado del modem

RREEGGIISSTTRROO IIDDEENNTTIIFFIICCAADDOORR DDEE IINNTTEERRRRUUPPCCIIOONNEESS ((IIIIRR)) A este registro se accede por puerto +2 y con el DLAB a 0 es de lectura y se utiliza para informar de que hay una interrupción pendiente y el tipo de la misma es almacenado en IIR. Solo se reconocen si la CPU manda la señal de reconocimiento adecuada. Antes de tratar este registro es adecuado identificar los niveles de interrupciones posibles:

• Estado de la línea de recepción. • Dato recibido disponible • Registro de retención de transmisión vacío. • Estado del modem.

Estos se contemplan en tabla aparte, la estructura del registro es:

0bit 7

0bit 6

bit 00bit 5

0bit 4

0bit 3

bit 2 bit 1

0 =Interrupcion pendiente1= No hay interrupcion

Identificacion de lainterrupcion

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

19

(*) REGISTRO IDENTIFICADOR

DE INTERRUPCIONES

TIPOS DE INTERRUPCIÓN Y REINICIALIZACIÓN

BIT 2 (1)

BIT 1 (0)

BIT 0 NIVEL DE PRIORIDAD

TIPO DE INTERRUPCIÓN

ORIGEN DE LA INTERRUPCIÓN

REINICIALIZACIÓN DE LA INTERRUPCIÓN

0 0 1 No hay No hay

1 1 0 Primario Estado de línea del receptor

Error de overrun, paridad, trama o break-interrupt

Leyendo el registro de estado de línea

1 0 0 Secundario Dato disponible en el receptor

Dato disponible en el receptor

Leyendo el buffer de recepción

0 1 0 Terciario Registro de retención de transmisión vacío

Registro de retención de transmisión vacío

Leyendo el registro identificador de interrupciones IIR (si es el origen de la interrupción) o escribiendo en el registro de retención de transmisión

0 0 0 Cuaternario Estado de modem

Borrado para enviar (CTS) o conjunto de datos preparado (DSR) o indicador de llamada (RI) o señal directa recibida por línea

Leyendo el registro de estado de modem

RREEGGIISSTTRROO DDEE CCOONNTTRROOLL DDEE LLIINNEEAA ((LLCCRR)) Este registro controla la estructura del formato de datos y apoya a la selección de los registros divisores para establecer la velocidad de operación que atiende al puerto serie. Siendo un registro de escritura/lectura se accede a el a través del puerto base +3 con arreglo a la tabla ya expuesta. En él el bit 7 es el denominado bit DLAB (Divisor Latch Access Bit) dado que da permiso para acceder a los Latches DLL y DLM del generador de velocidad. En la figura se identifica cada posible valor de los bit de dicho registro.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

20

DLABbit 7

BREAKbit 6

WLS2bit 0

PARIDADbit 5

EPSbit 4

PENbit 3

STBbit 2

WLS1bit 1

TAMANO DEL DATO

0 1 BIT DE PARADA1 2 BITS DE PARADA

1 SALIDA SOUT A ESPACIO (0)0 SALIDA SOUT A MARCA

1 SE PERMITE ACCESO ADIVISORES DLL Y DLM

0 SE PERMITE ACCESO ARBR THR Y IER

SELECCION DEREGISTROS

0 0 DATOS DE 5 BITS0 1 DATOS DE 6 BITS1 0 DATOS DE 7 BITS1 1 DATOS DE 8 BITS

0 0 0 SIN PARIDAD0 0 1 PARIDAD IMPAR0 1 1 PARIDAD PAR1 0 1 MARCA (1)1 1 1 ESPACIO

Es importante resaltar que el bit STB que identifica el numero de bit de parada a emplear, aun admitiendo dos valores, tal como se representa en la figura, si se combina con el numero de bits para el caso de 5 bits de datos, su significado para este caso en vez de 1 de parada será 1,5 bits. Con el Break Control se permite que la CPU avise a un terminal del sistema sin necesidad de transmitir carácter alguno y para ello se deben ejecutar las siguientes acciones.

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) 4) Desactivar el Break Control.

Durante el Break, el transmisor puede usarse como un temporizador de carácter RREEGGIISSTTRROO DDEE CCOONNTTRROOLL DDEE MMOODDEEMM ((MMCCRR)) Es un registro de lectura y escritura y su función principal es controlar el interfaz con el MODEM, de hecho se activan circuitos de la RS 232 tales como DSR, RTS. A él se accede por puerto base +4 y en el registro de control de línea (LCR) tiene que estar el DLAB a cero.

0bit 7

0bit 6

DTRbit 0

0bit 5

LOOPbit 4

SOUT 2bit 3

SOUT 1bit 2

RTSbit 1

Activa el puerto en modo diagnosticoconectando en bucle digital local

la salida del registro de transmisiona la entrda del registro de recepcion.

Comprobacion de la UART

Linea auxiliar 2 deproposito general

Linea auxiliar 1 deproposito general

Request To SendPeticion para

enviar Data Terminal ReadyEquipo de datos

preparado

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

21

RREEGGIISSTTRROO DDEE EESSTTAADDOO DDEE MMOODDEEMM ((MMSSRR)) Este registro informa del estado del MODEM, se accede a él puerto base +5 y con el DLÑAB a cero, siendo un registro de lectura. La estructura de este es:

DCDbit 7

RIbit 6

DCTSbit 0

DSRbit 5

CTSbit 4

DDCDbit 3

TERI1bit 2

DDSRbit 1

DataCarrierDetector

RingIndicator

DataSetReady

ClearToSend

DeltaDataCarrierDetector

DeltaDataSetReady

DeltaClearToSend

Cambiode alto abajo delRIEstado de los circuitos

DeltaDataCarrierDetector

DeltaDataSetReady

DeltaClearToSend

Cambiode alto abajo delRI

Cambio de lo existenteen los bits mas significativos

Nota: Delta significa que ha habido un cambio de estado en la línea desde que se ha leído por ultima vez el registro. Los bits 4,5,6 y 7 Indican el estado actual de la señal.

Los cuatro bit bajos informan acerca de si se ha efectuado algún cambio de estado desde la ultima lectura de este registro, teniendo en cuenta que el bit 2 TERI solo informa de las transiciones de nivel bajo a alto del circuito RI Al leerse el MSR, se borran los 4 bits referentes a cambio, es decir, los menos significativos de l registro, pero no los bits de estado DCD, RI, DSR, CTS, que reflejan la situación de activación o no de los circuitos físicos del interfaz RS232. Si DDCD, TERI, DDSR ó DCTS están a 1 y se produce un cambio de estado durante la lectura, dicho cambio no será reflejado en el MSR; pero si están a 0 el cambio será reflejado después de la lectura.

AACCCCEESSOO AA LLOOSS RREEGGIISSTTRROOSS El acceso a los diferentes registros de la UART se lleva a cabo en el PC a través de los puertos de comunicación especificados para ello. En el caso del PC-XT son las direcciones de puerto 3F8h para COM1 y 2F8h para COM2, en los equipos PS/2 es factible instalar hasta ocho posibles puertos. En el BIOS del sistema operativo del PC se soporta una tabla con la dirección base de los cuatro primeros puertos comenzando por COM1 en la dirección 0040:0000. En dicha dirección se encuentra el byte menos significativo de la dirección del puerto (3F8h) es decir 11111000 = F8h y en la siguiente 40:0001 el mas significativo 00000011= 03h.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

22

DIRECCION 0040 0000

F8 BYTE MENOS SIGNIFICATIVO 1111 1000

DIRECCION 0040 0001

03 BYTE MAS SIGNIFICATIVO 0000 0011

En el proceso de inicialización del sistema (POST - Power On Selft Test), se identifica cada uno de los interface serie y se sitúa la dirección de su puerto base según los valores que se aportan en la Tabla-5, teniendo en cuenta que si el interface no esta presente se carga cero en el valor de dirección que le corresponda y que la carga de dichas direcciones es secuencial. Estas direcciones pueden modificarse durante el curso de la ejecución de programas, permitiendo el redireccionamiento de los puertos un ejemplo podria ser la posibilidad de instalar un modem interno en la dirección física 3E8h (COM3) y trabajar como COM1 sustituyendo simplemente su valor actual por el mencionado anteriormente. Las siguientes tablas se particularizan para PC-XT/AT y para PS/2.

TABLA 5a. Puertos, direcciones y contenido del PC-XT/AT.

PUERTO DIR VALOR HEX.

DECIMAL BINARIO IRQ

COM1: 0040:0000 F8 248 11111000 4 0040:0001 03 3 00000011 4

COM2: 0040:0002 F8 248 11111000 3 0040:0003 02 2 00000010 3

COM3: 0040:0004 E8 232 11101000 4 0040:0005 03 3 00000011 4

COM4: 0040:0006 E8 232 11101000 3 0040:0007 02 2 00000010 3

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

23

TABLA 5b. Puertos, direcciones y contenido del PS/2.

IINNTTEERRCCOONNEEXXIIÓÓNN DDEE LLOOSS RREEGGIISSTTRROOSS.. En el siguiente esquema podemos ver la interconexión de los registros anteriormente descritos:

BUFFERBUS DEDATOS

BUFFERREGISTRO

DE RECEPCIÓN

REGISTRODE CONTROL

DE LINEA

REGISTRODIVISOR (1)

REGISTRODIVISOR (2)

REGISTRODE ESTADODE LINEA

REGISTRO DEDESPLAZAMIENTODE TRANSMISIÓN

REGISTRO DECONTROL DE

MODEM

REGISTRODE ESTADODE MODEM

REGISTROACTIVADOR DE

INTERRUPCIONES

REGISTROIDENTIFICADOR DEINTERRUPCIONES

LOGICA DECONTROL DE

INTERRUPCIONES

LOGICADE

CONTROLDE

MODEM

REGISTRODE

TRANSMISIÓN

CONTROL&

TEMPORIZACIÓNDE

TRANSMISIÓN

GENERADORDE

VELOCIDAD

CONTROL&

TEMPORIZACIÓNPARA

RECEPCIÓN

REGISTRODE

RECEPCIÓN

BUS DE DATOSINTERNO

D0-D7Sin

RCLK

BAUDOT

Sout

RTSCTSDTRDSRDCD

RIOUT1OUT2

INTERUP

PUERTO DIRECCIÓN VALOR HEX.

DECIMAL BINARIO IRQ

COM1: 0040:0000 F8 248 11111000 4 0040:0001 03 3 00000011 4

COM2: 0040:0002 F8 248 11111000 3 0040:0003 02 2 00000010 3

COM3: 0040:0004 20 32 00100000 3 0040:0005 32 50 00110010 3

COM4: 0040:0006 28 40 00101000 3 0040:0007 32 50 00110010 3

COM5 0040:0008 20 32 00100000 3 0040:0009 42 66 01000010 3

COM6 0040:000A 28 40 00101000 3 0040:000B 42 66 01000010 3

COM7 0040:000C 20 32 00100000 3 0040:000D 52 82 01010010 3

COM8 0040:000E 28 40 00101000 3 0040:000F 52 82 01010010 3

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

24

OOPPEERRAATTIIVVAA DDEE TTRRAABBAAJJOO DDEE LLAA UUAARRTT.. El paso inicial para poder trabajar con la UART es configurar los parámetros de comunicación, eso es lo mínimo que se necesita para poder establecer la comunicación mas elemental. Esto se realiza cargando el registro de control de línea(LRC), puerto (3FBh), con los valores adecuados a las características de la transmisión a realizar, longitud de palabra, activación de paridad, selección de paridad y bits de parada. Es importante resaltar que la primera acción a tomar es establecer los valores que permitan seleccionar la velocidad y para ello los divisores que anteriormente se detallaron y que deberían estar cargados en los registros DLM y DLL (puertos 3F8h y 3F9h respectivamente)habiendo condicionado su selección con el bit DLAB en el registro de control de línea. Una vez cargados estos valores se desactiva el DLAB lo que permitirá acceder a los registros de recepción y transmisión de datos. Al llegar una información al registro de transmisión es automáticamente volcada a un registro interno de la UART donde son añadidos los bit de arranque, parada, paridad y a continuación transmitida. En el registro de recepción encontraremos el ultimo dato llegado al puerto serie, dato que deberemos leer inmediatamente si no lo queremos perder ya que el siguiente dato recibido borrara a este sin recuperación posible en este nivel de comunicación. Cuando esto ocurra, es decir, que se sobrescriba, se activará el bit 1 del registro de estado de línea en el puerto 3FDh, indicando un error de rebosamiento en recepción (overrun), leyendo este mismo registro podremos identificar otros posibles errores producidos en la comunicación, paridad, sincronismo, break. Este mismo registro nos indica en el bit 0 (DR) cuando tenemos un dato disponible para leer en el buffer de recepción. Dicho método es el usado en sondeo. LLAA TTRRAANNSSMMIISSIIÓÓNN YY LLAA RREECCEEPPCCIIÓÓNN EENN EELL 88225500 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.

REGISTRO RETENCION DE TRANSMISION (THR)

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

REGISTRO DESPLAZAMIENTO DE TRANSMISION (TSR)

DATOS

0bit 7

TEMTbit 6

DRbit 0

THREbit 5

BIbit 4

FRbit 3

PEbit 2

OEbit 1

TSRVACIO

THRVACIO

DATOS DO A D7

THRE ACTIVO

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

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

25

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 de alto a 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.

PPRROOGGRRAAMMAACCIIÓÓNN DDEE LLAA UUAARRTT.. Las dos formas clásicas que ya conocemos, sondeo e interrupción se amplían en cuanto a posibilidades dependiendo del nivel de control en profundidad que deseemos del dispositivo. Manipulando los puertos del PC podremos conseguir el mayor grado de control sobre el circuito si bien a costa de una elevada complejidad, otra opción que discutiremos será el control por medio de la interrupción 14 del BIOS. Se desarrollan a continuación varias opciones que nos van a permitir desde un control sencillo y superficial de la UART, hasta un control extremadamente complejo de UART y modem.

•Podremos realizar las operaciones de programación directamente sobre los puertos de entrada salida del PC.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

26

Desde BASIC:

10 PUERTO=&H3F8 ' Selecciona puerto COM1 20 OUT PUERTO+3,128 ' Activa bit 7 DLAB del registro de control de línea LCR.

El registro LCR es alcanzable mediante puerto base +3 y se carga con 128 que es 10000000 luego el bit 7 es el DLAB, esto preemitirá acceder a los registros DLM y DLL.

30 OUT PUERTO,48 ' Carga byte menos significativo del registro divisor (2400)

El registro DLL es alcanzable mediante puerto base +0 pero con DLAB a 1 ya que si no fuera así seria el THR. En él se carga 48 que es el byte menos significativo para la velocidad de 2400.

40 OUT PUERTO+1,0 ' Carga byte mas significativo del registro divisor (2400)

El registro DLM es alcanzable mediante puerto base +1 pero con DLAB a 1 ya que si no fuera así seria el IER. En él se carga 00 que es el byte mas significativo para la velocidad de 2400 En este punto ya habremos condicionado la velocidad y debemos ahora establecer los parámetros para organizar el carácter y sus condicionantes.

50 OUT PUERTO+3,0 ' Cambia bit del LCR para acceder a los otros registros

El registro LCR es alcanzable mediante puerto base +3 y se carga con 0 luego el bit 7 es el DLAB es 0, esto preemitirá acceder a los registros de THRYRBR y IER.

60 OUT PUERTO+3,3 ' Configura LCR con 8,N,1 70 OUT PUERTO+1,0 ' Desactiva interrupciones

A partir de este punto se deben efectuar comprobaciones de lo que existe en el registro LSR para leer el dato o actuar con arreglo a la información que sobre errores proporciona este registro. El registro LSR puede contener 00000001 o cualquier combinación, en el primer caso se esta informando que el dato recibido esta preparado. Con cualquier otro valor, diferente a este, se aporta información acerca de error de rebosamiento, error de paridad, error de sincronismo, registro de transmisión vacío, et, pero no que el dato este preparado lo que significa que no podremos leer

80 IF 1 AND INP(PUERTO+5) THEN PRINT CHR$(INP (PUERTO));: GOTO 80

Esto realiza la comprobación de que efectivamente el registro LSR esta cargado con 00000001 y por lo tanto esta el dato preparado. Y si es así se imprime el contenido del puerto (puerto base +0 con DLAB a cero es RBR) Con el dato en el RBR este se vuelca en un registro interno para que se le añadan los parámetros grabados en el LCR y se envía

90 A$=INKEY$:IF A$<>"" THEN OUT PUERTO,ASC(A$) Si hay dato, lo que se comprueba con A$ diferente de “” escribir en el

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

27

THR que es puerto base +0 con DLAB a cero. 100 GOTO 80 Es aconsejable efectuar modificaciones del programa para que trabaje a velocidades no permitidas en BASIC por ejemplo 115.200 bit/seg y una vez realizadas estas modificaciones se comprobaran cabo por medio de el comando RS que los cambios se han llevado a cabo.

PPRROOGGRRAAMMAA CCOONN VVEELLOOCCIIDDAADD DDEE 99660000.. 10 PUERTO=&H3F8 ' Selecciona puerto COM1 20 OUT PUERTO+3,128 ' Activa bit 7 DLAB del registro de control de línea LCR. 30 OUT PUERTO,12 ' Carga byte menos significativo del registro divisor (9600) 40 OUT PUERTO+1,0 ' Carga byte mas significativo del registro divisor (9600) 50 OUT PUERTO+3,0 ' Cambia bit del LCR para acceder a los otros registros 60 OUT PUERTO+3,3 ' Configura LCR con 8,N,1 70 OUT PUERTO+1,0 ' Desactiva interrupciones 80 IF 1 AND INP(PUERTO+5) THEN PRINT CHR$(INP (PUERTO));: GOTO 80 90 A$=INKEY$:IF A$<>"" THEN OUT PUERTO,ASC(A$) 100 GOTO 80

PPRROOGGRRAAMMAA CCOONN SSAALLIIDDAA OORRDDEENNAADDAA.. 10 PUERTO=&H3F8 20 OUT PUERTO+3,128 30 OUT PUERTO, &H01 40 OUT PUERTO+1, &H80 50 OUT PUERTO+3,0 60 OUT PUERTO+3,3 70 OUT PUERTO+1,0 80 IF 1 AND INP(PUERTO+5) THEN PRINT CHR$(INP(PUERTO));:GOTO 80 90 A$=INKEY$:IF ASC(A$)=&H1B THEN END (si es el carácter de escape, salimos) ELSE IF A$ <>”” THEN OUT PUERTO ASC(A$) 100 GOTO 80

PPRROOGGRRAAMMAA CCOONN DDEETTEECCCCIIOONN DDEE EERRRROORREESS.. 10 PUERTO=&H3F8 20 OUT PUERTO+3,128 30 OUT PUERTO, &H01 40 OUT PUERTO+1, &H80 50 OUT PUERTO+3,0 60 OUT PUERTO+3,3

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

28

70 OUT PUERTO+1,0 80 IF 1 AND INP(PUERTO+5) THEN PRINT CHR$(INP(PUERTO));:GOTO 80 90 LSR$=INP(PUERTO+5) 100 IF 16 AND LSR$ THEN PRINT “ERROR DE BREAK” 110 IF 8 AND LSR$ THEN PRINT “ERROR DE SINCRONISMO” 120 IF 4 AND LSR$ THEN PRINT “ERROR DE PARIDAD” 130 IF 2 AND LSR$ THEN PRINT “ERROR DE REBOSAMIENTO” 140 A$=INKEY$:IF ASC(A$)=&H1B THEN END (si es el carácter de escape, salimos) ELSE IF A$ <>”” THEN OUT PUERTO ASC(A$) 100 GOTO 80

PPRROOGGRRAAMMAA EENN EENNSSAAMMBBLLAADDOORR

El programa anterior en ensamblador seria: .MODEL SMALL DOSSEG .DATA PUERTO_BASE DW 03f8h ; Se corresponde com COM1 .STACK 200H .CODE COMIENZO: MOV AX,@DATA MOV DS,AX ; Para que DS apunte al segmento standar de datos ; ; El siguiente proceso configura el puerto COM1 ; con los siguientes parametros: 2400,N,8,1 ; Activacion de de bit DLAB MOV DX,PUERTO_BASE ADD DX,3 ; Se posiciona en RCL MOV AL,128 ; Selecciona el bit 7 de RCL OUT DX,AL ; Activa bit 7 del registro de control de linea ; Carga byte mas significativo del registro divisor (2400) MOV DX,PUERTO_BASE ; Se posiciona en byte mas significativo MOV AL,48 ; de reg. divisor (2400) OUT DX,AL ; Carga byte mas significativo de reg. divisor ; Carga byte menos significativo del registro divisor (2400) MOV DX,PUERTO_BASE ; ADD DX,1 ; Se posiciona en byte menos significativo MOV AL,0 ; de reg. divisor (2400) OUT DX,AL ; Carga byte menos significativo de reg. divisor ; Desactivacion de DLAB MOV DX,PUERTO_BASE ADD DX,3 ; Se posiciona en RCL MOV AL,0 ; Selecciona el bit 7 de RCL OUT DX,AL ; Desactiva bit 7 del registro de control de linea

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

29

; Configura RCL con 8,N,1 MOV AL,3 ; Configura RCL con 8,N,1 OUT DX,AL ; ; Se desactivan todas las interrupciones de la UART del puerto COM1 (3F8H) MOV DX,PUERTO_BASE ADD DX,1 ; Se posiciona en reg. activador de interrupciones MOV AL,0 ; Desactiva todas las interrupciones OUT DX,AL ; Proceso principal BUCLE: ; COMPRUEBA PUERTO MOV DX,PUERTO_BASE ADD DX,5 ; Se posiciona en reg. de estado de linea IN AL,DX ; Lee registro LSR TEST AL,00000001B ; Detecta que hay un caracter esperando a ; ser leido en la UART (operacion AND) JNZ RECEPCION ; TEST AL,01000000B ; Pregunta por bit 5 (reg. de trans. vacio) JNZ TRANSMISION JMP BUCLE ; Vuelve al bucle ; RECEPCION: ; Lee caracter del registo buffer de recepcion RBR MOV DX,PUERTO_BASE ; Se posiciona en RBR IN AL,DX ; Lee el registro ; El registro AL contiene el caracter recibido MOV DL,AL MOV AH,2 INT 21H ; Lo visualizamos ; Si el caracter es retorno de carro (CR) le anade avance de linea (LF) CMP DL,0DH ; Si el caracter no es retorno de carro (CR=ASCII ODH) JNE BUCLE ; vuelve al bucle MOV DL,0AH ; Anade avance de linea (LF=ASCII 0AH) MOV AH,2 ; INT 21H ; Visualiza el avance ; JMP BUCLE ; Vuelve al bucle ; TRANSMISION: ; Lectura de un caracter del teclado MOV AH,1 ; Comprueba que se ha pulsado una tecla INT 16H ; Interrupcion de teclado (BIOS) JZ BUCLE ; Retorna al bucle si no se ha pulsado MOV AH,0 ; Se lee la tecla que se ha pulsado INT 16H ; AL contiene el byte que se va a enviar ; CMP AL,1BH ; Pulsar Esc (ASCII=1BH) para terminar el programa JE TERMINAR ; ; Transmision del caracter MOV DX,PUERTO_BASE ; Se posiciona en reg. de retencion de transmision

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

30

THR OUT DX,AL ; se envia el contenido de AL al THR JMP BUCLE ; TERMINAR: MOV AH,4CH ; Retorna al DOS INT 21H ; END COMIENZO

UUTTIILLIIZZAACCIIÓÓNN DDEE LLAASS IINNTTEERRRRUUPPCCIIOONNEESS 1144 DDEE LLAA BBIIOOSS

•Usando las interrupciones 14h del BIOS que nos van a permitir inicializar el puerto, escribir o leer en el y un control sobre el estado de dicho puerto.

Se indican a continuación los servicios de comunicaciones serie de la BIOS en los adaptadores de puerto serie de los ordenadores IBM/PC-compatibles. El vector de la interrupción 14h reside en la dirección 00:50h de la tabla de vectores de interrupción. La BIOS inicializa el vector de la interrupción 14h en la dirección F000:E739h (FE739). La tabla de vectores de interrupción puede ser accedida después de que se haya terminado de realizar el proceso de POST (Power On Selft Test) desarrollado por el BIOS en el momento de inicialización del ordenador. Dicha tabla se encuentra en las posiciones mas bajas de la memoria, comenzando en la dirección 00:00h y terminando en la 00:3FFh

TABLA Funciones de comunicación de la interrupción 14h del BIOS

FUNCIÓN TIPO DE BIOS Descripción

00h PC-XT,AT,PS/2 Inicializa el puerto serie de comunicaciones

01h PC-XT,AT,PS/2 Transmite carácter

02h PC-XT,AT,PS/2 Recibe carácter

03h PC-XT,AT,PS/2 Lee el estado del puerto serie

04h PS/2 Inicializa el interface serie extendido

05h PS/2 Control del interface serie extendido

06h-FFh - Reservadas Todas estas funciones son seleccionadas a través del registro AH, como se describe detalladamente a continuación:

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

31

Inicializa el puerto serie de comunicaciones

Entrada: AH = 00h AL = Parámetros de inicialización del puerto serie Bits 7-5 = Velocidad en baudios: 000b = 110 baudios 001b = 150 baudios 010b = 300 baudios 011b = 600 baudios 100b = 1200 baudios 101b = 2400 baudios 110b = 4800 baudios 111b = 9600 baudios Bits 4-3 = Paridad: 00b = Sin paridad 01b = Impar 10b = Sin paridad 11b = Par Bit 2 = Numero de bits de parada: 0b = 1 Bit de parada 1b = 2 Bit de parada Bits 1-0 = Tamaño del carácter: 10b = Carácter de 7 bits 11b = Carácter de 8 bits DX = Numero de puerto serie 0,1,2,3 (COM1 = 0, COM2 = 1..) Salida: AH = Estado de la línea o puerto del interface: Bit 7 = 1 Error por time-out Bit 6 = 1 Registro de desplazamiento de transmisión vacío Bit 5 = 1 Registro de transmisión vacío Bit 4 = 1 Interrupción por ruptura (break) Bit 3 = 1 Error de trama Bit 2 = 1 Error de paridad Bit 1 = 1 Error de desbordamiento (overrun) Bit 0 = 1 Dato en registro de recepción AL = Estado de modem: Bit 7 = 1 Detectada portadora (DCD) Bit 6 = 1 Detectada llamada (RI) Bit 5 = 1 Conjunto de datos preparados (DSR) Bit 4 = 1 Borrado para enviar (CTS) Bit 3 = 1 Modificada detección de portadora (DELTA-

DCD) Bit 2 = 1 Modifica detección de llamada (DELTA-RI) Bit 1 = 1 Modificado conjunto de datos preparados

(DELTA DSR) Bit 0 = 1 Modificado borrado para enviar (DELTA-CTS)

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

32

Transmitir carácter Entrada: AH = 01h AL = Carácter a trasmitir (código ASCII del carácter a enviar) DX = Numero de puerto serie 0,1,2,3 (COM1 = 0, COM2 = 1..) Salida: AH = Estado de la línea: Bit 7 = 0 No ha habido error por time-out Bit 6 = 1 Registro de desplazamiento de transmisión vacío Bit 5 = 1 Registro de transmisión vacío Bit 4 = 1 Interrupción por ruptura (break) Bit 3 = 1 Error de trama Bit 2 = 1 Error de paridad Bit 1 = 1 Error de desbordamiento (overrun) Bit 0 = 1 Dato en registro de transmisión AL = Carácter enviado

Nota: Si la función se ejecuta correctamente el bit 7 de AH=0, si falló, dicho bit será uno. Se observa que los bits 0 a 6 de AH coinciden con la función de estado del puerto serie, no obstante para conseguir un chequeo completo del puerto ha de ejecutarse posteriormente la función 03h.

Leer carácter del interface

Entrada: AH = 02h DX = Numero de puerto serie 0,1,2,3 (COM1 = 0, COM2 =

1..) Salida: AH = Registro de estado de la línea: Bit 7 = 0 No ha habido error por time-out Bit 6 = 1 Registro de desplazamiento de transmisión

vacío. En general siempre cero Bit 5 = 1 Registro de transmisión vacío. En general

siempre cero Bit 4 = 1 Interrupción por ruptura (break) Bit 3 = 1 Error de trama Bit 2 = 1 Error de paridad Bit 1 = 1 Error de desbordamiento (overrun) Bit 0 = 1 Dato en registro de recepción AL = Carácter recibido

Nota: Si la función se ejecuta correctamente el bit 7 de AH=0, si falló, dicho bit será uno. Se observa que los bits 1 a 4 de AH coinciden con la función de estado del puerto serie, no obstante para conseguir un chequeo completo del puerto (comprobar el estado de los 8 bits) ha de ejecutarse posteriormente la función 03h. Normalmente se pregunta si AH=0 (OK). En caso contrario error.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

33

Lectura del estado del interface del puerto serie Entrada: AH = 03h DX = Numero de puerto serie 0,1,2,3 (COM1 = 0, COM2 = 1..) Salida: AH = Estado de la línea o interface: Bit 7 = 1 Error por exceso de tiempo Bit 6 = 1 Registro de desplazamiento de transmisión vacío Bit 5 = 1 Registro de transmisión vacío Bit 4 = 1 Interrupción por ruptura ( v) Bit 3 = 1 Error de trama Bit 2 = 1 Error de paridad Bit 1 = 1 Error de desbordamiento (overrun) Bit 0 = 1 Dato en registro AL = Estado de modem (si existe un modem conectado a dicho

puerto): Bit 7 = 1 Detectada portadora o señal en línea (DCD) Bit 6 = 1 Detectada llamada (RI) Bit 5 = 1 Conjunto de datos preparados (DSR) Bit 4 = 1 Borrado para enviar (CTS) Bit 3 = 1 Cambio en detección de portadora (DELTA-DCD) Bit 2 = 1 Detectado flanco en indicador de llamada

(DELTA-RI) Bit 1 = 1 Cambio en conjunto de datos preparados (DELTA

DSR) Bit 0 = 1 Modificado borrado para enviar (DELTA-CTS)

Inicializa el puerto serie extendido

Entrada: AH = 04h AL = 1 Interrupción (break) / Con 0 no hay interrupción BH = Bits 0 a 4 = Paridad: 000b = Sin paridad 001b = Impar 010b = Par 011b = Impar 100b = Par BL = Numero de bits de parada: 0b = 1 Bit de parada 1b = 2 Bit de parada con 6,7 u 8 bits de

longitud de carácter o 1.5 si la longitud de carácter a transmitir o chequear es de 5 bit

CH = Bits 1-0 = Tamaño del carácter: 00b = Carácter de 5 bits 01b = Carácter de 6 bits 10b = Carácter de 7 bits 11b = Carácter de 8 bits CL = Bits 0-4 = Velocidad en baudios: 0000b = 110 baudios 0001b = 150 baudios 0010b = 300 baudios

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

34

0011b = 600 baudios 0100b = 1200 baudios 0101b = 2400 baudios 0110b = 4800 baudios 0111b = 9600 baudios 1000b = 19200 baudios DX = Numero de puerto serie 0,1,2,3 (COM1 = 0, COM2

= 1..) Salida: AH = Estado de la línea o interface: Bit 7 = 0 Reservado / Bit 7 = 1 Error fuera de tiempo Bit 6 = 1 Registro de desplazamiento de transmisión

vacío Bit 5 = 1 Registro de transmisión vacío Bit 4 = 1 Interrupción por ruptura (break) Bit 3 = 1 Error de trama Bit 2 = 1 Error de paridad Bit 1 = 1 Error de desbordamiento (overrun) Bit 0 = 1 Dato en registro AL = Estado de modem (si existe un modem conectado a

dicho puerto): Bit 7 = 1 Detectada portadora o señal en línea

(DCD) Bit 6 = 1 Detectada llamada (RI) Bit 5 = 1 Conjunto de datos preparados (DSR) Bit 4 = 1 Borrado para enviar (CTS) Bit 3 = 1 Cambio en detección de portadora

(DELTA-DCD) Bit 2 = 1 Detectado flanco en indicador de llamada

(DELTA-RI) Bit 1 = 1 Cambio en conjunto de datos preparados

(DELTA DSR) Bit 0 = 1 Modificado borrado para enviar (DELTA-

CTS)

Control del puerto serie extendido Entrada: AH = 05h AL = 00h Leer registro de control de modem.

01h Escribir en registro de control de modem DX = Numero de puerto serie 0,1,2,3 (COM1 = 0, COM2 = 1..) BL = Escribir en el registro de control de modem.

Con AL = 01h Bit 7 Reservado Bit 6 Reservado Bit 5 Reservado Bit 4 = 1 Control de bucle (para pruebas) Bit 3 = 1 Salida 2 Bit 2 = 1 Salida 1 Bit 1 = 1 Preparado para enviar (RTS)

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

35

Bit 0 = 1 Terminal de datos preparado Salida: AH = Estado de la línea o interface: Bit 7 = 1 Error por exceso de tiempo Bit 6 = 1 Registro de desplazamiento de transmisión vacío Bit 5 = 1 Registro de transmisión vacío Bit 4 = 1 Interrupción por ruptura (break) Bit 3 = 1 Error de trama Bit 2 = 1 Error de paridad Bit 1 = 1 Error de desbordamiento (overrun) Bit 0 = 1 Dato en registro AL = Estado de modem (si existe un modem conectado a dicho puerto): Bit 7 = 1 Detectada portadora o señal en línea (DCD) Bit 6 = 1 Detectada llamada (RI) Bit 5 = 1 Conjunto de datos preparados (DSR) Bit 4 = 1 Borrado para enviar (CTS) Bit 3 = 1 Cambio en detección de portadora (DELTA-DCD) Bit 2 = 1 Detectado flanco en indicador de llamada (DELTA-RI) Bit 1 = 1 Cambio en conjunto de datos preparados (DELTA DSR) Bit 0 = 1 Modificado borrado para enviar (DELTA-CTS) BL = Leer el contenido del registro de control de modem.

Con AL = 00h Bit 7 Reservado Bit 6 Reservado Bit 5 Reservado Bit 4 = 1 Control de bucle (para pruebas) Bit 3 = 1 Salida 2 Bit 2 = 1 Salida 1 Bit 1 = 1 Preparado para enviar (RTS) Bit 0 = 1 Terminal de datos preparado

Nota: Si la función se ejecuta correctamente el bit 7 de AH=0, si falló, dicho bit será uno. Se observa que los bits 1 a 4 de AH coinciden con la función de estado del puerto serie, no obstante para conseguir un chequeo completo del puerto (comprobar el estado de los 8 bits) ha de ejecutarse posteriormente la función 03h. Normalmente se pregunta si AH=0 (OK). En caso contrario error.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

36

EEJJEEMMPPLLOOSS DDEE PPRROOGGRRAAMMAASS UUTTIILLIIZZAANNDDOO LLAASS IINNTTEERRRRUUPPCCIIOONNEESS 1144HH DDEELL BBIIOOSS:

PPRROOGGRRAAMMAA DDEE TTRRAANNSSMMIISSIIÓÓNN:: .MODEL SMALL DOSSEG .STACK 200H .CODE COMIENZO: ; Se carga el registro AL MOV AL,01000011B ; Velocidad 300 Baudios (Bits 7-5), ; sin paridad (Bits 4-3), 1 Bit de stop (Bit 2) ; y longitud de palabra 8 Bits (Bits 1-0) ; Se selecciona el puerto MOV DX,0 ; COM1: DX=0 / COM2: DX=1 ; Se invoca a la interrupción para la inicialización del puerto MOV AH,0 ; Función 0 de la int. 14H inicializa puerto INT 14H ; Llama a la interrupción 14H ;******************* TRANSMISION DE DATOS ****************** BUCLE: ; COMPRUEBA PUERTO MOV AH,3 ; Función 3 de INT 14H. Obtiene status de MOV DX,0 ; puerto serie COM1: ya que DX=0 INT 14H TEST AH,01000000B ; Pregunta por bit 5 (reg. de transmisión vacío) JZ BUCLE ; Si no lo esta vuelve al bucle ; MOV AH,1 ; Función 1 de INT 21H: Lee carácter del teclado INT 21H ; con ECO. Siendo el teclado sensible a la ; pulsación de Ctrl+Breack. ; El registro AL contiene el carácter leído del teclado ; ENVIA CARACTER AL PUERTO MOV AH,1 ; COM1 ya que DX=0 y AL=caracter INT 14H ; ; JMP BUCLE ; Vuelve al bucle END COMIENZO PROGRAMA DE RECEPCIÓN: .MODEL SMALL DOSSEG .DATA VELOCIDAD DB 00000000B PARIDAD DB 00000000B LONGITUD DB 00000000B BITSTOP DB 00000000B .STACK 200H .CODE COMIENZO:

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

37

MOV AX,@DATA MOV DS,AX ; Para que DS apunte al segmento o grupo standar de datos ;************ APERTURA DEL PUERTO DE COMUNICACIONES ****** ; Se asignan valores a las variables MOV VELOCIDAD,01000000B ; 300 Baudios BITS 7-5 MOV PARIDAD,00000000B ; Sin paridad BITS 4-3 MOV LONGITUD,00000011B ; 8 Bits BITS 1-0 MOV BITSTOP,00000000B ; 1 Bit de parada BIT 2 ; Se carga el registro AL MOV AL,0 ; Pone a 0 el reg. AL OR AL,VELOCIDAD ; Se van anadiendo parametros OR AL,PARIDAD ; al registro AL OR AL,LONGITUD ; OR AL,BITSTOP ; Ya estan todos lo parametros ; Se selecciona el puerto MOV DX,0 ; COM1: DX=0 / COM2: DX=1 ; Se seleciona la funcion de inicializacion de puerto AH=0 MOV AH,0 ; Se carga el registro AH ; Se invoca a la interrupcion para la inicializacion del puerto INT 14H ; LLAMA A LA INTERRUPCION 14H ;*********************** RECEPCION DE DATOS ****************** BUCLE: ; COMPRUEBA PUERTO MOV AH,3 ; Leer estado de puerto serie MOV DX,0 ; Puerto COM1: INT 14H TEST AH,00000001B ; Detecta que hay un caracter esperando a ; ser leido en la UART (operacion AND) JZ BUCLE ; Si no lo esta vuelve al bucle ; LEE CARACTER DEL PUERTO MOV AH,2 ; Se seleciona la funcion de recepcion AH=2 ; MOV DX,0 ; Se selecciona el puerto COM1: DX=0 INT 14H ; Llama a la interrupcion 14H ; El registro AL contiene el caracter recibido ; Lo visualizamos MOV DL,AL MOV AH,2 INT 21H ; JMP BUCLE ; Vuelve al bucle END COMIENZO

PPRROOGGRRAAMMAA DDEE TTRRAANNSSMMIISSIIÓÓNN--RREECCEEPPCCIIÓÓNN MMUUYY SSIIMMPPLLIIFFIICCAADDOO::

.MODEL SMALL DOSSEG .STACK 200H .CODE COMIENZO: ; Se inicializa el puerto COM1 MOV AL,01000011B ; 300,N,8,1 MOV DX,0 ; COM1: DX=0 / COM2: DX=1 MOV AH,0 ; Funcion 0 de la int. 14H inicializa puerto

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

38

INT 14H ; Llama a la interrupcion 14H ; Proceso principal BUCLE: ; COMPRUEBA PUERTO MOV AH,3 ; Leer estado de puerto serie MOV DX,0 ; Puerto COM1: INT 14H TEST AH,00000001B ; Detecta que hay un caracter esperando a ; ser leido en la UART (operacion AND) JNZ RECEPCION ; TEST AH,01000000B ; Pregunta por bit 5 (reg. de transmision vacio) JNZ TRANSMISION JMP BUCLE ; Vuelve al bucle ; RECEPCION: ; LEE CARACTER DEL PUERTO MOV AH,2 ; Se seleciona la funcion de recepcion AH=2 MOV DX,0 ; Se selecciona el puerto COM1: DX=0 INT 14H ; Llama a la interrupcion 14H ; El registro AL contiene el caracter recibido ; Lo visualizamos MOV DL,AL MOV AH,2 INT 21H ; JMP BUCLE ; Vuelve al bucle ; TRANSMISION: ; Lectura de un caracter del teclado MOV AH,1 ; Comprueba que se ha pulsado una tecla INT 16H ; Interrupcion de teclado (BIOS) JZ BUCLE ; Retorna al bucle si no se ha pulsado MOV AH,0 ; Se lee la tecla que se ha pulsado INT 16H ; AL contiene el byte que se va a enviar ; ; MOV AH,1 ; Funcion de transmision MOV DX,0 ; Puerto por el que se va a transmitir INT 14H ; Transmite dato (el contenido de AL) JMP BUCLE ; END COMIENZO

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

39

PPRROOGGRRAAMMAA DDEE TTRRAANNSSMMIISSIIÓÓNN--RREECCEEPPCCIIÓÓNN MMEEJJOORRAADDOO QQUUEE PPEERRMMIITTEE LLAA VVIISSUUAALLIIZZAACCIIÓÓNN CCOONNTTIINNUUAA DDEE MMEENNSSAAJJEESS EENN PPAANNTTAALLLLAA YY UUNNAA SSAALLIIDDAA OORRDDEENNAADDAA DDEELL PPRROOGGRRAAMMAA:: .MODEL SMALL DOSSEG .STACK 200H .CODE COMIENZO: ; Se inicializa el puerto COM1 MOV AL,01000011B ; 300,N,8,1 MOV DX,0 ; COM1: DX=0 / COM2: DX=1 MOV AH,0 ; Funcion 0 de la int. 14H inicializa puerto INT 14H ; Llama a la interrupcion 14H ; Se desactivan todas las interrupciones de la UART del puerto COM1 (3F8H) MOV DX,3F8H INC DX ; Se posiciona en reg. activador de interrupciones MOV AL,0 ; Desactiva todas las interrupciones OUT DX,AL ; Proceso principal BUCLE: ; COMPRUEBA PUERTO MOV AH,3 ; Leer estado de puerto serie MOV DX,0 ; Puerto COM1: INT 14H ; TEST AH,00011110B ; Deteccion de errores ; JNZ ERRORES ; TEST AH,00000001B ; Detecta que hay un caracter esperando a ; ser leido en la UART (operacion AND) JNZ RECEPCION ; TEST AH,01000000B ; Pregunta por bit 5 (reg. de transmision vacio) JNZ TRANSMISION JMP BUCLE ; Vuelve al bucle ; RECEPCION: ; LEE CARACTER DEL PUERTO MOV AH,2 ; Se seleciona la funcion de recepcion AH=2 MOV DX,0 ; Se selecciona el puerto COM1: DX=0 INT 14H ; Llama a la interrupcion 14H ; El registro AL contiene el caracter recibido ; Lo visualizamos MOV DL,AL MOV AH,2 INT 21H ; Si el caracter es retorno de carro (CR) le anade avance de linea (LF) CMP DL,0DH ; Si el caracter no es retorno de carro (CR=ASCII ODH)

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

40

JNE BUCLE ; vuelve al bucle MOV DL,0AH ; Anade avance de linea (LF=ASCII 0AH) MOV AH,2 ; INT 21H ; Visualiza el avance ; JMP BUCLE ; Vuelve al bucle ; TRANSMISION: ; Lectura de un caracter del teclado MOV AH,1 ; Comprueba que se ha pulsado una tecla INT 16H ; Interrupcion de teclado (BIOS) JZ BUCLE ; Retorna al bucle si no se ha pulsado

MOV AH,0 ; Se lee la tecla que se ha pulsado

INT 16H ; AL contiene el byte que se va a enviar

; CMP AL,1BH ; Pulsar Esc (ASCII=1BH) para terminar el programa JE TERMINAR ; MOV AH,1 ; Funcion de transmision MOV DX,0 ; Puerto por el que se va a transmitir INT 14H ; Transmite dato (el contenido de AL) JMP BUCLE ; TERMINAR: MOV AH,4CH ; Retorna al DOS INT 21H ; END COMIENZO

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

41

OOPPCCIIOONNEESS DDEELL PPRROOGGRRAAMMAA DDEEBBUUGG C:\>debug /? Ejecuta Debug, una herramienta para examinar y editar programas. DEBUG [[unidad:][ruta]nombre de archivo [archivo de prueba-parámetros]] [unidad:][ruta]nombre de archivo Especifica el archivo que desea probar. archivo de prueba-parámetros Especifica información de línea de comandos requerida por el archivo que desea probar. Después de que Debug se haya iniciado, escriba ? para obtener la lista de comandos de depuración. C:\> -?

ensamblar A [dirección] comparar C dirección de rango dump D [rango] escribir E dirección [lista] llenar F lista de rangos ir G [=dirección] [direcciones] hex H valor1 valor2 entrada I puerto cargar L [dirección] [unidad] [primer_sector] [número] mover M dirección de rango nombre N [nombre_ruta] [lista_argumentos] salida O byte de puerto proceder P [=dirección] [número] salir Q registro R [registro] buscar S lista de rangos seguimiento T [=dirección] [valor] desensamblar U [rango] escribir W [dirección] [unidad] [primer_sector] [número] asignar memoria expandida XA [#páginas] desasignar memoria expandida XD [identificador] asignar páginas de memoria expandida XM [Lpágina] [Ppágina] [identificador] mostrar estado de la memoria expandida XS

-q

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

42

EEJJEEMMPPLLOO DDEE UUSSOO DDEE LLAASS FFUUNNCCIIOONNEESS DDEELL PPRROOGGRRAAMMAA DDEEBBUUGG EENN LLAA EEDDIICCIIÓÓNN,, CCOORRRREECCCCIIÓÓNN YY EEJJEECCUUCCIIÓÓNN DDEE UUNN PPRROOGGRRAAMMAA CCOONN EERRRROORREESS DDEE CCOODDIIFFIICCAACCIIÓÓNN::

C:\>DEBUG

-A 100 EDICIÓN DEL PROGRAMA 115B:0100 B400 MOV AH,00 115B:0102 B04B MOV AL,4B 115B:0104 BA0000 MOV DX,0000 115B:0107 CD14 INT 75 115B:0109 B402 MOV AH,02 115B:010B BA0000 MOV DX,0000 115B:010E CD14 INT 14 115B:0110 88C2 MOV DL,AL 115B:0112 B402 MOV AH,02 115B:0114 CD21 INT 21 115B:0116 EBF1 JMP 0109 115B:0118 -U 102 10E PODEMOS VISUALIZAR 115B:0102 B04B MOV AL,4B 115B:0104 BA0000 MOV DX,0000 115B:0107 CD14 INT 75 115B:0109 B402 MOV AH,02 115B:010B BA0000 MOV DX,0000 115B:010E CD14 INT 14 -A 107 EDITAMOS UNA LINEA ERRONEA 115B:0107 INT 14 115B:0109 -H 118 100 CALCULO DEL NUMERO DE BYTES = ULTIMA INSTRUCCION - PRIMERA 0218 0018 -R VISUALIZAMOS EL CONTENIDO DE LOS REGISTRO DE LA CPU AX=0000 BX=0010 CX=0000 DX=0000 SP=FFFE BP=0000 SI=0000 DI=0000 DS=115B ES=115B SS=115B CS=115B IP=0100 NV UP EI PL NZ NA PO NC 115B:0100 B400 MOV AH,00 -R BX MODIFICAMOS EL REGISTRO BX <= 0 BX 0010 :0 -R CX MODIFICAMOS EL REGISTRO CX <= NUMERO DE BYTES QUE OCUPA EL PROG. CX 0018 :18 -N RECEP.COM DAMOS NOMBRE AL PROGRAMA

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

43

-W LO SALVAMOS EN DISCO Escribiendo 00018 bytes -Q SALIMOS DE DEBUG AL DOS

C:\PROG-COM\>RECEP.COM EJECUTAMOS EL PROGRAMA DE RECEPCION DE DATOS

EDITEMOS EN AMBOS EQUIPOS EL SIGUIENTE PROGRAMA DE TRASMISION-RECEPCION:

C:\>DEBUG -A 100 208F:0100 B043 MOV AL,43 208F:0102 BA0000 MOV DX,0000 208F:0105 B400 MOV AH,00 208F:0107 CD14 INT 14 208F:0109 BAF803 MOV DX,03F8 208F:010C 42 INC DX 208F:010D B000 MOV AL,00 208F:010F EE OUT DX,AL 208F:0110 B403 MOV AH,03 208F:0112 BA0000 MOV DX,0000 208F:0115 CD14 INT 14 208F:0117 F6C401 TEST AH,01 208F:011A 7507 JNZ 0123 208F:011C F6C440 TEST AH,40 208F:011F 751C JNZ 013D 208F:0121 EBED JMP 0110 208F:0123 B402 MOV AH,02 208F:0125 BA0000 MOV DX,0000 208F:0128 CD14 INT 14 208F:012A 88C2 MOV DL,AL 208F:012C B402 MOV AH,02 208F:012E CD21 INT 21 208F:0130 80FA0D CMP DL,0D 208F:0133 75DB JNZ 0110 208F:0135 B20A MOV DL,0A 208F:0137 B402 MOV AH,02 208F:0139 CD21 INT 21 208F:013B EBD3 JMP 0110 208F:013D B401 MOV AH,01 208F:013F CD16 INT 16 208F:0141 74CD JZ 0110 208F:0143 B400 MOV AH,00 208F:0145 CD16 INT 16 208F:0147 3C1B CMP AL,1B 208F:0149 7409 JZ 0154 208F:014B B401 MOV AH,01 208F:014D BA0000 MOV DX,0000 208F:0150 CD14 INT 14

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

44

208F:0152 EBBC JMP 0110 208F:0154 B44C MOV AH,4C 208F:0156 CD21 INT 21 208F:0158

NO OLVIDAR EL REALIZAR TODOS LOS PASOS ANTERIORES. NECESARIOS PARA OBTENER EL ARCHIVO EJECUTABLE.

PPRROOGGRRAAMMAA DDEETTEECCTTOORR DDEE EERRRROORREESS DDEE CCOOMMUUNNIICCAACCIIÓÓNN::

.MODEL SMALL DOSSEG .DATA MSG1 DB 'Error de overrun',13,10,'$' MSG2 DB 'Error de paridad',13,10,'$' MSG3 DB 'Error de formato',13,10,'$' MSG4 DB 'Detectado <BREAK>',13,10,'$' CR_LF DB 13,10,'$' .STACK 200H .CODE COMIENZO: MOV AX,@DATA MOV DS,AX ; Para que DS apunte al segmento o grupo standar de datos ; Se carga el registro AL MOV AL,01000011B ; Velocidad 300 Baudios (Bits 7-5), ; sin paridad (Bits 4-3), 1 Bit de stop (Bit 2) ; y longitud de palabra 8 Bits (Bits 1-0) ; Se selecciona el puerto MOV DX,0 ; COM1: DX=0 / COM2: DX=1 MOV AH,0 ; Funcion 0 de la int. 14H inicializa puerto ; Se invoca a la interrupcion para la inicializacion del puerto INT 14H ; Llama a la interrupcion 14H ; COMPRUEBA PUERTO BUCLE: MOV DX,0 ; puerto serie COM1: ya que DX=0 MOV AH,3 ; Funcion 3 de INT 14H. Obtiene status de INT 14H LEA DX,CR_LF ; Apunta a caracteres salto de linea TEST AH,00011110B ; Pregunta por bits 1 a 4 de status (BREAK JZ SIGUE4 ; y errores). Si todos cero salta CALL VISU_MSG ; Visualiza salto de linea LEA DX,MSG4 ; Para que DX apunte al mensaje 4 TEST AH,00010000B ; Pregunte por el bit 4 del status(BREAK) JZ SIGUE1 ; Si es 0 salta CALL VISU_MSG ; y si no, visualiza mensaje SIGUE1: LEA DX,MSG3 ; Para que DX apunte al mensaje 3 TEST AH,00001000B ; Pregunta por el bit 3 del status (error formato) JZ SIGUE2 ; Si es 0 salta

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

45

CALL VISU_MSG ; y si no, visualiza mensaje SIGUE2: LEA DX,MSG2 ; Para que DX apunte al mensaje 2 TEST AH,00000100B ; Pregunta por el bit 2 del status (error paridad) JZ SIGUE3 ; Si es 0 salta CALL VISU_MSG ; y si no, visualiza mensaje SIGUE3: LEA DX,MSG1 ; Para que DX apunte al mensaje 1 TEST AH,00000010B ; Pregunta por el bit 1 del status (error overrun) JZ SIGUE4 ; Si es 0 salta CALL VISU_MSG ; y si no, visualiza mensaje SIGUE4: TEST AH,00000001B ; Pregunta por el bit 0 del resultado ; (caracter recibido) JZ BUCLE ; Si no se ha recibodo ninguno salta MOV DX,0 ; Puerto COM1 MOV AH,2 ; Funcion 2 de la INT 14H. Lee caracter INT 14H ; del puerto serie MOV DL,AL ; Pasa el caracter a DL MOV AH,2 ; Funcion 2 de la INT 21h. Visualiza INT 21H ; caracter por pantalla CMP DL,0DH ; Si el caracter no es CR vuelve el bucle JNE BUCLE MOV DL,0AH ; Si lo es pone LF como nuevo caracter MOV AH,2 ; Funcion 2 de la INT 21h. Visualiza INT 21H ; caracter por pantalla JMP BUCLE ; Vuelve al bucle VISU_MSG PROC NEAR ; Subrutina que guarda AX porque AH PUSH AX ; es el status MOV AH,9 ; Funcion 9 de la INT 21H. Visualiza INT 21H ; mensaje por pantalla POP AX ; Recupera AX y retorna RET VISU_MSG ENDP END COMIENZO

Implemente a continuación un programa completo de comunicaciones que permita la transmisión, recepción y detección de errores.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

46

MMEEDDIIAANNTTEE LLAASS FFUUNNCCIIOONNEESS 33HH YY 44HH DDEE LLAA IINNTTEERRRRUUPPCCIIÓÓNN 2211HH DDEELL DDOOSS.. Dichas funciones permiten el uso de los dispositivos COM1 y AUX del DOS (que para esta interrupción se considera el mismo) como dispositivos auxiliares de entrada y salida. Sin embargo con esta interrupción no es posible la inicialización del puerto serie de comunicaciones. Deberíamos realizarla por alguno de los dos procedimientos anteriores, o asumiendo la inicialización por defecto del POST del DOS (velocidad de 2400 baudios, sin paridad, un bit de parada y longitud de carácter de ocho bits). Tampoco tendremos control sobre la UART ni nos proporcionaran información sobre los errores producidos en la comunicación ni sobre el estado de los registros de la UART, ni sobre el estado del puerto de comunicaciones. Permite sin embargo controlar el puerto como dispositivo de caracteres instalable. Lectura del dispositivo auxiliar standard (STDAUX)

Entrada: AH =03h Salida: AL = Carácter leído en el dispositivo auxiliar estándar.

Nota: Esta función nos permite leer, esperando hasta que llegue, un carácter leído en el dispositivo COM1 o AUX, recuperándolo en el registro AL. Son chequeados ^C/^Break en el teclado.

Salida del dispositivo auxiliar standard (STDAUX) Entrada: AH =04h

DL = Carácter a enviar al dispositivo auxiliar estándar. Salida: - No devuelve información.

Nota: Esta función nos permite enviar el carácter contenido en el registro DL al dispositivo auxiliar estándar COM1 o AUX. Son chequeados ^C/^Break en el teclado.

Es interesante indicar brevemente las funciones 00h,01h y 02h de la interrupción 21h.

Terminar programa Entrada: AH =00h

CS = Segmento PSP.

Lee carácter de la entrada standard, visualiza el eco Entrada: AH =01h Salida: AL = Carácter leído

Nota: Son chequeados ^C/^Break en el teclado.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

47

Envía carácter a la salida standard Entrada: AH =02h

DL = Carácter a enviar (escribir en salida estándar) Salida: AL = Ultimo carácter enviado

Nota: Son chequeados ^C/^Break en el teclado.

OOTTRROOSS CCOOMMPPOONNEENNTTEESS AASSÍÍNNCCRROONNOOSS.. Conviene advertir que el modelo estudiado (8250) y sus diferentes derivados no son los primeros ni los únicos circuitos de comunicaciones serie asíncronas en el mercado, si no que existe un amplio universo de componentes similares y no siempre directamente substituibles. Con objeto de facilitar la identificación de circuitos de comunicaciones en otros equipos que no sean PC´s y que se deseen conectar a estos, se mencionan a continuación algunos componentes que desarrollan similares funciones y que no son de uso común en el entorno de los PC´s. Se indican entre paréntesis el nombre dado por las diferentes compañías a sus circuitos:

Z80-(DART) Transmisor/receptor asíncrono doble. Z80-(SIO) Controlador de entrada/salida serie. Z8530 Controlador de comunicaciones serie. 16C450 (ACE) Elemento de comunicaciones asíncronas. Bajo consumo. 16C452 (DACE) Elemento de comunicaciones asíncronas doble. Bajo consumo. 2123 (DEUCE) Doble elemento de comunicaciones universales avanzado. Similar al 8251 incorpora un generador de velocidad. 2661 (EPCI) Interface de comunicaciones programable avanzado. 65C51 (ACIA) Adaptador de interface de comunicaciones asíncronas. Bajo consumo. 65C52 (DACIA) Adaptador de interface de comunicaciones asíncronas doble. Bajo consumo. 6551 (ACIA) Adaptador de interface de comunicaciones asíncronas. 68C52 (DACIA) Adaptador de interface de comunicaciones asíncronas doble. Bajo consumo. 6850 (ACIA) Adaptador de interface de comunicaciones asíncronas. 6852 (SSDA) Adaptador de datos serie síncrono. 6854 Controlador de enlace de datos avanzado. 68681 (UART) Transmisor/receptor asíncrono universal doble. 82C50 (ACE) Elemento de comunicaciones asíncronas 8250 en versión de bajo consumo. 8251 (USART) Transmisor /receptor síncrono/as¡ncrono universal. 8256 (MUART) Transmisor/receptor asíncrono universal multi-función. 8256 (UART) Transmisor/receptor asíncrono universal. 84C40 (SIO) Controlador de entrada/salida serie.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

48

85C30 (SCC) Controlador de comunicaciones serie. Bajo consumo. 85C35 (SCC) Controlador de comunicaciones serie. Bajo consumo. 9902 Controlador de comunicaciones asíncronas. 1488/1489 Son los mas conocidos circuitos adaptadores de interface nos permitirán localizar con facilidad un interface V24.

DDRRIIVVEERRSS FFOOSSSSIILL.. El termino FOSSIL proviene de las siglas “Fido Opus SEAdog Standard Interface Layer” es una especificación que pretende solucionar los problemas que surgen al desarrollar programas de comunicaciones que utilizan la llamada a la interrupción 14 del BIOS del PC. Al existir diferentes fabricantes de BIOS y no ajustarse exactamente a la implementada por IBM en sus equipos aumentándose dicho efecto con la distribución por parte de los diferentes fabricantes de hardware cada uno incluyendo sus correspondientes “mejoras”, el resultado final es la creación de programas de comunicación que pueden funcionar correctamente en una máquina determinada y no hacerlo en el resto. Para solucionar dicho problema se ha diseñado la anterior especificación la cual pretende describir la creación de drivers que separen el “nivel físico de la comunicación”, entendiendo como tal a la máquina sobre la que se pretende “correr” un determinado software de comunicación y el mencionado programa. De forma que se facilite la puesta a punto y la portabilidad de la aplicación de comunicaciones. Los drivers FOSSIL mas conocidos son el BNU, posiblemente al mas extendido, y al mas moderno X00. El procedimiento para implementar el mencionado driver es la interceptación y sustitución de la interrupción 14 del BIOS en el momento del arranque del equipo.

SOFTWARE DE COMUNICACIONES

DESARROLLADO POR EL USUARIO

DRIVER FOSSIL Intercepta la interrupción 14 del

BIOS

UART

Generalmente añadiendo el driver como un dispositivo en el CONFIG.SYS:

DEVICE=C:\BNU.SYS /P2 /L0:19200,8N1 La línea anterior cargaría el driver BNU con dos puertos de trabajo, definiendo a COM1 en el puerto 0, a una velocidad de 19200 baudios, con 8 bit de datos sin paridad y un bit de parada. Puede a continuación cargarse el programa de comunicaciones comercial o

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

49

desarrollado por el usuario. Muchos programas de comunicación solicitan previamente la instalación de dichos drivers para hacer uso de sus amplias posibilidades de trabajo. Las funciones de dichos drivers se encuentran documentadas y desarrolladas en la aplicación distribuida por el fabricante.

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

50

PPRROOGGRRAAMMAA DDEE DDIIAAGGNNOOSSTTIICCOO DDEE LLAA UUAARRTT EENN TTUURRBBOO CC.. El siguiente programa de ejemplo coloca el 8250 en modo lazo (LOOP) y seguidamente comienza a transmitir datos de 8 bits (desde 0 hasta 255) comprobando que le llegan los mismos datos que envía y sin que se produzcan errores. Se permite elegir el puerto deseado así como la velocidad de transmisión.

/******************************************************************** * * UTILIDAD DE AUTODIAGNOSTICO DEL 8250 EN TURBO C * *********************************************************************/ #include <dos.h> #include <conio.h> #define LCR (base+3) /* registro de control de línea */ #define IER (base+1) /* registro de activación de interrupciones */ #define DLL (base+0) /* parte baja del divisor */ #define DLM (base+1) /* parte alta del divisor */ #define MCR (base+4) /* registro de control del modem */ #define LSR (base+5) /* registro de estado de línea */ #define RBR (base+0) /* registro buffer de recepción */ #define THR (base+0) /* registro de retención de transmisión */ #define DR 1 /* bit dato disponible del LSR */ #define OE 2 /* bit de error de overrun del LSR */ #define PE 4 /* bit de error de paridad del LSR */ #define FE 8 /* bit de error en bits de stop del LSR */ #define BI 0x10 /* bit de error de break en el LSR */ #define THRE 0x20 /* bit de THR vacío */ void error() { printf ("\r ¡¡Fallo del puerto serie!!\n"); exit (2); } void main() { unsigned com, base, divisor, dato, entrada, lsr; printf("- Elige COM (1, 2, ...): "); scanf ("%d", &com);

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

51

base=peek(0x40, (com-1)*2); if (base==0) { printf("\n ¡El COM elegido no existe para la BIOS!.\n"); exit (1); } printf("- Elige divisor (1-65535): "); scanf ("%d", &divisor); if (!divisor) divisor=1; printf("\nComprobando 8250 en %03Xh a %lu baudios.\nEspera...", base, 1843200L/divisor/16); outportb (LCR, 0x83); /* DLAB=1, 8 bits, 1 stop, sin paridad */ outportb (IER, 0); outportb (DLL, divisor % 256); outportb (DLM, divisor >> 8); outportb (MCR, 8+16); /* modo LOOP */ outportb (LCR, 0x03); /* DLAB=0, 8 bits, 1 stop, sin paridad */ for (dato=0; (dato<0x100) && !kbhit(); dato++) { do { /* esperar por THR vacío */ lsr=inportb(LSR); if (lsr & (OE|PE|FE|BI)) error(); } while (!(lsr & THRE)); outportb (THR, dato); /* enviar carácter */ do { /* esperar por RBR lleno */ lsr=inportb(LSR); if (lsr & (OE|PE|FE|BI)) error(); } while (!(lsr & DR)); entrada=inportb (RBR); /* recibir carácter */ if (dato!=entrada) error(); printf ("\rEnviado y recibido byte %d",dato); } if (!kbhit()) printf("\rAutodiagnóstico del 8250 en COM%d superado.\n", com); else { getch(); printf("\rTecla pulsada - prueba abortada.\n");} }

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

52

DESCRIPCIÓN DE LOS REGISTROS DE LA UART 8250 REG. DE RETENCIÓN DE TRANSMISIÓN (THR) DIR = P_base + 0 DLAB = 0 Registro de Escritura

REG. (BUFFER) DE RECEPCIÓN (RBR) DIR = P_base + 0 DLAB = 0 Registro de Lectura REG. DIVISOR (MENOS SIGNIFICATIVO) (DLL) DIR = P_base + 0 DLAB = 1 Reg. de (Lect/Esc) Byte bajo (7-0 bits) del Reg. divisor de CLK

REG. DIVISOR (MAS SIGNIFICATIVO)(DLM) DIR = P_base + 1 DLAB = 1 Reg. de (Lect/Esc) Byte alto (15-8 bits) del Reg. divisor de CLK

REGISTRO DE CONTROL DE LÍNEA (LCR) Dirección = Puerto_base + 3 DLAB (Es el bit 7) = X Registro de Lectura/Escritura

0 Primer bit de selección de longitud de carácter a procesar 0 (WLS0)*. 1 Segundo bit de selección de longitud de carácter a procesar 1 (WLS1)*.

BIT 1 Bit 0 (*)Longitud de carácter a procesar 0 0 5 Bits 0 1 6 Bits 1 0 7 Bits 1 1 8 Bits

2 Este bit especifica el numero de bits de parada (STB) generado por cada carácter enviado, o chequeado en cada carácter recibido: Con 0 Se genera o chequea un bit de parada por carácter / 1 Cuando la longitud de carácter seleccionada es de cinco bits entonces son generados o chequeados un bit y medio de parada. Cuando la longitud de carácter seleccionado es de seis, siete u ocho bits se generan o chequean dos bit de parada.

3 =1 Activa paridad (PEN) sea para chequear o trasmitir. El bit de paridad se pone entre el ultimo bit de la palabra de datos (bit mas significativo) y el bit de parada de la trama de información.

4 Suponiendo activo (1) el bit 3 con: 0 Se genera o comprueba un numero IMPAR de unos / 1 Se genera o comprueba un numero PAR de unos.

5 (Stick Parity Bit) Define el valor lógico del bit de paridad. Con: 1 El bit de paridad valdrá CERO en caso de paridad PAR (Uso habitual) / 0 El bit de paridad valdrá UNO en caso de paridad PAR.

6 (Break Control Bit) - Se utiliza para enviar una señal de BREAK. Con:1 La salida serie (SOUT) es obligada a permanecer en el estado lógico cero (tensión +25v en salida del interface) y mantiene dicho estado a pesar de que exista actividad de transmisión. Manteniendo este estado se activa la señal de ruptura (Break) en el Bit 4 del Registro de Estado de Línea de la UART receptora. Para asegurar que eso ocurra ha de mantenerse dicho estado durante al menos el tiempo de transmisión de una trama completa (bit de arranque + bits de datos + bit de paridad + bits de parada).

7 =1 Permite el acceso a los registros divisores de reloj (DLAB) durante una operación de lectura o escritura. =0 Buffer de recepción y registro de desplazamiento de transmisión.

REGISTRO DE CONTROL DE MODEM (MCR) BIT Dirección = Puerto_base + 4 DLAB = X Registro de Lectura/Escritura 0 =1 Activa circuito terminal de datos preparado (DTR) 1 =1 Activa circuito preparado para enviar (RTS) 2 =1 Línea auxiliar 1 (-SOUT1) de propósito general (No usada habitualmente). La fuerza a activa. 3 =1 Línea auxiliar 2 (-SOUT2) de propósito general (Activar) 4 =1 Activa el puerto serie en modo diagnostico conectando en bucle digital local la salida del registro de transmisión a la entrada del registro

de recepción. Comprobando de forma inmediata el funcionamiento de la UART. 5-7 = 0 Reservado.

REGISTRO DE ESTADO DE LÍNEA (LSR) BIT Dirección = Puerto_base + 5 DLAB = X Registro de Lectura/No recomendada Escritura 0 =1 Dato recibido preparado (DR). Se ha recibido un carácter que se encuentra almacenado para su lectura en el registro de recepción.

Puerto 03F8h para COM1. Este es el bit que ha de comprobarse en el procedimiento de sondeo. Una vez leído el carácter automáticamente se restaura a cero.

1 =1 Error de rebosamiento en recepción. OVERRUN (OE) . Ha llegado otro carácter al registro de recepción antes de que se haya leído el anterior. Se pierde el primer carácter.

2 =1 Error de paridad (PE). El carácter recibido tiene una paridad incorrecta respecto a la esperada. 3 =1 Error de sincronismo en la recepción de trama (FE). Se espera un bit de parada (un uno) después de el bit de paridad o ultimo bit de datos

y ha llegado un cero. 4 =1 Interrupción por break (BI) o ruptura de comunicación. Cuando el estado del circuito de recepción es cero durante un tiempo mayor que el

bit de arranque + los bits de datos + el bit de paridad + el bit de parada. Tb>Tstar+Tbits-d+Tparidad+Tstop. En algunos casos puede utilizarse como control de flujo.

5 =1 Registro de transmisión vacío (THRE). El controlador esta preparado para aceptar un nuevo carácter a enviar. 6 =1 Registro de transmisión y registro de desplazamiento de transmisión vacíos (TSRE&THRE). 7 =0 Reservado.

REGISTRO DE ESTADO DE MODEM (MSR) BIT Dirección = Puerto_base + 6 DLAB = X Reg.(Lect/Esc). BIT Dirección = Puerto_base + 6 DLAB = X Reg.(Lect/Esc). 0 Cambio en preparado para trasmitir (DELTA-CTS) 4 Preparado para enviar (CTS) 1 Cambio en equipo de datos preparado (DELTA-DSR) 5 Equipo de datos preparado (DSR) 2 Cambio en indicador de llamada (DELTA-RI) 6 Indicador de llamada (RI)

3 Cambio en la señal de recepción detectada (DELTA-CD) 7 Detectada señal en la línea de recepción (CD)

DEPARTAMENTO DE ELECTRÓNICA Y COMUNICACIONES

ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES

53

REGISTRO ACTIVADOR DE INTERRUPCIONES (IER) REGISTRO IDENTIFICADOR DE INTERRUPCIONES (IIR) BIT Dirección = Puerto_base + 1 DLAB = 0 Reg.(Lect/Esc). BIT Dirección = Puerto_base + 2 DLAB = X Reg. de Lectura

0 =1 Activa la interrupción de dato recibido disponible 0 =0 Nos indica que hay pendiente alguna interrupción 1 =1 Activa la int. de registro temporal de transmisión vacío 1 Bit 0* del campo identificador de interrupciones 2 =1 Activa la int. del estado de la línea de recepción 2 Bit 1* del campo identificador de interrupciones 3 =1 Activa la interrupción del estado del modem 3-7 =0 Reservado

4-7 =0 Reservado