Zum Zeitpunkt S5P2 in jedem Maschinenzyklus werden die Interrupts abgefragt und in ein Latch gespeichert. Nachdem der Interrupt anerkannt wurde, ist der nächste Befehl ein Call-Befehl zur Interrupt Service Routine. Dieser Call Befehl benötigt selbst 2 Maschinenzyklen. Das heißt, bis der erste Befehl der Interrupt Service Routine ausgeführt wird vergehen mindestens 3 Maschinenzyklen.
Kürzeste Reaktionszeit auf einen Interrupt, wenn C2 der letzte Befehlszyklus eines Befehls außer RETI oder eines Zugriffes auf IE oder IP ist [7p39]
Die Interrupts werden in jedem Maschinenzyklus während S5P2 gelatched, die gelatchten Zustände werden aber erst im darauffolgenden Maschinenzyklus abgefragt. Dann erst kann der Prozessor entsprechend den im vorigen Zyklus gelatchten Zuständen reagieren.
Anm.: Da in jedem Zyklus gelatched und die alten Werte vom vorigen Zyklus gepolled werden, müssen die Werte doppelt gespeichert werden, oder vor S5P2 gepolled werden.
Wiederholung: Taktperiode (T-State, Phase) / Schritt (State, besteht aus 2 Taktperioden P1, P2) /
Maschinenzyklus (cycle, besteht aus 6 States) / Befehlszyklus (instruction cycle, besteht aus 1 bis 4 cycles)
12 MHz Takt - 1 Maschinenzyklus = 1 s
Eine längere Reaktionszeit kann aus mehreren Gründen vorkommen:
1. Wenn ein Interrupt gleicher oder höherer Priorität gerade in Arbeit ist, dann hängt die Reaktionszeit von der Interrupt Service Routine des anderen Interrupts ab.
2. Wenn der gerade ausgeführte Befehl im Augenblick des Pollings nicht den letzten Maschinenzyklus ausführt, dann kann die zusätzliche Verzögerung maximal 3 Zyklen sein, da die längsten Befehle (MUL und DIV) 4 Zyklen lang sind.
3. Bei einem Zugriff auf IE oder IP oder beim Befehl RETI wird, bevor die Interrupt Service Routine gestartet wird noch ein zusätzlicher Befehl ausgeführt, da möglicherweise gerade der Interrupt gesperrt worden ist und deshalb die Interrupts neu gepollt werden müssen. Dadurch ergibt sich eine zusätzliche Wartezeit von maximal 5 Maschinenzyklen (bei MUL oder DIV Befehl).
Aus diesen Gründen beträgt die Interrupt Response Time immer mehr als 3, aber immer weniger als 9 Maschinenzyklen (falls gerade kein anderer Interrupt abgearbeitet wird).
Die Zuordnung zu einer Priorität wird in jedem Maschinenzyklus wiederholt, und die verglichenen Werte sind diejenigen, die während S5P2 des vorangegangenen Maschinenzyklus vorhanden waren. Ist ein Interrupt-Kennzeichnungsbit gesetzt, das aber wegen einer der obigen Sperrbedingungen nicht bedient werden kann, und ist es bei Aufhebung der Sperrbedingungen nicht mehr gesetzt, so wird der zurückgewiesene Interrupt nicht mehr ausgeführt. Mit anderen Worten: Das System erinnert sich nicht daran, daß das Kennzeichnungsbit gesetzt war, aber nicht bedient wurde. Jeder Zyklus, in dem eine Prioritätenzuordnung erfolgt, muß in diesem Sinn für sich betrachtet werden.
Genaue Zusammenfassung der Interruptreaktionszeit:
3 Perioden + letzter Zyklus eines Befehls + 2 Zyklen CALL-Befehl =
Min. Zeit. 3 Perioden + 3 Zyklen ≙ 3.25 s
3 Perioden + ( bis 3 + 1 Zyklen) + 2 Zyklen Polling nicht während letzem Maschinenzyklus eines Befehls
3 Perioden + 4-6 Zyklen ≙ 4.25-6.25 s
Spezialfall: 3 Perioden + 2 Zyklen RETI + 4 Zyklen (MUL/DIV) + 2 Zyklen CALL =
3 Perioden + 8 Zyklen ≙ 8.25 s
Eine beliebige Zeit kann noch hinzukommen, wenn gerade ein Interrupt gleicher oder höherer Priorität abgearbeitet wird, da dieser nicht unterbrochen werden kann. Dies läßt sich durch den Einbau eines zusätzlichen Prioritätslevel verhindern (siehe 4.2 Simulieren eines dritten Prioritätslevels)
Anm.: Die hier berechnete Reaktionszeit geht immer von dem Zeitpunkt aus, in dem der Interrupt eingelatched wird.
|