132 Anatomia PC
11 = rozkaz odczytu rejestru 1SK; kontroler wystawia do portu 020h (Master) lub OAOh (Slave) zawartość rejestru ISR, pozostałe kombinacje bitów 1-0 są ignorowane.
Uwaga:
Dostęp do rejestru IMR odbywa się poprzez port 02lh (dla układu Master) lub OAlh (Slave):
in al, 021h ; rejestr IMR (Ma3ter) w akumulatorze ir. al# Oalh ; rejesLr IMR (Slave) w akumulatorze
Można też zamaskować dowolny z kanałów, np. kanał 0 (co powoduje zatrzymanie procesu odmierzania czasu systemowego). Oto prosty przykład w języku Turbo C:
tfinciude <dos.h> tfinclude <conio.h>
void zegar(void);
void main(void)
I
clrscr(); zegar();
outp(0x21/0x01); /* zamaskowany kanał 0 zatrzymaj zegar */ zegar();
outp(0x21,0x00); /* uruchom zegar */
•/.ega r () ;
}
void zegar(void)
/* pokazuje czas i czeka na naciśnięcie klawisza */ t
struct timo czas; while(!kbhit())
{
gottime(Łczas); gotoxy(10,10);
printf("%02i:%02i:%02i", czas.tihour,czas.ti min,czas.ti sec) ;
I
getch(); /* opróżnij bufor klawiatury */
)
Wyjaśnienia wymaga pojęcie maski specjalnej. Jak wiemy, bit rejestru ISR aktualnie obsługiwanego kanału jest po przekazaniu CPU wektora przerwań zerowany automatycznie tylko w trybie AEOI. W trybie EOI ten sam bit może być wyzerowany dopiero przez samą procedurę obsługi przerwania, nie jest jednak wcale określone, kiedy to nastąpi. W przedziale czasowym, w którym układ kontrolera przerwań oczekuje na jawny rozkaz EOI, mogą być obsługiwane tylko zgłoszenia o priorytecie wyższym od aktualnie obsługiwanego. Zgłoszenia na liniach o niższym priorytecie są ignorowane.
Maska specjalna powoduje interpretację zawartości rejestru IMR w specyficzny sposób: ustawiony na pozycji n bit tego rejestru blokuje wprawdzie wszelkie zgłoszenia na linii n, ale jednocześnie oznacza, że wszystkie zgłoszenia na liniach o priorytecie wyższym i niższym od n będą mogły być obsługiwane w określonym powyżej przedziale czasu.