El bit 4 del puerto de control se denomina IRQEN. Este bit habilita o permite que se produzca la interrupción asociada a la entrada ACK#. Cuando este bit está a 1 y la señal ACK# pasa del nivel lógico 1 al nivel 0 se produce una petición de interrupción, que es la IRQ7.
En el diseño original del PC, IBM reservó 8 interrupciones hardware, comenzando por la interrupción 08h, para expansión de interrupciones, que son comúnmente conocidas como IRQ0 a IRQ7. Así la IRQ0 se corresponde con la interrupción 08h, la IRQ1 con la 09h, etc. La IRQ7 se corresponde pues con la 0Fh, estando sus vectores a partir de la dirección 0000:003Ch. Para que una petición de una IRQ llegue a la CPU, esta debe de estar permitida, no enmascarada. El puerto 021h está asociado con la máscara de interrupciones de las IRQ. Para habilitar una determinada interrupción se deberá escribir un cero en la posición correspondiente, sin modificar el resto. Así, si lo que se quiere es permitir la IRQ7 habrá que poner a cero el bit más significativo del puerto 021h, como muestra el código siguiente:
In al,021h ; lee la máscara de las IRQ
and al, 01111111b ; impone un 0 en el bit más significativo, IRQ7. No modifica el resto
out 021h, al ; escribe la máscara
out 021h, al ; escribe la máscara
Con estas operaciones quedará habilitada la IRQ7. Una vez atendida de la forma que se haya previsto, el programa debe indicar a la CPU que la interrupción ya ha sido procesada, para ello debe escribir un 1 en el bit 5 del puerto 020h, es decir:
mov al, 020h ; carga en al 0010 0000 b
out 020h, al ; lo escribe en al puerto 020h
Finalmente, tan sólo queda por activar el bit que permite que la señal ACK# genere una petición de IRQ7. Para ello se deberá poner a 1 el bit 4 del puerto de control , sin modificar el resto. Cuando no se quiera que se produzca una IRQ7, basta con poner a cero este bit. Al finalizar el programa, no sólo se deben restablecer los vectores de interrupción modificados, sino que también se debe inhibir la IRQ7, dejando la máscara del puerto 021h como estaba. Un programa que utilice la interrupción del puerto paralelo puede tener esta estructura, en lo que se refiere al manejo de dicha interrupción.
No hay comentarios:
Publicar un comentario