Interfaz Ieee 488 Para Pc

102
/ Interfaz IEEE-488 para PC Aprobo (Asesor): M.-C. Realización: J o r m o Angel Artur Pérez Martinez Y- Jorge Velez Meza

description

ieee 488 PC

Transcript of Interfaz Ieee 488 Para Pc

Page 1: Interfaz Ieee 488 Para Pc

/ Interfaz IEEE-488 para PC

Aprobo (Asesor):

M.-C.

Realización:

J o r m o

Angel Artur Pérez Martinez Y- Jorge Velez Meza

Page 2: Interfaz Ieee 488 Para Pc

Aim * ¡ tiemPo UNIVERSIDAD AUTONOMA METROPOLITANA - IZTAPALAPA -

l/ I N T E R F A Z

I E E E - 4 8 8

P A R A P C

B I B L I O T € C B Y ---------

,,Licenciatura en Ingenierfa Electrdnica Enero 1990

Page 3: Interfaz Ieee 488 Para Pc

m cam ~ - ' ~ ~ UNIVERSIDAD AUTONOMA METROPOLITANA - IZTAPALAPA -

A mis padres.. .

Por su paciencia y apoyo constante.

A mi abuelo:

Baliazar por sus palabras de estimulo.

Angel A. Pérez M.

Page 4: Interfaz Ieee 488 Para Pc

m mrl UNIVERSIDAD AUTONOMA METROPOLITANA - IZTAPALAPA -

A mis padres.. .

Por su comprensión y paciencia.

A mis tios ...

J. Arturo y Mary, por su apoyo.

Jorge Velez Meza.

Page 5: Interfaz Ieee 488 Para Pc

AGRADECIMIENTOS

La realización de este proyecto ha sido una tarea ardua debido a la escasez de la información, la cantidad que de ella misma se requería y el equipo especial que para el desarrollo se necesitaba. La terminación de este trabajo no hubiera sido posible sin la ayuda de otras personas.

Estamos especialmente agradecidos con nuestro asesor M. C. Jorge Lozano Moreno, por las facilidades otorgadas tanto de orientación técnica como de material y equipo, así como del tiempo dedicado a la revisión y consejos para todos los borradores de este manuscrito. Así tambien agradecemos a Miguel Angel Guzman y Gonzalo I. Duchén por sus comentarios reflexivos y ayuda técnica brindada durante el desarrollo de este proyecto.

Naturalmente, todos los errores que se puedan encontrar en el presente reporte son responsabilidad nuestra, de los cuales esperamos que sean mínimos para que la información contenida en este documento sea de utilidad para todas aquellas personas que así lo requieran.

Jorge Velez Meza Angel Arturo Pérez Mtz.

Page 6: Interfaz Ieee 488 Para Pc

1. Introducción.

O. Desarrollo Teórico.

2.1 El IEEE-488. 2.2 MS-DOS para programación.

2.2.1 Programas Residentes. 2.2.2 Drivers.

2.3 Hardware de la PC.

3. Desarrollo Experimental.

3.1 Hardware. 3.1.1 Decodificación. 3.1.2 Implementación.

3.2.1 Programación en Lenguaje C. 3.2.2 Driver.

3.2 Software.

4. Resultados.

5. Conclusiones.

6. Bibliograña.

Apéndices.

CONTENIDO

!

A. Interfaz periférica programable. B. Controlador de interrupciones. C. Manual de uso.

Page 7: Interfaz Ieee 488 Para Pc

CAPfTULO 1

INTRODUCCIÓN

Como máquinas que procesan información, las computadoras requieren caminos para la entrada y salida de datos, a fin de emitir sus resultados. Una técnica de diseño común es crear una camino universal dentro y fuera del procesador. Este camino es el bus de entrada y salida (E/S).

Este concepto de diseño es muy bueno, pero introduce una complicación: no importa el diseño del bus de E/S, la computadora puede ser incompatible con muchos dispositivos de E/S. Algunos dispositivos antiguos usan diferentes niveles de señales, otros dispositivos tienen diferentes formas de datos. Muchos dispositivos pueden ser bastantes lentos, reduciendo seriamente el funcionamiento de la computadora, si ésta es utilizada en cada transacción de datos.

La complicación es resuelta a través del uso de una interfaz, la cual actúa como transformadora de niveles de tensión, formato de datos y velocidades de transacción. La interfaz habilita a la computadora para comunicarse con un vasto arreglo de dispositivos penféricos.

Puesto que hoy en día el avance de la tecnología es continuo, los diseñadores de computadoras siempre se encuentran tratando de incorporar las partes más avanzadas y la lógica más rápida en configuraciones nuevas y diferentes. A la par de estos, los diseñadores de periféricos siempre están creando clases de

I

Page 8: Interfaz Ieee 488 Para Pc

capítulo 1 Intrqducci6n

dispositivos nuevos y variados. El resultado. ha sido una gran cantidad de interfaces, cada una optimizada para una simple clase de computadoras o periféricos, como resultado de esto, muy pocas interfaces son compatibles unas con otras.

Debido a esto, la industria de la computación acordó crear una interfaz estándar, la cual fué publicada en 1975 por el Instituto de Ingenieros Eléctricos y Electrónicos (IEEE). Está fué la primera y más cercana interfaz universal creada para computadoras e instrumentación. La primera versión fué llamada IEEE-Standar Digital Interface for Programmable Instrumentation (IEEE-STD- 488-1975), fué revisada y modificada ligeramente en 1978, llamada IEEE-STD-488-1978, la cual es conocida comúnmente como IEEE- 488 o GP-IB (General Programmuble Interface Bus).

El intento del IEEE-488 es asegurar que muchas variables de una interfaz sean posibles, manteniendo la flexibilidad y una amplia aplicabilidad. La interfaz es definida sin hacer referencia al hardware para su implementación. Esto permite a nuevos productos aprovechar las más recientes tecnologías, resultando en una construcción rápida y menos costosa de instrumentos, periféricos y sistemas.

Entre los principales disefiadores de computadoras y periféricos se encuentra la firma Hewllett-Packard (HP), la cual utiliza la interfaz IEEE-488 como estándar para sus productos, a la cual nombra HP- IB.

Puesto que existe una gran cantidad de periféricos HP los cuales no son compatibles con las microcornputadoras IBM-PC y compatibles, ya que éstas no utilizan el estándar IEEE-488 fué necesario implementar un sistema (hardware y software), para que manejen el estándar IEEE-488 y que sea transparente a nivel de MS-DOS, sistema operativo que utilizán las PC.

2

Page 9: Interfaz Ieee 488 Para Pc

capítulo 1 Invoduccidn

Este reporte está organizado de la siguiente forma:

El capítulo 2 presenta la especificación del estándar IEEE-488, describiendo todas las sefiales con las cuales está formado el GP-IB. Cómo interactúan estas en un dispositivo cualquiera. Se habla sobre los programas residentes ya que estos están intimamente ligados a los manejadores de dispositivos (Device Drivers) con los cuales se instala el IEEE-488. Además, se introducen los conceptos y principios del bus de US de la PC sobre los cuales está implantada la tarjeta.

En el capítulo 3 se describe la implementación del hardware y software. Respecto al hardware se describen los circuitos que forman la interfaz IEEE-488. Y en la parte de software se trata la programación del sistema.

El capítulo 4 presenta los resultados obtenidos en la implementación del sistema IEEE-488.

El capítulo 5 presenta las conclusiones obtenidas en la realización de este proyecto.

3

Page 10: Interfaz Ieee 488 Para Pc

CAPíTULO 2

DESARROLLO TEÓRICO

2.1 IEEE- 488

El bus de interfaz estándar IEEE-488, popularmente conocido como GPIB (General Purpose InterfaEe Bus), fué originalmente desarrollado por la firma Hewlett-Packard para permitir una máxima flexibilidad en la transferencia de datos entre varios instrumentos de laboratorio y sus computadoras. El IEEE-488 permite intercambiar datos a un número no mayor de quince dispositivos con una velocidad máxima de 1 megabyte/segundo.

Para que varios dispositivos puedan "convivir" en el bus existe un "controlador" maestro (usualmente una computadora) el cual coordina la transferencia de datos entre los transmisores y receptores. El controlador (normalmente existe uno solo) puede asignar a un dispositivo (incluyéndose a sí mismo) para que sea un "tahr" y uno o varios para que sean "Zi.steners", que pueden transmitir y recibir datos respectivamente. Estos tres tipos de dispositivos son solamente atributos y pueden existir solos o en combinación dentro de un mismo periférico.

4

Page 11: Interfaz Ieee 488 Para Pc

capíhib.2 IEEE-488

Asignación de Papeles

El controlador, talker y listener están interconectados vía el sistema de interfiz mostrado en la figura 2.1.1, el cual tiene cuatro dispositivos enlazados al bus.

Figura 2.1.1. Estructura del Bus.

El dispositivo A puede ser un talker, Zktener y controlador. Como controlador, el dispositivo A puede asignar el papel de tuZker activo a un dispositivo en el bus capaz de emprender su papel, incluyéndose a él mismo. Como talker, el dispositivo A puede suministrar información a otros dispositivos en el bus. Como Zktener,. el dispositivo A puede aceptar información de otros talkers en el bus. Una computadora puede tener estos tres atributos.

Aunque el dispositivo A es el único controlador en la figura 2.1.1, más de un controlador puede existir en el bus. Para prevenir conflictos, solamente un controlador puede estar activo al mismo tiempo. Cuando el sistema es encendido un controlador del sistema toma el mando del bus, mientras tanto los otros controladores deben esperar en un estado pasivo hasta que les sea asignado el control.

5

Page 12: Interfaz Ieee 488 Para Pc

capítulo 2 IEEE-488

El dispositivo B en la figura 2.2.1, puede ser un talker y un Zistmr. Estos pueden ser direccionados por el controlador y ser activados como talker o Zistt?nt?r. Un tuZker activo controla la linea DAV en el grupo de control de transferencia de datos. Un Zistener activo controla las lineas NRFD y NDAC.

El dispositivo C únicamente puede ser un Zhtmer. El dispositivo D está limitado a ser un talker.

Cualquiera de estos dispositivos puede ser activado por el controlador. La transferencia de datos es controlada por el talker activo y el Zistmr activo. El talker maneja el bus con datos, mientras el listener acepta la información transmitida por el talker. Para evitar conflictos solamente un tuZkm puede estar activo a la vez. Sin embargo, algunos Zisteners pueden ser activos al mismo tiempo.

Estructura del bus

El sistema de interfaz contiene un conjunto de 16 líneas, usadas para llevar toda la información, mensajes de interfaz y mensajes de dispositivos.

Los mensajes puden ser codificados en una o en un conjunto de líneas, determinadas por el contenido del mensaje en particular.

La estructura del bus está organizada dentro de tres conjuntos :

1. Bus de datos (8 líneas). 2. Control de transferencia de datos, Handshake (3 líneas). 3. Administración del bus, Control (5 líneas).

6

Page 13: Interfaz Ieee 488 Para Pc

caprhib z IEEE-488

Bus de datos

Un conjunto de 8 lineas se utiliza para la transferencia de información, asi como para transmitir mensajes.

Handshake

DAV (Data Vdd) es una línea de handshake que indica que el &r activo ha colocado datos en la linea de datos (DIO1-DI08).

NRFD (Not Ready for data) indica que uno o más &enen activos no están listos para más datos, y el talker activo debe esperar antes de transmitir más datos hacia el bus.

NDAC (Not data accepted) indica que uno o más Zkteners no pueden aceptar el dato actual, y el talker activo debe dejar el byte actual insertado en la línea de datos.

Control

IFC (lnte$za char) es sometido al control exclusivo del controlador del sistema. Todos los dispositivos de interfaz son puestos en estado neutro (default) y el estado del bus es limpiado.

ATN (Attention) es usado primordialmente para diferenciar entre modo comando (H') y modo dato (L').

SRQ (Sen;rtCe Request) puede ser puesto por un dispositivo en la interfaz para indicar que necesita servicio.

REN (Remote m b l e ) puede ser puesto por el controlador del sistema para permitir a los dispositivos que operen en modo remoto, que es manejado por el control programado del GPIB en vez del panel fi-ontal del dispositivo.

7

Page 14: Interfaz Ieee 488 Para Pc

capltulo 2 IEEE-488

EO1 (End OT iddify) tiene dos usos. En el primero EO1 es insertado en el último byte de la transferencia de datos. Esto indica a todos los dispositivos Zistmm que ningún dato más es esperado en la transferencia. El segundo uso es en combinación con ATN y es usado para llevar a cabo un escrutinio en paralelo (SaraUelpoU).

Transferencia de información

La posibilidad de que algunos Zistenen reciban datos simultáneamente representa un problema porque algunos de estos no pueden aceptar datos con la misma velocidad. La velocidad de transferencia de información debe ser establecida por el Zistener activo más lento.

La velocidad de transferencia del GPIB es controlada por un sistema de votación electrónica llamada de "colector abierto". El sistema de votación electrónica requiere un acuerdo unánime entre Zishmers activos y el &r activo antes de que la transferencia sea efectuada.

U I CMV

Figurr 2.1.2. Diagrama de tiempos en el Bus IEEE-488.

8

Page 15: Interfaz Ieee 488 Para Pc

capitub 2 IEEE-488

Para comprender el handshake y la transferencia de información véase el diagrama de tiempos de la figura 2.1.2 y el diagrama de flujo de la figura 2.1.3. Inicialmente el controlador activo toma posesión del bus poniendo ATN bajo e insertando un comando en el bus de datos. Este dice "todos los dispositivos callen y escuchen". Todas ellos ponen a ambos NRFD y NDAC bajo en anticipación al comando. Cuando cada dispositivo está listo para aceptar el comando, libera a NRFD. Así NRFD es alto únicamente cuando todos los dispositivos tienen libre a NRFD, esto es posible debido al sistema de votación electrónica.

I 5

, Figurr 2.13. Diagrama de flujo para una transferencia de dam.

Cuando el controlador ve que NRFD es alto, este responde poniendo DAV bajo, por lo que dice a los dispositivos que lean el comando. Los dispositivos entonces ponen NRFD otra vez bajo en preparación

9

Page 16: Interfaz Ieee 488 Para Pc

capítulo 2 IEEE-488

para la próxima transferencia y leer el comando. Cuando cada dispositivo finaliza leyendo, este libera a NDAC. El tiempo de retardo en la lectura puede ser bastante grande, dependiendo de la velocidad de cada dispositivo. Cuando el dispositivo más lento tiene libre a NDAC, NDAC va hacia alto, después de lo cual el controlador libera a DAV. Enseguida los dispositivos ponen NDAC bajo, si ATN permanece bajo. En caso contrario se prepara para una nueva transferencia.

En esta forma el controlador puede programar un dispositivo para ser talker y otros para ser Zkteners. Cuando la configuración es realizada, el controlador libera a ATN.

Entonces ningún listener libera NRFD y NDAC puesto que ellos salen del cuadro hasta que otro comando ocurre. Cuando los Zktmms están listos para los datos, liberan NRFD, igual que cuando están listos para leer un comando. Cuando todos están listos, NRFD sube, y el talker activo pone DAV. LOS Zktemrs ponen NRFD bajo y liberan NDAC como cuando están leyendo los datos. Cuando todos 10s Zktmrs tienen liberado NDAC, el tulkm libera DAV, y comienza la próxima secuencia de transferencia.

Cuando el talker ha finalizado la transferencia de la cantidad de datos preescrita, éste pone una de las cuatros líneas del bus restante a bajo, llamada EOI, este dice al controlador que la transferencia ha sido completada. Entonces el controlador emite el próximo comando. Nótese que los dispositivos de sólo escucha (Zkteners) necesitan ser conectados hacia las líneas de datos, las tres líneas de hanclshake y ATN. L o s taZkers también pueden tener conectado a EOI. Además están las líneas SRQ, REN e IFC. Un talker usa SRQ para interrumpir al controlador ya sea para indicar una condición de error o para anunciar que un dato está disponible. El controlador activo usa REN para decirle al dispositivo que ignore el control de panel frontal en favor de controles programados. El controlador usa

10

Page 17: Interfaz Ieee 488 Para Pc

capítubz IEEE-488

IFC para regresar a todos los dispositivos a . un estado conocido (default). Esta sefial se utiliza sólo para inicialización cuando se "cae" el sistema.

Direccionamiento de dispositivos

El controlador de comandos consiste de bytes, de los cuales son clasiftcados en cuatro categorias generales, de acuerdo a los valores de los bits 5 y 6. El bit 7 (DI08) es ignorado. Si ambos bits 5 y 6 del comando GPIB son cero, los 5 bits de más bajo orden especifican varios comandos, tal como "dispara el tuZker activo", valores diferentes de cero en los bits 5 y 6 causan que los 5 bits de más bajo orden sean como direcciones de dispositivos. Típicamente estas direcciones son especificadas por interruptores localizados en los dispositivos. Si los bits 5 y 6 tienen el valor 01, los dispositivos que combinan las direcciones de los 5 bits de más bajo orden son asignados como Zkteners. Similarmente, si los bits 5 y 6 tienen el valor 10, los dispositivos que combinan las direcciones de los 5 bits de más bajo orden son asignados como taZkers. La asignación de un talker desactiva a los taltcers asignados previamente, para que solo un tuZker pueda ser activo a la vez. Los 5 bits de dirección 11111, están reservados para desactivar todos los dispositivos ya sean talkers o listeners, lo cual es hecho con los bits 6 y 5. De aquí que el código de comando O 1 11 11 1 (3FH) desactive todos los Zkteners. Si los bits 6 y 5 tienen el valor 11, los últimos 5 bits especifican una dirección secundaria. Esto permite direccionar a sub-unidades dentro de un instrumento "multigrupo".

Nótese que aunque hay 31 posibles direcciones primarias, un máximo de 15 dispositivos (incluyendo el controlador) pueden ser enlazados al GPIB al mismo tiempo.

11

Page 18: Interfaz Ieee 488 Para Pc

Capihllo 2 IEEE-488

Polling (Escrutinio)

Puesto que la línea de petición SRQ es compartida por todos los dispositivos, el controlador tiene que "calcular" cuál dispositivo o dispositivos están solicitando servicio, cuando la línea está en bajo. Este "cálculo" es llevado a través de un escrutinio en serie (ser2al pU) o un escrutinio en paralelo (parauelpoll). Cuando 8 o unos cuantos dispositivos no controladores son enlazados al bus cada uno puede ser asignado a una línea única DIOn para efectuar un plrtrUel poll. El controlador emite este poll poniendo bajo ATN y EOI, simultáneamente. Cada dispositivo responde poniendo su línea asignada (DIOn) bajo si y solo si ha solicitado servicio poniendo a SRQ bajo. Este método es rápido y eficiente, y es similar al esquema de interrupciones de una computadora de una simple línea. Alternativamente el controlador puede direccionar un talkar y a cada dispositivo en turno y emitir un comando s e d poU. El dispositivo responde con un byte de estatus de 8 bits, uno de los cuales dice si el dispositivo tiene SRQ bajo. El controlador otorga el servicio requerido, emitiendo un comando para desactivar el s e d poU y entonces continúa haciendo s e k l poU puesto que SRQ permanece bajo. Aunque lento, el s e k l poll provee al controlador con más información acerca del estatus de cada dispositivo.

12

Page 19: Interfaz Ieee 488 Para Pc

capitulo 2 Ragramas Residentes

2.4 MS-DOS PARA PROGRAMACION

El MS-DOS estándar además de ser usado para ejecutar programas de aplicación tales como utilerias, bases de datos, procesadores de palabras, y hojas de cálculo entre otros, es usado para manejar y controlar un conjunto de dispositivos estándar, incluyendo monitor, teclado, discos y adaptadores paralelo y serie. L o s manejadores de dispositivos estándar (device drivers) son normalmente una parte del administrador de dispositivos del sistema operativo y no se encuentran visibles al usuario.

MS-DOS permite al usuario instalar manejadores de dispositivos para accesar hardware externo siguiendo un conjunto de reglas específicas. Estas reglas proveen una interfaz uniforme hacia DOS, las cuales permiten tratar al nuevo dispositivo de la misma forma a los ya existentes.

En las siguientes dos secciones hablamos primeramente de los programas residentes ya que estos nos muestran la manera en la cual el sistema operativo maneja las interrupciones generadas por software y hardware. En la segunda sección se presentan los manejadores de dispositivos, presentando el formato con el cual se deben construir, así como su funcionamiento.

2.4.1 Programas Residentes

DOS fue diseñado para soportar la ejecución de una simple tarea de usuario a la vez. El sistema operativo maneja el cargado y la ejecución de una tarea y responde a solicitudes de servicios de entrada y salida.

Cuando DOS es inicializado, y antes de que cualquier programa sea ejecutado, el espacio de memoria desde O hasta el límite superior soportado por la PC está configurado como se muestra en la figura

13

Page 20: Interfaz Ieee 488 Para Pc

capftulo 2 Programas Residentes

2.2.1. Las localidades de memoria más bajas (000H-400H) están reservadas para el vector de interrupciones. Arriba del vector de interrupciones se encuentra el DOS. Le siguen los manejadores de dispositivos que son cargados cuando DOS se ha inicializado. Después de los manejadores de dispositivos está la porción residente del programa procesador de comandos del DOS. Este programa procesa los comandos de linea del DOS y ejecuta programas, está dividido en una porción residente y en una transitoria. El área de porción transitoria (TPA) se encuentra arriba del procesador de comandos residente. Cuando el usuario ejecuta un programa desde el comando de linea el programa es cargado en el TPA. En la parte superior del TPA está la porción transitoria del procesador de comandos. Un programa de usuario tiene permitido utilizar el área que ocupa el procesador de comandos transitorio. Si esa memoria es utilizada, el procesador de comandos residente recargará al procesador de comandos transitorio cuando termine la ejecución del programa del usuario, el cual a ese tiempo liberó el espacio de memoria que ocupaba.

Figurr 2.2.1. Mapa de memoria de DOS.

Existe otra clase de programas llamados programas residentes (TSR:Tminate and Stay Resident), los cuales son ejecutados como si

14

Page 21: Interfaz Ieee 488 Para Pc

capitulo 2 Programas Residentes

fueran programas normales. De hecho ninguno de los procesadores de comandos del DOS tiene forma alguna de saber que estos serán residentes, sino hasta que terminan su ejecución, utilizando cualquiera de las funciones especiales suministradas por DOS. Esta acción simplemente incrementa la dirección baja del TPA justamente arriba del programa de memoria residente decrementando la cantidad de memoria disponible para nuevos programas de usuario. Dejando este programa ya instalado en memoria como muestra la figura 2.2.2 en la cual se muestran dos programas residentes.

Figuro 2.4.2. Mapa de memoria de DOS con dos TSR.

Como mencionamos anteriormente el MS-DOS no permite que exista más de un programa en memoria a la vez, por lo que fué necesario encontrar una forma para que más de un programa pudiera estar activo en memoria.

Las dos funciones especiales suministradas por DOS permiten a un programa declararse a si mismo residente. Estas funciones se

15

Page 22: Interfaz Ieee 488 Para Pc

Programas Residentes capitulo 2

proporcionan para que personas que desarrollan sistemas puedan escribir rutinas de servicio de interrupción (ISR). Estas rutinas se utilizan para poder manejar dispositivos de Hardware que no son parte estándar de la arquitectura de la PC, y como tales no existe una interfaz estándar en el DOS. Entre los dispositivos no estándar podemos citar al mouse, joystick y tablas digitalizadoras.

El medio ambiente de las ISR puede soportar ,otra clase de programas, no necesariamente asociados con dispositivos "extrafios", estos son los programas residentes.

L o s programas residentes son activados a través del uso de interrupciones, las cuales pueden ser activadas de diferentes formas. La forma más común es usualmente llamada "tecla caliente" (hot by). Una tecla caliente está formada por una 6 varias teclas, las cuales al ser presionadas activan el programa que se encuentra residente.

Interrupciones

Para comprender la naturaleza de los programas residentes se debe entender el sistema de interrupciones, porque tales programas usan la estructura de interrupciones de la PC y DOS.

,

Una interrupción es una suspensión momentanea de la secuencia de un procedimiento de un programa que nos permite ejecutar otro procedimiento. Cuando la interrupción se ha completado, el procedimiento que fué interrumpido continua como si ninguna interrupción hubiese ocurrido. Los dos procedimientos pueden no tener relación alguna; si éste es el caso, el procedimiento interrumpido nunca debe ser afectado a causa de la interrupción. Una interrupción puede ser generada por un evento externo al programa actual, o como resultado de una acción del programa. Las interrupciones pueden ser activadas por un evento de hurdwure o por una instrucción de softwure programada.

16

Page 23: Interfaz Ieee 488 Para Pc

Programas Residentes capítub 2

La Eamilia de microprocessadores del 8086 soporta 256 interrupciones las cuales se encuentran vectorizadas. Una interrupción comienza ejecutando una rutina de servicio de interrupción, la cual se encuentra localizada en la tabla del vector de interrupciones. A diferencia de algunos viejos procesadores que obligan a una ISR a tener una localidad fija de memoria, una interrupción vectorizada permite especificar la localidad de la ISR.

La tabla del vector tiene una longitud de 1024 bytes comenzando en la localidad OOOO:OOOO. De aqui la dirección de la ISR puede ser cualquiera en memoria requiriendo 4 bytes de longitud (32 bits de direcciones). Entonces cada entrada en la tabla tiene 4 bytes de ancho. Las direcciones están arregladas tales que la interrupción O encuentra la dirección de su ISR en la dirección OOOO:OOOO, la interrupción 1 encuentra la dirección de su ISR en la dirección 0000:0004, la interrupción 2 encuentra la dirección de su ISR en la dirección 0000:0008, y así sucesivamente.

Cuando una interrupción ocurre esta causa que todas las interrupciones sean deshabilitadas, por lo que la ISR debe habilitar nuevamente las interrupciones para evitar que el sistema se destruya o bloquee. La ISR debe finalizar con la instrucción IRET.

Diseño general de un TSR

Todos los programas TSR son realmente dos programas en uno, la primera parte del programa TSR es usada para inicializar el programa y salir entonces vía el llamado a la función TSR de DOS. Esta parte del programa no es ejecutada a menos que el programa sea nuevamente cargado. Parte de la inicialización siempre incluye poner la dirección del programa TSR apuntada por la localidad apropiada en la tabla del vector de interrupciones. La segunda parte del programa es la aplicación.

17

Page 24: Interfaz Ieee 488 Para Pc

capítulo 2 Programas Residentes

Turbo C incluye una función especial de tip.modificador llamada interrupt que permite a una función en C ser utilizada como una ISR.

Una función del tipo interrupt guarda automáticamente el contenido de todos los registros y los restaura a su regreso. L a s funciones de este tipo también usan la instrucción IRET en lugar de instrucción RET al regresar. Por ejemplo podemos asumir que la función musics() es nuestra rutina de manejo de interrupción, la cual se muestra a continuación :

void interrupt musica (void)

{

int frec, i ;

for (i = O ; i <= 500 ; i++) {

do {

frec = rand ( ) ;

} while (frec > 5000); sonido (frec);

1

1

void sonido ( int frec)

{

unsigned i ;

unsigned char bits;

union {

long divisor;

unsigned char c[2];

} count ;

count.divisor = 1193280 / frec ;

18

Page 25: Interfaz Ieee 488 Para Pc

capstub 2 Programas Residentes

outportb ( 67,182 ) ;

outportb (66,count.c[0]);

outportb (66,count.c[1]);

bits - inportb (97); outportb (97,bits13);

for (i - 0;i < 2000; i++);

outportb (97,bits);

1

Como se menciono anteriormente DOS incluye dos hnciones que permiten a un programa declararse residente a si mismo. Estas dos funciones son similares y tienen muy pocas diferencias. La función 31H de la interrupción 21H termina el programa que actualmente se está ejecutando dejándolo residente suministrándole la cantidad de memoria que ocupa el programa. La interrupción 27H realiza la misma función pero restringe la longitud del programa residente a 64 KB.

La siguiente función muestra cómo dejar el programa residente utilizando Turbo C :

tsr (unsigned longitud)

{

union REGS r;

r.h.ah = 0x31;

r.h.al = O;

r.x.dx = longitud;

int86 ( 0x2 1, Lr, Lr) ;

1

19

Page 26: Interfaz Ieee 488 Para Pc

capftulo 2 Programas Residentes

El parámetro longitud es utilizado para decirle a DOS cuánta memoria utiliza el programa residente. Este es especificado en párrafos, un párrafo incluye 16 bytes. La cantidad de memoria que utiliza un programa es dificil de determinar ya que los archivos .EXE son parcialmente ligados cuando son cargados dentro de memoria y no son necesariamente colocados en regiones contiguas. Una manera de aproximar la cantidad de memoria que utiliza un programa es dividir el tamaño del archivo .EXE entre 16 y multiplicar por 2.

El siguiente paso es colocar la dirección de la rutina musics() en el vector de interrupciones.

Capturar una localidad del vector de interrupciones es muy fácil con Turbo C. La función setvect realiza esta tarea.

Habiendo declarado la función de interrupción, solamente debemos conocer en qué localidad del vector queremos colocar la dirección de la rutina musics(). Para este ejemplo utilizaremos la intern-pción número 5. Esta interrupción es llamada cuando se presiona la tecla PT SCR (print screen). Teniendo la rutina y el número de interrupción capturamos la interrupción con el siguiente cddigo :

setvect (5,musica);

Puesto que el DOS es un sistema operativo no-reentrate las rutinas ISR no deben de utilizar funciones del DOS, un intento de ésta clase ocasionará que el sistema quede bloqueado. El BIOS permite a algunas funciones ser reentrantes, tal es el caso de la interrupción 16H, la cual maneja la entrada del teclado, ésta puede ser usada sin ningún efecto lateral.

Enseguida se muestra un programa residente el cual intercepta la rutina de servicio del teclado, el programa residente genera un

20

Page 27: Interfaz Ieee 488 Para Pc

caplnib 2 Programas Residentes

simple “beep” cada vez que una tecla es presionada después de lo cual da servicio a la rutina del teclado.

void interrupt (*iar-key) ( ) ;

void interrupt beep (void);

void tar (unsigned);

void main (void)

{

/* guarda l a dirección */ isr - key - getvect(9); /* coloca la nueva dirección */ aetvect (9,beep);

/* termina y deja residente */ tar (706 ) ;

1 void interrupt beep (void)

{

int i,j ;

char originalbits,bits;

unsigned char count = 3000;

bits = originalbits = inport (0x61); for (i = O; i <= count; i++) {

outportb (Ox61,bita L Oxfc);

for (j = O; j <= 100; j++);

outportb (Ox61,bita I 2 ) ;

for (j = O; j <=I 100; j++);

1 outportb (Ox61,originalbits);

/* llama a la rutina de interrupción del teclado para darle servicio */ (*isr - key) ( ) ;

1

21

Page 28: Interfaz Ieee 488 Para Pc

capsnil0 2 Device Drivers

2.2.2 Device Drivers

Un dispositivo es simplemente una pieza de equipo que se encuentra enlazada hacia la computadora. Algunos ejemplos son: impresoras, monitores, discos y teclados. Si utilizamos un dispositivo en particular en nuestros programas de aplicación necesitamos incluir rutinas de control de sofiuare (muy complejas) para poder soportar las necesidades de sefialización y esquemas de tiempo, las cuales permiten al procesador de la computadora comunicarse con el dispositivo, tales rutinas son conocidas como manejadores de dispositivos (device driven).

Existen dos clases de manejadores de dispositivos en la PC, estos son el de BIOS y el de DOS.

Los manejadores de dispositivos de BIOS son usados para realizar funciones elementales o de bajo nivel. Por ejemplo, el manejador de discos flexibles de BIOS (BIOS diskette device driver) realiza las funciones de lectura o escritura en un sector (o en una secuencia de sectores). El manejador de impresora de BIOS (BIOS printer d&e driver) realiza las funciones elementales de impresión de un caracter.

L o s manejadores de dispositivos de DOS llevan a cabo funciones de alto nivel, ésto es, se utilizan sin hacer referencia a los requerimientos particulares del hardware de los dispositivos. Simplemente un comando como:

A > COPY A:REP.TXT 8 :

se utiliza para copiar un archivo llamado REP.TXT del drive A hacia el drive B, también podemos usar un comando como

A > COPY A:REP.TXT PñN

Page 29: Interfaz Ieee 488 Para Pc

capftub 2 Dcvice I)rivtrs

para copiar el mismo archivo a la impresora.

En el primer comando, el manejador de dispositivo de DOS para disc= flexibles es usado como fuente y destino de la transferencia. El manejador de DOS llama al manejador de BIOS para realizar la transferencia hacia y de los sectores apropiados. En el segundo caso, el manejador de dispositivos de DOS para discos flexibles es usado como fbente de la transferencia, y el de la impresora es usado como destino. Ambos manejadores del DOS, el de discos flexibles y el de la impresora, llaman a sus contrapartes de BIOS para realizar la transferencia .

Para que DOS reconozca un nuevo dispositivo y éste pueda ser manejado al igual que el resto de los dispositivos estándares, es necesario que el nuevo manejador del dispositivo cumpla con las especificaciones con las cuales están construidos los manejadores de dispositivos de DOS.

Tipos de manejadores

DOS reconoce dos tipos de manejadores, los manejadores de caracteres (character driven) y los manejadores de bloques (bluck drivers).

Un manejador de caracteres realiza entradas y salidas en forma serial (carácter por carácter). Por ejemplo la impresora es un manejador de caracteres a través del cual una cadena de caracteres es impresa; el manejador de la impresora es llamado para transferir cada carácter.

L o s manejadores de caracteres tienen nombres específicos, tal es el caso del sistema de la consola (teclado para entrada y monitor para salida) el cual es definido por CON, los puertos de comunicación auxiliar AUX y COM1 los cuales se encuentran enlazados a la

23'

Page 30: Interfaz Ieee 488 Para Pc

capítulo 2 Device Driven

impresora serial y modems, y el puerto de impresión paralela PRN o LPT1.

El otro tipo de dispositivo, el manejador de bloques, es una unidad de almacenamiento masivo, tales como el disco RAM, el disco duro y el disco flexible. En forma contraria a los manejadores de carácteres, los manejadores de bloques transfieren paquetes (bloques) de datos a un mismo tiempo. Usualmente cada bloque contiene un sector de disco (512 kb) de datos. A diferencia de los manejadores de carácteres, los manejadores de bloques no tiene nombres específicos, éstos -únicamente son llamados por letras (A, B, C , etc.).

Estructura de un manejador de dispositivos

Un manejador de dispositivos consiste de tres partes:

* Un encabezado del dispositivo. * Una rutina de estrategia. * Una rutina de interrupción.

El encabezado del dispositivo

El encabezado del dispositivo (dar2ce header) es un bloque de 18 bytes que se encuentra al inicio del manejador de dispositivo. El encabezado es usado por DOS para instalar e identificar un manejador en particular. El encabezado está dividido en los siguientes cinco componentes:

Apuntador al próximo dispositivo (4 bytes): Esta dirección (offiet seguido por el segmento) es usada por el DOS para construir un lista ligada de todos los manejadores de dispositivos.

24

Page 31: Interfaz Ieee 488 Para Pc

caprtub 2 Device Drivers

Atributos del dispositivo (2 bytes): Este grupo.de bits define el tipo de dispositivo y algunos atributos especiales del dispositivo (fig. 2.2.3).

B i t

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

O

1

O

1

1

O

1

*

* * * *

1

1

1

1

signif icrdo

Manejador de carácter.

Manejador de bloque.

Si soporta IOCLT.

No es formato IBM (bloque).

No salida hasta lleno (carct)

si soporta abierto/cerrado/m

(especial: bit manejador CON)

si manejador es el reloj.

Dispoeitivo actual es nulo.

Dispositivo estándar actual es

de salida.

Dispositivo estándar actual es

de entrada.

~

* Actualmente indefinido.

Figurr 2.23. Atributos del dispositivo.

25

Page 32: Interfaz Ieee 488 Para Pc

Apuntador a la rutina de estrategia (2 bytes): Este es un offset dentro del segmento del manejador del dispositivo hacia la rutina de estrategia.

Apuntador a la rutina de interrupción (2 bytes): Este es un offset dentro del segmento del manejador del dispositivo hacia la rutina de interrupción.

Nombre del dispositivo (8 bytes): Este campo contiene el nombre del dispositivo para un manejador de caracteres. Para un manejador de bloques, el primer byte del campo contiene un contador para el número de dispositivos soportados por el manejador, los restantes 7 bytes no son usados.

Rutina de estrategia

Cuando el DOS recibe una petición para que opere un dispositivo, busca a través de la lista de manejadores de dispositivos, buscando al manejador especificado en la petición. Cuando encuentra un nombre de dispositivo igual al nombre del dispositivo solicitado el DOS invoca a la rutina de estrategia del dispositivo con la dirección encontrada en el encabezado del dispositivo.

Actualmente la rutina de estrategia no juega un papel muy importante. Esta simplemente "encola" una petición de dispositivo y regresa hacia DOS. En versiones futuras de DOS, sin embargo esta debe asistir a operaciones tales como colas de prioridad en multitareas y situaciones de tiempo compartido.

Rutina de interrupci6n

Después de recibir el control de la rutina de estrategia, el DOS invoca a la rutina de interrupción. Esta rutina provee toda la

26

Page 33: Interfaz Ieee 488 Para Pc

CapItulo 2 Device Drivers

funcionalidad para el manejador (el código para ejecutar las operaciones del manejador del dispositivo).

Debido a que existen muchas diferentes tareas que un manejador de dispositivos pueda realizar para un dispositivo, un mecanismo es necesario para que el DOS pueda especificar el comando a ejecutar. Este mecanismo se encuentra en la forma de un encabezado de petición (request header).

Un encabezado de petición es un bloque de memoria que el DOS inicializa. Un apuntador a este encabezado es pasado hacia el manejador de dispositivo en el registro par ES:BX durante la llamada a la rutina de estrategia. La rutina de estrategia guarda esta dirección.

Cuando la rutina de interrupción recibe el control, busca la dirección guardada en el encabezado de petición y usa el contenido del encabezado para determinar la operación que debe realizar. El encabezado de petición contiene los siguientes datos:

Longitud del encabezado de petición (1 byte).

Unidad de C6digo (1 byte): Especifica la subunidad (para manejadores de bloques) que la operación de petición puede usar.

Código de comando (1 byte): Especifica la operación a ser ejecutada.

Estatus (2 bytes): Esta palabra permite a un manejador de dispositivo regresar el estatus de operación a DOS. Una palabra de estatus puede indicar "ERROR", "BUSY" o "DONE".

Area reservada para DOS (8 bytes).

27

Page 34: Interfaz Ieee 488 Para Pc

caplnilo 2 Device Drivers

&ea de datos (longitud variable): Este segmento contiene los datos apropiados para la operación.

F i i 2.4.4. Algunos manejadores de dispositivos instalados en DOS.

Soporte de DOS

DOS provee automáticamente el soporte necesario para instalar nuevos manejadores de dispositivos. Cuando un programa de aplicación solicita una operación de un dispositivo via una llamada a una función de DOS, este determina qué manejador de dispositivo es requerido y lo invoca para que realice su tarea. Para recordar a todos los manejadores de dispositivos DOS utiliza una lista ligada. Cuando el sistema se inicializa, DOS instala a los nuevos manejadores de dispositivos especificados en el archivo CONFIG.SYS (fig. 2.2.5), agregándolos al frente de la lista de dispositivos.

Page 35: Interfaz Ieee 488 Para Pc

capitulo 2 Device Drivels

F i 2.23. Diagrama de flujo que muestra las tareas realidas por DOS antes de emitir el

prompt yla espera para la entrada del usuario.

Después cuando DOS recibe una petición para una función de E/S, la búsqueda comienza en el frente de la lista, cuando encuentra el primer nombre de un dispositivo que es igual al solicitado entonces invoca a éste para realizar la petición. Esta técnica permite remplazar un manejador de caracteres por un manejador de dispositivo con el mismo nombre que el dispositivo remplazado.

29

Page 36: Interfaz Ieee 488 Para Pc

capitulo 2

P

I

Device Drivers

Figun 4.4.6. Pasos que realiza el DOS para instalar manejadores de dispositivos.

Programa ejemplo

Este manejador únicamente envía caracteres hacia monitor, usando una llamada a la función 02H.

30

Page 37: Interfaz Ieee 488 Para Pc

capítulo 2 1 2 8 4 0 1

Device Drivers

CODE SEGMENT

ASSUHE CSrCODE, DSrCODE

CR EQU ODH ;ASCII de retorno de carro

LF EQU O A B ;ASCCI de f i n de linea

EOM EQU ' S ' ;Fin de mensaje

: Encabezado de dispositivo

WINTER DD - 1

ATTRIBUTE DW 800H ;manejador de caracteres

STRATEGY-PTR DW STRATEGY

INTERRUPT-PTR DW INTERRUPT

DRIVE NAME DB 'DRIVETST' ;8 Caracteres -

;definición de datos

OFFSET-- DW ?

SEGMENT-RE DW ?

MESSAGES LABEL WORD

M I T MESS DB 'INICIALIZANDO DRIVETST' - DB CR,LF,EOM

OZITPUT-MESS DB ' SACANDO'

DB CR, LF , EOM

OUT VER MESS DB 'SACANDO CON VEEUFICACION' - - DB CR, LF, EOM

STATUS OUT MESS DB 'STATUS DE SALIDA' - - DB CR,LF,EOM

;rutina de estrategia

STRATEGY PROC FAR

MOV OFFSET-RB , BX

31

Page 38: Interfaz Ieee 488 Para Pc

capitulo 2

MOV SEGmT-RH ES

RET

STRATEGY ENDP

;rutina de interrupción

INTERRUPT PROC FAR

;se guarda el ambiente actual

PUSH AX

PUSH BX

PUSH CX

PUSH DX

PUSH SI

PUSH DI

PUSH BP

PUSH DS

PUSii ES .

;inicializa DS para mensajes

Device Drivers

PUSH CC

POP DS

MOV BX , OFFSET-RH MOV ES,SEGHENT - RH

; DS * CS

;recupera e interpreta el comando

MOV &,ES: [BX+2] ;obtiene

;comando

CMP AL,o ;inicia comando

JE INIT ; si CMP AL,^ ;salida 1

JE OUTPUT ; si CMP AL,9 tealida con

32

Page 39: Interfaz Ieee 488 Para Pc

capíhih, 2 Device Driven

INIT :

; verif icaci6n 3

JE OUTPUT-VERIFY ; ai

cm =,lo festatus de

;salida

JE STATUS OWTPUT ; ai

JMP NORWS-EXIT ;otro regresa -

; comando no

;válido

LEA DX, INIT-MESS

MOV Ax,9

INT 21X

;colocando direction final

OUTPUT:

itransmite

;mensaje

MOV WORD PTR ES:[BX+14],0FFSET BOTTOM

MOV ES:[BX+16],CS

JMP NORMAL-EXIT

LEA DX , OUTPUT-MESS uov Ax,9

INT 218

;colocando parámetros para salida

OUTPUT2 : MOV CX,GS:[BX+18]

MOV SI,ES:[BX+14]

MOV DS,ES:[BX+16]

MOV AL,[SI]

UOV DL,AL

OUTPUT1 :

MOV Ax,2

INT 21X

INC SI

icontador

;buffe para offaet

;buffer para seg.

;obtiene carac.

;llamada a

;función 28

;transmite carac.

;apunta

33

Page 40: Interfaz Ieee 488 Para Pc

Capftulo 2 Device Drivers

;al próximo

LOOP OUTPUT1

SUB $S:[BX+18],CX ;número ;traneferido

JHP NORMAL-EXIT

OUTPUT - VERIFY: LEA DX,OUT-VER-MECS

MOV AHf9

INT 218 itransmite

;menea je

JHP OUTPUT2 ;uaa otra rutina

DX,STATUS OUT MESS STATUS-OUTPUT: LEA - - MOV AHf9

INT 21H

JMP NORMAL_EXIT

;status = DONE

NORMAL EXIT: MOV -

;reetablece ambiente

INTER EXIT: POP

POP

POP

POP

POP

POP

POP

POP

POP

RET

ENDP

-

INTERRUPT

BOTTOM

CODE

WORD PTR ES:[BX+3If0100H

ES

DS

BP

DI

SI

DX

cx BX

Ax

LABEL WORD

ENDS

END

Page 41: Interfaz Ieee 488 Para Pc

capítub 2 Device Drivers

Después de crear el código fuente del manejador de dispositivo usando un procesador de palabras, el manejador está listo para ser ensamblado. Usando el Macro Assembler como sigue:

A > NASM DRIVERTST

Después de ensamblar el programa el ensamblador genera un archivo objeto llamado DRIVETST.OBJ.

El siguiente paso es convertir éste archivo objeto en un archivo ejecutable comunmente llamado archivo .EXE. Para realizar ésto es necesario utilizar el programa ligador LINK:

A > LINK DRIVETST.OBJ

El programa LINK produce el archivo DRIVETST.EXE así como el error "NO STACK SEGMENT'. Un segmento de STACK puede ser definido dentro de un programa y es usado como una área de almacenamiento de variables. El programa LINKER fué diseñado asumiendo que todos los programas tienen un STACK. Los manejadores de dispositivos no definen un segmento de STACK, porque un manejador de dispositivos es parte del DOS, y no es un programa común, teniendo DOS definido su propio STACK interno. Por lo que éste error es esperado.

El siguiente paso es convertir el archivo DRIVETST.EXE en un programa con formato .COM el cual es una imagen de memoria con la cual el driver debe ser cargado dentro de la memoria. Esto es necesario puesto que los manejadores de dispositivos con formato .EXE no pueden ser ejecutados por DOS.

Page 42: Interfaz Ieee 488 Para Pc

capftulo 2 DeviceDnven

Este requerimiento de DOS es realizado utilizando la utilería EXE2BIN.COM la cual es sumistrada por DOS.

A > EXEZBIN DRIVETST.EXE DRIVETST.SYS

La extensión .SYS es dada al manejador de dispositivo en lugar de .COM por varias razones. La primera es que existe la posibilidad de que accidentalmente se pueda ejecutar el manejador de dispositivo, cuausando inevitablemente que el sistema quede bloqueado. La segunda razón es que ha llegado a ser convención estándar para tales programas llamarles .SYS lo que los distingue de los otros archivos.

Page 43: Interfaz Ieee 488 Para Pc

capítub 2 Hardwaredeb PC

2.3 MRDWAREDEIAPC

La tarea general de crear una interfaz de hardware requiere familiaridad con la unidad del sistema. Debido a esto se introducen los conceptos básicos referentes a la unidad de procesamiento central (8088) y su relación con los buses de interfaz del sistema.

Buses del microprocesador

El 8088 es un microprocesador que utiliza un sistema de tres buses. El BUS DE DIRECCIONES provee un direccionamiento hacia memoria y dispositivos de E/S. El BUS DE DATOS suministra una trayectoria para que los datos puedan fluir entre el microprocesador y la memoria, o los dispositivos de US. El BUS DE CONTROL suministra señales de control que controlan el flujo de información en el BUS DE DATOS. I

El bus de direcciones contiene 20 líneas que se encuentran conectadas a dos espacios lógicos, el espacio de direccionamiento de memoria y el espacio de direccionamiento de E/S. Las 20 lineas de dirección son activas durante un ciclo de bus de memoria, implicando un rango de direccionamiento de OOOOOH hasta OFFFFFH (1 MB). Únicamente 16 líneas son activas durante un ciclo de bus de E/S, lo que limita el espacio de direccionamiento de E/S (puertos) a un rango de OOOOH a OFFFFH (64 KB). En la IBM PC únicamente las 10 líneas menos significativas de las 16 líneas son decodificadas durante una instrucción de US, limitando aun más el espacio de los puertos a un rango de OOOOH a O3FFH (1 KB).

El bus de datos contiene 8 líneas que se encuentran conectadas en forma bidireccional a los dos espacios de direcciones.

El bus de control consiste de 4 líneas que corresponden diferentes tipos de ciclos de bus:

a los

37

Page 44: Interfaz Ieee 488 Para Pc

Capftulo 2 Hardwaredeia PC

MEMR lectura de memoria.

MEHW escritura de memoria.

IOR lectura de E/S.

IOW escritura de memoria.

Las líneas MEMR y MEMW son conectadas a los diferentes chips de memoria, y las líneas IOR y IOW a los diferentes dispositivos de US. Durante los ciclos del bus que controla el microprocesador únicamente una de estas líneas se encuentra activa (activo bajo).

El bus de WS

El bus de E/S es un conjunto de 62 líneas conectadas hacia 5 conectores en la tarjeta del sistema (8 conectores en la PC XT).

Las líneas de E/S pueden ser clasificadas por la función que realizan:

DIRECCIONES bus de direcciones.

DATOS bus de datos.

CONTROL bus de control.

DMA lineas para funciones DHA.

INTERRUPCIONES llneas para implementar.

funciones de interruption.

RELOJ 14.318 Mhz y 4.77 nhz.

POTENCIA fuente de poder y tierra.

Direcciones. Líneas AO-A19 del bus de direcciones.

Datos. Líneas DO-D’7 del bus de datos bidireccional.

Control. En adición a las 4 líneas usuales MEMW, MEMR, IOR e IOW existen otras líneas:

38

Page 45: Interfaz Ieee 488 Para Pc

capitub 2 Hardwaredeia PC

ALE (Address W h Enable). h e d e ser usada en el bus de E/S para encontrar el comienzo de un ciclo de bus.

AEN (Address Enable). Esta señal permite distinguir entre un ciclo de bus y un ciclo de bus DMA. Un "alto" indica que un ciclo DMA est5 ejecutándose.

1 / 0 channel RDY. Esta línea de entrada normalmente "alta" puede ser puesta %ajo" para insertar estados de espera para un dispositivo lento.

1/0 Channel Check. Esta línea de entrada normalmente "alta" puede ser puesta 'bajo" para indicar error de paridad en memoria o en dispositivos de E/S.

Reset DRV. Esta señal de salida es activo alto durante el encendido y puede ser usada para inicialización o reinicialización de dispositivos de E/S.

Grupo DMA. Consiste de las siguientes líneas DRQ1-DRQ3, DACKO- DACH3 y TC. Son usadas para acceder en forma directa a la memoria.

Grupo de interrupciones. Las líneas de petición de interrupciones (IRQO-IRQ7) son conectadas directamente al controlador de interrupciones (8259A) en la tarjeta del sistema. Una petición de interrupción es generada por el "levantamiento" de la línea apropiada IRQ. La línea puede ser retenida arriba hasta que la petición sea realizada por la rutina de servicio de interrupción apropiada.

Grupo de reloj. El grupo de reloj consiste de dos relojes OSC Y CLK, que pueden ser usados por dispositivos de E/S.

39

Page 46: Interfaz Ieee 488 Para Pc

capftulo 2 Hardwaredeía PC

Grupo de Potencia. Toda la tensión disponible en la tarjeta del sistema se encuentra disponible en el bus de US.

+ 5 vdc ( 2 patillas).

- 5 Vdc

+12 vdc

-12 Vdc

GND Tierra (3 patillas).

Figura 23.1 Bus de E.6.

Espacio de direcciones de US (Puertos)

El microprocesador 8088 es capaz de direccionar 64K puertos diferentes, vía 16 líneas del bus direcciones. Sin embargo la IBM PC reconoce únicamente las 1 O líneas menos significativas, restringiendo el número de puertos a 1024 (1K). La mitad inferior de los 1024 puertos están reservados para la tarjeta del sistema, y la mitad superior está dedicada al bus de US.

40

Page 47: Interfaz Ieee 488 Para Pc

Capítulo 2

1 2 8 4 8 1 Hardware de la PC

Muchos de los puertos del bus de E/S se encuentran reservados para adaptar tarjetas específicas a la PC, como muestra la figura 2.2.8.

O-1F 20-3F 4 0 4 F 60-7F 80-9F

OAO-OBF OCO-oc7 OC8-OEF OFO-OFF 100-1FF

200-2OF 210-211 220-24F 250-277 278-27F 280-2EF 2F0-2F7 2F8-2FF 300-31F 320-32F 330-377 378-37B 3 a o - m ~ 390-39P 3A0-319 3BO-3BF 3CO-3CF 3DO-3DF 3EO-3EF 3FO-317 3F8 - 3FF

TARJETA DEL SISTEIU

COlOTROLAOOR DHh 4-S 8237 C-0- DE INTJIRRUPCIOLSBS 84!ANA&ES 8259 CIRCUITO C-/REW 8-S 8253 INTERFAZ P-LA E/S 24-Lfirius 8255 REGISTRO DE PAGÍNA DE 64ii büA luscARA LATCE - BIT N&lI GENERADOR DE SONIDO (PC jr) RESERVADO INTERFAZ DE DISCO FLEXIBLE (PC jr) NO USADO

BUS DE E/S

ADAPTADOR DE JUEGOS E/S

UNIDAD DE EXPANSI& RESERVADO NO USA00 INTERFAL PARALELA PARA IHPRESORA (LPT2) NO USADO RESERVADO INTERPAL SERIAL UART 8250 (Con?) TARJETA PROTOTIPO DISCO DURO NO USA00 INTERFAZ P-L& PARA IHPRESORA (LPT1) INTERPAZ SIIOCRONA BIlURIA SECUNDARIA NO USA00 IllTERFAZ SINCRORA BIiiARIA PRIMARIA WONITOR HONOCROMTICO E 1)IpRESORA PARALeLA RESERVADO ADAPTADOR PILRA HONI'POR COIDR/GRUICAS RESERVADO DISCO FLEXIBLE INTERFAZ SERIAL UART 8250 (COMl)

F i i 4 3 1 . Espacio de direcciones de E/S.

41

Page 48: Interfaz Ieee 488 Para Pc

CAPíTULO 3

DESARROLLO EXPERIMENTAL

Este capítulo describe el software y hardware que se utilizó para la implementación del sistema sobre la PC y el sistema operativo MS- DOS.

3.1 HARDWARE

Una de las primeras tareas para realizar cuando se va a integrar un dispositivo al sistema de la PC es diseñar un circuito decodificador para el bus de E/S, este circuito es mostrado en la sección 3.1.1. La forma en la cual fue implementada la interfaz en el sistema de la PC es descrita en la sección 3.1.2.

3.1.1 Decodificación

El circuito decodificador monitorea el bus de direcciones para generar una señal de selección de puerto (PSEL) cuando el dispositivo es direccionado.

El circuito decodificador está realizado a partir de 2 circuitos comparadores ('74LS85), con los cuales es posible direccionar únicamente 8 líneas de dirección. Puesto que se ha tomado en cuenta la línea de control AEN (Address Enable) para poder distinguir entre

42

Page 49: Interfaz Ieee 488 Para Pc

capítulo 3 Decodifcador

un ciclo de bus y un ciclo de acceso directo a memoria (DMA), quedan Únicamente 7 líneas las cuales permiten la selección del dispositivo.

Como se vio en el capítulo anterior únicamente es necesario utilizar las 10 líneas del bus de direcciones menos significativas para poder seleccionar un puerto, ya que las 6 líneas restantes son ignoradas por el sistema de la PC cuando se direcciona el bus de US, debido a esto se utilizaron las 7 últimas líneas (A3-A9), de las 10 líneas de dirección disponibles.

Ya que el espacio de direcciones reservado por el sistema para tarjetas prototipo se encuentra en el intervalo 300H - 3 1 FH, se eligió el intervalo 3 18H - 3 1FH como espacio de direccionamiento para el sistema.

La comparación de la dirección en el bus es efectuada por los comparadores contra un conjunto de interruptores, en los cuales se encuentra la dirección del puerto seleccionada.

La elección del conjunto de interruptores para seleccionar el puerto fue realizada para poder hacer mas flexible el direccionamiento del sistema y así poder cambiar la dirección del puerto, si esta se encuentra ocupada.

En la siguiente hoja se encuentra la figura 3.1, la cual muestra el circuito decodificador.

*.

43

Page 50: Interfaz Ieee 488 Para Pc

f

e

1 n

Li1

I-

C:

-I o

1

A P v

I c o o

?

L

L

Page 51: Interfaz Ieee 488 Para Pc

capitulo 3 Implementaci6n

3.1.2 Implementación

La implementación del sistema se realizó teniendo como base el puerto paralelo 8255A conectado al GPIB, a través de un conjunto de buffers. El protocolo del GPIB fué creado tanto en sof2ware como hardware.

El flujo de información entre el PPI y el bus de E/S de la PC se realiza a través de las líneas 27 a 34 del PPI y las líneas A2 a A9 del bus de E/S. Mientras que el control del flujo se realiza por medio de las líneas RD' (lectura) y WR' (escritura) de ambos dispositivos (líneas 5 y 36 del PPI y B13 y B14 del bus de E/S).

L a s líneas y Al del PPI se encuentran conectadas a la parte baja del bus de direcciones (líneas A30 y A31 del bus de US), y son utilizadas para indicar el tipo de función a realizar, ya sea selección de cualquiera de los tres puertos o programación del PPI.

La línea de RESET del PPI es conectada directamente a la línea B2 del bus de E/S ( línea de RESET del sistema de la PC).

La última línea de control CS' (chip select) está conectada al circuito decodificador por medio de la línea PSEL, la cual es utilizada para habilitar al PPI cuando el dispositivo es direccionado.

La figura 3.2 muestra el diagrama de interfaz GPIB en el cual se puede observar la descripción anterior.

Como el sistema se encuentra organizado en tres conjuntos de líneas (Datos, Handshake y Control), realizaremos la descripción de este, basándonos en esta estructura.

Page 52: Interfaz Ieee 488 Para Pc

capítulo 3 Implementaci6n

Datos L o s datos en el PPI son manejados a través del puerto A y los buffers de tres estados (74LS240).

El puerto A está programado en modo 1. El acceso a este puerto se realiza a través de una instrucción de lectura o escritura al puerto en la dirección 318H. Las 8 líneas del puerto A se encuentran conectadas a los buffers 74LS240. El sentido del flujo de información en estos buffers es controlada con las líneas 24 y 25 del PPI las cuales son parte del puerto B, y se encuentran conectadas a las líneas SELIN y SELOUT respectivamente (figura 3.3).

Handshake

L a s tres líneas que realizan el control de transferencia de la información son DAV, NRFD y NDAC.

DAV (DAta V'id). Esta línea es manejada como entrada en PC2 (linea 17 del PPI), cuando el controlador funciona como Zkkner, y proviene de un buffer no inversor de colector abierto (DAVi); como salida (DAV,) es controlada por PC7 (línea 10 del PPI) y enviada por un buffer del mismo tipo que a la entrada, cuando el controlador trabaja como UZker.

Para ambas líneas, se aprovecha la configuración del 8255A en el grupo A modo 1. Para lectura, la recepción de esta señal provoca que los datos que se encuentran presentes en el puerto A sean retenidos para su posterior lectura. En la escritura, al colocar datos en el puerto A la señal DAV es activada, indicando que los datos se encuentran listos para ser leidos.

NRFD (No Ready For Datu). La línea de entrada (NRFDi) se encuentra manejada por PCo (línea 14 del PPI), y proviene de un

46

Page 53: Interfaz Ieee 488 Para Pc

capitulo 3 Implementaa6n

buffer inversor de colector abierto. La salida se encuentra dividida en dos líneas NRFD1 (PC5, línea 12) y NRFD2 (PB5, lfnea 23).

NRFD1 nos proporciona una respuesta rápida indicando que los datos han sido cargados dentro del buffer del puerto A (esto no implica que los datos hayan sido leídos por el Zkteni?r). Esta señal pasa a través de un biestable tipo RS (Reset-Set) para mantener el nivel de la señal cuando los datos han sido leídos y no se ha enviado la señal de aceptación de los datos (NDAC).

La línea NRFD2 releva a NRFD1 debido a que cuando se manda la señal de aceptación (NDAC) ésta inicializa el biestable el cual mantiene la señal NRFD por lo que es necesario retener el nivel con NRFD2.

NDAC (No Data Accept). Como mencionamos en el párrafo anterior la línea de salida NDACo (manejada por PBo, línea 18 del PPI) es llevada a un nivel alto cuando los datos han sido leídos por el Zistewr indicando al talker que puede seguir transfiriendo datos. La línea de entrada NDACi, conectada a PC6 (línea 11 del PPI) nos indica si los datos han sido aceptados por el listener.

Control

IFC (ZnterFace Clear). Esta línea es manejada por PB3 (línea 21 del PPI).

ATN (ATtmtiiON). Es manejada por PB2 (línea 20 del PPI).

SRQ (Ser& ReQwst). Es recibida por IRQ4 (línea B24 del bus de E/S) que genera un servicio de interrupción hacia la PC, cuando algún dispositivo periférico solicita servicio al controlador.

47

Page 54: Interfaz Ieee 488 Para Pc

capftulo 3 Implcmentación

REN (Rtmde ENdZe). Está conectada a PB4 (linea 22 del PPI).

EO1 (End Or Identijy). Debido a que esta señal es insertada al mismo tiempo que la Ciltima transferencia de información, se manejó por medio de IR% (línea B25 del bus de E/S), cuando se trabaja como listener, cuando se trabaja como talker, se maneja por medio de PB1 (linea 18 del PPI).

Los tres conjuntos de líneas descritos anteriormente pueden ser observados en las figuras 3.2 y 3.3.

48

Page 55: Interfaz Ieee 488 Para Pc

__-

=I In C Q a

w

n

m Ar 7 o N

f

1

1

Page 56: Interfaz Ieee 488 Para Pc

i m m VI

O m r

o n W

Page 57: Interfaz Ieee 488 Para Pc

capítulo 3

~-

1 2 8 4 0 1 Software

3.2 SOFIWARE

La programación del sistema fue realizada de dos formas: a través de un lenguaje de alto nivel (lenguaje C), y utilizando lenguaje ensamblador para construir un manejador de dispositivo (device driver) e integrarlo al sistema operativo.

3.2.1 Programación en lenguaje C

Por medio del lenguaje C fue posible desarrollar rutinas para las diferentes funciones que realiza el sistema. Estas rutinas se encuentran disponibles para ser utilizadas en aplicaciones especificas de diferentes dispositivos conectados al bus.

A continuación se presentan las rutinas básicas que fueron desarrolladas.

Control Esta rutina permite la programación de los dispositivos, enviando como parámetro la palabra de control.

#include <dos.h>

void control ( unsigned char comando)

{

unsigned char NRFD ;

/* Programando PPI, grupo A modo 1 : PA salida, PC4 y PC5 salida

Pc6 (NDAC (IACK)) entrada, PC7 (DAV(I0BF)) salida grupo B

modo O : PB salida, PCO (INRFD) entrada ,PC1 - PC3 entradas. */

outportb (Ox3lb,Oxal) ;

Page 58: Interfaz Ieee 488 Para Pc

Capítulo 3 Software

outportb (Ox31b,Ox08) ; /* PC4 = L (IDAV ("entrada")) */ outportb (Ox31b,OxOa) ; /* PC5 = L (NDAC ("salida")) */ outportb (Ox31b,OxOd); /* PC6 = H (INT A PPI) */

/* Atención todos los dispositivos, callen y escuchen */

outportb (Ox319,0x64) ; /* Programando 240 como salida (PB7 = L,PB8 = a) , ATN = L (PB2) */

/* Esperando a que escuchen */

NRFD = inportb (Ox3la); /* Leer PC */ NRFD = NRFD C (0x01) ; /* enmascarando NRFD (PCO) */

} while (NRFD);

/* Mando comando */

outportb (Ox318,comando) ; /* lOBF = L (DAV) */ outportb (Ox319,Ox60); /* ATN = E */

Writejpib Esta función realiza la transferencia de información entre la PC configurada como Talker y uno o varios Zisteners.

52

Page 59: Interfaz Ieee 488 Para Pc

Capítulo 3 Software

#include <doEi.h>

void write-gpib ( char *cadena)

I unsigned char ӟ ;

while (*cadena I= *\O*) /* mientras no se termine la

información */ {

outportb (Ox318,*cadena); /* transmite un byte de

información */

/* mientras no estén listos para recibir datos */

NRFD = inportb (Oxila); NRFD = NRFD & ( 0 x 0 1 ) ;

} while (NRFD);

cadena++ ;

Read-ib La función que realiza este rutina es leer información de algún dispositivo configurado como tuZkm.

Para su utilización es necesario modificar el vector de interrupciones, a través de la rutina I R E S , direccionando hacia ISR - 3. La rutina ISR 3 permite conocer el estado de la recepción por medio de la variable global EOI.

53

Page 60: Interfaz Ieee 488 Para Pc

caplhdo 3 software

Es necesario utilizar una rutina de interrupci6n porque la sefial de fin de transferencia de mensaje (EOI) es colocada al mismo tiempo que la última transferencia de datos, y debido a la forma en la cual está diseñado el hardware, no es posible leer dos líneas a un mismo tiempo.

#include <dos. h>

#include <stdio.h>

#include <stdlib.h>

#def ine uchar unsigned char

uchar EO1 = O: /* indica la terminación de la transferencia */

/* Rutina de servicio para la interrupción 3 del sistema

de la PC. Nos indica por medio de la variable EO1 la

terminación de la transferencia de información.

void interrupt isr - 3(void)

{

EO1 = 1;

*/

/* Modifica el vector de interrupciones de la interrupción 3

del sistema de la PC, direccionando como rutina de

servicio a ISR-3. */

54

Page 61: Interfaz Ieee 488 Para Pc

capítulo 3

void ire3 (void)

void interrupt isr_3(void);

disable ( ) ;

outportb(0x2l,(inportb(Ox21) L Oxf7)):

enable ( ) ;

Software

/* Habilita int 3 PIC */

/* Esta funcidn configura la interfaz como entrada */

void config - ent (void)

{

outportb (Ox31b,Oxbl); /* configuración: PA modo 1, salida:

PB salida, PC6 y 7 salida, PC1 a PC3

entradas */

outportb (Ox31b,OxOf); /* PC7 = H */ outportb (Ox3lb,OxOa): /* PC5 = L */ outportb (Ox31b,OxOc); /* PC6 = L * / outportb (Ox31b,Ox09): /* PC4 = H ( I NT A PPI) */ outportb (Ox31b,Ox07); /* PC3 = H */ outportb (Ox319,Oxal); /* 240 's programados como entradas;

NRFD - Activo - NDAC -> L */ 1

55

Page 62: Interfaz Ieee 488 Para Pc

capítulo 3

/* Realiza la lectura */

void read-mib (char *cadena)

{

uchar DAV;

do {

do {

DAV = inportb (Ox31a);

DAV =DAV 6 (0x04);

} while (DAV);

outportb (Ox319,Ox81);

*cadena++ = inportb (0x318);

outportb (Ox319,Ox80);

outportb (Ox3lb,OxOa);

outportb (Ox319,Oxal);

software

/* Mientras no termine el envio de informaci6n */

/* Mientras no haya un dato

válido */

/* Pone NRFD */

/* Pone Libera NDAC */ /* PCS = L * / /* Pone NRFD y NDAC */

} while (IEOI) ;

*cadena = NULL;

EO1 = O;

Programa de aplicación

El siguiente programa llamado Plottype tiene como función leer un archivo, el cual contiene instrucciones en lenguaje HP-GL (Hewlett- Packard Graphia Language). Este lenguaje es utilizado por el Plotter gráfico HP 7470A con el cual fueron realizadas todas las pruebas del sistema IEEE-488 (GPIB).

56

Page 63: Interfaz Ieee 488 Para Pc

Capítulo 3

#include <etdio.h>

tdef ine INC REN

tdef ine F1

Software

160

187

void main(argc,argv)

int argc ;

char *argv[];

FILE *fp; char buffer[100],

temp[ 101 ;

int c,i, renglon = 410:

/* Comprobación de pardmetros */ if (argc 13: 2) {

printf("\nError en numero de parametros");

printf("\nLa sintaxis debe ser:

$8 [=chivo a imprimir]\n",argv[O]);

1 else { /* Abriendo archivo */

fp = fopen(argv[l],"r");

i f (fp == NUU)

printf("Error : fichero $9 inaccesible",argv[l]);

else {

Control(37); /* programando para "escuchar" */

do f /* Mientras no sea fin de archivo */ /* Inicialización, selección de

pluma y posición inicial */ write-gpib("IN;SP 1;PA 425,279;");

57

Page 64: Interfaz Ieee 488 Para Pc

Capítulo 3 Software

for (i - 0;i < 56;++i) { .

/* Selecciona la dirección de escritura y tamaño de carácter */

write - gpib("D1 0,l;SI .15 , .25;" ) ;

/* comando de escritura de carácteres */ write - qpib("LB"); c = lee-linea(fp,buffer);

write-qpib(buffer);

renglon += INC - REN;

itoa(renglon,temp,lO);

/* Posición absoluta */ write - gpib(";PA " ) ;

write-gpib(temp);

write - gpib( ", 279; " ) ; 1 if ( ( i == 56) 6& ( c I= EOF) {

printf("\nPoner siguiente hoja y

oprimir F1 para continuar");

do {

i = get - char(); }while (i I = Fl);

renglon = 410;

1 } while (c 1s EOF);

Page 65: Interfaz Ieee 488 Para Pc

Capítulo 3 Software

int lee-linea(FILE *fp, char *linea)

{

char ct

while ((c=getc(fp)) I= EOF && cJ= #\nm)

*linea++ = c;

*linea++ = '\3';

*linea = * \ O m ;

i f (c == EOF)

retUrn(EOF):

else

return (NULL) ;

1

3.2.2 El Driver

El manejador de dispositivo (device driver) fue construido siguiendo las reglas específicas dadas por Microsoft, permitiendo administrar, a través del sistema operativo, al dispositivo como una parte estándar del sistema de la PC.

En seguida se presenta el código fuente del d.laver, en el que únicamente se realiza la funcibn de salida.

CODE SEGMENT

ASSUME CS: CODE, DS: CODE

CR

LF

EOM

EQU ODH

EQU OAH

EQU , s *

Page 66: Interfaz Ieee 488 Para Pc

Capítulo 3 Software

POINTER DD -1

ATTRIBUTE DW 8000H

STRATEGY-PTR DW STRATEGY

INTERRUPT PTR DW INTERRUPT

DRIVER NAME DB 'GPIB 1

- -

OFFSET RH DW 1

SEGMENT Rñ DW ?

- -

MES SAGES LABEL WORD

INIT MESS DB '---> DRIVER - GPIB <---' - DB LF , CR, EOM

STRATEGY PROC FAR

OFFSET RH,BX - MOV

MOV SEGMENT-RH,ES

RET

STRATEGY ENDP

; ------------------- RUTINA DE INTERRUPCI~N -------------------

INTERRUPT PROC FAR

PUSH Ax ; guardando ambiente

PUSH BX PUSH cx

PUSH DX

60

Page 67: Interfaz Ieee 488 Para Pc

capftulo s sofiwde63 8 4 o 1

PUSH SI

PUSH DI

PUSH BP

PUSH DS

PUSH ES

PUSH cs POP DS

nov BX,OFFSET-RH

nov ES,SEGMENT-RH

:DS = CS

nov AL,ES:[BX+Z] ;leyendo comando

CMP AL, 0

J-E INIT

CMP AL, 8

JE OUTPUT

JMP NORMAL-EXIT

INIT : LEA DX,INIT-MESS

MOV m, 9 INT 2 1H

nov WORD PTR ES:[BX+lQ],OFFSET BOTTOM

MOV ES:[BX+16],CS

JMP NORMAL-EXIT

OUTPUT :

; CONTROL

MOV

nov AL, OAlH ;programando ppi

DX, 31BH ;outportb (Ox31b,Oxal) 61 I

Page 68: Interfaz Ieee 488 Para Pc

capfhllo 3

Do1 :

OUTPUT 1 :

OUT

MOV

MOV

OUT

MOV

MOV

OUT

MOV

MOV

OUT

MOV

MOV

OUT

MOV

IN

AND

CUP

JNE

MOV

MOV

OUT

MOV

MOV

OUT

MOV

MOV

MOV

MOV

MOV

OUT

DX,AL

AL, 88

DX , 3 1BB DX,AL

AL, OAH

DX,31BH

DX,AL

AL, ODH

DX, 3188

DX, AL

AL, 64H

DX, 319H

DX,AL

DX, 31AH

U,DX ;

AL,lH ;

AL, ox DO1

AL, 31

DX, 318H

DX,AL

AL,60H

DX, 319H

DXfAL

;outportb (Ox3lb, 0x8)

toutportb (Ox31b,OxOa)

;outportb (Ox31b,OxOd)

;outportb (0~319~0x64)

;do {

NRFD = INPORTB(OX31A)

NRDP = N W D f 01

;}while (NRFD)

toutportb (Ox318,37)

;outportb (Ox319,Ox60)

CX,ES:[BX+18] icontador

SI,ES:[BX+14] ;buffer para segmento

DS,ES:[BX+16] ;buffer para segmento

AL, [SI1

DX, 3188

DX,AL ;transmite carácter

Page 69: Interfaz Ieee 488 Para Pc

capítulo 3

DO2 : MOV

IN

AND

CMP

JNE

INC

LOOP

SUB

JMP

NORMAL EXIT: MOV -

INTERRUPT

BOTTOM

CODE

POP

POP

POP

POP

POP

POP

POP

POP

RET

ENDP

software

DX, 31Ni ;do { . AL,DX i NRFD = inportb(OX31A)

AL, 1H NRDF - NRFD SI 01

AL, OH

Do2 ;>while (blRPD)

SI

OUTPUT1

ESt[BX+lS],CX ;caracteres transferidos

NOW-EXIT

WORD PTR ES:[BX+3],0100H ;status - DONE

LABEL WORD

ENDS

END

ES ;restableciendo ambiente

DS

DI

SI

DX

cx BX

Ax

Page 70: Interfaz Ieee 488 Para Pc

RESULTADOS

En este capitulo se presentan los resultados obtenidos en la realización del sistema IEEE-488 (GPIB) .

Se construyó un dispositivo capaz de integrarse al sistema de la PC, basado en el estandar IEEE-488. Este dispositivo se encuentra montado en una tarjeta prototipo capaz de insertarse en alguna ranura (slot) de expansión disponible en cualquier sistema de PC o compatible.

Se proporciona software básico el cual se puede tomar como punto de partida para el desarrollo de rutinas más complejas para algún dispositivo periférico específico.

El software básico esta implementado de dos maneras distintas :

a) Un manejador de dispositivos (Device DriuerS). b) Rutinas en lenguaje fuente.

El manejador de dispositivo, denominado GPIB.SYS, se integró al conjunto de manejadores de dispositivos del sistema operativo MS- DOS, con los que se tiene la capacidad de manejar el sistema a través de llamadas a funciones estándar del mismo sistema operativo. La tínica función implementada dentro del manejador GPIB.SYS es la de salida.

64

Page 71: Interfaz Ieee 488 Para Pc

capitulo 4 Resultados

L a s rutinas en lenguaje fbente son proporcionadas en lenguaje C de manera que un usuario pueda utilizarlas para desarrollar programas de aplicación de acuerdo a las especificaciones requeridas por su(s) dispositivo(s).

L a s rutinas de lenguaje fuente son: Control, R e a d m , W r i t e s ; que sirven, para mandar comandos de control a los dispositivos, enviar y recibir información de los mismos respectivamente.

PROBLEMAS, PROBLEMAS, PROBLEMAS ... De los párrafos anteriores se aprecia que dentro del GPIB.SYS no existe la función de lectura. Esta función estuvo implantada dentro del sistema, sin embargo no realizaba correctamente su función.

Para mostrar la forma en que fue tratado este problema se presentan los siguientes tres puntos:

1.- Código del GPIB conteniendo el módulo de lectura. 2.- Forma de ejecución de un dispositivo desde MS-DOS. 3.- Programa de prueba que utiliza el módulo de lectura.

Código del GPIB

A continuación se muestra el código del GPIB conteniendo el módulo de Lectura.

CODE SEGMENT

ASSUME CS : CODE, DS :CODE

CR EQU ODH LP EQU OAH EOM EQU ' $ I

Page 72: Interfaz Ieee 488 Para Pc

capitulo 4 Resultados

POINTER DD -1 ATTRIBUTE DW 80008 STRATEGY-PTR DW STRATEGY INTERRUPT-PTR DW INTERRUPT DRIVER NAME DB 'GPIB * -

OFFSET-Rü DW SEGMENT-RH DW

FtAG DB

MESSAGES LABEL

INIT MESS DB DB

?

?

?

WORD

I---> DRIVER - GPIB <---I

LF, CR, EOM

PROC FAR MOV OFFSET - RX,BX MOV SEGMENT - RX,ES RET ENDP STRATEGY

INTERRUPT PROC FAR

PUSX Ax PUSH BX PUSX cx PUSü DX PUSX SI PUSX DI PUSX BP PUSH DS

; guardando ambiente

66

Page 73: Interfaz Ieee 488 Para Pc

capitulo 4

PUSH

PUSX POP WOV nov

MOV CMP JE CMP JE CMP JNE JMP

NORMAL : JMP

ES

cs DS BX , OFFSET-RE ES,SEGXENT_RB

Resultados

:DS = CS

AL,ES:[BX+Z] ;leyendo coinando

AL, 0 INIT AL, 4

AL, 8 INPUT

NORMAL OUTPUT NORMAL-EXIT

INIT : LEA DX,INIT-MESS

INT 2 1H uov AH, 9

uov AL, OH uov

MOV WORD PTR ES:[BX+lQ],OFFSET BOTTOM uov ES:[BX+16],CS JHP NORMAL EXIT -

INPUT : ; CONTROL

nov CMP JE nov nov nov UOV OUT MOV uov OUT uov

&,FLAG AL, 2H El AL, 2H FLAG,= AL, OAlH DX, 31BX

AL8 8H DX,31BH DX8AL

DX8

AL, O A H

:programando ppi routportb (Ox31b,Oxal)

;outportb (Ox31b,Ox8)

;outportb (Ox31b,OxOa)

Page 74: Interfaz Ieee 488 Para Pc

caplhllo 4 Resultados

Do3 :

MOV OUT MOV MOV OUT

MOV MOV OUT

MOV

IN AND cwp JNE nov MOV OUT

MOV MOV OUT

;CONFI ENTRADA uov MOV OUT MOV MOV OUT

MOV MOV OUT

MOV MOV OUT uov MOV OUT MOV MOV OUT

MOV nov OUT

DX,31BH DX,AL AL, ODE DX, 3188 DX,AL AL, 64H DX, 3198 DX,AL üX,31Añ AL,DX AL, 1H AL, OH Do3 AL, 69 DX, 318H DX,AL AL, 60H DX, 3198 DX,AL

AL, OBlH DX, 31BH DX,AL AL, OFB DX, 31BH DX,AL AL, OAH DX, 3lBH DX,AL AL, OCB DX,31BH DX,AL AL, 09H DX, 31BH DX,AL AL, O78 DX, 31BH DX,AL AL, OAlH DX, 319H DX,AL

;outportb (OxJlb,OxOd)

toutportb (Ox319,Ox64)

;do € ; NRFD = INPORTB(OX31A) ; NRDF = N R F D & 0 1 i

;}while (NRFd) ;outportb (Ox318,69)

Page 75: Interfaz Ieee 488 Para Pc

capítulo 4

; READ_GP

El:

Do4 :

; CONTADOR nov CX,ESt[BX+18] nov SI,ES:[BX+14] nov DS,ESr[BX+16]

nov IN AND cwp JNE nov nov OUT MOV IN nov

DXf 031AH ALI DX AL* 4x AL, OH Do4 ALf 081H DX, 3198 DXIAL DX, 0318H ALt DX [=],AL

nov DL,AL

INT 2 1H nov AB, 2

MOV Axf cx

nov mf 2 MOV DLIAL

INT 2 1H

INC DEC nov nov OUT

nov nov OUT nov nov OUT

SI cx AL, 80H DX, 319H DX,AL

DXI 31BH DXIAL ALI OAlH DXf 319H

AL, om

DX,AL

MOV AL, [SI-11 cxp AL* 10 JE @3 SNE DO4

LOOP Do4 JMP @6

; *BUFFER = CARACTER

; ECO DE CARACTER

; ECO DE CONTADOR

Resultados

; BUFFER++

Page 76: Interfaz Ieee 488 Para Pc

capitulo 4

@3: @6 :

Resultados

DEC cx MOV Ax, ex ; ECO DE CONTADOR MOV DL, AL MOV AX,LH INT 2 1H MOV ES:[BX+18],CX ; CUZACTERES TRMSPERIDOS

MOV ES:[BX+14],SI

OUTPUT:

; CONTROL

DO1 :

MOV MOV OUT MOV MOV OUT MOV MOV OUT MOV MOV OUT MOV MOV

OUT MOV IN AND C W JNE MOV MOV OUT MOV MOV

OUT

AL, OAlH DX , 3 1BH DX,AL AL, 8H DX, 31BH DX,AL AL, O M DX, 31BH DX, AL AL, ODH DX, 31BH DX, AL AL, 64H DX, 319H DX,AL DX, 31~1i AL, DX AL, la AL, OH

AL, 37 DX, 318H DX,AL AL,6OH DX, 319H DX,AL

DO1

;programando ppi foutportb (Ox31bfOxal)

;outportb (Ox31b,Ox8)

toutportb (0x31bt0x0a)

;outportb (Ox31b,OxOd)

ioutportb (Ox319,Ox64)

;do { f NRFD = INPORTB(OX31A) i NRDF =NRFD ó O1 * ; }while (NRPd) ;outportb (0~318~37)

;outport (Ox319,Ox60)

70

i

Page 77: Interfaz Ieee 488 Para Pc

RCSUltadOS capitulo 4

OU!rPuTl r

DO2 :

nov nov nov INT nov nov OUT

nov IN AND cwp JNE

INC LOOP SUB

JXP

NORHAL_EXIT : nov

INTERRUPT

BOTTOM CODE

POP POP POP POP POP POP POP POP POP RET ENDP

LABEL ENDS END

DX, 3lAR AL,DX AL, 1H

DO2 AL, oa

;do € i NRFD = inportb(OX3U) i # R P D = M V D & 0 1 ; ; I while (NRFD)

SI OUTPUT1 ES:[BX+l8],CX ;caracteres transferidos

NORMAL EXIT -

WORD PTR ES:[BX+3],0100H ;estátus = DONE

ES DS BP DI SI DX cx EX Ax

WORD

;restableciendo ambiente

Lectura desde DOS

La ejecución del código del GPIB se realiza cuando, dentro de una función estándar de un lenguaje de alto nivel, o directamente del lenguaje ensamblador, se invoca la interrupción 2 1 H, función 3FH.

71

Page 78: Interfaz Ieee 488 Para Pc

capitulo 4 RCSUltadOS

Esta fiinción lee del archivo o dispositivo asociado con un manejador (handier) específico asignado por el DOS.

La forma en la cual se invoca la interrupción es la siguiente:

AH = 3FH BX = Manejador CX = Bytes a leer DS:DX = Apuntador a buffer

Donde al registro AH contiene el número de función a ejecutar, BX contiene el número correspondiente al manejador del que se hará la lectura, CX es el número de bytes a leer y en DS:DX está la dirección del buffer en donde será almacenada la información o datos leidos.

Al término de la interrupción, ésta devuelve lo siguiente:

Con la bandera de acarreo (CUT Flag) encendida: AX = 5 (Acceso dañado) AX = 6 (Manejador inválido)

Con la bandera de acarreo apagada: AX = Número de bytes leidos

Si no hay error, AX regresa el número de bytes leidos; si existe un intento para leer el comienzo de un fin de archivo, A X regresa CERO. El número de bytes especificados en CX no es necesariamente transferido al buffer.

Si existe un error, la bandera de acarreo (CF) es encendida y el código de error se devuelve en AX.

72

Page 79: Interfaz Ieee 488 Para Pc

caplnilo 4 Resultados

Programa de Prueba

A continuación se presenta uno de los programas utilizados como prueba de lectura y escritura del sistema GPIB.

Program Pru-mib;

{ Este programa selecciona la pluma número uno del Plotter, la posiciona en las coordenada8 425,279 y posteriormente lee la posicidn de la pluma, desplegandola en pantalla. 1

var pltr,apun:text; cadena:string[ll];

begin asaign(pltr,'gpib'); assign(apun,'gpib'); rewrite(p1tr); writa(pltr,'IN;SPl;PA 425,279;'); write(pltr,moA;*); reset (apun); read(apun,cadena); writeln('0ENA = ',cadena); close(p1tr); close(apun);

end.

Tratamiento del Problema

Como intento de solucionar el problema se utilizaron herramientas de ayuda tales como depuradores de software, osciloscopio y analizador de estados lógicos.

El depurador utilizado fue Turbo Debugger, ya que con este es posible seguir la ejecución del programa, instrucción por instrucción, en lenguaje fuente y en su correspondiente código en lenguaje ensamblador .

73

Page 80: Interfaz Ieee 488 Para Pc

capstdo 4

Con el Turbo Debugger fue posible seguir la instruccibn de lectura ("Read" de Turbo Pascal) hasta el momento en el cual se efectúa la interrupción de lectura de dispositivo (interrupción 2 1 H, función 3FH). En este punto se comprobó que los parámetros requeridos para la interrupción eran correctos, ya efectuada la interrupción y con ayuda del analizador de estados lógicos se observó que la interfaz recibía los datos enviados por el graficador y sin embargo, al regreso de ésta, el registro A X reporta una lectura de O caracteres, lo que indica una lectura de fin de archivo (observando el contenido del CF, su status se encontraba apagado).

Por la forma en que trabaja el Turbo Debugger no es posible entrar hasta el código de servicio de interrupción, por lo que al código del driver se le adicionó una función de despliegue en pantalla de los datos recibidos por la interfaz y esto fué otra manera de comprobar que los datos recibidos llegaban correctamente desde el dispositivo de prueba (Plotter). Una función de despliegue similar fué utilizada para comprobar que la cuenta de los carácteres recibidos era corecta hasta antes del retorno del servicio de interrupción.

Utilizando una característica del Turbo Debugger que permite modificar el contenido de los registros, y colocados justo despues de la interrupción, se cambió el contenido del registro AX, de O a el número observado como cuenta final de lectura del driver y despues de efectuar la modificación se continuó la ejecución normal del programa obteniendo los resultados de acuerdo a los cuales fué diseñado este último.

Hasta la fecha se han buscado soluciones a este problema consultado diferentes fuentes sin obtener resultados favorables, ya que la información referente a manejadores de dispositivos (device drivers) es muy limitada, y normalmente no incluyen lectura de dispositivos.

74

Page 81: Interfaz Ieee 488 Para Pc

CAPfTULO 5

CONCLUSIONES

El sistema GPIB satisface los requerimientos especificados en el estándar IEEE-488,

La interfaz GPIB consta de los dispositivos necesarios para enlazar comunicaciones entre un computador IBM-PC y dispositivos periféricos basados en el estándar IEEE-488. El diagrama general a bloques de esta interfaz es mostrado en la figura 5.1.

GPIB F m 5.1 Diagirnir geaenl a bloques del sistema GPIB.

La base del sistema de hardware de esta interfaz es el circuito integrado de Intel 8255 (PPI). Este chip fué escogido tomando en cuenta, por una parte, la facilidad de acoplamiento al sistema de la PC, y por otra, su capacidad para manejar 3 puertos independientes de 8 bits cada uno, los cuales pueden ser programados para trabajar de distintos modos, a elegir, de acuerdo a las necesidades.

75

Page 82: Interfaz Ieee 488 Para Pc

Otro bloque de importancia es la sección de decodificación en la que se puede elegir, a través de interruptores, el espacio de direccionamiento en el que trabajará la interfaz, lo que permite una mayor flexibilidad de acoplamiento al sistema, adaptándolo para trabajar en cualquier espacio de direccionamiento que se encuentre libre.

El último bloque es la sección de buffers. Estos son inversores de colector abierto que permiten trabajar con lógica negativa, además de manejar la potencia necesaria según indicaciones del estándar.

El software ha sido diseñado para una posible expansión y puede ser modificado con una variedad de configuraciones de dispositivos sin hacer una reescritura radical del software básico.

El software es suministrado para trabajar de dos maneras distintas. En la primer forma se proporcionan los procedimientos en código objeto de las funciones de control, lectura y escritura hacia los dispositivos GPIB. La segunda forma de trabajo con el dispositivo es a través de un manejador de dispositivos (device drivers) que proporciona al usuario un manejo transparente de las funciones del sistema operativo. Se suministran las funciones de control y escritura.

En lo referente al costo del sistema este fué de aproximadamente $ 70.00 (USD) para la versión prototipo y de $55.00 (USD) para el mismo circuito montado en circuito impreso.

Page 83: Interfaz Ieee 488 Para Pc

BIBLIOGRAF~A

IEEEStandar Digital Interface for Programmable Instrumentation (IEEE-STD-488- 1978)

The IBM Personal Computer from the Inside Out Murray Sargent I11 & Richard L. Shomaker Addison-Wesley Publishing Company 1984

Handbook of Software & Hardware Interacing for IBM P C s Jeffrey P. Royer Prentice-Hall, Inc. 1987

System Software Tools Ted J. Biggerstaff Printce-Hall, Inc 1986

Writing MS-DOS Device Drivers Robert Lai / The Waite Group Inc. Addison-Wesley Publishing Company 1987

Turbo C : Memory-Resident Utilities, Screen I/O and Programming Techniques

Ai Stevens Management Information Source, Inc. 1987

I

77

- I- - ’ ~ ”. -

Page 84: Interfaz Ieee 488 Para Pc

". ~

Bibliografh

C : Power User's Guide Herbert Schildt Osborne/McGraw-Hill 1988

Advanced MS-DOS Ray Duncan Microsoft Press 1986

Microprocessor - based IEEE - 488 interfacing unit as a development aid D.P. Majoe ¿k A.C. Loannides Microprocessors and Microsystems Vol. 6 No. 6 July and August 1982, page 275

IEEE-488 Interfacing using parallel 1 / 0 ports Philip Robertson Microprocessors and Microsystems Vol. 6 No. 6 July and August 1982, page 281

Data acquisition system using the IEEE-488 interface bus b a g Y. Taha & Waleed H. Abdulla Microprocessors and Microsystems Vol. 11 No. 9 November 1987, page 493

The Input / Output Interfaces

Primer part 3: The Parallel and HPIB (IEEE-488)

Steve Leibson Byte Publication Inc April 1982, page 186

Page 85: Interfaz Ieee 488 Para Pc

APfiNDICE A

INTERFAZ PEIUFI~ICA PROGRAMABLE (8255A)

El 8255A es un dispositivo de E/S de propósito general programable diseñado para usarse con los microprocesadores de Intel. El 8255A tiene 24 terminales de E/S los cuales pueden ser individualmente programados en 2 grupos de 12 y usados en 3 modos de operación. En el primer modo (MODO O), cada grupo de 12 terminales de E/S puede ser programado en conjuntos de 4 para entrada o salida. En MODO 1, el segundo modo, cada grupo puede ser programado para tener 8 líneas de entrada o salida. De las 4 terminales restantes, 3 son usadas para hundshuking y señales de control de interrupciones. El tercer modo de operación (MODO 2) es el de bus bidireccional el cual utiliza 8 lheas para un bus bidireccional, y 5 lfneas tomando prestada una del otro grupo, para handshaking.

DESCRIPCION FUNCIONAL

General

El 8255A es un dispositivo para interfaz periférica programable (PPI) diseñado para sistemas de microcomputador. Su función es el de un componente de propósito general de E/S para interfaz de equipo periférico hacia el bus del sistema del microcomputador. La configuración funcional del 8255A es programada por el software del sistema así que normalmente no es necesaria lógica externa para interfaz de dispositivos periféricos o estructuras.

AI

Page 86: Interfaz Ieee 488 Para Pc

Buffer del Bus de Datm

Este w e e r bidireccional de 8 bits con salida a tercer estado es usado como UM Mterfaz del 8255A hacia el bus de datos del sistema. Los datos son transmitidos o recibidos por el bufleer después de la ejecución de instrucciones de entrada o salida por el CPU. Las palabras de control y el estado de información son también transferidos a través del b@et del bus de datos.

EscrituranRctura y Control Lógico

La función de este bloque es manejar toda la transferencia interna y externa de datos y control o palabras de estado. Acepta entradas de las direcciones del CPU y el bus de control, produciendo comandos para ambos grupos de control.

CS'

Chip Select. Un "bajo" en está terminal de entrada habilita la comunicación entre el 8255A y el CPU.

Read. Un "bajo1' en está terminal de entrada habilita al 8255A para transmitir los datos o estado de información hacia el CPU en el bus de datos. En esencia, permite al CPU ''leer de" el 8255A.

Write. Un "bajo" en está terminal de entrada habilita al CPU para escribir datos o palabras de control dentro del 8255A.

A2

Page 87: Interfaz Ieee 488 Para Pc

AOy Ai

Selección de puerto O y selección de puerto 1. Estas señales de entrada en conjunción con las entradas RD y WR, controlan la selección de uno de los tres puertos o de los registros de palabra de control. Estos son, normalmente los últimos bits significativos del bus de direcciones (A0 y Al).

Reset. Un "alto" en esta entrada limpia el registro de control y todos los puertos (A,B,C) son puestos en el modo de entrada.

Controles grupo A y grupo B

La configuración funcional de cada puerto es programada por el sistema de software. En esencia el CPU "manda" una palabra de control hacia el 825549. La palabra de control contiene información tal como "modo", "bit set", "bit reset", etc., que inicializan la configuración funcional del 8255A.

Cada uno de los bloques de control (grupo A y grupo B) acepta "comandos" de la lógica de control ReadhVEte, recibe "palabras de control" del bus de datos interno y produce los comandos propios hacia los puertos asociados.

Control Grupo A Puerto A y Puerto C superior (C4 - C7)

Control Grupo B hierto B y Puerto C inferior (CO - C3)

El registro de palabras de control puede solamente ser escrito. Ninguna operación de lectura del registro de control es permitida.

A3

Page 88: Interfaz Ieee 488 Para Pc

Puertos A, B y C

El 8255A contiene tres puertos de 8 bits (A,B y C). Todos pueden ser configurados en una gran variedad de caracterfsticas funcionales por el software del sistema pero cada uno tiene sus propias características funcionales o "personalidad" para engrandecer el poder y flexibilidad del 8255A.

OPBRACIÓN BhIcA 8255 A1 A0 RD' WR' CS' OPBRACIbN DE ENTRADA

O O O 1 O O 1 O 1 O 1 O O 1 O

O O 1 O O O 1 1 O O 1 O 1 O O 1 1 1 O O

X X X X 1 1 1 O 1 O

(u-) Puerto A = Bus de datos Puerto B = Bus de datos Puerto C = Bus de datos

OPBRACI~N DE SALIDA (ESCRITUIU)

Bus de datos => Puerto A Bus de datos => Puerto B Bus de datos => Puerto C Bue de datos => Puerto I)

FUNCIÓN DE DESHABIUTACIÓN BUS DE DATOS => 3 ESTADOS CONDICI~N ILEGAL

I x X 1 1 O BUS DE DATOS => 3 ESTADOS

Puerto A. Un b@er/latch de salida de datos de 8 bits y un latch de entrada de datos de 8 bits.

hierto B. Un b@er/latch de entraddsalida de 8 bits y un bufer de entrada de datos de 8 bits.

Puerto C. Un b@er/latch de salida de datos de 8 bits y un bufer de datos de 8 bits (no latch para entrada). Este puerto puede ser dividido en dos puertos de 4 bits sobre el modo de control. Cada puerto de 4 bits contiene un larch de 4 bits y puede ser usado para la salida de señales de control y entradas de señales de estado en conjunción con los puertos A y B.

A4

Page 89: Interfaz Ieee 488 Para Pc

Apédce A

DEsCRIPCIdN OPERACIONAL

S e l d 6 n de Modo

Son tres modos básicos de operación que pueden ser seleccionados por el software del sistema :

Modo O - EIS básica.

Modo 2 - Bus bidireccional. Modo 1 * Strobed EIS.

Cuando la entrada de reset lleva a "írias" a todos los puertos puede ser puesto en el modo de entrada (es decir, todas las 24 lfneas pueden estar en el estado de alta impedancia). Antes de que el reset sea removido el 8255A puede quedarse en el modo de entrada con ninguna inicialización adicional requerida. Durante la ejecución del programa del sistema uno de los otros modos puede ser requerido usando una simple instrucción de salida. Esto permite al 8255A servir a una gran cantidad de dispositivos periféricos con una simple rutina de mantenimiento de software.

F m A.l Definición de formato para MODO.

I

Page 90: Interfaz Ieee 488 Para Pc

Los modos para puerto A y B pueden ser definidos separadamente, miems el puerto C es dividido dentro de dos porciones como se requieran para las definiciones del puerto A y puerto B. Todos los registros de salida, incluyendo los flip-flops de estado pueden ser iniciabados siempre que el modo sea cambiado. Los modos pueden ser combinados para que su definición funcional pueda ser adecuada hacia casi una estructura de E/S. Por ejemplo: El grupo B puede ser programado en MODO O hacia un simple monitor cerrando interruptores o desplegando resubdos computacionales. El grupo A puede ser programado en MODO 1 hacia un monitor o teclado, o cinta lectora en una base manejadora de interrupciones.

Caraderisticas simples bit setheset

Uno de los 8 bits del puerto C puede ser puesto o quitado usando una simple instrucción de salida. Esta característica reduce requerimientos de software en aplicaciones basadas en control. Cuando el puerto C es usado como estadokontrol para los puertos A y B, estos bits pueden ser puestos o borrados para usar las operaciones bit setheset justamente como si estas fueran puertos de entrada de datos.

I 1 ' - O

Fisurp A3. Formato bit set/reeet.

Funciones de Control de Interrupciones

Cuando el 8255 es programado para operar en MODO 1 o MODO 2, las señales son suministradas para que puedan ser usadas como entradas de

A6

Page 91: Interfaz Ieee 488 Para Pc

peticiones de interrupción hacia el CPU. Las Señales de petición de interrupción, generadas por el puerto C, pueden ser habilitadas o deshabilitadas poniendo o "reseteando" el flip-flop asociado N E , usando la función bit setheset del puerto C. Esta función permite al programador rechazar o permitir a un dispositivo específico de E/S interrumpir al CPU sin afectar alguno de los otros dispositivos en la estructura de interrupciones.

Definición del flip-flop INTE : (BiT-SET) - Interrupción habilitada. (BIT-RESET) - Interrupción deshabilitada.

M0M)S DE OPERACION

Modo O. (Entrada/Salida Básica). Esta configuración funcional provee entrada simple y operaciones de salida para cada uno de los los tres puertos. Ningun handrhaking es requerido, los datos son simplementes escritos hacia o leidos de un puerto específico.

Modo O. Definiciones básicas funcionales.

- Dos puertos de 8 bits y 2 puertos de 4 bits. - Un puerto puede ser entrada o salida. - Las salidas son latched. - Las entradas no son hched. - 16 diferentes configuraciones de E/S son posibles

en este modo.

Modo 1. (Strobed Znput/output). Esta configuración funcional se emplea principalmente para transferir datos hacia o de puertos específicos en conjunción con strobes o señales de handshaking. En MODO 1 , los puertos A y B usan las líneas del puerto C para generar o aceptar estas señales de handshaking.

A7 I I

Page 92: Interfaz Ieee 488 Para Pc

lspcILdicc A Intedk PoriftniCri Programable

Modo 1. Definiciones básicas funcionales.

- 2 gNpoS (A y B). - Cada grupo contiene un puerto de datos de 8 bits y

un puerto de control/datos de 4 bits. - El puerto de datos de 8 bits puede ser entrada o

salida, ambas entradas o salidas son htched. - El puerto de 4 bits es usado para control y estado

del puerto de 8 bits.

Defmición de señales de control de entrada.

STB (Strobe Inpul.). Un "bajo" en esta entrada carga datos dentro del latch de entrada.

iBF (Input Bufler Full F/F). Un "alto" en esta salida indica que los datos han sido cargados dentro del latch de entrada, en esencia, una contestación. IBF es puesto por la entrada STB comenzando con un bajo y inicializado por el flanco de subida de la entrada RD.

INTR. (Interrupt Request.) Un "alto" en esta salida puede ser usado para interrumpir al CPU cuando un dispositivo de entrada requiere servicio. INTR es puesto cuando STB' es "uno", IBF es "uno" e INTE es "uno". Es inicializado por el flanco de bajada de RD'. Este procedimiento permite a un dispositivo de entrada solicitar servicio desde el CPU simplemente haciendo strobing de los datos dentro del puerto.

INTE A Controlada por el bit setheset de PC4.

INTE B Controlada por el bit setheset de PC2.

Page 93: Interfaz Ieee 488 Para Pc

Apeadice A

Figura A.3. MODO 1 aitndp.

Definición de señales de control de salida.

OBF' (output Bufler Full F/F). La salida OBF "baja" para indicar que el CPU ha escrito datos en un puerto especffico. El OBF F/F es "puesto" por el flanco de subida de la entrada WR y "reseteado" por la entrada ACK (bajo).

ACK' (Acknowledge Inpuí). Un "bajo" en esta entrada informa al 8255A que los datos del puerto A y puerto B han sido aceptados. En esencia, una respuesta del dispositivo periférico que ha recibido los datos de salida por el CPU.

INTR (Interrupt Request). Un "alto" en esta salida puede ser usado para interrumpir al CPU cuando un dispositivo de salida ha aceptado datos transmitidos por el CPU. INTR es puesta cuando ACK es "uno", OBF es "uno". Esta es "reseteada" por la cafda del flanco de WR.

INTE A Controlada por el bit setheset de FC6.

A9 I

Page 94: Interfaz Ieee 488 Para Pc

Apéndice A #+

INTE B Controlada por el bit setheset de PC2.

VI'

Figin0 A.4. MODO 1 d d a .

Modo 2. (Strobed Bidirectional Bus E/S.) Esta configuración funcional está considerada para permitir la comunicación con un dispositivo periférico o una estructura en un bus sencillo de 8 bits, para transmitir o recibir datos (bus bidireccional E/S). Las señales de handshaking son dadas para mantener una disciplina en el flujo del bus en una manera similar al modo 1. La generación de interrupciones y funciones de habilitacioddeshabili- tación están disponibles también.

Modo 2. Definiciones funcionales básicas. - Usada en grupo unicamente. - 8 bits en el bus del puerto bidirecional ( puerto A ) y un

- Las salidas y entradas son latched. - El puerto de control de 5 bits es usado para control y estado

puerto de control de 5 bits (puerto C).

control y estado de el bus de el puerto bidireccional (puerto A).

Page 95: Interfaz Ieee 488 Para Pc

Aphiica A

Definiciones de señales de control en el bus b i d i d o n a l E/S.

INTR (Interrupt Request). Un "alto" en esta salida puede ser usado para interrumpir al CPU para operaciones de entrada y salida.

Operaciones de salida.

OBF'. (Output W e r Full.) La salida OBF "baja" para indicar que el CPU ha escrito un dato en el puerto A.

ACK' (Acknowledge). Un "bajo" en esta entrada habilita al b@er de salida a tres estados del puerto A para transmitir hacia afuera los datos. De otra forma, el b@er de salida se puede poner en alta impedancia.

INTE 1 ( Flip-flop asociado con OBF ). Controlado por el bit setheset de PC6.

Operaciones de entrada

STB' (Strobe Input) STB (Strobe Input). Un "bajo" en esta entrada carga los datos dentro del latch de entrada.

IBF (Input B@er Full F/F). Un "alto" en esta salida indica que los datos han sido cargados dentro del latch de entrada.

INTE 2 ( Flip-flop asociado con IBF). Controlado por bit setheset de PC4.

Page 96: Interfaz Ieee 488 Para Pc

APÉNDICE B

CONTROLADOR DE INTERRUPCIONES (8259A)

El controlador de interrupciones programable (PIC) provee un servicio de soporte vital para el procesador central (8088/8086). A diferencia de las interrupciones generadas por soMare, las interrupciones de hardware son causadas por señales generadas por diferentes piezas (teclado, manejador de disco, timer, etc.) dentro de la computadora. Puesto que el 8088/8086 tiene únicamente una línea para recibir señales de interrupción se presenta un problema cuando múltiples dispositivos necesitan estar conectados al 8088/8086. El problema es resuelto a través del 8259A el cual es empleado para manejar varias fuentes de interrupción y poder presentar una simple y controlable señal al procesador central.

El 8259A puede aceptar un máximo de 8 señales de interrupción independientes, numeradas de O hasta 7. Para cada interrupción el 825914 presenta una única interrupción al CPU, además de un único código de tipo de interrupción (interrupt type code) para cada una de las 8 fuentes de interrupción. Esto permite asignar una Única rutina de interrupción para cada una de las 8 interrupciones diferentes. Las 8 señales de entrada del 8259A se encuentran alambradas hacia el bus de control para que cualquier dispositivo dentro del sistema del bus pueda acceder al mecanismo de interrupciones. En el bus de control las señales son llamadas IRQO hasta IRQ7 (fig. B.l).

Page 97: Interfaz Ieee 488 Para Pc

Apéadice B contfoldor de interrupciones

Figura B.1. Hardwnre de Intemupción.

w Porque cada señal es independiente, se debe prevenir la posibilidad de que dos o más señales ocurran al mismo tiempo. El 8259A maneja tales eventos reteniendo la interrupción o interrupciones secundarias mientras el procesador proporciona servicio a la primera. Cuando la interrupción ha sido servida, la próxima es atendida. Para eventos que ocurren en el mismo instante el procesador atiende a la interrupción según un orden de prioridad, donde la interrupción O tiene la más alta prioridad y la interrupción 7 la más baja.

El 8259A es configurado con los códigos de tipo de interrupciones OSH- O F H que corresponden a las interrupciones 0-7 respectivamente. La colocación para los dispositivos estándares es listada en la tabla B.1. Nótese que las dos interrupciones de más alta prioridad, IRQO y IRQ1, están alambradas directamente a la tarjeta del sistema. Las interrupciones restantes son obtenidas a partir de tarjetas que se encuentran en las ranuras de expansión.

Page 98: Interfaz Ieee 488 Para Pc

OSH

09H

O A H

OBH

OCH

ODH OEH

OFH

~

TABLA B.l Asignación de beas de iniempción.

La programación del 8259A consiste de dos acciones básicas. Primero, para cada interrupción independiente se debe habilitar o deshabilitar su valor dentro del registro de interrupciones enmascarable (IMR: interrupt mask register). El IMR es un registro de 1 byte dentro del 8259A que puede ser accesado via el puerto 21H. Cada bit en el IMR corresponde a una interrupción (bit O-IRQO, bit 1-IRQ1, etc.). Si un bit en el IMR es O, entonces la interrupción correspondiente está habilitada. Si el bit es 1, una señal de interrupción no puede ser generada ya que la interrupción está deshabilitada. El estado de la bandera de interrupción (interrupt flag) dentro del 8088 determina cuándo una señal de interrupción es recibida.

La segunda acción de programación corresponde a la señalización del fm de la rutina de interrupción. Esta es llevada a cabo transmitiendo el comando "end of interrupt" (EOI) representado por 20H hacia el registro de comandos de interrupción dentro del 8259A, éste registro es accesado via el puerto 20H.

Page 99: Interfaz Ieee 488 Para Pc

Apcadice B

F'igum B.2. control del meamhmo de interrupciones.

B4

Page 100: Interfaz Ieee 488 Para Pc

A P ~ D I C E c

lMANuAL DE USO

Este apéndice describe la forma en que el sistema GPIB es integrado y configurado dentro de la PC, asi como tambien una breve descripción de las funciones con las que se maneja el sistema.

Conectando el sistema a la PC

La conexión del sistema se lleva a cabo insertando la tarjeta dentro de alguna de las ranuras (slots) disponibles de la tarjeta principal (main-board) de la PC.

El sistema tiene la capacidad de colocarse en cualquier dirección del espacio de direccionamiento de E/S (puertos), sin embargo, parte de este espacio esta ocupado por otros dispositivos, por lo que se debe tener precaución de no utilizar la direccion ocupada por otro dispositivo. Se recomienda utilizar la dirección dentro del intervalo 300H - 31FH, ya que este espacio esta reservado para el uso de tarjetas prototipo y generalmente se encuentra libre.

La configuración de la dirección se efectua a través del conjunto de interruptores que se encuentran en la tarjeta. En la siguiente figura se muestra la forma en que los interruptores configuran al sistema para trabajar en el espacio de direcciones 31FH- 318H.

c1

Page 101: Interfaz Ieee 488 Para Pc

fp C.1 ConfiguraCión para direccionamiento (31FH-318H).

El primer interruptor debe siempre permanecer encendido (OM, ya que este maneja la líbea de control AEN (Address Enable), que permite distinguir entre un ciclo de bus de E/S y un ciclo de acceso directo a memoria @MA). Con los interruptores restantes se manejan las líneas del bus de direcciones A9 - A3, estas fijan una base de direccionamiento (en la figura, 31FH), de acuerdo a la cual, tenemos un espacio de 8 direcciones para el manejo del sistema.

El sistema, tanto en hardware como en software, se encuentra configurado para trabajar en el espacio de direcciones 318H-31FH, por lo que si se desea configurar hacia otra dirección, es necesario, además del direccionamiento de los interruptores, modificar las direcciones E/S de puertos, dentro del código de programación del sistema.

Uso del sistema

De acuerdo al dispositivo al que se conecte el sistema, el usuario debe contar con un programa de aplicación específico para este.

Existen dos formas para utilizar la interfaz:

1) a traves de un manejador de dispositivos (Device Driver) 6 2) por medio de procedimientos en lenguaje de alto nivel.

La ventaja de usar un manejador de dispositivos es la de poder trabajar con el sistema a traves de llamados estandar a funciones del sistema operativo. En este caso se dice que el sistema es transparente al MS-DOS.

c2

Page 102: Interfaz Ieee 488 Para Pc

Apendice C Manual de Uso

La segunda forma de trabajo para programación del sistema consiste en el uso de funciones o procedimientos programados en un lenguaje de alto nivel. Aqul existe una mayor facilidad de programación, dada la facilidad de modificación del código.

'

En las dos formas de trabajo se proveen funciones básicas para el sistema. El usuario puede adicionar funciones mas complejas, de acuerdo a su aplicación.

Una vez integrada la targeta a la PC, el sistema puede ser conectado a cualquier dispositivo que maneje el estantar GPIB.