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

4.6 KiB
Raw Permalink Blame History

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