ETC2 . Analizador Lógico y Generador de Patrones. Descripción del driver de la segunda práctica

 

Introducción

El driver se maneja a través de dos mecanismos. Uno es desde la aplicación de usuario, mediante la interrupción 61h y el otro mecanismo es a través de una interrupción hardware periódica. Para comunicarse con este servicio se utilizan los registros de la CPU.

Al ejecutar int 61h, en el registro AH deberá estar el grupo de la función (servicio), en AL estará 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.

La instalación del driver produce los siguientes 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

Número fijo

CL

S

X

Número del grupo de práctica (1,2,3)

DL

S

X

Letra del grupo A 1, B 2, C 3.

DH

S

X

Número de pareja

 

Servicio AH=2, Definir parámetros del driver

     > AL= 1 Dar parámetros del reloj

     Parámetros de entrada

        BL= Unidad de medida 0= microsegundos

                                                1= milisegundos

                                                cualquier otro valor = error    

       CX= Periodo del reloj,

           FFFF – Reloj externo

           0    - Máxima velocidad (pooling)

           otro – periodo entre las muestras según BL

       DX = desplazamiento de la primera muestra (hacia el pasado) antes de la condición de disparo. Tendrá un valor fijo e igual a 10.

      > 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 en 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)      (Opcional)

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

       SI – número de muestras de la duración de la señal de START. ( 0 – ignorar) (Opcional)

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

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

     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)     (Opcional)

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

 

AH=3 : Hacer lectura de datos Start/Stop

     > AL=0 STOP, parar el proceso que esté en marcha.

     > AL=1 arrancar el proceso de captura.

(Ver el apartado de abajo).

     > AL=3  Arrancar el proceso de captura y generador de muestras

     Parámetros de entrada:

     > DS:SI – buffer del generador.

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=1 : Get driver status:

     Parámetros 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  (ver párrafo anterior)

     > AL=1 timing

     Parámetros de salida (además de AL):

     | BL=  unidad del reloj (0= microsegundos, 1= milisegundos).

     | CX=  periodo del reloj, respecto de BL

     > AL=2 condiciones de start/stop

     Parámetros de salida (además de AL):

     | 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 (además de AL):

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

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