Přerušení je signál pro procesor vysílaný hardwarem nebo softwarem, který indikuje událost vyžadující okamžitou pozornost. Kdykoli dojde k přerušení, řadič ukončí provádění aktuální instrukce a zahájí provádění rutiny obsluhy přerušení (ISR) nebo obsluhy přerušení. ISR říká procesoru nebo řadiči, co má udělat, když dojde k přerušení. Přerušení mohou být buď hardwarová, nebo softwarová.
- Hardwarové přerušení
- Softwarové přerušení
- Co je to dotazování?“
- Přerušení v/s dotazování
- Rutina obsluhy přerušení
- Tabulka vektorů přerušení
- Kroky provedení přerušení
- Edge Triggering vs. Level Triggering
- Zakázání a vypnutí přerušení
- Registr povolení přerušení
- Priorita přerušení v 8051
- Přerušení uvnitř přerušení
- Spouštění přerušení softwarem
Hardwarové přerušení
Hardwarové přerušení je elektronický výstražný signál vyslaný do procesoru z externího zařízení, jako je řadič disku nebo externí periferie. Například když stiskneme klávesu na klávesnici nebo pohneme myší, vyvolávají hardwarové přerušení, které způsobí, že procesor přečte stisk klávesy nebo polohu myši.
Softwarové přerušení
Softwarové přerušení je způsobeno buď výjimečným stavem, nebo speciální instrukcí v instrukční sadě, která vyvolá přerušení, když ji procesor vykoná. Například pokud aritmeticko-logická jednotka procesoru provede příkaz k dělení čísla nulou, aby způsobila výjimku dělení nulou, čímž způsobí, že počítač přeruší výpočet nebo zobrazí chybové hlášení. Softwarové instrukce přerušení fungují podobně jako volání podprogramů.
Co je to dotazování?“
Stav nepřetržitého sledování se nazývá dotazování. Mikrokontrolér neustále kontroluje stav ostatních zařízení; přitom neprovádí žádnou jinou operaci a veškerý svůj výpočetní čas spotřebovává na monitorování. Tento problém lze řešit použitím přerušení.
Při metodě přerušení reaguje řadič pouze tehdy, když dojde k přerušení. Řadič tedy nemusí pravidelně sledovat stav (příznaky, signály atd.) propojených a vestavěných zařízení.
Přerušení v/s dotazování
Zde je analogie, která odlišuje přerušení od dotazování –
Přerušení | Dotazování |
---|---|
Přerušení je jako prodavač. Pokud člověk potřebuje nějakou službu nebo výrobek, jde za ním a oznámí mu své potřeby. V případě přerušení, když jsou přijaty příznaky nebo signály, oznamují řadiči, že potřebují servis. | Metoda pollingu je jako prodavač. Prodavač chodí od dveří ke dveřím a přitom žádá o koupi výrobku nebo služby. Podobně řadič neustále sleduje příznaky nebo signály postupně u všech zařízení a poskytuje servis té komponentě, která jeho obsluhu potřebuje. |
Rutina obsluhy přerušení
Pro každé přerušení musí existovat rutina obsluhy přerušení (ISR) neboli obsluha přerušení. Když dojde k přerušení, mikrokontrolér spustí rutinu obsluhy přerušení. Pro každé přerušení existuje v paměti pevné místo, které obsahuje adresu jeho obslužné rutiny přerušení, ISR. Tabulka paměťových míst vyhrazených pro uložení adres ISR se nazývá tabulka vektorů přerušení.
Tabulka vektorů přerušení
V systému 8051 existuje šest přerušení včetně RESET.
Přerušení | Umístění paměti (Hex) | Pin |
---|---|---|
Přerušení | Umístění paměti (HEX) | |
Sériový COM (RI. a TI) | 0023 | |
Timer 1 přerušení(TF1) | 001B | |
Externí HW přerušení 1 (INT1) | 0013 | P3.3 (13) |
Externí HW přerušení 0 (INT0) | 0003 | P3.2 (12) |
Timer 0 (TF0) | 000B | |
Reset | 0000 | 9 |
-
Když je aktivován resetovací pin, 8051 skočí na adresní místo 0000. Jedná se o reset při zapnutí napájení.
-
Dvě přerušení jsou vyhrazena pro časovače: jedno pro časovač 0 a jedno pro časovač 1. V případě, že je časovač 0 a časovač 1 přerušen, přerušení se přeruší. Ve vektorové tabulce přerušení jsou paměťová místa 000BH a 001BH.
-
Dvě přerušení jsou vyhrazena pro hardwarová externí přerušení. Pin č. 12 a pin č. 13 v portu 3 jsou určeny pro externí hardwarová přerušení INT0 a INT1. Paměťová místa v tabulce vektorů přerušení jsou 0003H, resp. 0013H.
-
Sériová komunikace má jedno přerušení, které náleží příjmu i vysílání. Tomuto přerušení náleží paměťové místo 0023H.
Kroky provedení přerušení
Když se přerušení aktivuje, mikrokontrolér provede následující kroky –
-
Mikrokontrolér uzavře právě prováděnou instrukci a uloží adresu další instrukce (PC) na zásobník.
-
Také interně uloží aktuální stav všech přerušení (tj, ne na zásobníku).
-
Skočí na paměťové místo tabulky vektorů přerušení, které obsahuje adresu rutiny obsluhy přerušení.
-
Mikrokontrolér získá adresu ISR z tabulky vektorů přerušení a skočí na ni. Začne vykonávat podprogram obsluhy přerušení, který je RETI (návrat z přerušení).
-
Po provedení instrukce RETI se mikrokontrolér vrátí na místo, kde byl přerušen. Nejprve získá adresu programového čítače (PC) ze zásobníku tak, že do PC vyskočí horní bajty zásobníku. Poté začne vykonávat z této adresy.
Edge Triggering vs. Level Triggering
Moduly přerušení jsou dvojího typu – spouštěné úrovní nebo spouštěné hranou.
Úrovňové spouštění | Hranové spouštění |
---|---|
Modul přerušení spouštěný úrovní generuje přerušení vždy, když je potvrzena úroveň zdroje přerušení. | Modul přerušení spouštěný hranou generuje přerušení pouze tehdy, když zjistí potvrzení hrany zdroje přerušení. Hrana se detekuje, když se úroveň zdroje přerušení skutečně změní. Může být také detekována periodickým vzorkováním a detekcí asertivní úrovně, když předchozí vzorek byl deasertivní. |
Pokud je zdroj přerušení stále asertivní, když obsluha přerušení firmwaru zpracovává přerušení, modul přerušení přerušení regeneruje, což způsobí opětovné vyvolání obsluhy přerušení. | Moduly přerušení spouštěné hranou mohou působit okamžitě bez ohledu na to, jak se chová zdroj přerušení. |
Přerušení spouštěná hranou jsou pro firmware těžkopádná. | Přerušení spouštěná hranou udržují nízkou složitost kódu firmwaru, snižují počet podmínek pro firmware a poskytují větší flexibilitu při obsluze přerušení. |
Zakázání a vypnutí přerušení
Při resetování jsou všechna přerušení vypnuta, i když jsou aktivována. Aby mohl mikrokontrolér na tato přerušení reagovat, je nutné je softwarově povolit.
RegistrIE (interrupt enable) je zodpovědný za povolení a zakázání přerušení. IE je bitově adresovatelný registr.
Registr povolení přerušení
EA | -. | ET2 | ES | ET1 | EX1 | ET0 | EX0 |
---|
-
EA – Globální povolení/zakázání.
-
– – Nedefinováno.
-
ET2 – Povolit přerušení časovače 2.
-
ES – Povolit přerušení sériového portu.
-
ET1 – Povolit přerušení časovače 1.
-
EX1 – Povolit přerušení External 1.
-
ET0 – Povolit přerušení Timer 0.
-
EX0 – Povolit přerušení External 0.
Pro povolení přerušení provedeme následující kroky –
-
Bit D7 registru IE (EA) musí být vysoký, aby se zbytek registru mohl projevit.
-
Pokud je EA = 1, přerušení budou povolena a bude na ně reagováno, pokud budou jejich odpovídající bity v IE vysoké. Je-li EA = 0, nebudou reagovat žádná přerušení, i když jejich příslušné bity v registru IE budou vysoké.
Priorita přerušení v 8051
Prioritu přerušení můžeme změnit tak, že některému z přerušení přiřadíme vyšší prioritu. Toho dosáhneme naprogramováním registru s názvem IP (interrupt priority).
Následující obrázek ukazuje bity registru IP. Při resetu obsahuje registr IP všechny nuly. Chceme-li některému z přerušení přidělit vyšší prioritu, nastavíme příslušný bit v registru IP na vysokou hodnotu.
– | – | – | – | PT1 | PX1 | PT0 | PX0 |
---|
– | IP.7 | Neimplementováno. |
– | IP.6 | Neimplementováno. |
– | IP.5 | Neimplementováno. |
– | IP.4 | Neimplementováno. |
PT1 | IP.3 | Definuje úroveň priority přerušení časovače 1. |
PX1 | IP.2 | Definuje úroveň priority externího přerušení 1. |
PT0 | IP.1 | Definuje úroveň priority přerušení časovače 0. |
PX0 | IP.0 | Definuje úroveň priority externího přerušení 0. |
Přerušení uvnitř přerušení
Co se stane, když 8051 provádí ISR, který patří k přerušení, a jiné se aktivuje? V takových případech může přerušení s vysokou prioritou přerušit přerušení s nízkou prioritou. Tomuto jevu se říká přerušení uvnitř přerušení. V 8051 může být přerušení s nízkou prioritou přerušeno přerušením s vysokou prioritou, ale ne jiným přerušením s nízkou prioritou.
Spouštění přerušení softwarem
Někdy potřebujeme otestovat ISR pomocí simulace. To lze provést pomocí jednoduchých instrukcí, které nastaví přerušení na vysokou hodnotu a tím způsobí, že 8051 skočí do tabulky vektorů přerušení. Například nastavte bit IE jako 1 pro časovač 1. Instrukce SETB TF1 přeruší 8051 v tom, co právě dělá, a donutí ho skočit do tabulky vektorů přerušení.
.
Napsat komentář