osdev.labedz.org

Procedury inicjujące urządzenia zewnętrzne

Inicjowanie kontrolera przerwań

Pierwszym inicjowanym urządzeniem jest układ programowalnego kontrolera przerwań PIC i8259. Jego konfiguracją zajmuje się procedura setup_PIC, której parametrami są początki zakresów identyfikatorów przerwań dla układu nadrzędnego i podrzędnego. Procedura ta najpierw wysyła słowo konfigurujące ICW1 dostosowując kontrolery do pracy z komputerem zgodnym z IBM-PC/AT - ustawiając je w tryb pracy kaskadowej, z wektorami o rozmiarze 4 bajtów, wyzwalane zboczem, oraz z użyciem słowa ICW4. Dla takiej konfiguracji ICW1 ma wartość 0x11. Następnie wysyłane są bajty przydziału identyfikatorów (argumenty procedury w słowie ICW2), oraz przydział przerwania dla połączenie kaskadowego. Słowo ICW4 ustawia kontrolery w tryb pracy sekwencyjny, bez buforowania, z procesorem z rodziny i80x86, oraz potwierdzeniem o zakończeniu obsługi przerwania (standardowe EOI) - ICW4=0x1. Na koniec maskowane są wszystkie przerwania zewnętrzne. Maska ta będzie zdjęta po zakończeniu inicjacji wszystkich niezbędnych układów zewnętrznych.

Inicjowanie układu zegara

Ustawieniem parametrów pracy układu zegara zajmuje się procedura setup_8253, której parametrem jest stała systemowa określająca częstotliwość pracy zegara systemowego. Procedura ta ustawia układ kanał zerowy układu zegara w tryb 3 pracy, odliczanie według systemu binarnego i z ładowaniem najpierw mniej znaczącego bajtu licznika. Następnie podawana jest wartość jaka ma być dekrementowana podczas każdego cyklu zegarowego. Tak ustawiony układ zegara generuje co 1/FREQ przerwanie zegarowe INT 0x20.

Po zakończeniu procedury inicjacji układu zegara, zostaje zdjęta maska przerwań dla przerwania klawiatury oraz przerwania zegara, a następnie odblokowywane są przerwania procesora (instrukcja procesora sti).