1. Uvod

2. Potek izvajanje zunanje maskirne prekinitve IRQ1

3. Nemaskirna prekinitev NMI

4. Ostale prekinitve - notranje prekinitve

5. Programska prekinitev SWI

6. Prioritete prekinitev

 

Prekinitve predstavljajo mehanizem, ki omogoča, da procesna enota za krajši ali daljši čas prekine opravilo (program), ki ga trenutno izvaja, in prične izvajati prekinitveni strežni program (interrupt service routine). Po izvedbi tega programa se prekinjeni program spet normalno nadaljuje na mestu, kjer je prišlo do prekinitve.

Do prekinitev prihaja zaradi:

Sprejem prekinitvene zahteve, skok v prekinitveni program in vrnitev v prekinjeni program potekajo avtomatsko ob podpori aparaturne opreme.

Glede na način reagiranja na prekinitveno zahtevo bi lahko prekinitve razdelili v dve skupini:

Vse te prekinitve lahko programsko onemogočimo s postavitvijo I bita v CCR registru (npr. z ukazom SEI). V takem primeru CPE nanje ne reagira kljub zunanji zahtevi z aktiviranjem ustreznega signala. Prekinitev ponovno omogočimo z brisanjem I bita (npr. z ukazom CLI).

Na vrh

 

Potek izvajanja zunanje maskirne prekinitve IRQ1:

V času izvajanja prekinitvenega programa mora vhodno-izhodna enota, ki je zahtevala prekinitev, umakniti signal IRQ1 v neaktivno stanje. Tako bodo po vrnitvi iz strežnega programa prekinitve spet možne.

Ker se ob resetu postavi I bit v CCR, so maskirne prekinitve onemogočene. Na začetku programa, ko izvedemo začetno nastavitev vseh vhodno-izhodnih enot, zato vnesemo ukaz CLI, s čimer omogočimo izvajanje omenjenih prekinitev.

Na vrh

 

Nemaskirna prekinitev NMI

Je tudi zunanja prekinitev, vendar je ne moremo onemogočiti (maskirati).

Medtem ko je vhod IRQ1 občutljiv nivojsko, vhod NMI deluje na zadnjo strmino (če to ne bi bilo tako, bi se prekinitve izvajale druga za drugo že v času izvajanja strežnega programa in bi prihajalo do gnezdenja prekinitev).

Sicer pa poteka razvoj dogodkov pri NMI po istem zaporedju kot pri IRQ1, le da v tem primeru leži prekinitveni vektor na naslovih $FFFC in $FFFD.

Na vrh

 

Ostale prekinitve - notranje prekinitve

V spodnji tabeli je prikazan pregled prekinitvenih vektorjev in s tem tudi vseh prekinitev, ki jih srečamo pri MC6803. Opazimo, da so trije prekinitveni vektorji namenjeni vgrajenemu časovniku (ICF, OCF in TOF), eden pa serijsko komunikacijskemu vmesniku SCI.

Po resetu so vse te enote v neaktivnem stanju in njihove prekinitve onemogočene (vsaka zase), zato z enoto, ki je ne uporabljamo, nimamo težav.

Na vrh

 

Programska prekinitev SWI

SWI v bistvu ni prekinitev v klasičnem smislu, ker je pod programsko kontrolo, se pa obnaša in izvaja enako kot ostale prekinitve. Je nemaskirna in ima višjo prioriteto kot vse maskirne prekinitve.

Na vrh

Prioritete prekinitev

Naslova, na katerih se nahajaprekinitveni vektor

 Prekinitvena zahteva

MSB

LSB

$FFFE

$FFFF

Reset

$FFFC

$FFFD

NMI (zunanja)

$FFFA

$FFFB

SWI (programska)

$FFF8

$FFF9

IRQ (zunanja)

$FFF6

$FFF7

ICF (notranja-časovnik)

$FFF4

$FFF5

OCF (notranja-časovnik)

$FFF2

$FFF3

TOF (notranja-časovnik)

$FFF0

$FFF1

SCI (notranja-serijski vmesnik)

Prioriteta posameznih prekinitev je razvidna iz zgornje tabele prekinitvenih vektorjev. Prioritete so fiksne in jih ne moremo spreminjati programsko. Najvišjo prioriteto ima RESET, ki je v bistvu tudi neke vrste prekinitev, sledi ji NMI, itd. Če je več zahtev po prekinitvah postavljenih hkrati, se najprej začne izvajati prekinitveni program na enoti, ki ima najvišjo prioriteto.  

Prekinitve se lahko izvedejo uspešno le, če je definiran skladovni kazalec, oz določen prostor za sklad! (to naj se zgodi kar v začetnih ukazih v programu, da ne bi prišlo prej do prekinitvene zahteve)

Na vrh

Nazaj