następny punkt »


1. Wstęp

Urządzenia zewnętrzne o niewielkiej szybkości działania mogą spowalniać pracę systemu mikroprocesorowego. Ma to miejsce szczególnie wtedy gdy tych urządzeń jest dużo. Mikroprocesor musi stale sprawdzać ile urządzeń zgłosiło sygnał przerwania, a jeśli więcej niż jedno, to musi rozstrzygnąć, które z nich należy obsłużyć jako pierwsze i ustalić dalszą kolejność obsługi. Można wyróżnić dwa sposoby obsługi zgłoszonych przerwań: programowe i sprzętowe. Przerwanie programowe polega na tym, że po pojawieniu się jakiegokolwiek sygnału przerwania mikroprocesor wstrzymuje wykonywanie programu i wywołuje podprogram, którego zadaniem jest przeglądanie stanów sterowników. Mikroprocesor odczytuje tzw. rejestr stanu, w którym sterownik przechowuje informacje o zadaniach, które aktualnie wykonuje. Po stwierdzeniu, które sterowniki zgłosiły przerwanie, mikroprocesor wykonuje program ustawienia kolejności obsługi tych przerwań (wcześniej zadany przez projektanta systemu). W niektórych systemach taki sposób obsługi przerwań może być zbyt powolny, zwłaszcza gdy w systemie pracuje wiele urządzeń. Wtedy lepiej wykorzystywać sprzętowe rozwiązanie czyli zaprojektować układ, który będzie przyjmował zgłaszane sygnały przerwań i rozstrzygał o kolejności ich obsługi. W tym wykładzie pokazane zostaną dwa sprzętowe systemy przerwań: pierwszy bez możliwości programowania i drugi, w którym można zmieniać sposób pracy, nawet dynamicznie podczas wykonywania programu.

W systemach mikroprocesorowych można wyróżnić sterowniki dołączane do magistrali systemowej i sterowniki scalone razem z procesorem (mikrokontrolery). Dlatego w mikrokontrolerach rozróżnia się przerwania zewnętrzne i przerwania wewnętrzne, zgłaszane przez bloki umieszczone razem z procesorem w jednym układzie scalonym. Przerwania wewnętrzne mogą być zgłaszane także przez wykonywany program. Przykładem przerwań zgłaszanych przez program może być próba dzielenia przez 0 lub wykrycie nieistniejącego kodu operacyjnego.

Niekiedy w systemach mikroprocesorowych istnieje konieczność ciągłego wykonywania programu, tj. nie dopuszczenia do jego przerywania. Dlatego projektanci mikroprocesorów stworzyli możliwość blokady systemu przerwań. Mikroprocesory wyposaża się w dwa rozkazy: DI i EI. Pierwszy z nich dezaktywuje system przerwań, a drugi go aktywuje. Przerwania, które można blokować są nazwane przerwaniami maskowalnymi. Mikroprocesory wyposaża się także w dodatkowe wejście przerwań nazywane przerwaniem niemaskowalnym NMI. Rozkazy DI i EI nie dotyczą tego wejścia. Przerwanie niemaskowalne powstaje na przykład w czasie zaniku napięcia na wyjściu zasilacza systemu. Jest to przypadek gdy wykonywany program nie będzie mógł być zakończony i dlatego przerwanie generowane przez zasilacz musi zostać bezwzględnie obsłużone.

Sygnał przerwania może zostać zgłoszony przez sterownik urządzenia zewnętrznego w dowolnym momencie. W drugim takcie każdego cyklu maszynowego mikroprocesor sprawdza stany na wejściach układu sterującego (por. wykład XIII). Po wykryciu aktywnego sygnału przerwania mikroprocesor musi dokończyć wykonywanie aktualnego rozkazu. Dlatego mikroprocesor wykona wszystkie cykle maszynowe danego cyklu rozkazowego i dopiero po jego zakończeniu rozpocznie się proces przyjęcia przerwania. Zamiast wykonać cykl maszynowy pobrania następnego rozkazu, mikroprocesor wykonuje cykl maszynowy potwierdzenia przyjęcia przerwania INTA (por. wykład XIII). Mikroprocesor musi powiadomić sterowniki o przyjęciu przerwania, musi rozpoznać wszystkie zgłoszone przerwania, ustalić kolejność ich obsługi na podstawie nadanych wcześniej priorytetów (problem ten zostanie objaśniony dalej) oraz wysłać na szynę adresową adres początkowy podprogramu obsługi przerwania o najwyższym priorytecie. Na początku podprogramu obsługi przerwania mikroprocesor zapamiętuje swój kontekst (zawartości rejestrów), aby po zakończeniu obsługi przerwania powrócić do tego samego stanu i kontynuować przerwany program. Zasadniczą częścią podprogramu obsługi przerwania jest rozkaz odczytu lub zapisu urządzenia zewnętrznego rozkazem IN lub OUT. Na końcu podprogramu obsługi przerwania następuje przywrócenie kontekstu mikroprocesora czyli przywrócenie zapamiętanych wcześniej zawartości rejestrów.

Współpraca procesora z urządzeniami zewnętrznymi za pomocą przerwań dotyczą najczęściej wolnych urządzeń znakowych, tj. takich które wysyłają lub odczytują pojedyncze znaki (bajty). Ponieważ istnieją urządzenia, które muszą przetransmitować, w sposób ciągły, długie ciągi bajtów (pamięci dyskowe), to opisany wyżej sposób jest niemożliwy do realizacji. Aby lepiej zrozumieć ten problem załóżmy, że mikroprocesor jest taktowany zegarem o częstotliwości 1MHz. Założenie to pozwoli uprościć obliczenia ponieważ jeden okres zegara trwa wtedy 1ms. Załóżmy także, że cykl maszynowy trwa 4 takty zegarowe i że średnia liczba cykli maszynowych w cyklu rozkazowym wynosi 2.5. Stąd wynika, że cykl maszynowy trwa 4ms i że średni czas trwania jednego rozkazu to 10ms. Przy takich założeniach przerwania mogą być obsługiwane nie częściej niż co 10ms. Jeśli jednak w takim systemie pracuje urządzenie zewnętrzne, które musi transmitować dane (bajty) z szybkością większą, to mikroprocesor nie będzie w stanie odbierać tych danych. Jedynym miejscem do wpisywania tych danych może być pamięć operacyjna. Ale zapis do pamięci, pod kontrolą programu, trwa co najmniej tyle ile czas trwania jednego rozkazu. Przepisywanie danych z pamięci dyskowej do pamięci operacyjnej nie może odbywać się pod kontrolą programu i musi odbywać się inaczej. W takich przypadkach stosuje się rozwiązanie znane pod nazwą bezpośredni dostęp do pamięci DMA. W tym wykładzie, w ostatniej części, pokazany zostanie sposób komunikacji szybkich urządzeń zewnętrznych metodą bezpośredniego dostępu do pamięci.


 następny punkt »