diff --git a/KIV POT/12. Přerušení.md b/KIV POT/12. Přerušení.md new file mode 100644 index 0000000..5ecf642 --- /dev/null +++ b/KIV POT/12. Přerušení.md @@ -0,0 +1,96 @@ +# Přerušení + +- při výskytu určité události procesor přeruší vykonávání programu a začne vykonávat obslužnou proceduru pro danou událost +- po dokončení procedury program pokračuje + +**Přerušení** (Interrupt) +- událost nastane mimo procesor (např. v IO řadiči) +- indikace vzniku události je do procesoru zavedena speciálním přerušovacím signálem + +**Výjimky** (Exceptions) +- událost nastane přímo v procesoru (dělení nulou, trap, výpadek stránky, programové přerušení, ...) + +**Maskovatelná přerušení** +- lze je programově (nastavením registru/instrukcí) povolit či zakázat +- u nemaskovatelných to nelze + +**Požadavky na přerušovací systém** +1. globální povolení/zákaz všech přerušení (kromě NMI) +2. selektivní povolování/zákaz jednotlivých přerušení +3. prioritní systém - povolení pouze přerušení s určitou prioritou +4. prioritní systém - při současném vzniku více přerušení se nejprve obslouží to s nejvyšší prioritou +5. vazba každého přerušení na příslušný obslužný program +6. možnost vytvoření vnořených přerušení + +**Řadič přerušení** +- řadič vnějších přerušení může být + - kompletně vestavěn v procesoru (např. H8S) + - připojen jako samostatný obvod + +**Uplatnění přerušení** +- aktivita požadavku na přerušení se testuje vždy po dokončení instrukce + - není-li požadavek na přerušení aktivní, procesor pokračuje další instrukcí + - je-li požadavek na přerušení aktivní (a přerušení jsou povolena), zahájí se operace pro jeho obsluhu +- ve speciálních případech (výpadek stránky, porušení ochrany paměti, ...) může přerušení/výjimka nastat i v průběhu provádění instrukce + +**Přerušovací systém procesoru H8S** +- několik desítek přerušení od periferních řadičů přímo na čipu +- 8 vnějších přerušení (/IRQ7-/IRQ0) +- nemaskovatelné přerušení (/NMI) +- registry přerušovacího systému + - ISR – (Interrupt Status Register) + - registr aktivních žádostí o přerušení + - nastavuje se automaticky, ale lze jej modifikovat i programově + - IER – (Interrupt Enable Register) + - povolení jednotlivých přerušení (0/1) + - nastavuje se programově podle potřeby + - IPR – (Interrupt Priority Register) + - priorita přerušení (0-7) + - nastavuje se programově podle potřeby + - EXR + - úroveň povolených přerušení (aktivní jsou pouze ty s IPR > EXR) + - nastavuje se programově, při obsluze přerušení se modifikuje automaticky + +**Určení adresy obslužného programu (H8S)** +- na začátku paměti je tabulka s adresami obslužných programů (přerušovací vektory) +- každé přerušení má pevně přidělenou položku v tabulce + +**Obsluha přerušení (H8S)** +1. inicializace přerušovacího systému + - nastavení přeruš. vektorů (před spuštěním nebo za běhu) + - nastavení periferních řadičů + - nastavení priorit + - povolení přerušení + - obecně instrukce Enable Interrupt, u H8S zápisem priority do EXR +2. hardwarové provedení operace při vzniku přerušení + - uložení PC (3 byte), CCR (1 byte) a EXR (1 byte) do zásobníku + - nastavení hodnoty IPR do EXR + - přečtení přerušovacího vektoru a nastavení PC +3. softwarové provedení operace v obslužné proceduře + - uloženích používaných registrů do zásobníku + - obsluha přerušení (IO řadič, ...) + - při obsluze přerušení mohou být ostatní přerušení + - zakázána, povolena všechna nebo ta s vyšší prioritou + - obnovení obsahu uložených registrů +4. provedení instrukce RTE na konci obslužného programu + - ze zásobníku se postupně vybere a obnové původní stav EXR, CCR, PC (hardwarově) + +**Vnořená přerušení** +- obslužný program přerušení je znovu přerušen +- při akceptování přerušení se nastaví hodnota IPR do EXR + - další přerušení musí mít vyšší priotitu než to obsluhované +- po dokončení obsluhy druhého přerušení pokračuje obsluha prvního přerušení + +**Interrupt pending** +- pokud má přerušení nízkou prioritu, tak se nemůže okamžitě obsloužit +- přerušení se obslouží až po nastavení EXR na předchozí hodnotu + +**Vnější řadič přerušení** +- obsahuje masky pro jednotlivá přerušení +- řadí vnější přerušení podle priorit + +**Použití přerušení k řízení IO operací** +- IO řadič může přerušením indikovat připravenost speciálním signálem zavedeným na přerušovací vstup procesoru +- v obslužné proceduře se provede zápis/čtení dat do/z IO řadiče + - není potřeba periodicky testovat stav IO systému +- vhodné pro pomalé přenosy \ No newline at end of file