0 penilaian0% menganggap dokumen ini bermanfaat (0 suara)
163 tayangan53 halaman
El documento describe la Unidad Universal Asíncrona de Transmisión y Recepción (UART), incluyendo sus tipos, registros y funcionalidad. La UART convierte datos paralelos en serie para la comunicación asíncrona entre dispositivos. Algunos tipos comunes de UART son la 8250, 16550 y 16C552, las cuales varían en velocidad de transmisión, número de registros y funcionalidades como colas FIFO. La UART permite la comunicación asíncrona de bajo costo entre dispositivos a distancias mayores que el en
El documento describe la Unidad Universal Asíncrona de Transmisión y Recepción (UART), incluyendo sus tipos, registros y funcionalidad. La UART convierte datos paralelos en serie para la comunicación asíncrona entre dispositivos. Algunos tipos comunes de UART son la 8250, 16550 y 16C552, las cuales varían en velocidad de transmisión, número de registros y funcionalidades como colas FIFO. La UART permite la comunicación asíncrona de bajo costo entre dispositivos a distancias mayores que el en
El documento describe la Unidad Universal Asíncrona de Transmisión y Recepción (UART), incluyendo sus tipos, registros y funcionalidad. La UART convierte datos paralelos en serie para la comunicación asíncrona entre dispositivos. Algunos tipos comunes de UART son la 8250, 16550 y 16C552, las cuales varían en velocidad de transmisión, número de registros y funcionalidades como colas FIFO. La UART permite la comunicación asíncrona de bajo costo entre dispositivos a distancias mayores que el en
U UA AR RT T ( (U UN NI IV VE ER RS SA AL L A AS SY YN NC CH HR RO ON NO OU US S R RE EC CE EI IV VE ER R/ /T TR RA AN NS SM MI IT TE ER R) ) OBJETIVO.- Descripcin de la Unidad Universal de Transmisin y Recepcin Asincrona ( UART).
TIEMPO ESTIMADO.-
PARTE TEORICA.- INTRODUCCIN A LA UART 8250. TIPOS DE UART DESCRIPCIN FUNCIONAL DE LOS PINES DE LA UART 8250. SEALES DE ENTRADA SEALES DE SALIDA SEALES DE ENTRADA/SALIDA DESCRIPCIN DE LOS REGISTROS SELECCIN DEL REGISTRO: REGISTRO DE RETENCIN DE TRANSMISIN (THR) REGISTRO DE ESTADO DE LINEA (LSR) REGISTRO (BUFFER) DE RECEPCIN (RBR) REGSITRO DIVISOR (MENOS SIGNIFICATIVO) (DLL) REGISTRO DIVISOR (MAS SIGNIFICATIVO)(DLM) GENERADOR DE VELOCIDAD DE TRANSMISIN 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. INTERCONEXIN DE LOS REGISTROS OPERATIVA DE TRABAJO DE LA UART LA TRANSMISIN Y LA RECEPCIN EN EL 8250 PROGRAMACIN DE LA UART. PROGRAMA CON VELOCIDAD DE 9600. PROGRAMA CON SALIDA ORDENADA. PROGRAMA CON DETECCIN DE ERRORES. PROGRAMA EN ENSAMBLADOR. UTILIZACIN DE LAS INTERRUPCIONES 14H DE LA BIOS. EJ EMPLOS DE PROGRAMAS UTILIZANDO LAS INTERRUPCIONES 14H DE LA BIOS. OPCIONES DEL PROGRAMA DEBUG. EJ EMPLO DE USO DE FUNCIONES DEBUG EN LA EDICIN CORRECION Y EJ ECUCIN DE UN PROGRAMA CON ERRORES DE CODIFICACIN. MEDIANTE LAS FUNCIONES 3H Y 4H DE LA INTERRUPCION 21H DEL DOS. OTROS COMPONENTES ASNCRONOS. DRIVERS FOSSIL. PROGRAMA DE DIAGNOSTICO DE LA UART EN TURBO C.
DOCUMENTACION.- Documentacin en pdf
PARTE PRACTICA.- V
DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
2
I IN NT TR RO OD DU UC CC CI I N N: : La comunicacin entre los diferentes dispositivos de la unidad central de proceso de un ordenador se desarrolla comnmente en paralelo siendo este parmetro importante a la hora de determinar la potencia de un sistema de proceso de datos.
Sin embargo dicha forma de comunicacin no es tecnolgicamente rentable cuando la distancia entre los equipos que han de transferirse los datos excede de pocos metros (Interface de instrumentacin 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 comunicacin y a las caractersticas particulares de esta. Dichos interfaces son definidos por los diferentes organismos de normalizacin (UIT-T, EIA, IEEE,..), siendo usualmente recomendaciones dadas a los diferentes fabricantes de equipo informtico. 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 (comnmente de 5V) a las tensiones de funcionamiento del interface correspondiente. Logrado este objetivo, queda por resolver el proceso de transformar una seal digital serie, portadora de informacin, en otra paralelo portadora de la misma informacin. Dicho proceso se desarrolla en dispositivos conocidos como UART, acrnimo de Universal Asynchronous Receiver / Transmiter (Transmisor Receptor Asncrono Universal) o Sncronos (USART), en este ultimo caso suelen poderse programar de ambas formas. La comunicacin asncrona es de gran sencillez y los protocolos asociados a esta tambin lo son. La comunicacin sncrona permite velocidades de transferencia de datos superiores usando el mismo interface, sin embargo los protocolos implicados en dicha comunicacin son significativamente mas complejos (tales como los COP orientados al carcter-, 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 informticos de uso comercial dispongan de elementos sencillos y econmicos de comunicacin como es la mencionada comunicacin asncrona soportada por las UART.
Existiendo una elevada cantidad de diferentes fabricantes y tipos de circuitos asncronos, el conocido circuito UART INS-8250 de National Semiconductor (Se la conoce tambin como ACE 8250 - Elemento de Comunicacin Asncrona) y sus posteriores versiones, se han convertido de hecho en un standard del mercado. T TI IP PO OS S D DE E U UA AR RT T: : Las UART son conocidas tambin como SIO Serial Input/Output. Es un circuito integrado que controla los circuitos de interfaz entre el ETCD y el ETTD. DEPARTAMENTO DE ELECTRNICA 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. Aade, si procede, bit de paridad, verifica la paridad de los bits recibidos, aade el bit de inicio, inserta los de parada, fija el nmero de bits por carcter, detecta posibles errores en la comunicacin, controla el estado del modem y de la lnea.
Una relacin de dichos circuitos tal y como se han desarrollado histricamente en el entorno del PC ser como el siguiente: UART 8250 (NS8250) Fue la primera en usarse en un PC, desafortunadamente tuvo errores de diseo. Dispone de 7 registros y su velocidad terica mxima 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 diseo corregidos. Se le aadi un registro ms con el nico fin de poder comprobar que se trataba de la versin 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 evolucin de la 8250A adaptada a la arquitectura del bus AT estndar ISA de E/S para tarjetas de expansin y puede transferir datos a velocidades de hasta 115.200 bps, mas que suficiente para un sistema monotarea que se comunique con otros dispositivos asncronos. Este circuito integrado supera las exigencias de velocidad de aplicaciones tpicas de comunicacin con mdems, terminales y transferencias directas de datos entre ordenadores. Dispone de 8 registros.
UART 16C451 (NS16C451), Idntica a la anterior pero construida con tecnologa 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 diseo estaban desactivadas. Aumento de velocidad mxima terica hasta los 256 Kbps (en la prctica, debido a diseo en el hardware del PC, se mantiene a 115 Kbps) continu con 8 registros.
UART: 16550A, 16550AF, 16550AFN (NS16550x). UARTs muy similares entre si. Se diferencian solo en la tcnica de fabricacin y en pequeos errores corregidos. Disponen de colas FIFO en transmisin y recepcin de 16 bytes plenamente operativas, lo cual permite que el software no tenga que dedicarle tanta atencin a los circuitos de comunicacin 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 carcter al puerto de comunicacin. El circuito es adems totalmente intercambiable DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
4 con la UART 8250. Dispone de nivel de activacin de interrupcin programable, es decir, la interrupcin se dispara cuando el nivel de datos en la FIFO llegan a donde el usuario indic. Implementa un sistema de control de registro vaco que impide generar dos interrupciones seguidas en transmisin por la misma condicin. 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 mxima terica de 256 Kbps. Se reducen las llamadas a las interrupciones desde programa tanto en transmisin como en recepcin aumentando la flexibilidad software en cuanto a la maquina que ejecuta el programa de comunicaciones. Los buffers actan como amortiguadores de la comunicacin.
UART 16C551 (NS16551C). Versin 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 terica mxima del enlace serie alcanza los 1,5 Mbps. utilizada frecuentemente en tarjetas de comunicaciones multipuerto. Bajo consumo.
UART 82510 (NS82510). Usada en ordenadores porttiles por su pequeo tamao. 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 comprobacin mas inmediata del correcto funcionamiento de esta unidad es efectuar un bucle a nivel digital o lo que es lo mismo realizar la conexin en el puerto serie tal como se representa en la figura y que ya se trato en la practica de DEPARTAMENTO DE ELECTRNICA 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
D DE ES SC CR RI IP PC CI I N N F FU UN NC CI IO ON NA AL L D DE E L LO OS S P PI IN NE ES S D DE E L LA A U UA AR RT T 8 82 25 50 0. . Aunque como se ha mencionado dicho circuito no es muy actual aun se encuentra en una gran cantidad de placas de comunicacin 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 mnimas diferencias de programacin que se refieren fundamentalmente al control de los buffers de comunicacin.
Se describen a continuacin las seales de entrada y salida del circuito que en la figura siguiente se representan sobre el chip que lo integra:
Nota: Las seales que aparecen negadas equivalen a ser activas a nivel bajo, en la descripcin siguientes dichas seales aparecen precedidas por un guin (-). DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
6
S SE E A AL LE ES S D DE E E EN NT TR RA AD DA A Chip Select (CS0,CS1,-CS2) Pins 12-14: Circuitos de seleccin y habilitacin del chip. Estas seales habilitan las seales 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 seales CS0..CS2. Ha de usarse nicamente una de las seales DISTR o DISTR negado. Data Output Strobe (DOSTR, DOSTR negado) Pins 19 y 18: Al revs que la anterior permite descargar el registro seleccionado al bus de datos. Address Strobe (ADS negado) Pin 25: Esta lnea permite el enclavamiento de las seales de seleccin 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: Lneas de seleccin 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: Inicializacin 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 Lnea (LSR-Line Status Register), que se refieren respectivamente a: registro de transferencia de transmisin vaco y transmisor vaco. Receiver Clock (RCLK) Pin 9: Entrada de reloj de recepcin, es 16 veces la frecuencia de transmisin del equipo remoto, generalmente se extrae del reloj externo, dicha seal es internamente dividida entre 16. En raras ocasiones se obtiene de la seal BAUDOT del equipo remoto. La seal de salida -BAUDOT del propio circuito esta ntimamente ligada a RCLK. Serial Input (SIN) Pin 10: Es la lnea de datos serie de entrada desde el modem. En modo bucle (LOOP) esta seal se inhibe. Clear To Send (CTS negado) Pin 36: Borrado para enviar. Lnea de entrada proveniente del modem. El estado lgico de esta seal 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 activacin 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. Lnea de entrada proveniente del modem. El estado lgico de esta seal puede consultarse leyendo el quinto bit del registro de estado del modem (MSR-Modem Status Register). Cuando el modem activa esta lnea indica a la UART que esta DEPARTAMENTO DE ELECTRNICA 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 activacin 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 lnea indica a la UART que el modem a detectado portadora. Si se han habilitado las interrupciones se generara una al cambiar de estado esta lnea. El bit siete bit del registro de estado del modem (MSR-Modem Status Register) contiene el estado lgico de dicha lnea, 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 lnea 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 interrupcin al activarse. Entrada activa a nivel bajo. Vcc Pin 40: Tensin de alimentacin +5V. Vss Pin 20: Tierra de referencia 0V (Ground). S SE E A AL LE ES S D DE E S SA AL LI ID DA A Data Terminal Ready (DTR negado) Pin 33: Esta seal indica al modem que el equipo esta preparado para recibir datos. Se activa, esta lnea 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 lnea de salida significa nivel bajo lo que consiste en que la lnea tome valor cero. Se inactiva dicha lnea si cargamos con cero el bit menos significativo del registro MCR o activando el circuito de inicializacin del chip (MR-Master Reset). Si esta lnea 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 seal indica la direccin de la transmisin en la lnea de comunicacin. La lnea de salida se activa, ponindose a cero, cuando se carga un uno en el bit cero del registro de control de modem (MCR-Modem Control Register). La lnea puede desactivarse poniendo a cero dicho bit o cuando se activa el circuito de inicializacin del chip (MR-Master Reset) .Output 1 (OUT1 negado) Pin 34: Salida de propsito 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 inicializacin del chip (MR-Master Reset). Output 2 (OUT2 negado) Pin 31: Igual que la anterior pero actuando sobre el DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
8 bit tres del registro MCR. Chip Select Out (CSOUT) Pin 24: Esta lnea 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 prctica la ignora. Driver Disable (DDIS) Pin 23: Esta salida se desactiva cuando la CPU lee datos de la UART. En la prctica 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 recepcin RCLK. Esta salida podra usarse conectada directamente a la entrada de reloj de una estacin receptora en el supuesto de una conexin ETD-ETD sin modem. Interrupt (INTRPT) Pin 30: Lnea de salida que se activa a nivel alto cuando se ha programado la habilitacin de interrupciones en los siguientes casos: dato recibido disponible, registro de retencin de transmisin vaco, estado del modem y error de comunicacin. 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 comunicacin, cuando se activa MR (Master Reset), cuando el registro de transmisin esta vaco y cuando la UART est en bucle.
S SE E A AL LE ES S D DE E E EN NT TR RA AD DA A/ /S SA AL LI ID DA A Data Bus (D0-D7) Pins 1-8: Bus triestado bidireccional de ocho lneas que permite la transferencia de datos, informacin de estado, programacin 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 actuacin del generador de velocidad interno del chip 8250. Este generador divide entre 16 la frecuencia de oscilacin del cristal. La frecuencia final de transmisin 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 seales descritas anteriormente: DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
9 B U S D E D A T O S RELOJ DE RECEPCION LINEADATOS SERIE ENTRADA LINEADATOS SERIE SALIDA HABILITAN LAS SENALES DE LECTURAYESCRITURA DOSTRYDISTR CRISTALCUARZO ORDEN DE DESCARGAR REGISTROALBUS DE DATOS INICIALIZACION DE LAUART CIRCUITOS DE CONTROLDELMODEM SELECCION DE LOS DIEZ REGISTROS JUNTO CON ELBIT DLAB VOLCAR LOS DATOS DE DOAD1 ALREGISTRO SELECCIONADO ENCLAVAMIENTOAO..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/OW INTR RESET A0 A1 A2 D0-D7 B U S XTAL1 XTAL2 BAUDOT RCLK 3.072 Mhz DRIVERS EIA A INTERFACE RS232 SOUT SIN RTS DTR DSR DCD CTS RI INS8250A
En el anterior diseo podemos ver el caso general de conexin de la UART al PC. Se puede ver que no se utilizan todas la seales disponibles del circuito. D DE ES SC CR RI IP PC CI I N N D DE E L LO OS S R RE EG GI IS ST TR RO OS S. . 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 travs de las entradas A0, A1 y A2 (Pines 28, 27 y 26 respectivamente de dicho circuito), en combinacin 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 transmisin o el buffer de recepcin. DEPARTAMENTO DE ELECTRNICA 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/2F9 3F9/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 identificacin 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 direccin a partir de la cual se trata el registro, que si contrastamos con las direcciones de los puertos sern COM1 Y COM2, las posiciones A9 y A8: 3 y 2 respectivamente Un ejemplo de esta identificacin seria: A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 DLAB 3F8/3FF 2F8/2FF THR, RBR DLAB 0 MSR, SCR DLAB 1 F de 8 a F IDENTIFICACION DELREGISTRO COM1 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 (posicin 7 del registro de Control de Linea (LCR).
Supondremos que dicha UART formara parte de la circuitera 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 programacin, 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 efecta el desplazamiento se lleva a cabo en el ordenador segn la descripcin de la siguiente tabla. DEPARTAMENTO DE ELECTRNICA 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 DELREGISTRO 1 1/0 1 1 1 1 1 X X X 0 0 0 0 0 0 1 0 0 1 0 X 0 1 1 X 1 0 0 X 1 0 1 X 1 1 0 X 1 1 1 X 0 0 0 1 0 0 1 1 BUFFER TRANSMISION,RECEPCION YREGISTRO 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 DELREGISTRO 2 o 3 F SIEMPRE
S SE EL LE EC CC CI I N N D DE EL L R RE EG GI IS ST TR RO O: : La seleccin 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 ms significativo del Registro de Control de Lnea, 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.
R RE EG GI IS ST TR RO O D DE E R RE ET TE EN NC CI I N N D DE E T TR RA AN NS SM MI IS SI I N N ( (T TH HR R) ) Este registro es el dispositivo de salida de la informacin en serie y por lo tanto. contiene el carcter que se va a enviar, el bit 0 es el menos significativo y es el DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
12 primero que se enva. Se constituye comobuffer de transmisin que genera una cola en la que se almacenan los datos que esperan su transformacin a serie. Mejora la eficiencia de transmisin DIRECCION PUERTO BASE+0 REGISTRO DE ESCRITURA DLAB 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Posicion 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 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 DATOS
Existen una interaccin entre este registro y el de Estado de Lnea (LSR), de modo que cuando el registro de desplazamiento de transmisin (registro interno creado por el 8250 para ir desplazando los bits y mandarles en serie - el Transmitter Shift Register) que esta enviando el carcter actual se vace, ser cargado desde el THR para transmitir el nuevo carcter. Al quedar vaco THR, el bit THRE del Registro de Estado de Lnea (LSR) que indica que el 8250 puede aceptar un nuevo carcter para la transmisin 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 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 DATOS REGISTRO DE DESPLAZAMIENTO DE TRANSMISION 0 bit 7 TEMT bit 6 DR bit 0 THRE bit 5 BI bit 4 FR bit 3 PE bit 2 OE bit 1 REGISTRO LSR EL8250 PUEDE ACEPTAR OTRO CARACTER Contenido del registro THR 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 0 REGISTRO DE DESPLAZAMIENTO DE TRANSMISION Registro THR vacio
Cuando estn vacos tanto el THR como el registro de desplazamiento de transmisin, el bit TEMT del LSR se activa indicando que esta vaco y puede atender a un nuevo carcter. REGISTRO THR 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 0 DATOS REGISTRO DE DESPLAZAMIENTO DE TRANSMISION VACIO VACIO 0 bit 7 TEMT bit 6 DR bit 0 THRE bit 5 BI bit 4 FR bit 3 PE bit 2 OE bit 1 REGISTRO LSR TRANSMISOR VACIO
DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
13 R RE EG GI IS ST TR RO O D DE E E ES ST TA AD DO O D DE E L LI IN NE EA A ( (L LS SR R) ) Este suele ser el primer registro consultado tras una interrupcin. Siendo un registro de lectura y sobre el que se recomienda no efectuar escritura se accede a l a travs 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. 0 bit 7 TEMT bit 6 DR bit 0 THRE bit 5 BI bit 4 FR bit 3 PE bit 2 OE bit 1 TRANSMISOR VACIO INDICADOR DE QUE ELTHR PUEDEACEPTAR OTRO CARACTER SE DESACTIVA ALESCRIBIR UN NUEVO CARACTER EN ELTHR INTERRUPCION BREAK ERROR DE TRAMA ERROR DE TRAMA DESBORDE DATOS PREPARADOS
El bit de Datos Preparados DR esta activo cuando hay un carcter listo en el Registro de Datos en Recepcin 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 interrupcin de prioridad 1 si sta interrupcin 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 ledo 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 carcter 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 transmisin de un carcter.
El bit THRE tal como se indica en la figura informa de que el 8250 puede aceptar un nuevo carcter. Tal como se explico en el registro de THR (Retencin de Transmisin se activa al quedar libre THR y se desactiva escribiendo un nuevo carcter en el THR.
R RE EG GI IS ST TR RO O ( (B BU UF FF FE ER R) ) D DE E R RE EC CE EP PC CI I N N ( (R RB BR R) ) Este registro es de lectura y a el se accede por puerto +0 siendo el dispositivo de entrada de la informacin serie y por lo tanto contiene el carcter que se ha recibido, el bit 0 es el menos significativo y es el primero que se recibe despus 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 ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
14 DIRECCION PUERTO BASE+0 REGISTRO DE LECTURA DLAB 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Posicion 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 0 Bit 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 recepcin 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 carcter completa el registro de desplazamiento de recepcin, 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 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 REGISYTRO DE DESPLAZAMIENTO DE RECEPCION DATOS SERIE POR PATILLASIN DO D1 D2 D3 D4 0 bit 7 TEMT bit 6 DR bit 0 THRE bit 5 BI bit 4 FR bit 3 PE bit 2 OE bit 1 REGISTRO LSR ACTIVADO El contenido del registro RBR puede leerse
Cuando el bit 7 del registro de control de lnea (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 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 DLAB =1 BYTE MENOS SIGNIFICATIVO DEL DIVISOR DE VELOCIDAD DLAB bit 7 BREAK bit 6 WLS2 bit 0 PARIDAD bit 5 EPS bit 4 PEN bit 3 STB bit 2 WLS1 bit 1 REGISTRO DLL REGISTRO LRC
La UART esta diseada para permitir la recepcin continua de datos sin prdidas: el RBR almacena siempre el ltimo carcter recibido dando tiempo suficiente a la CPU para leerlo mientras simultneamente est cargando el registro de desplazamiento con el siguiente; si la CPU tarda demasiado un nuevo dato podra aparecer en el RBR antes de haber ledo el anterior (condicin de overrun, bit OE del LSR).
DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
15 R RE EG GI IS ST TR RO O D DI IV VI IS SO OR R ( (M ME EN NO OS S S SI IG GN NI IF FI IC CA AT TI IV VO O) ) ( (D DL LL L) ). . 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/ESCRITURA DLAB 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Posicion del bit 8 bits del divisor de 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 0 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 BYTE MENOS SIGNIFICATIVO
R RE EG GI IS ST TR RO O D DI IV VI IS SO OR R ( (M MA AS S S SI IG GN NI IF FI IC CA AT TI IV VO O) )( (D DL LM M) ) 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/ESCRITURA DLAB 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Posicion del bit 8 bits del divisor de 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 conjuncin del contenido de ambos registros divisores da el dato con el cual ha de tratarse la informacin en lo relativo a velocidad con arreglo a lo que en el siguiente apartado se detalla. DIRECCION PUERTO BASE+1 REGISTRO LECT/ESCRITURA DLAB 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Posicion del bit 8 bits del divisor de 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/ESCRITURA DLAB 1 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Posicion del bit 8 bits del divisor de 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 0 Bit 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 0 Bit 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 ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
16
G GE EN NE ER RA AD DO OR R D DE E V VE EL LO OC CI ID DA AD D D DE E T TR RA AN NS SM MI IS SI I N N P PR RO OG GR RA AM MA AB BL LE E. . La UART contiene un generador de velocidad de transmisin que es capaz a partir de la entrada de reloj (1.8432Mhz) y dividiendo por algn valor comprendido entre 1 y 2 16-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 enva o recibe un bit por los circuitos de transmisin, reinicializandose dicho contador. Inicialmente dicho valor se encuentra en los diecisis bits situados en la direccin 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 prrafo anterior se detallaron, su valor se calcula dividiendo entre diecisis la seal de reloj dando un resultado de 115.000, el divisor (que es el nmero que deberemos cargar en el registro) lo obtendremos al dividir ste nmero entre la velocidad deseada en baudios (115.000/Xbaudios =Divisor).
El cristal de cuarzo que utiliza el reloj para obtener las velocidades de comunicacin 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 operacin antes detallada, para 2400 bps seria 48 lo que significa carga los hexadecimales 00 en el registro DLL y 30 en el registro DLM.
18 R RE EG GI IS ST TR RO O A AC CT TI IV VA AD DO OR R D DE E I IN NT TE ER RR RU UP PC CI IO ON NE ES S ( (I IE ER R) ) 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. 0 bit 7 0 bit 6 IER0 bit 0 0 bit 5 0 bit 4 IER3 bit 3 IER2 bit 2 IER1 bit 1 A1 activa la interrupcion de dato recibido disponible A1 activa la interrupcion de registro temporal de transmision vacio A1 activa la interrupcion del estado de la linea de recepcion A1 activa la interrupcion del estado del modem
R RE EG GI IS ST TR RO O I ID DE EN NT TI IF FI IC CA AD DO OR R D DE E I IN NT TE ER RR RU UP PC CI IO ON NE ES S ( (I II IR R) ) 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 interrupcin pendiente y el tipo de la misma es almacenado en IIR. Solo se reconocen si la CPU manda la seal de reconocimiento adecuada. Antes de tratar este registro es adecuado identificar los niveles de interrupciones posibles: Estado de la lnea de recepcin. Dato recibido disponible Registro de retencin de transmisin vaco. Estado del modem.
Estos se contemplan en tabla aparte, la estructura del registro es: 0 bit 7 0 bit 6 bit 0 0 bit 5 0 bit 4 0 bit 3 bit 2 bit 1 0 =Interrupcion pendiente 1= No hay interrupcion Identificacion de la interrupcion
DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
19 (*) REGISTRO IDENTIFICADOR DE INTERRUPCIONES TIPOS DE INTERRUPCIN Y REINICIALIZACIN BIT 2 (1) BIT 1 (0) BIT 0 NIVEL DE PRIORIDAD TIPO DE INTERRUPCIN ORIGEN DE LA INTERRUPCIN REINICIALIZACIN DE LA INTERRUPCIN 0 0 1 No hay No hay 1 1 0 Primario Estado de lnea del receptor Error de overrun, paridad, trama o break-interrupt Leyendo el registro de estado de lnea 1 0 0 Secundario Dato disponible en el receptor Dato disponible en el receptor Leyendo el buffer de recepcin 0 1 0 Terciario Registro de retencin de transmisin vaco Registro de retencin de transmisin vaco Leyendo el registro identificador de interrupciones IIR (si es el origen de la interrupcin) o escribiendo en el registro de retencin de transmisin 0 0 0 Cuaternario Estado de modem Borrado para enviar (CTS) o conjunto de datos preparado (DSR) o indicador de llamada (RI) o seal directa recibida por lnea Leyendo el registro de estado de modem
R RE EG GI IS ST TR RO O D DE E C CO ON NT TR RO OL L D DE E L LI IN NE EA A ( (L LC CR R) ) Este registro controla la estructura del formato de datos y apoya a la seleccin de los registros divisores para establecer la velocidad de operacin que atiende al puerto serie. Siendo un registro de escritura/lectura se accede a el a travs 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 ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
20 DLAB bit 7 BREAK bit 6 WLS2 bit 0 PARIDAD bit 5 EPS bit 4 PEN bit 3 STB bit 2 WLS1 bit 1 TAMANO DELDATO 0 1 BIT DE PARADA 1 2 BITS DE PARADA 1 SALIDASOUTAESPACIO (0) 0 SALIDASOUTAMARCA 1 SE PERMITEACCESOA DIVISORES DLLYDLM 0 SE PERMITEACCESOA RBR THRYIER SELECCION DE REGISTROS 0 0 DATOS DE 5 BITS 0 1 DATOS DE 6 BITS 1 0 DATOS DE 7 BITS 1 1 DATOS DE 8 BITS 0 0 0 SIN PARIDAD 0 0 1 PARIDAD IMPAR 0 1 1 PARIDAD PAR 1 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 carcter alguno y para ello se deben ejecutar las siguientes acciones.
1) Cargar un carcter 0 en respuesta a THRE, 2) Activar Break Control en respuesta al prximo 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 carcter
R RE EG GI IS ST TR RO O D DE E C CO ON NT TR RO OL L D DE E M MO OD DE EM M ( (M MC CR R) ) Es un registro de lectura y escritura y su funcin 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 lnea (LCR) tiene que estar el DLAB a cero. 0 bit 7 0 bit 6 DTR bit 0 0 bit 5 LOOP bit 4 SOUT 2 bit 3 SOUT 1 bit 2 RTS bit 1 Activa el puerto en modo diagnostico conectando en bucle digital local la salida del registro de transmision a la entrda del registro de recepcion. Comprobacion de la UART Linea auxiliar 2 de proposito general Linea auxiliar 1 de proposito general Request To Send Peticion para enviar Data Terminal Ready Equipo de datos preparado
DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
21 R RE EG GI IS ST TR RO O D DE E E ES ST TA AD DO O D DE E M MO OD DE EM M ( (M MS SR R) ) Este registro informa del estado del MODEM, se accede a l puerto base +5 y con el DLAB a cero, siendo un registro de lectura. La estructura de este es: DCD bit 7 RI bit 6 DCTS bit 0 DSR bit 5 CTS bit 4 DDCD bit 3 TERI1 bit 2 DDSR bit 1 Data Carrier Detector Ring Indicator Data Set Ready Clear To Send Delta Data Carrier Detector Delta Data Set Ready Delta Clear To Send Cambio de alto a bajo del RI Estado de los circuitos Delta Data Carrier Detector Delta Data Set Ready Delta Clear To Send Cambio de alto a bajo del RI Cambio de lo existente en los bits mas significativos
Nota: Delta significa que ha habido un cambio de estado en la lnea desde que se ha ledo por ultima vez el registro. Los bits 4,5,6 y 7 Indican el estado actual de la seal.
Los cuatro bit bajos informan acerca de si se ha efectuado algn 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 situacin de activacin o no de los circuitos fsicos del interfaz RS232.
Si DDCD, TERI, DDSR DCTS estn a 1 y se produce un cambio de estado durante la lectura, dicho cambio no ser reflejado en el MSR; pero si estn a 0 el cambio ser reflejado despus de la lectura. A AC CC CE ES SO O A A L LO OS S R RE EG GI IS ST TR RO OS S El acceso a los diferentes registros de la UART se lleva a cabo en el PC a travs de los puertos de comunicacin 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 direccin base de los cuatro primeros puertos comenzando por COM1 en la direccin 0040:0000. En dicha direccin se encuentra el byte menos significativo de la direccin del puerto (3F8h) es decir 11111000 =F8h y en la siguiente 40:0001 el mas significativo 00000011=03h. DEPARTAMENTO DE ELECTRNICA 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 inicializacin del sistema (POST - Power On Selft Test), se identifica cada uno de los interface serie y se sita la direccin de su puerto base segn 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 direccin que le corresponda y que la carga de dichas direcciones es secuencial. Estas direcciones pueden modificarse durante el curso de la ejecucin de programas, permitiendo el redireccionamiento de los puertos un ejemplo podria ser la posibilidad de instalar un modem interno en la direccin fsica 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 ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
23 TABLA 5b. Puertos, direcciones y contenido del PS/2. I IN NT TE ER RC CO ON NE EX XI I N N D DE E L LO OS S R RE EG GI IS ST TR RO OS S. . En el siguiente esquema podemos ver la interconexin de los registros anteriormente descritos: BUFFER BUS DE DATOS BUFFER REGISTRO DE RECEPCIN REGISTRO DE CONTROL DE LINEA REGISTRO DIVISOR (1) REGISTRO DIVISOR (2) REGISTRO DE ESTADO DE LINEA REGISTRO DE DESPLAZAMIENTO DE TRANSMISIN REGISTRO DE CONTROL DE MODEM REGISTRO DE ESTADO DE MODEM REGISTRO ACTIVADOR DE INTERRUPCIONES REGISTRO IDENTIFICADOR DE INTERRUPCIONES LOGICA DE CONTROL DE INTERRUPCIONES LOGICA DE CONTROL DE MODEM REGISTRO DE TRANSMISIN CONTROL & TEMPORIZACIN DE TRANSMISIN GENERADOR DE VELOCIDAD CONTROL & TEMPORIZACIN PARA RECEPCIN REGISTRO DE RECEPCIN BUS DE DATOS INTERNO D0-D7 Sin RCLK BAUDOT Sout RTS CTS DTR DSR DCD RI OUT1 OUT2 INTERUP
24 O OP PE ER RA AT TI IV VA A D DE E T TR RA AB BA AJ JO O D DE E L LA A U UA AR RT T. . El paso inicial para poder trabajar con la UART es configurar los parmetros de comunicacin, eso es lo mnimo que se necesita para poder establecer la comunicacin mas elemental. Esto se realiza cargando el registro de control de lnea(LRC), puerto (3FBh), con los valores adecuados a las caractersticas de la transmisin a realizar, longitud de palabra, activacin de paridad, seleccin de paridad y bits de parada.
Es importante resaltar que la primera accin a tomar es establecer los valores que permitan seleccionar la velocidad y para ello los divisores que anteriormente se detallaron y que deberan estar cargados en los registros DLM y DLL (puertos 3F8h y 3F9h respectivamente)habiendo condicionado su seleccin con el bit DLAB en el registro de control de lnea.
Una vez cargados estos valores se desactiva el DLAB lo que permitir acceder a los registros de recepcin y transmisin de datos.
Al llegar una informacin al registro de transmisin es automticamente volcada a un registro interno de la UART donde son aadidos los bit de arranque, parada, paridad y a continuacin transmitida. En el registro de recepcin 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 recuperacin posible en este nivel de comunicacin. Cuando esto ocurra, es decir, que se sobrescriba, se activar el bit 1 del registro de estado de lnea en el puerto 3FDh, indicando un error de rebosamiento en recepcin (overrun), leyendo este mismo registro podremos identificar otros posibles errores producidos en la comunicacin, paridad, sincronismo, break. Este mismo registro nos indica en el bit 0 (DR) cuando tenemos un dato disponible para leer en el buffer de recepcin. Dicho mtodo es el usado en sondeo.
L LA A T TR RA AN NS SM MI IS SI I N N Y Y L LA A R RE EC CE EP PC CI I N N E EN N E EL L 8 82 25 50 0 La seccin de transmisin del 8250 consiste en el Registro de Retencin de transmisin (THR), el Registro de Desplazamiento de la Transmisin (TSR) y en la lgica de control asociada. REGISTRO RETENCION DE TRANSMISION (THR) 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 0 REGISTRO DESPLAZAMIENTO DE TRANSMISION (TSR) DATOS 0 bit 7 TEMT bit 6 DR bit 0 THRE bit 5 BI bit 4 FR bit 3 PE bit 2 OE bit 1 TSR VACIO THR VACIO DATOS DOAD7 THREACTIVO
Dos bits en el LSR indican si est vaco el THR (bit THRE) o el TSR (bit TEMT). El carcter de 5-8 bits a ser transmitido es escrito en el THR; la CPU DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
25 debera realizar esta operacin slo si THRE est activo: este bit es activado cuando el carcter es copiado del THR al TSR durante la transmisin del bit de inicio.
Cuando el transmisor est inactivo, tanto THRE como TEMT estn activos. El primer carcter escrito provoca que THRE baje; tras completarse la transferencia vuelve a subir aunque TEMT permanecer bajo mientras dure la transferencia en serie del carcter a travs de TSR. Si un segundo carcter es escrito en THR, THRE vuelve a bajar y permanecer bajo hasta que el TSR termine la transmisin, porque no es posible volcar el contenido de THR en TSR hasta que este ltimo no acabe con el carcter que estaba transmitiendo. Cuando el ltimo carcter ha sido transmitido fuera del TSR, TEMT vuelve a activarse y THRE tambin lo har tras un cierto tiempo (el que tarda en escribirse THR en TSR).
En la recepcin, los datos en serie asncronos entran por la patilla SIN. El estado inactivo de la lnea se considera el '1' lgico. Un circuito de deteccin de bit de inicio est continuamente buscando una transicin 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), posicionndose en el centro del bit de inicio. El bit de inicio se considera vlido si SIN contina an bajo en ese momento. La validacin del bit de inicio evita que un ruido espreo en la lnea sea confundido con un nuevo carcter.
El LCR tiene toda la informacin necesaria para la recepcin: tamao del carcter (5-8 bits), nmero de bits de stop, si hay paridad o no... la informacin de estado que se genere ser depositada en el LSR. Cuando un carcter es transmitido desde el Registro de Desplazamiento de la Recepcin (RSR) al Registro Buffer de Recepcin (RBR), el bit DR del LSR se activa. La CPU lee entonces el RBR, lo que hace bajar de nuevo DR. Si el carcter no es ledo antes de que el siguiente carcter que se est formando pase del RSR al RBR, el bit OE (overrun) del LSR se activa. Tambin se puede activar PE en el LSR si hay un error de paridad. Finalmente, la circuitera que chequea la validez del bit de stop podra activar el bit FE del LSR en caso de error. P PR RO OG GR RA AM MA AC CI I N N D DE E L LA A U UA AR RT T. . Las dos formas clsicas que ya conocemos, sondeo e interrupcin se amplan 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 opcin que discutiremos ser el control por medio de la interrupcin 14 del BIOS.
Se desarrollan a continuacin 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 programacin directamente sobre los puertos de entrada salida del PC. DEPARTAMENTO DE ELECTRNICA 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 lnea 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 parmetros para organizar el carcter 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 informacin que sobre errores proporciona este registro. El registro LSR puede contener 00000001 o cualquier combinacin, en el primer caso se esta informando que el dato recibido esta preparado. Con cualquier otro valor, diferente a este, se aporta informacin acerca de error de rebosamiento, error de paridad, error de sincronismo, registro de transmisin vaco, 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 comprobacin 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 aadan los parmetros grabados en el LCR y se enva
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 ELECTRNICA 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. P PR RO OG GR RA AM MA A C CO ON N V VE EL LO OC CI ID DA AD D D DE E 9 96 60 00 0. . 10 PUERTO=&H3F8 ' Selecciona puerto COM1 20 OUT PUERTO+3,128 ' Activa bit 7 DLAB del registro de control de lnea 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 P PR RO OG GR RA AM MA A C CO ON N S SA AL LI ID DA A O OR RD DE EN NA AD DA A. . 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 carcter de escape, salimos) ELSE IF A$ <> THEN OUT PUERTO ASC(A$) 100 GOTO 80 P PR RO OG GR RA AM MA A C CO ON N D DE ET TE EC CC CI IO ON N D DE E E ER RR RO OR RE ES S. . 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 ELECTRNICA 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 carcter de escape, salimos) ELSE IF A$ <> THEN OUT PUERTO ASC(A$) 100 GOTO 80 P PR RO OG GR RA AM MA A E EN N E EN NS SA AM MB BL LA AD DO OR R 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 ELECTRNICA 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 ELECTRNICA 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 U UT TI IL LI IZ ZA AC CI I N N D DE E L LA AS S I IN NT TE ER RR RU UP PC CI IO ON NE ES S 1 14 4 D DE E L LA A B BI IO OS S 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 continuacin los servicios de comunicaciones serie de la BIOS en los adaptadores de puerto serie de los ordenadores IBM/PC- compatibles.
El vector de la interrupcin 14h reside en la direccin 00:50h de la tabla de vectores de interrupcin. La BIOS inicializa el vector de la interrupcin 14h en la direccin F000:E739h (FE739). La tabla de vectores de interrupcin puede ser accedida despus de que se haya terminado de realizar el proceso de POST (Power On Selft Test) desarrollado por el BIOS en el momento de inicializacin del ordenador. Dicha tabla se encuentra en las posiciones mas bajas de la memoria, comenzando en la direccin 00:00h y terminando en la 00:3FFh
TABLA Funciones de comunicacin de la interrupcin 14h del BIOS FUNCIN TIPO DE BIOS Descripcin 00h PC-XT,AT,PS/2 Inicializa el puerto serie de comunicaciones 01h PC-XT,AT,PS/2 Transmite carcter 02h PC-XT,AT,PS/2 Recibe carcter 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 travs del registro AH, como se describe detalladamente a continuacin: DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
31
Inicializa el puerto serie de comunicaciones Entrada: AH = 00h AL = Parmetros de inicializacin 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 =Tamao del carcter: 10b =Carcter de 7 bits 11b =Carcter de 8 bits DX = Numero de puerto serie 0,1,2,3 (COM1 =0, COM2 =1..) Salida: AH = Estado de la lnea o puerto del interface: Bit 7 =1 Error por time-out Bit 6 =1 Registro de desplazamiento de transmisin vaco Bit 5 =1 Registro de transmisin vaco Bit 4 =1 Interrupcin 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 recepcin 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 deteccin de portadora (DELTA- DCD) Bit 2 =1 Modifica deteccin 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 ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
32
Transmitir carcter Entrada: AH = 01h AL = Carcter a trasmitir (cdigo ASCII del carcter a enviar) DX = Numero de puerto serie 0,1,2,3 (COM1 =0, COM2 =1..) Salida: AH = Estado de la lnea: Bit 7 =0 No ha habido error por time-out Bit 6 =1 Registro de desplazamiento de transmisin vaco Bit 5 =1 Registro de transmisin vaco Bit 4 =1 Interrupcin 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 transmisin AL = Carcter enviado
Nota: Si la funcin 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 funcin de estado del puerto serie, no obstante para conseguir un chequeo completo del puerto ha de ejecutarse posteriormente la funcin 03h.
Leer carcter 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 lnea: Bit 7 =0 No ha habido error por time-out Bit 6 =1 Registro de desplazamiento de transmisin vaco. En general siempre cero Bit 5 =1 Registro de transmisin vaco. En general siempre cero Bit 4 =1 Interrupcin 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 recepcin AL = Carcter recibido Nota: Si la funcin 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 funcin 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 funcin 03h. Normalmente se pregunta si AH=0 (OK). En caso contrario error.
DEPARTAMENTO DE ELECTRNICA 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 lnea o interface: Bit 7 =1 Error por exceso de tiempo Bit 6 =1 Registro de desplazamiento de transmisin vaco Bit 5 =1 Registro de transmisin vaco Bit 4 =1 Interrupcin 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 seal en lnea (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 deteccin 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 Interrupcin (break) / Con 0 no hay interrupcin 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 carcter o 1.5 si la longitud de carcter a transmitir o chequear es de 5 bit CH = Bits 1-0 =Tamao del carcter: 00b =Carcter de 5 bits 01b =Carcter de 6 bits 10b =Carcter de 7 bits 11b =Carcter de 8 bits CL = Bits 0-4 =Velocidad en baudios: 0000b =110 baudios 0001b =150 baudios 0010b =300 baudios DEPARTAMENTO DE ELECTRNICA 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 lnea o interface: Bit 7 =0 Reservado / Bit 7 =1 Error fuera de tiempo Bit 6 =1 Registro de desplazamiento de transmisin vaco Bit 5 =1 Registro de transmisin vaco Bit 4 =1 Interrupcin 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 seal en lnea (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 deteccin 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 ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
35 Bit 0 =1 Terminal de datos preparado Salida: AH = Estado de la lnea o interface: Bit 7 =1 Error por exceso de tiempo Bit 6 =1 Registro de desplazamiento de transmisin vaco Bit 5 =1 Registro de transmisin vaco Bit 4 =1 Interrupcin 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 seal en lnea (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 deteccin 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 funcin 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 funcin 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 funcin 03h. Normalmente se pregunta si AH=0 (OK). En caso contrario error. DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
36
E EJ JE EM MP PL LO OS S D DE E P PR RO OG GR RA AM MA AS S U UT TI IL LI IZ ZA AN ND DO O L LA AS S I IN NT TE ER RR RU UP PC CI IO ON NE ES S 1 14 4H H D DE EL L B BI IO OS S: P PR RO OG GR RA AM MA A D DE E T TR RA AN NS SM MI IS SI I N N: : .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 interrupcin para la inicializacin del puerto MOV AH,0 ; Funcin 0 de la int. 14H inicializa puerto INT 14H ; Llama a la interrupcin 14H ;******************* TRANSMISION DE DATOS ****************** BUCLE: ; COMPRUEBA PUERTO MOV AH,3 ; Funcin 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 transmisin vaco) JZ BUCLE ; Si no lo esta vuelve al bucle ; MOV AH,1 ; Funcin 1 de INT 21H: Lee carcter del teclado INT 21H ; con ECO. Siendo el teclado sensible a la ; pulsacin de Ctrl+Breack. ; El registro AL contiene el carcter ledo 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 RECEPCIN: .MODEL SMALL DOSSEG .DATA VELOCIDAD DB 00000000B PARIDAD DB 00000000B LONGITUD DB 00000000B BITSTOP DB 00000000B .STACK 200H .CODE COMIENZO: DEPARTAMENTO DE ELECTRNICA 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
P PR RO OG GR RA AM MA A D DE E T TR RA AN NS SM MI IS SI I N N- -R RE EC CE EP PC CI I N N M MU UY Y S SI IM MP PL LI IF FI IC CA AD DO O: : .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 ELECTRNICA 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 ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
39
P PR RO OG GR RA AM MA A D DE E T TR RA AN NS SM MI IS SI I N N- -R RE EC CE EP PC CI I N N M ME EJ JO OR RA AD DO O Q QU UE E P PE ER RM MI IT TE E L LA A V VI IS SU UA AL LI IZ ZA AC CI I N N C CO ON NT TI IN NU UA A D DE E M ME EN NS SA AJ JE ES S E EN N P PA AN NT TA AL LL LA A Y Y U UN NA A S SA AL LI ID DA A O OR RD DE EN NA AD DA A D DE EL L P PR RO OG GR RA AM MA A: : .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 ELECTRNICA 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 ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
41
O OP PC CI IO ON NE ES S D DE EL L P PR RO OG GR RA AM MA A D DE EB BU UG G C:\>debug /? Ejecuta Debug, una herramienta para examinar y editar programas.
DEBUG [[unidad:][ruta]nombre de archivo [archivo de prueba-parmetros]]
[unidad:][ruta]nombre de archivo Especifica el archivo que desea probar. archivo de prueba-parmetros Especifica informacin de lnea de comandos requerida por el archivo que desea probar.
Despus de que Debug se haya iniciado, escriba ? para obtener la lista de comandos de depuracin.
C:\> -?
ensamblar A [direccin] comparar C direccin de rango dump D [rango] escribir E direccin [lista] llenar F lista de rangos ir G [=direccin] [direcciones] hex H valor1 valor2 entrada I puerto cargar L [direccin] [unidad] [primer_sector] [nmero] mover M direccin de rango nombre N [nombre_ruta] [lista_argumentos] salida O byte de puerto proceder P [=direccin] [nmero] salir Q registro R [registro] buscar S lista de rangos seguimiento T [=direccin] [valor] desensamblar U [rango] escribir W [direccin] [unidad] [primer_sector] [nmero] asignar memoria expandida XA [#pginas] desasignar memoria expandida XD [identificador] asignar pginas de memoria expandida XM [Lpgina] [Ppgina] [identificador] mostrar estado de la memoria expandida XS -q
DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
42 E EJ JE EM MP PL LO O D DE E U US SO O D DE E L LA AS S F FU UN NC CI IO ON NE ES S D DE EL L P PR RO OG GR RA AM MA A D DE EB BU UG G E EN N L LA A E ED DI IC CI I N N, , C CO OR RR RE EC CC CI I N N Y Y E EJ JE EC CU UC CI I N N D DE E U UN N P PR RO OG GR RA AM MA A C CO ON N E ER RR RO OR RE ES S D DE E C CO OD DI IF FI IC CA AC CI I N N: : C:\>DEBUG
-A 100 EDICIN 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 ELECTRNICA 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 ELECTRNICA Y COMUNICACIONES
NO OLVIDAR EL REALIZAR TODOS LOS PASOS ANTERIORES. NECESARIOS PARA OBTENER EL ARCHIVO EJECUTABLE. P PR RO OG GR RA AM MA A D DE ET TE EC CT TO OR R D DE E E ER RR RO OR RE ES S D DE E C CO OM MU UN NI IC CA AC CI I N N: :
.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 ELECTRNICA 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 continuacin un programa completo de comunicaciones que permita la transmisin, recepcin y deteccin de errores. DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
46
M ME ED DI IA AN NT TE E L LA AS S F FU UN NC CI IO ON NE ES S 3 3H H Y Y 4 4H H D DE E L LA A I IN NT TE ER RR RU UP PC CI I N N 2 21 1H H D DE EL L D DO OS S. . Dichas funciones permiten el uso de los dispositivos COM1 y AUX del DOS (que para esta interrupcin se considera el mismo) como dispositivos auxiliares de entrada y salida. Sin embargo con esta interrupcin no es posible la inicializacin del puerto serie de comunicaciones. Deberamos realizarla por alguno de los dos procedimientos anteriores, o asumiendo la inicializacin por defecto del POST del DOS (velocidad de 2400 baudios, sin paridad, un bit de parada y longitud de carcter de ocho bits). Tampoco tendremos control sobre la UART ni nos proporcionaran informacin sobre los errores producidos en la comunicacin 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 =Carcter ledo en el dispositivo auxiliar estndar.
Nota: Esta funcin nos permite leer, esperando hasta que llegue, un carcter ledo en el dispositivo COM1 o AUX, recuperndolo en el registro AL. Son chequeados ^C/^Break en el teclado.
Salida del dispositivo auxiliar standard (STDAUX) Entrada: AH =04h DL =Carcter a enviar al dispositivo auxiliar estndar. Salida: - No devuelve informacin.
Nota: Esta funcin nos permite enviar el carcter contenido en el registro DL al dispositivo auxiliar estndar COM1 o AUX. Son chequeados ^C/^Break en el teclado.
Es interesante indicar brevemente las funciones 00h,01h y 02h de la interrupcin 21h. Terminar programa Entrada: AH =00h CS =Segmento PSP.
Lee carcter de la entrada standard, visualiza el eco Entrada: AH =01h Salida: AL =Carcter ledo
Nota: Son chequeados ^C/^Break en el teclado.
DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
47 Enva carcter a la salida standard Entrada: AH =02h DL =Carcter a enviar (escribir en salida estndar) Salida: AL =Ultimo carcter enviado
Nota: Son chequeados ^C/^Break en el teclado.
O OT TR RO OS S C CO OM MP PO ON NE EN NT TE ES S A AS S N NC CR RO ON NO OS S. . Conviene advertir que el modelo estudiado (8250) y sus diferentes derivados no son los primeros ni los nicos circuitos de comunicaciones serie asncronas en el mercado, si no que existe un amplio universo de componentes similares y no siempre directamente substituibles. Con objeto de facilitar la identificacin de circuitos de comunicaciones en otros equipos que no sean PCs y que se deseen conectar a estos, se mencionan a continuacin algunos componentes que desarrollan similares funciones y que no son de uso comn en el entorno de los PCs.
Se indican entre parntesis el nombre dado por las diferentes compaas a sus circuitos: Z80-(DART) Transmisor/receptor asncrono doble. Z80-(SIO) Controlador de entrada/salida serie. Z8530 Controlador de comunicaciones serie. 16C450 (ACE) Elemento de comunicaciones asncronas. Bajo consumo. 16C452 (DACE) Elemento de comunicaciones asncronas 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 asncronas. Bajo consumo. 65C52 (DACIA) Adaptador de interface de comunicaciones asncronas doble. Bajo consumo. 6551 (ACIA) Adaptador de interface de comunicaciones asncronas. 68C52 (DACIA) Adaptador de interface de comunicaciones asncronas doble. Bajo consumo. 6850 (ACIA) Adaptador de interface de comunicaciones asncronas. 6852 (SSDA) Adaptador de datos serie sncrono. 6854 Controlador de enlace de datos avanzado. 68681 (UART) Transmisor/receptor asncrono universal doble. 82C50 (ACE) Elemento de comunicaciones asncronas 8250 en versin de bajo consumo. 8251 (USART) Transmisor /receptor sncrono/asncrono universal. 8256 (MUART) Transmisor/receptor asncrono universal multi-funcin. 8256 (UART) Transmisor/receptor asncrono universal. 84C40 (SIO) Controlador de entrada/salida serie. DEPARTAMENTO DE ELECTRNICA 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 asncronas. 1488/1489 Son los mas conocidos circuitos adaptadores de interface nos permitirn localizar con facilidad un interface V24. D DR RI IV VE ER RS S F FO OS SS SI IL L. . El termino FOSSIL proviene de las siglas Fido Opus SEAdog Standard Interface Layer es una especificacin que pretende solucionar los problemas que surgen al desarrollar programas de comunicaciones que utilizan la llamada a la interrupcin 14 del BIOS del PC. Al existir diferentes fabricantes de BIOS y no ajustarse exactamente a la implementada por IBM en sus equipos aumentndose dicho efecto con la distribucin por parte de los diferentes fabricantes de hardware cada uno incluyendo sus correspondientes mejoras, el resultado final es la creacin de programas de comunicacin que pueden funcionar correctamente en una mquina determinada y no hacerlo en el resto. Para solucionar dicho problema se ha diseado la anterior especificacin la cual pretende describir la creacin de drivers que separen el nivel fsico de la comunicacin, entendiendo como tal a la mquina sobre la que se pretende correr un determinado software de comunicacin y el mencionado programa. De forma que se facilite la puesta a punto y la portabilidad de la aplicacin 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 interceptacin y sustitucin de la interrupcin 14 del BIOS en el momento del arranque del equipo. SOFTWARE DE COMUNICACIONES DESARROLLADO POR EL USUARIO DRIVER FOSSIL Intercepta la interrupcin 14 del BIOS UART
Generalmente aadiendo el driver como un dispositivo en el CONFIG.SYS: DEVICE=C:\BNU.SYS /P2 /L0:19200,8N1 La lnea anterior cargara 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 continuacin cargarse el programa de comunicaciones comercial o DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
49 desarrollado por el usuario. Muchos programas de comunicacin solicitan previamente la instalacin de dichos drivers para hacer uso de sus amplias posibilidades de trabajo. Las funciones de dichos drivers se encuentran documentadas y desarrolladas en la aplicacin distribuida por el fabricante. DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
50 P PR RO OG GR RA AM MA A D DE E D DI IA AG GN NO OS ST TI IC CO O D DE E L LA A U UA AR RT T E EN N T TU UR RB BO O C C. . 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 enva y sin que se produzcan errores. Se permite elegir el puerto deseado as como la velocidad de transmisin. /***************************************************************** *** * * UTILIDAD DE AUTODIAGNOSTICO DEL 8250 EN TURBO C * ***************************************************************** ****/
#include <dos.h> #include <conio.h>
#define LCR (base+3) /* registro de control de lnea */ #define IER (base+1) /* registro de activacin 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 lnea */ #define RBR (base+0) /* registro buffer de recepcin */ #define THR (base+0) /* registro de retencin de transmisin */
#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 vaco */
void error() { printf ("\r Fallo del puerto serie!!\n"); exit (2); }
do { /* esperar por THR vaco */ lsr=inportb(LSR); if (lsr & (OE|PE|FE|BI)) error(); } while (!(lsr & THRE));
outportb (THR, dato); /* enviar carcter */
do { /* esperar por RBR lleno */ lsr=inportb(LSR); if (lsr & (OE|PE|FE|BI)) error(); } while (!(lsr & DR));
entrada=inportb (RBR); /* recibir carcter */
if (dato!=entrada) error(); printf ("\rEnviado y recibido byte %d",dato); }
if (!kbhit()) printf("\rAutodiagnstico del 8250 en COM%d superado.\n", com); else { getch(); printf("\rTecla pulsada - prueba abortada.\n");} } DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
52 DESCRIPCIN DE LOS REGISTROS DE LA UART 8250 REG. DE RETENCIN DE TRANSMISIN (THR) DIR =P_base +0 DLAB =0 Registro de Escritura REG. (BUFFER) DE RECEPCIN (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 LNEA (LCR) Direccin =Puerto_base +3 DLAB (Es el bit 7) =X Registro de Lectura/Escritura 0 Primer bit de seleccin de longitud de carcter a procesar 0 (WLS0)*. 1 Segundo bit de seleccin de longitud de carcter a procesar 1 (WLS1)*. BIT 1 Bit 0 (*)Longitud de carcter 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 carcter enviado, o chequeado en cada carcter recibido: Con 0 Se genera o chequea un bit de parada por carcter / 1 Cuando la longitud de carcter seleccionada es de cinco bits entonces son generados o chequeados un bit y medio de parada. Cuando la longitud de carcter 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 informacin. 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 lgico 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 seal de BREAK. Con:1 La salida serie (SOUT) es obligada a permanecer en el estado lgico cero (tensin +25v en salida del interface) y mantiene dicho estado a pesar de que exista actividad de transmisin. Manteniendo este estado se activa la seal de ruptura (Break) en el Bit 4 del Registro de Estado de Lnea de la UART receptora. Para asegurar que eso ocurra ha de mantenerse dicho estado durante al menos el tiempo de transmisin 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 operacin de lectura o escritura. =0 Buffer de recepcin y registro de desplazamiento de transmisin. REGISTRO DE CONTROL DE MODEM (MCR) BIT Direccin =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 Lnea auxiliar 1 (-SOUT1) de propsito general (No usada habitualmente). La fuerza a activa. 3 =1 Lnea auxiliar 2 (-SOUT2) de propsito general (Activar) 4 =1 Activa el puerto serie en modo diagnostico conectando en bucle digital local la salida del registro de transmisin a la entrada del registro de recepcin. Comprobando de forma inmediata el funcionamiento de la UART. 5-7 =0 Reservado. REGISTRO DE ESTADO DE LNEA (LSR) BIT Direccin =Puerto_base +5 DLAB =X Registro de Lectura/No recomendada Escritura 0 =1 Dato recibido preparado (DR). Se ha recibido un carcter que se encuentra almacenado para su lectura en el registro de recepcin. Puerto 03F8h para COM1. Este es el bit que ha de comprobarse en el procedimiento de sondeo. Una vez ledo el carcter automticamente se restaura a cero. 1 =1 Error de rebosamiento en recepcin. OVERRUN (OE) . Ha llegado otro carcter al registro de recepcin antes de que se haya ledo el anterior. Se pierde el primer carcter. 2 =1 Error de paridad (PE). El carcter recibido tiene una paridad incorrecta respecto a la esperada. 3 =1 Error de sincronismo en la recepcin de trama (FE). Se espera un bit de parada (un uno) despus de el bit de paridad o ultimo bit de datos y ha llegado un cero. 4 =1 Interrupcin por break (BI) o ruptura de comunicacin. Cuando el estado del circuito de recepcin 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 transmisin vaco (THRE). El controlador esta preparado para aceptar un nuevo carcter a enviar. 6 =1 Registro de transmisin y registro de desplazamiento de transmisin vacos (TSRE&THRE). 7 =0 Reservado. REGISTRO DE ESTADO DE MODEM (MSR) BIT Direccin =Puerto_base +6 DLAB =X Reg.(Lect/Esc). BIT Direccin =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 seal de recepcin detectada (DELTA-CD) 7 Detectada seal en la lnea de recepcin (CD) DEPARTAMENTO DE ELECTRNICA Y COMUNICACIONES
ASIGNATURA: DISPOSITIVOS DE COMUNICACIONES
53 REGISTRO ACTIVADOR DE INTERRUPCIONES (IER) REGISTRO IDENTIFICADOR DE INTERRUPCIONES (IIR) BIT Direccin =Puerto_base +1 DLAB =0 Reg.(Lect/Esc). BIT Direccin =Puerto_base +2 DLAB =X Reg. de Lectura 0 =1 Activa la interrupcin de dato recibido disponible 0 =0 Nos indica que hay pendiente alguna interrupcin 1 =1 Activa la int. de registro temporal de transmisin vaco 1 Bit 0* del campo identificador de interrupciones 2 =1 Activa la int. del estado de la lnea de recepcin 2 Bit 1* del campo identificador de interrupciones 3 =1 Activa la interrupcin del estado del modem 3-7 =0 Reservado 4-7 =0 Reservado