wymien_w_punktach_zasadnicze_koncepcje_systemu_przerwan_w_procesorach_cyfrowych

# PRZERWANIA i SYTUACJE WYJĄTKOWE

## Informacje podstawowe

Mikrokontroler współpracuje z rozmaitymi urządzeniami zewnętrznymi, które w określonych sytuacjach wymagają obsługi ze strony mikrokontrolera. W systemach pracujących w czasie rzeczywistym (ang. real-time) często definiuje się maksymalny dopuszczalny czas oczekiwania urządzenia na obsługę. Zapewnienie odpowiednio szybkiej reakcji mikrokontrolera na żądania obsługi zgłaszane przez urządzenia zewnętrzne wymaga wprowadzenia mechanizmu przerywania programu wykonywanego przez mikrokontroler. Na sygnał przerwania pochodzący z urządzenia zewnętrznego mikrokontroler przerywa aktualnie wykonywany program i przechodzi do procedury obsługi przerwania. Po jej zakończeniu mikrokontroler powinien powrócić do poprzednio realizowanych czynności. Właściwa praca systemu wymaga zatem, by przed przystąpieniem do obsługi przerwania zapamiętać stan mikrokontrolera oraz adres instrukcji, od której należy wznowić program po zakończeniu obsługi przerwania. Oprócz przerwań wywoływanych przez urządzenia zewnętrzne, mikrokontrolery obsługują w podobnym trybie nadzwyczajne sytuacje zaistniałe w wyniku realizacji programu lub wynikłe ze specyficznych warunków pracy bloków funkcjonalnych układu. Generalnie przerwania dzieli się zwykle na cztery kategorie zdarzeń:

1. sytuacje wyjątkowe (ang. exception interrupts),
2. maskowalne przerwania sprzętowe (ang. event interrupts}.
3. przerwania programowe (ang. software interrupts),
4. pułapki (ang. traps).

Do sytuacji wyjątkowych zalicza się zdarzenia o największym znaczeniu dla poprawnego działania systemu, których obsługi nie można odłożyć na później. Jest tak na przykład w przypadku wystąpienia operacji dzielenia przez zero (ang. divide-by-zero ception) lub żądania obsługi przez urządzenie zewnętrzne przyłączone do wejścia przerwań niemaskowalnych NMI (ang. non-maskable interrupt). Zgłoszenia pochodzące ego wejścia nie mogą być zablokowane (zamaskowane) w sposób programowy, stąd też się nazwa przerwań tego typu.

Przerwania maskowalne są generowane przez urządzenia peryferyjne, zarówno wbudowane w scalony układ mikrokontrolera, jak i przyłączone do niego z zewnątrz, mogą być blokowane (maskowane) programowo przez ustawienie specjalnego bitu (bądź bitów) nazywanego maską przerwań. Bit lub bity maski są zwykle umieszczone w rejestrze wskaźników lub w wydzielonym rejestrze specjalnym SFR. Zgłoszenia przerwań tego typu mogą pochodzić na przykład od układu transmisji UART, liczników lub urządzeń zewnętrznych. Większość współczesnych mikrokontrolerów umożliwia nadawanie określonym źródłom przerwań priorytetów, według których ustalana jest kolejność obsługi przerwań.

Przerwania programowe w rozbudowanych mikrokontrolerach również wykorzystują system priorytetowej obsługi. Są wywoływane przez umieszczenie w programie rozkazu przerwania, a więc wynikają z intencji programisty, a nie z nieprzewidywalnych, często losowych zdarzeń zachodzących w otoczeniu mikrokontrolera. W zaawansowanych metodach programowania przerwania programowe są wykorzystywane do manipulowania priorytetem fragmentów kodu programu.

Pułapki, podobnie jak przerwania programowe, są rezultatem umieszczenia w programie odpowiedniego rozkazu, w tym przypadku rozkazu TRAP. Od przerwań programowych różnią się przeznaczeniem. Najczęściej pułapki są używane do śledzenia wykonywania programu w fazie jego testowania. Program nadzorujący śledzenie definiuje wybranych punktach testowanego programu punkty zatrzymań (ang. breakpoints) ustawia w te miejsca rozkazy generowania pułapek. Procedura obsługi przerwania (pułapki) polega w tym przypadku najczęściej na wyprowadzeniu zawartości rejestrów wybranych obszarów pamięci. Pułapki są też przydatne jako wygodny mechanizm wywoływania procedur globalnych, dostępnych w całym programie, oraz do tworzenia oprogramowania, które może pracować w dwóch trybach: systemowym i użytkownika.

Do obsługi przerwań i sytuacji wyjątkowych służy specjalnie wydzielona część ładu sterowania, złożona z układu sterowania wejściami sygnałów przerwań, układu sługi priorytetów, komparatora priorytetów i kilku pomocniczych rejestrów. Uproszczony schemat blokowy kontrolera przerwań pokazano na rysunku 2.19. Założono, że mikrokontroler jest wyposażony w jedno wejście sygnału przerwań niemaskowalnych NMI oraz w n wejść sygnałów przerwań maskowalnych IRQ. Ponadto pokazano kilka łych, typowych sygnałów przerwań sprzętowych pochodzących z układu transmisji szeregowej (UART), z bloku przetwornika analogowo-cyfrowego (A/C) oraz z liczników(T0 i Tl). Układy te są wbudowane do mikrokontrolera, dlatego generowane przez nie mały przerwań nie przechodzą przez układ sterowania wejściami.

Jednostka centralna zarządza obsługą systemu przerwań przy użyciu trzech rejestrów. W rejestrze stanu lub jednym z rejestrów specjalnych SFR znajdują się wydzielone bityy do sterowania maskowaniem i dozwolonym w danym momencie pułapem (poziomem) priorytetu przerwań. Programista ustawiając odpowiednio te bity może dopuścić, by obsługiwane były wszystkie źródła przerwań lub tylko niektóre z nich. Dodatkowo bity maskujące są przesyłane do rejestru sterującego układami wejściowymi. W ten sposób mikrokontroler może eliminować niektóre sygnały przerwań dwoma sposobami: bezwarunkowo - przez maskowanie w układzie wejściowym, warunkowo, przez określanie poziomu priorytetu. Priorytety poszczególnych przerwań są ustalane przez wpis odpowiedniej zawartości do rejestru priorytetów związanego z blokiem obsługi priorytetów. Liczba poziomów priorytetów zależy od typu mikrokontrolera. W prostych układach stosuje się tylko dwa poziomy priorytetów, w bardziej rozbudowanych liczba ta jest większa i wynosi typowo 16.

Komparator przyłączony do wyjścia układu obsługi priorytetów ma dwa zadania. Po pierwsze sprawdza, czy przerwanie o najwyższym priorytecie spośród wszystkich zgłoszonych w danym momencie przerwań ma priorytet przekraczający pułap ustawiony w rejestrze stanu CPU. Jeśli tak jest, komparator podaje sygnał przerwania do CPU i podejmowany jest cykl obsługi przerwania. Jeśli warunek ten nie jest spełniony, układ zgłaszający przerwanie musi czekać na zmianę warunków w CPU. Drugim zadaniem komparatora jest generowanie sygnału potwierdzenia przyjęcia przerwania. Sygnał ten jest wysyłany do urządzenia zewnętrznego i umożliwia mu kontynuację pracy. Zazwyczaj w początkowej fazie wykonywania programu sygnały przerwań są zablokowane, by umożliwić niezakłócony przebieg inicjalizacji systemu. Aktywacja przerwań następuje dopiero po ustawieniu pożądanego trybu pracy mikrokontrolera i urządzeń peryferyjnych, zainicjowaniu zmiennych, wyzerowaniu pamięci itp.

## Informacje dodatkowe

Współpraca jednostki centralnej z urządzeniami zewnętrznymi jest realizowana dwoma podstawowymi sposobami: - przez programowe testowanie stanu urządzeń (polling), - w systemie przerwań obsługiwanych częściowo w sposób sprzętowy, a częściowo przez program. Metoda z przeglądaniem programowym polega na tym, że program okresowo sprawdza zawartość rejestru kontrolno-sterującego związanego z każdym urządzeniem i na podstawie ustawienia odpowiednich bitów określa, czy urządzenie wymaga obsługi, czy też nie. Obsługa priorytetowa jest w tym systemie realizowana przez ustalenie odpowiedniej kolejności testowania urządzeń. Urządzenie o największym priorytecie jest testowane w każdym cyklu sprawdzania jako pierwsze, natomiast urządzenie o najmniejszym priorytecie - jako ostatnie. Wadą takiego rozwiązania jest długi czas oczekiwania zadań na obsługę, ponieważ jednostka centralna musi w każdym cyklu sprawdzić wszystkie urządzenia, nawet jeśli nie wymagają one obsługi. Znacznie bardziej efektywny jest system przerwań obsługiwanych metodą sprzętowo-programową. Jeżeli przerwania mogą pochodzić z wielu różnych źródeł, po otrzymaniu sygnału przerwania jednostka centralna musi ustalić, które urządzenie zgłosiło przerwanie, i uruchomić odpowiednią procedurę obsługi. Można to zrobić różnymi metodami. Najprostsza w realizacji jest metoda przeglądania, działająca tak samo, jak przy obsłudze urządzeń bez przerwań. Teraz jednak wywołanie cyklu przeglądania odbywa się tylko wtedy, gdy przynajmniej jedno urządzenie zgłosiło przerwanie. Jednostka centralna nie musi więc wykonywać jałowych cykli testowania urządzeń, gdy żadne z nich nie wymaga obsługi. Przeglądanie .urządzeń w celu identyfikacji źródła przerwania może się odbywać programowo lub Sprzętowo. Każde z urządzeń jest wyposażone w przerzutnik służący do zapamiętania stanu urządzenia. Żądanie przerwania powoduje ustawienie przerzutnika, natomiast w czasie obsługi przerzutnik jest zerowany. Zawartości przerzutników mogą być odczytywane za pomocą sygnałów ST l, ST2, ... , STn produkowanych przez dodatkowy dekoder adresów. Po ustaleniu urządzenia zgłaszającego przerwanie wykonywana jest odpowiednia transmisja z udziałem głównego dekodera adresów. Zaletą metody programowej identyfikacji źródła przerwania jest prostota struktury sprzętowej potrzebnej do jego realizacji. Oprócz przerzutników stanu, w które na ogół każde urządzenie i tak jest wyposażone, nie jest konieczne stosowanie żadnych dodatkowych elementów. Sumowanie sygnałów przerwań INT l, INT2, ... , INTn pochodzących różnych urządzeń, które w układzie z rysunku wykonano za pomocą bramki sumy logicznej wykonuje się zwykle przez połączenie typu „zwarte lub”. Maksymalny czas Oczekiwania na obsługę jest w tym systemie równy Tlatt =Tirq + nTr gdzie TIRQ oznacza czas potrzebny na zakończenie wykonywania bieżącej instrukcji przez jednostkę centralną oraz zapamiętanie stanu CPU i zawartości licznika programu. Czas tr określa nato-iniiast czas odczytu rejestru stanu urządzenia i testu bitu zgłoszenia przerwania. Jeśli |w systemie zainstalowano dużą liczbę urządzeń, maksymalny czas oczekiwania na ob-|sługę może być długi, co jest główną wadą identyfikacji przez przeglądanie programowe. Wadę tę można wyeliminować przy użyciu sprzętowej metody identyfikacji źródła przerwań z łańcuchowaniem urządzeń (ang. daisy-chain). W metodzie tej potwierdzenie przerwania INTACK (ang. interrupt acknowledge) generowane przez mikrokontroler jest doprowadzane do pierwszego urządzenia w łańcuchu, w sposób przedstawiony na rysunku 4.26. Jeżeli urządzenie to zgłosiło uprzednio przerwanie, to automatycznie generowany jest sygnał STB1, pozwalający na współpracę urządzenia z szyną danych. W przeciwnym przypadku sygnał INTACK jest przesyłany do kolejnego urządzenia w łańcuchu. Proces ten trwa aż do zidentyfikowania źródła przerwania i może być realizowany przy użyciu prostego układu złożonego z bramek logicznych. System przerwań z przeglądaniem umożliwia ustalanie priorytetu urządzeń w obu wariantach, zarówno sprzętowym, jak i programowym. W rozwiązaniu sprzętowym naj-vyższy priorytet ma to urządzenie, które jest umieszczone najbliżej początku łańcucha. Najbardziej zaawansowanym i najczęściej stosowanym w nowoczesnych mikrokontrolerach jest system z automatyczną detekcją źródła przerwania, nazywany systemem przerwań wektorozywanych. W systemie tym na sygnał potwierdzenia przyjęcia przegania przez CPU urządzenie, które zgłosiło przerwanie, podaje na szynę danych kod Identyfikacyjny, który jest traktowany jako numer elementu w wektorze przerwań. Wektor przerwań jest ciągiem adresów procedur obsługi poszczególnych urządzeń i jest przechowywany w pamięci w ściśle określonym miejscu. Jeśli na przykład adres procedury obsługi jest dwubajtowy, a w systemie dopuszcza się zainstalowanie 32 urządzeń, to wektor zajmuje 32 x 2 = 64 bajty. Jeśli założymy ponadto, że wektor przerwań jest umieszczony począwszy od adresu XXXXH oraz że i jest numerem identyfikacyjnym „urządzenia, to adres procedury obsługi oblicza się jako XXXXH + 2i. Naturalnie, elementy wektora muszą być ułożone w kolejności wzrastających indeksów i, a adres urządzenia (źródła przerwania) o numerze ) powinien być umieszczony w komórkach pamięci o adresach XXXXH i XXXXH+1.