Descripción del driver del Analizador Lógico y Generador de Patrones para PC

 

El emulador se maneja a través de la interrupción 61h. Para comunicarse con este servicio se utilizan los registros de la CPU.

Al ejecutar int 61h, en el registro AH está el grupo de la función (servicio), en AL está el detalle (subservicio) de la función y en los demás registros los parámetros de entrada.

Al volver de la int 61h el servicio cambia los registros, también llamados parámetros de salida.

Cada uno de los servicios se describe con sus parámetros de entrada, parámetros de salida y efectos colaterales. No se permite el cambio de los registros no mencionados como salida.

 

Instalar el driver:

Efectos colaterales

1. LPT1 se pone en modo de entrada.

2. Captura del vector 61h y los vectores necesarios para manejar el tiempo.

3. El programa se queda residente (TSR).

 

Servicios de la int 61h. General

Como norma general, si no se dice otra cosa, al volver del servicio en AH está el estatus del resultado:

Registro

Entrada /salida

Valor

Descripción

AH

S

0

Operación completada con éxito

AH

S

0Feh

Error de rango de algún parámetro.

AH

S

0FDh

función no implementada

AH

S

0FCh

Función no funcional por razones de limitaciones del hardware.

 

Servicio AH=0Feh

Parar y desinstalar el driver.

Efecto colateral:

Al terminar correctamente el programa para. No vuelve nunca.

 

Servicio AH=0 : Chequear el driver

Registro

Entrada /salida

Valor

Descripción

AH

E

0

Comprobación del driver

AX

S

55Abh

Numero fijo

CL

S

X

Numero del grupo de practica (1,2,3)

DL

S

X

Letra del grupo a, b ó c (1 para a, 2 para b y 3 para c).

DH

S

X

Número de pareja

 

Servicio AH=2, Definir parámetros del driver

 

AH=2 : Driver

     > AL= 0 Dar parámetros del reloj en microsegundos

                  (a definir)

     > AL= 1 Dar parámetros del reloj en milisegundos

     Parámetros de entrada

       CX= Periodo del reloj,

           FFFF – Reloj externo,                       *

           0    - Máxima velocidad (poling)            *

           otro – periodo entre las muestras en milisegundos

       DI = desplazamiento de la primera muestra (hacia el pasado) a partir de la condición de disparo.

           Si no esta implementado con DI!=0 da error.        *

           DI < 1/4 BUFFER SIZE

       SI = muestras a tomar después de la condición de disparo

           Si no esta implementado con SI!=0 da error.        *

           SI < 1/4 BUFFER SIZE

 

      > AL=2 Condición de arranque (START).

     Parámetros de entrada:

        a cada canal corresponde un bit en CL, BH, BL. Para cada canal la  condición se define de la siguiente manera:

       CL,BH,BL – condición de START.

          bit in CL, BH, BL

            0   0   0   IGNORAR Se ignora el bit al evaluar la condición

            1   0   1   Nivel ALTO

            1   0   0   Nivel BAJO

            1   1   0   Flanco de Bajada (1->0)      *

            1   1   1   Flanco de Subida   (0->1)      *

       SI – tiempo mínimo de la duración de la señal de START. ( 0 - ignore)  *

            Los señales por flanco se ignoran después del primer flanco.

 

     > AL=3 condición de parada (STOP)

     Parámetros de entrada:

       CL,BH,BL - condiciones.  Condición de parada de la lectura de datos.

       El significado es como en el servicio anterior.

                  bit in CL, BH, BL

                         0   0   0   IGNORAR

                         1   0   1   Nivel ALTO

                         1   0   0   Nivel BAJO

                         1   1   0   Flanco de Bajada (1->0)      *

                         1   1   1   Flanco de Subida   (0->1)      *

 

AH=3 : Hacer lectura de datos Start/Stop

     > AL=0 STOP, parar el proceso.

     > AL=1 arrancar el proceso.

(Ver el apartado de abajo).

     > AL=2  Parar el generador de muestras

     > AL=3  Arrancar el generador de muestras

     Parámetros de entrada:

     > DS:SI – buffer del generador.

       Entradas en el buffer:

       { número_repeticiones(DW) longuitud(DW) forma de la salida(DB) }

          número_repeticiones FFFF – hasta el infinito.

 

AH=4 : Control del Buffer

     > AL=1 limpiar el buffer y el estado del driver.

     > AL=2 Poner en modo cíclico (graba siempre los últimos)   *

     > AL=3 Poner en modo linear (graba siempre los primeros)

 

AH=5 : Lectura del buffer

     Parámetros de entrada:

     > ES:DI – espacio del programa del usuario (buffer) con longitud mínima de CX reservada para los datos.

     > CX    - número máximo de muestras para devolver.

     Parámetros de salida:

     | CX    - número real de muestras devueltas

     | DX    - Número de muestras todavía en el buffer del driver.

     | AL    - 0 ok.

                  1 buffer overrun

     Efectos colaterales:

     Se libera tanto espacio en el buffer del driver como datos se han leído.

AH=6 : Get set buffer.

  Parámetros de entrada:

     > ES:DI – espacio del programa del usuario (buffer) con longitud mínima de CX reservada para los datos.

     > CX    - número máximo de muestras para devolver.

     Parámetros de salida:

     | CX    - número real de muestras devueltas

     | DX    - Número de muestras todavía en el buffer del driver.

     | AL    - 0 ok.

               1 buffer overrun

     Efectos colaterales:

     1. Se libera tanto espacio en el buffer del driver como datos se han leído.

     2. Por cada grabación se emite la señal correspondiente del buffer del generador de muestras.

AH=1 : Get driver status:

     Parámetro de salida para todos los servicios de petición de status:

     AL – estado funcional del driver

     | AL=0 – Parado. Antes de arrancar.  

     | AL=1 – en espera de la condición de arranque (START)

     | AL=2 – lee datos de la interfaz

     | AL=3 – Parada normal, por encontrar la condición de STOP.

     | AL=4 – Parada por rellenar el buffer.

     | AL=5 – Parada por petición del usuario (AH=3, AL=0).

 

     > AL=0

     Parámetros de salida:

      Solo el estatus en AL

     > AL=1 timing

     Parámetros de salida:

     | CX=  el periodo del reloj en ms.

     | DX=  Desplazamiento de la primera muestra en el buffer.

     > AL=2 condiciones de start/stop

     Parámetros de salida:

     | CL,BH,BL = como en el servicio START

     | CH,DH,DL = como en el servicio STOP

     > AL=3 Estado del buffer del driver

     Parámetros de salida:

     | CX   - número de muestras en el buffer.

     | DX   - capacidad del buffer (número muestras posibles).


 

Funcionamiento al ejecutar el servicio START.

 

0.       Espera la condición de START, grabando los datos. Los datos no son accesibles para el usuario.

1.       Al encontrar la condición de START comprueba por lo menos si esta dura mas del tiempo mínimo requerido. Los datos en el buffer hay que guardarles pos lo menos el tiempo de pre-fetch.

2.       Si la condición de START esta encontrada, la grabación de la señal se hace con la expiración de cada periodo de muestreo, y termina al rellenar el buffer o al encontrar la condición de STOP.

3.       Al encontrar la condición de STOP, al rellenar el buffer o al recibir comando explicito de parar el proceso la adquisición de datos para.