FAV-ZCU/KIV POT/12. Přerušení.md

96 lines
No EOL
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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