Derzeit arbeite ich an einer C8051F120-MCU, bei der externe Interrupts auf zwei Arten definiert werden können:
- Kantenempfindlich (fallend)
- Pegelempfindlich (niedriger Pegel)
Bei pegelsensitiven Interrupts führt die MCU, sobald sie einen niedrigen Pegel am externen Pin erkennt, den ISR aus, der dem Erkennen einer fallenden Flanke entspricht.
Ich weiß, dass ich falsch liege, da beide nicht gleich sein können. Daher stelle ich folgende Frage: Was ist der tatsächliche Unterschied zwischen den beiden, in ihrem Erkennungsverfahren oder in der Ausführung des ISR?
interrupts
nkg2743
quelle
quelle
Antworten:
Es ist genau das, was gesagt wird.
Wenn ein Flankeninterrupt gesetzt ist, wird der ISR nur bei fallender / steigender Flanke eines Impulses ausgelöst. Wenn der pegelsensitive Interrupt (wie Sie sagen) eingestellt ist, wird der ISR jedes Mal ausgelöst, wenn am entsprechenden Pin ein Signal mit niedrigem / hohem Pegel anliegt.
Kurz gesagt, Flankeninterrupt wird nur bei wechselnden Flanken ausgelöst, während Pegelunterbrechungen ausgelöst werden, solange der Impuls niedrig oder hoch ist.
Wenn Sie also einen Interrupt mit niedrigem Pegel eingestellt haben, führt die MCU den ISR so lange aus, wie der Pin niedrig ist.
quelle
Ein pegelsensitiver Interrupt und ein flankensensitiver Interrupt sind eigentlich zwei ganz verschiedene Dinge. Ich werde versuchen, einige allgemeine Einblicke zu geben, die Ihnen helfen könnten, zu verstehen, wie andere Interrupts auch funktionieren.
Nehmen wir an, Ihre CPU kann Code in zwei Modi ausführen: im normalen Modus und im unterbrochenen Modus. Um vom normalen Modus in den Interrupt-Modus zu wechseln, muss ein Interrupt auftreten, was auch immer es ist, während der
IRET
Befehl ausgeführt werden muss, um zurückzukehren. Nehmen wir auch an, dass ein Interrupt im Interrupt-Modus irgendwie gespeichert wird, aber nicht sofort gewartet wird, dh im Interrupt-Modus kann die CPU nicht unterbrochen werden.Was ist ein Interrupt? Ich würde sagen, es ist ein Ereignis : etwas, das passiert, ein Timer läuft über, ein Pin geht zur Neige, was auch immer. Die CPU reagiert auf das Ereignis und nimmt dann die normale Ausführung wieder auf. Was passiert, wenn ein Ereignis auftritt, während ein anderes bedient wird? Normalerweise wird in einem Register ein Bit gesetzt, und unmittelbar nach dem
IRET
Befehl wird die CPU erneut unterbrochen, prüft, welches Bit gesetzt ist, und führt die richtige Interrupt-Serviceroutine aus.Sie werden jetzt vielleicht sehen, warum Level Triggered und Edge Triggered zwei verschiedene Dinge sind: Es sind zwei verschiedene Ereignisse. Wenn Ihr ISR auf dem durch den Pegel ausgelösten Interrupt ausgeführt wird, löschen Sie wahrscheinlich als erstes das Interrupt-Bit: Wenn der Pegel niedrig bleibt, löst die Hardware sofort einen weiteren Interrupt aus, der gewartet wird, sobald Sie damit fertig sind. Bei einem durch Flanken ausgelösten Interrupt muss der Pin hoch und dann wieder niedrig gehen, um den Interrupt erneut auszulösen.
Ich kann mir kein aussagekräftiges Beispiel dafür vorstellen, wann Sie einen pegelgetriggerten Interrupt benötigen, ein flankengetriggerter scheint viel nützlicher zu sein und was Sie normalerweise sowieso brauchen würden.
quelle
Auf vielen Systemen können Interrupts in drei Kategorien unterteilt werden - nicht nur in zwei; Viele Systeme unterstützen nur zwei der drei, aber es kann einen Unterschied geben, welche zwei sie unterstützen.
Ein durch Flanken ausgelöster Interrupt bewirkt, dass die CPU jedes Mal in den Interrupt-Modus wechselt, wenn Interrupts aktiviert werden, die Interrupt-Leitung einige Zeit nach dem letzten Zurücksetzen des Interrupts inaktiv war und einige Zeit danach im aktiven Zustand war.
Ein durch einen "reinen" Pegel ausgelöster Interrupt bewirkt, dass die CPU jedes Mal in den Interrupt-Modus wechselt, wenn Interrupts aktiviert sind und das Unterbrechungssignal derzeit aktiv ist .
Ein durch einen "reinen" Pegel ausgelöster Interrupt bewirkt, dass die CPU jedes Mal in den Interrupt-Modus wechselt, wenn Interrupts aktiviert werden und das Unterbrechungssignal seit dem letzten Zurücksetzen in seinem aktiven Zustand war (wenn es sich beim Zurücksetzen in seinem aktiven Zustand befand, kann dies der Fall sein sind einfach in diesem Zustand geblieben).
Ein Hauptvorteil von durch Pegel ausgelösten Interrupts besteht darin, dass die CPU das Gerät weiterhin überprüft, wenn ein Gerät aus einem bestimmten Grund gewartet wird und ein anderer Grund auftritt, der Aufmerksamkeit erfordert (oder wenn ein anderes Gerät, das dieselbe Leitung verwendet, Aufmerksamkeit erfordert) bis es vollständig erfüllt ist und keinen Grund mehr hat, die Rücksetzleitung zu halten.
Die Hauptnachteile von pegelgetriggerten Interrupts bestehen darin, dass die CPU häufig explizite Maßnahmen zum Zurücksetzen ergreifen muss (flankengetriggerte Interrupts werden häufig implizit vom Interrupt-Controller zurückgesetzt, wenn der Interrupt ausgelöst wird) und dass ein Interrupt aktiviert wird, wenn Die CPU hat keine Ahnung, wie sie das System warten soll, da die CPU nichts anderes tut, als den Interrupt-Handler wiederholt aufzurufen, da das Gerät ständig Aufmerksamkeit benötigt (aber nie erhält).
quelle
Ich habe Erfahrung mit der Überprüfung von Interrupts. Über die Erkennung könnten wir haben:
Die Logikschaltung vom Interrupt-Controller hat einen Flankendetektor und einen Pegeldetektor. Wir müssen die Funktion zuerst mit dem folgenden Überprüfungsszenario bestätigen:
quelle