Está en la página 1de 9

Arquitecturas Avanzadas Curso 2006-2007

Ingenieria InIormatica Campus Ourense- Universidad de Vigo




Prctica 2 SOFTWARE DE COMUNICACIN ENTRE 2 PC's A
TRAVS DE PUERTO SERIE

1. Objetivo:

Se plantea como objetivo la creacion de un soItware de comunicaciones entre dos PC's a traves de
puerto serie, utilizandose interrupciones en recepcion, y ejecucion de programa en transmision. Para
simplicidad de la practica no estableceran protocolos de control de errores.

Se estableceran dos Iases de realizacion, de Iorma que se puedan cumplir los objetivos de al menos
la primera de ellas.

El soItware de comunicaciones sera un sistema de telegraIia instantanea, de Iorma que tanto en
transmision como en recepcion se este ejecutando el programa, y cuando se reciba un mensaje este
aparezca en una 'ventana del receptor y en otra ventana se pueda estar escribiendo lo que se desea
transmitir.

2. Arquitectura del Sistema

Arquitectura de la comunicacion













REGISTRO DE INTERRUPCIONES
(PIC)
Registros PIC1: 0x20,0x21
Registros PIC2: 0xA0, 0xA1
UART 8250
Direccin de memoria0x3F8,
0x2F8, 0x3E8, 0x2E8
Varios registros:
Puerto+0,+1,+2,+3,+4,+5,+6,+7
MEMORIA
0x0c (puntero a rutina de
interrupcin IRQ3)
0x20 (datos) 0x21 (mascara)
IRQ x
RS232. Interfaz puerto
serie
RX
TX RX
TX

Arquitecturas Avanzadas Curso 2006-2007
Ingenieria InIormatica Campus Ourense- Universidad de Vigo


- UART 8250 (Controlador de Puerto Serie)

Habitualmente se dispone de hasta 4 puertos serie (COM1-COM4) pero solo 2 interrupciones. Estos
puertos serie tienen una direccion de memoria base, a la que hay que sumar el desplazamiento
relativo del numero de registro a ser accedido, por ejemplo:

El puerto COM1 tiene asignada la direccion base 0x3F8, y su registro LCR esta en la direccion base
3, por tanto se accede a el en la direccion 0x3FB, como se describira mas adelante.


El 8250 dispone de 11 registros (uno mas el 16550) pero solo 3
lineas de direccion para seleccionarlos. Lo que permita distinguir
unos de otros sera, aparte de las lineas de direcciones, el sentido
del acceso (en lectura o escritura) y el valor de un bit de uno de
los registros: el bit DLAB del registro LCR, que es el bit 7 de
dicho registro.











Se puede ver la Iorma de acceso a cada uno de los 11 registros de la siguiente Iorma:

A2 A1 A0 DLAB MODO NOMBRE SIGNIFICADO
0 0 0 0 R RBR Receiver BuIIer Register (Registro buIIer de recepcion)
0 0 0 1 R/W DLL Divisor Latch LSB (Divisor de velocidad, parte baja
0 0 0 0 W THR
Transmitter Holding Register (Registro de retencion de
transmision
0 0 1 0 R/W IER
Interrupt Enable Register (Registro de habilitacion de
interrupciones)
0 0 1 1 R/W DLM Divisor latch MSB (Divisor de velocidad, parte alta)
0 1 0 X R IIR
Interrupt IdentiIication Register (Registro de identiIicacion
de interrupciones)
0 1 0 X W FCR
FIFO Control Register (Registro de control FIFO) -
SOLO 16550 -
0 1 1 X R/W LCR
Line Control Register (Registro de control de linea) EL
BIT 7 ES DLAB!!
1 0 0 X R/W MCR Modem Control Register (Registro de control del modem)
1 0 1 X R/W LSR Line Status Register (Registro de estado de la linea)

Arquitecturas Avanzadas Curso 2006-2007
Ingenieria InIormatica Campus Ourense- Universidad de Vigo
1 1 0 X R/W MSR Modem Status Register (Registro de estado del modem)
1 1 1 X R/W SCR Scratch Register (Registro residual)


Los registros mas importantes de la UART 8250 son:

LCR (Line Control Register), Base + 3. Controla el Iormato del caracter de datos, e incluye el bit
DLAB.


LSR (Line Status Register), Base + 5. Este suele ser el primer registro consultado tras una
interrupcion (cuando llega un caracter DR1). Controla ciertos errores.


BRSR (Baud Rate Select Register), DLL Base+0, DLM Base+1 . Son los registros DLL (parte
baja) y DLM (parte alta).

Estos dos registros de 8 bits constituyen un valor de 16 bits que sera el divisor que se aplicara a
la Irecuencia base para seleccionar la velocidad a emplear. Dicha Irecuencia base (por ejemplo,
1.8432 MHz) sera dividida por 16 veces el valor almacenado aqui. Para 9600 bps, DLL0C,
DLM00.
RBR (Receiver Buffer Register), Base+0. BuIIer de Recepcion (cuando se lee el registro
inportb-)

THR (TRansmit Buffer Register), Base+0. BuIIer de Transmision (cuando se escribe en el
registro outportb-)

IER (Interrupt Enable Register), Base+1 con LDAP0.
Este registro de escritura se utiliza para seleccionar que interrupciones activan INTRPT y, por
consiguiente, van a ser solicitadas a la CPU. Decide que interrupciones activan el PIC (Controlador
de Interrupciones). Se suele activar la interrupcion para recibir datos (IER1).

Arquitecturas Avanzadas Curso 2006-2007
Ingenieria InIormatica Campus Ourense- Universidad de Vigo


Se puede ver una inicializacion habitual del puerto serie (usando el lenguaje de programacion C) en
el apartado 3 'Arquitectura SoItware

DeIinir el puerto
#deIine PORT1 0x3F8
Deshabilitar interrupciones (para poder conIigurar)
outportb(PORT1 1, 0);
ConIiguracion del puerto
outportb(PORT1 3, 0x80); /* Habilita LDAP1 para conIiguracion */
outportb(PORT1 0, 0x0C); /* pone velocidad a 9600 baudios */
outportb(PORT1 1, 0x00); /* idem */
outportb(PORT1 3, 0x03); /* Deshabilita LDAP, sin paridad, 1 bit Stop, 8 bits de datos */


- PIC 8259. Controlador de Interrupciones

El PIC posee 2 registros y varios modos de operacion de los
registros. Los principales registros internos del 8259 son el IRR
(Interrupt Request Register), el ISR (In Service Register) y el IMR
(Interrupt Mask Register). El IRR almacena todas las peticiones de
interrupcion pendientes; el ISR almacena todas las interrupciones
que estan siendo atendidas en un momento dado. El IMR habilita o
inhibe las 8 interrupciones posibles en un PIC.
La direccion base del PIC1 es 0x20 y su Iuncionamiento esta
basado en palabras de comando llamadas OCW e ICW. Para
programar el IMR se utiliza la palabra de comando OCW1
accesible en la direccion base 1 (0x21), y cuya programacion
coincide con las lineas de interrupcion del IMR.
Las lineas del PIC son activadas por los periIericos, siempre que se
ponga a 1 el bit correspondiente en el registro IMR (OCW1).
La Iamilia de microprocesadores 8086 provee 256 interrupciones. Estos microprocesadores
disponen de una tabla vector de interrupciones de 1024 bytes, algunos los cuales se usan
exclusivamente como interrupciones soItware. La tabla vector de interrupciones guarda la direccion
de la rutina de servicio de interrupciones (ISR) de 4 bytes de longitud. Asi dan los 256 vectores de
interrupcion (1024 / 4).
INT (Hex) IRQ Uso mas comn
00 - 01 Exception Handlers -
02 Non-Maskable IRQ Non-Maskable IRQ (Parity Errors)
03 - 07 Exception Handlers -
08 Hardware IRQ0 Reloj de Sistema
09 Hardware IRQ1 Teclado
0A Hardware IRQ2 Redirected
0B Hardware IRQ3 Serial Comms. COM2/COM4
0C Hardware IRQ4 Serial Comms. COM1/COM3

Arquitecturas Avanzadas Curso 2006-2007
Ingenieria InIormatica Campus Ourense- Universidad de Vigo
0D Hardware IRQ5 Reserved/Sound Card
0E Hardware IRQ6 Floppy Disk Controller
0F Hardware IRQ7 Puerto paralelo.
10 - 6F SoItware Interrupts -
70 Hardware IRQ8 Real Time Clock
71 Hardware IRQ9 Redirected IRQ2
72 Hardware IRQ10 Reserved
73 Hardware IRQ11 Reserved
74 Hardware IRQ12 PS/2 Mouse
75 Hardware IRQ13 Math's Co-Processor
76 Hardware IRQ14 Hard Disk Drive
77 Hardware IRQ15 Reserved
78 - FF SoItware Interrupts -

El Programmable Interrupt Controller (PIC) maneja las interrupciones hardware. La mayoria de los
PC's suele tener 2 PIC's para manejar las 15 interrupciones hardware. Cada uno de estos PIC's
gestiona las interrupciones de 8 dispositivos hardware, uno gestiona las IRQ's 0-7 y el otro 8-15.



Conexiones de cable.



Arquitecturas Avanzadas Curso 2006-2007
Ingenieria InIormatica Campus Ourense- Universidad de Vigo

3. Arquitectura Software

INICIALIZACIN DE
INTERRUPCIONES
INICIALIZACIN DE
PUERTO
CUERPO DE
PROGRAMA
RESTAURACIN DE
VALORES
ANTERIORES
RUTINA DE
INTERRUPCIN DE
PUERTO SERIE


Una inicializacion habitual del puerto serie (usando el lenguaje de programacion C) seria la
siguiente (repasar el apartado 2 'Arquitectura del Sistema reIerido a la UART8250):

a) DeIinir el puerto
=define PORT1 0x3F8

b) Deshabilitar interrupciones (para poder conIigurar)
outportb(PORT1 1, 0),

c) ConIiguracion del puerto
outportb(PORT1 3, 0x80), /* Habilita LDAP1 para configuracion */
outportb(PORT1 0, 0x0C), /* pone velocidad a 9600 baudios */
outportb(PORT1 1, 0x00), /* idem */
outportb(PORT1 3, 0x03), /* Deshabilita LDAP, sin paridad, 1 bit Stop, 8 bits de datos */


Para la programacion de las interrupciones, sera necesario deIinir una Rutina de Servicio de
Interrupciones (ISR) y llevar el primer puntero de la rutina a la direccion de memoria del vector de

Arquitecturas Avanzadas Curso 2006-2007
Ingenieria InIormatica Campus Ourense- Universidad de Vigo
interrupcion correspondiente, asi, se puede entender el siguiente codigo ejemplo comentado:
#define INTVECT 0x0C /* IRQ del puerto COM */


void interrupt (*oldport1isr)();
void interrupt PORT1INT() /* Rutina de Servicio de Interr. (ISR) para PORT1 */
{

..... /* Cuerpo de la Rutina ISR */
outportb(0x20,0x20); /* Devuelve el control de la CPU al cuerpo del
programa principal en el punto en que se estaba ejecutando cuando se ejecut la
interrupcin. */

}

void main(void)
{
oldport1isr = getvect(INTVECT); /* Salva el anterior vector de int. */
setvect(INTVECT, PORT1INT);/* Habilita nuevo Vector de interrupciones */

........ /* Cuerpo 1 del programa (Configuracin comunicaciones serie)*/

outportb(0x21,(inportb(0x21) & 0xEF)); /* Activa el PIC */
/* COM1 (IRQ4) - 0xEF */
/* COM2 (IRQ3) - 0xF7 */
/* COM3 (IRQ4) - 0xEF */
/* COM4 (IRQ3) - 0xF7 */


....... /* Cuerpo 2 del programa */

outportb(0x21,(inportb(0x21) | 0x10)); /* MASK IRQ usando PIC */
/* COM2 (IRQ3) - 0x08 */
/* COM3 (IRQ4) - 0x10 */
/* COM4 (IRQ3) - 0x08 */
setvect(INTVECT, oldport1isr); /* Restaura el anterior Vector de
Interrupciones */
}

4. Realizacin

- Primera Fase:

Familiarizacion con el entorno Borland TC.
Realizacion de un programa de conIiguracion del puerto serie, asi como de visualizacion de los
parametros de control del puerto (registros).
Realizacion de un programa de comunicacion transmisor y otro receptor entre los dos ordenadores,
que incluya la posibilidad de conIiguracion del puerto serie, transmitiendo por uno de ellos en modo
programa y recibiendo el otro por interrupcion.
Para ello se utilizara el programa ejemplo que se incluye en el directorio
C:\comp\ara\prac2\ejemara1.c

Para usuarios avanzados, se propone una segunda Iase.




- Segunda Fase:

Arquitecturas Avanzadas Curso 2006-2007
Ingenieria InIormatica Campus Ourense- Universidad de Vigo
Realizacion de la interIaz de presentacion de la conversacion. Esta se puede plantear de la siguiente
Iorma:

Una ventana MSDOS para la recepcion de los mensajes (o caracteres) entrantes.
Una ventana MSDOS activa para la escritura y transmision de los mensajes (o caracteres)
salientes.

Para ello se utilizara el programa ejemplo que se incluye en el directorio
C:\comp\ara\prac2\ejemara2.c






























Arquitecturas Avanzadas Curso 2006-2007
Ingenieria InIormatica Campus Ourense- Universidad de Vigo



ANEXOS


Arquitectura de la UART 8250

http://atc.ugr.es/docencia/udigital/1209.html

Arquitectura de las interrupciones.

http://www.beyondlogic.org/interrupts/interupt.htm


Programacin en C.

Basica, principiantes:

http://quantum.ucting.udg.mx/uctn/cursos/c/
http://www.uib.es/c-calculo/scimgs/cursc/

Avanzada, todas las Iunciones de TurboC

http://www.clipx.net/ng/turboc/

Se resalta la necesidad de manejar las Iunciones siguientes como corazon del programa y control
sobre registros y rutinas de interrupcion.

setvect() : Iuncion que pone un vector de interrupcion apuntando a una direccion dada.
getvect() : lee el vector de interrupcion
inportb(): lee un registro
outportb(): escribe en un registro.

También podría gustarte