Przerwanie o wyższym priorytecie przerywa obsługę przerwania o niższym priorytecie, po czym następuje powrót do przerwanej obsługi przerwania o niższym priorytecie. (Rysunek z książki T.Starecki. Mikokontrolery jednoukładowe rodziny 51. NOZOMI W-wa 1996)
51 c.d. IE Rejestr zezwoleń na przerwanie. (Przykład dla typów 52, C52, LV52, C54, C55, C154, C501, C502, S852) w szczególności: ADuC812 EA EADC ET2 ES ET1 EX1 ET0 EX0 IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0 EA- EADC - ET2- ES- ET1- EX1- ET0- EX0- bit globalnego zezwolenia na przerwania. EA=0, zablokowanie przerwań bit zezwalający na przerwania od ADC bit zezwolenia na przerwanie od układu licznikowego T2 bit zezwolenia na przerwanie of łącza szeregowego bit zezwolenia na przerwanie od układu licznikowego T1 bit zezwolenia na przerwanie zewnętrzne INT1 bit zezwolenia na przerwanie od układu licznikowego T0 bit zezwolenia na przerwanie zewnętrzne INT0 REJESTR IE ma adres 0A8H i jego bity są zatem adresowalne indywidualnie. Po załączeniu (lub RESET) kontrolera wszystkie bity zezwoleń są wyzerowane
51 c.d. IP podstawowy rejestr priorytetów przerwań (Przykład dla ADuC812) PS1 PADC PT2 PS PT1 PX1 PT0 PX0 IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0 PS1- ustawiany bit poziomu priorytetu (1= high, 0= low ) - dla I2C i SPI PADC- dla ADC PT2- dla układu licznikowego T2 PS- dla łącza szeregowego PT1- dla układu licznikowego T1 PX1- dla przerwania zewnętrznego INT1 PT0- dla układu licznikowego T0 PX0- dla przerwania zewnętrznego INT0 REJESTR IP ma adres 088H i jego bity są zatem adresowalne indywidualnie. Efektywny priorytet przerwania, decydujący o kolejności jego obsługi, zależy od: - poziomu priorytetu danego przerwania, ustalanego w rejestrze IP - naturalnego priorytetu przerwań. Ustawienie bitu IP.n = 1 oznacza ustawienie wysokiego priorytetu dla danego przerwania
Procesory AVR nie wprowadziły fundamentalnie nowych pomysłów do systemów przerwań, ale uporządkowały tabelę wektorów (adresów) procedur obsługi przerwań. Przyjęto też prostą zasadę: priorytet przerwania jest tym wyższy, im niższy jest adres jego obsługi,
AVR nie wprowadziło wielopoziomowego systemu priorytetów. Pewną nowością jest sprzętowe wyłączanie systemu przerwań na wejściu do obsługi przerwania SREG I T H S V N Z C 7 6 5 4 3 2 1 0 I - global interrupt enable -może być ustawiane i zerowane software owo (SEI, CLI) Przykład: przerwania zewnętrzne (8 LINII): EICRA I EICRB rejestry konfigurujące (przerwanie od poziomu,,wzrastającego lub opadającego zbocza impulsu ISC31 ISC30 ISC21 ISC20 ISC11 ISC10 ISC01 ISC00 ISC71 ISC70 ISC61 ISC60 ISC51 ISC5 ISC41 ISC40
Przykład: przerwania zewnętrzne c.d. : EIMSK EXTERNAL INTERRUPT MASK REGISTER INT7 INT6 INT5 INT4 INT3 INT2 INT1 INT0 R/W R/W R/W R/W R/W R/W R/W R/W USTAWIENIE ODPOWIEDNIEGO BITU W EIMSK ZEZWALA NA PRZERWANIE EIFR EXTERNAL INTERRUPT FLAG REGISTER INTF7 INTF6 INTF5 INTF4 INTF3 INTF2 INTF1 INTF0 R/W R/W R/W R/W R/W R/W R/W R/W ODPOWIEDNIA ZMIANA POZIOMU/ZBOCZA USTAWIA FLAGĘ. GENERUJE PRZERWANIE JEŚLI I=BIT JEST USTAWIONE W SREG I GDY ODPOWIEDNI BIT W EIMSK JEST TEŻ USTAWIONY
ARM rejestry robocze oraz rejestry specjalne W kontekście przerwań omówimy niektóre z nich ponownie:
ARM Cortex-M3 obsługuje STOS instrukcjami PUSH i POP. W jednym rozkazie można przenieść wiele rejestrów! PUSH {R0 - R7, R12, R14} ; save registers
ARM CORTEX-M3 REJETRY SPECJALNE C.D. zaliczamy do nich : PSRs Program Status Registers PRIMASK, FAULTMASK i BASEPRI Interrupt mask registers Control - Control Register Dostęp do rejestrów specjalnych mają tylko specjalne instrukcje: MRS <reg>, <special_reg>; czytaj (przenieś) rejestr specjalny MSR <special_reg>, <reg> ; zapisz do rejestru specjalnego PROGRAM STATUS REGISTERS mają trochę osobliwą naturę: APSR, IPSR i EPSR składają się na xpsr Combined Program Status Register.
Combined Program Status Register: APSR Application PSR można zmieniać używając MSR, ale IPSR (Interrupt PSR) oraz EPSR (Execution PSR) są read only! Można mieć też dostęp do wszystkich trzech PSR, jak do jednego rejestru używając symbolu PSR: MRS r0, PSR ; Read the combined program status word MSR PSR, r0 ; Write combined program state word DALSZE REJESTRY SPECJALNE: PRIMASK 1-bitowy rejestr. Gdy USTAWIONY zezwala na NMI oraz na wyjątki hard fault FAULTMASK 1-bitowy rejestr. Gdy ustawiony zezwala wyłącznie na NMI. (Default = 0) BASEPRI - rejestr p maksymalnej długości 9 bitów. Określa masking priority level, wyłącza obsługę wszystkich przerwań o równym lub wyższym priorytecie.
CONTROL REGISTER - ARM CORTEX-M3 JEST TO 2-bitowy REJESTR, który definiuje poziom uprzywilejowania oraz wybór stosu. CONTROL[1] stan stosu: 1 użycie alternatywnego stosu 0 MSP (default) stos Dla Cortex-M3 CONTROL[1] jet zawsze 0 w handler mode, w Thread mode może być 0 lub 1 CONTROL[0] - 0 oznacza stan uprzywilejowany w THREAD mode 1 oznacza stan nieuprzywilejowany (user state) w trybie THREAD TEN BIT MOŻNA ZAPISAĆ TYLKO W STANIE UPRZYWILEJOWANYM. JEŚLI PROCESOR ZNAJDUJE SIĘ W user state TO JEDYNYM SPOSOBEM PRZEŁĄCZENIA SPOWROTEM DO STANU UPRZYWILEJOWANEGO JEST WYMUSZENIE PRZERWANIA I DOKONANIA STOSOWNEJ ZMIANY W PROCEDURZE OBSŁUGI PRZERWANIA. (WEJŚCIE W OBSŁUGĘ PRZERWANIA PRZEŁĄCZA PROCESOR W STAN UPRZYWILEJOWANY)
GDY POJAWIA SIĘ WYJĄTEK W CORTEX-M3 I JEST ZAAKCPETOWANY, TO ZACZYNA SIĘ JEGO OBSŁUGA STARTOWY ADRES HANDLERA OKREŚLA VECTOR TABLE
Definiując poziomy priorytetów możemy wybrać ich liczbę, ograniczając się e.g. dp trzech MSB mamy 8 grup: 0x20, 0x40, 0x60, 0x80, 0xA0, 0xC0 i (najniższy) 0xE0. A Priority Level Register with 4-bit implemented
Możemy też skonfigurować liczebność grup i podgrup. W tym podziale grupy mają własność wywłaszczania.