Interrupt Prioritäten einstellen

Prioritäten bei Interrupts sind dann wichtig, wenn man mehrere Interrupts hat und diese konmtrollieren/steuern möchte. Vergibt man keine Interrupt-Priorität, dann haben alle Interrupts die gleiche (niedrigste) Priorität. Dies kann durch die „Interrupt-Prioritäts-Register“ IP0 und IP1 geändert werden. Dafür stehen drei Prioritätsstufen bereit. Dabei kann ein Interrupt mit einer hohen Prioritätsstufe, einen Interrupt mit einer niedrigeren Prioritätsstufe unterbrechen. Andersrum ist dies aber nicht möglich!

Gleich zu Beginn der Interrupt Prioritäten-Einstellung muss man aufpassen. IP0 und IP1 sind nämlich nur byte-adressierbar, d.h. Man muss den „MOV“-Befehl nutzen. Der „SET bit“-Befehl funktioniert hier nicht!

Auch muss beachtet werden, dass die Interruptquellen als Paar/Gruppe zusammengefasst werden. Das ist insofern problematisch, da in diesem Paar nicht weiter priorisiert werden kann, da zwei Interrupts mit der gleichen Priorität sich gegenseitig nicht unterbrechen können.

Hier aber nun endlich mal ein praktisches Beispiel: Geändert werden soll die Priorität von Int. 1 auf die höchste Priorität (3):

MOV IP0, #100b ; oder auch #04h
MOV IP1, #100b ; oder auch #04h
Nun wurde aber nicht nur die Priorität von Int. 1 geändert, sondern auch die von Int. 3, da die beiden zusammen ein Paar bilden. Zu der höchsten Priorität kommt es durch das Setzen der dritten Bit-Nr, die bei IP0 und IP1 jeweils "1" ist und damit nach unten stehender Tabelle Priorität 3 ist.

IP1 IP0 Prioritätsstufe
0 0 0
0 1 1
1 0 2
1 1 3