zeitbezogen programm (adreß) bezogen/
INT-1 INT-2 ISR2RETI ISR1RETI INT-3 ISR3RETI
SP - SP SP SP SP SP
« « «
RA-1 low RA-1 low RA-1 low RA-3 low
« RA-1 high RA-1 high « RA-1 high « RA-3 high
RA-2 low
« RA-2 high
HP...Hauptprogramm
Interruptannahme:
1 Setzen des IIP-FF ( Interrupt In Progress )
2 Retten der Rücksprungadresse auf Stack [ PUSH (PC) ]
3 Sprung entsprechend aktuellem Interruptvektor
(Sprung zur Interrupt Service Routine ISR )
Rückkehr von der ISR:
( Ausgelöst d. RETI am Ende der ISR )
1 IIP-FF rücksetzen
2 Rücksprungadresse vom Stack holen [ POP (PC) ]
3 und Programm das vom INT unterbrochen wurde fortsetzen
A) Tritt während Interrupt in Progress ein Interrupt der selben Prioritätsebe auf, so kann dieser ( selbst wenn er innerhalb dieser Prioritätsebene eine höhere Priorität besitzt ) den laufenden Interrupt nicht unterbrechen. Erst nachdem der laufende Interrupt fertig abgearbeitet ist, reagiert das System auf den Interrupt. Dabei muß ein Befehl des Programmes, das durch den vorigen Interrupt unterbrochen wurde ausgeführt werden.
In obigem Ablaufdiagramm tritt dieser Fall bei der Reaktion auf INT-3 (TIMER1OFL) auf. Man erkennt, daß die Reaktionszeit auf einen Interrupt relativ groß sein kann. Vor allem ist sie nicht vorhersagbar, da man nicht weiß, wieviele Interrupts höherer Priorität schon warten. Schnelle vorhersagbare Reaktion ist nur mit dem Interrupt höchster Priorität möglich.
|