główna
technologie
indeks tematyczny
indeks alfabetyczny

Kontroler przerwań 8259A.

Kontroler 8259A ma osiem linii wejściowych, które przyjmują sygnały zgłoszeń. Układy 8259A mogą być łączone w kaskady, powielając tym samym liczbę dostępnych wejść. Istnieje również (nie wykorzystywana w architekturze PC) możliwość sterowania zewnętrznym buforem pośredniczącym między układem, a silnie obciążonymi magistralami systemowymi.

Rysunek przedstawia schemat wyprowadzeń tego układu.

Wyprowadzenia układu 8259A:


Cykl przyjęcia zgłoszenia.

Układ 8259A dysponuje trzema 8-bitowymi rejestrami: IMR, IRR i ISR. Pozycja bitowa n każdego z nich odpowiada jednemu z wejść IRn.

Schematycznie przedstawia to poniższy rysunek:

Urządzenie połączone z wejściem o numerze n zgłasza przerwanie wymuszając wysoki poziom logiczny na linii IRn. Ustawiając bit n w rejestrze IMR można spowodować ignorowanie wszelkich przerwań nadchodzących tą linią

Jeżeli wspomniany bit jest wyzerowany, informacja o przerwaniu przekazywana jest dalej i powoduje ustawienie bitu n w rejestrze IRR. Priorytet zgłoszeń na wejściach IRO-IR7 nie jest jednakowy i maleje ze wzrostem numeru wejścia. Ponieważ jednocześnie mogą nadchodzić zgłoszenia z wielu linii, układ oceny priorytetu wybiera jednorazowo tylko jeden z nich - ten o najwyższym priorytecie. Jednocześnie aktywowany jest sygnał INT, informujący procesor o konieczności obsługi przerwania. Jeżeli obsługa przerwań nie jest programowo zablokowana, ten ostatni reaguje sygnałem potwierdzenia na wyjściu ~INTA, które jest połączone z wejściem ~INTA układu 8259A. Wybrany przez układ oceny priorytetu bit rejestru IRR przekazywany jest teraz do rejestru ISR. Oznacza to, że w tym momencie obsługiwane jest przerwanie z linii o numerze odpowiadającym ustawionej pozycji bitowej rejestru ISR.

Procesor wysyła teraz drugi impuls ~INTA. Kontroler przerwań odpowiada na niego wystawieniem na szynę danych D7-DO wektora przerwań o następującej budowie:

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

Procesor traktuje ten bajt jako numer procedury obsługi przerwania, do wykonania której teraz przejdzie.

Jeżeli kontroler pracuje w tzw. trybie automatycznym, w momencie przejścia do wykonywania procedury obsługi przerwania zerowany jest odpowiedni bit rejestru ISR. W przeciwnym wypadku (tryb E01) wyzerowania tego bitu dokonuje sama procedura obsługi przerwania wysyłając rozkaz EOI do kontrolera. Tryb pracy kontrolera (AEOI/EOI) określany jest w fazie programowania.

Niezależnie od trybu pracy, moment wyzerowania bitu rejestru ISR odpowiadającego aktualnie obsługiwanemu kanałowi oznacza gotowość kontrolera do przyjęcia następnego zgłoszenia. Należy tu jeszcze raz podkreślić, że zgłoszenia nie są obsługiwane w miarę nadchodzenia, istotny natomiast jest ich priorytet. Oznacza to, że przy pełnej kolejce oczekujących na liniach IR1-7 zgłoszeń (bity 7-1 rejestru IRR ustawione) zarejestrowanie zgłoszenia na linii IRO spowoduje zrealizowanie go w pierwszej kolejności, tj. po zakończeniu aktualnie wykonywanego cyklu obsługi.


Programowanie kontrolera przerwań.

Tryb pracy układu 8259A ustalany jest programowo. Układ otrzymuje w fazie programowania 2-4 bajty konfiguracyjne ICWI-ICW4 (Initialization Command Word), które decydują o późniejszym zachowaniu systemu obsługi przerwań. Programując układy 8259A, procesor komunikuje się z nimi przez następujące porty.

Model AT


Adres portuDostępne daneTryb dostępu
020h dla linii
IRQ0-IRQ7
IRR, ISR, wektor przerwań
ICW1, OCW2, OCW3
do odczytu
do zapisu
0A0h dla linii
IRQ8-IRQ15
IRR, ISR, wektor przerwań
ICW1, OCW2, OCW3
do odczytu
do zapisu
021h dla linii
IRQ0-IRQ7
IMR
ICW2, OCW3, OCW4, ICW1
do odczytu
do zapisu
0A1h dla linii
IRQ8-IRQ15
IMR
OCW2, OCW3, ICW4, ICW1
do odczytu
do zapisu

Inicjowanie pracy układu.

Procesor przekazuje przez port 020h Master lub 0A0h Slave pierwszy bajt inicjujący ICW1.

Bajt ICW1:

0 0 0 1 bit 3 0 bit 1 bit 0

Procesor przekazuje przez port 021h Master lub 0A1h Slave drugi bajt inicjujący ICW2.

Bajt ICW2:

bit 7 bit 6 bit 5 bit 4 bit 3 0 0 0

Jeżeli w systemie obecne są dwa układy 8259A (decyduje o tym bit 1 bajtu ICW1), procesor wysyła trzeci bajt inicjujący ICW3. Budowa tego bajtu jest różna dla układu Master i Slave.

Bajt ICW3 (Master):

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

Bajt ICW3 (Slave):

0 0 0 0 0 bit 2 bit 1 bit 0

Kontroler oczekuje teraz bajtu ICW4, jeżeli zostało to zaanonsowane w bajcie ICW1 (bit 0).

Bajt ICW4:

0 0 0 bit 4 bit 3 bit 2 bit 1 bit 0

Opisane powyżej polecenia zawarte w bajtach ICW1 - ICW4 zapewniają konfigurowanie układu jeszcze przed rozpoczęciem obsługi zgłoszeń.

Istnieją też rozkazy, które można przekazywać kontrolerowi podczas jego pracy modyfikując tym samym dynamicznie system obsługi przerwań stosownie do bieżących potrzeb. Układ 8259A rozpoznaje trzy rozkazy OCW1 - OCW3 (Operation Confrol Word).

Rozkaz OCW1 podawany jest przez port 021h dla układu Master lub 0A1h dla układu Slave:

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

Rozkaz OCW2 podawany jest przez port 020h dla układu Master lub 0A0h dla układu Slave:

bit 7 bit 6 bit 5 0 0 bit 2 bit 1 bit 0

Rozkaz OCW3 podawany jest przez port 020h układu Master lub 0A0h układu Slave:

0 bit 6 bit 5 0 1 bit 2 bit 1 bit 0

Wyjaśnienia wymaga pojęcie maski specjalnej. 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 sama 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 E0I, 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.


Polling.

Istnieje też inna forma przekazywania informacji pomiędzy kontrolerem przerwań, a procesorem. Jest to tzw. polling. Końcówka ~INTA układu 8259A nie może być wtedy połączona z wyjściem ~INTA procesora (dokładniej, kontrolera magistrali 8288), można więc to wejście wykorzystać inaczej. Wysłanie przez procesor rozkazu OCW3 z ustawionym bitem 2 oznacza skierowanie zapytania do kontrolera (polling). Układ 8259A odpowiada wystawieniem do tego samego portu, z którego otrzymał rozkaz OCW3, bajtu danych o następującej strukturze:

bit 7 x x x x bit 2 bit 1 bit 0

Przygotował: Adam Wojaczek


główna | technologie | indeks tematyczny | indeks alfabetyczny