Was ist der tatsächliche Unterschied zwischen kantensensitiven und pegelsensitiven Interrupts?

7

Derzeit arbeite ich an einer C8051F120-MCU, bei der externe Interrupts auf zwei Arten definiert werden können:

  1. Kantenempfindlich (fallend)
  2. 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?

nkg2743
quelle
1
3 Leute denken, dass dies gut recherchiert ist, WTF.
Alec Teal

Antworten:

9

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.

Golaž
quelle
Vielen Dank, ich habe bekommen, was ich wollte. Nur noch eine Klarstellung, die ich brauche. Im Falle von Interrupts mit niedrigem Pegel wird ISR so lange ausgeführt, wie das Signal niedrig ist. Es verlässt die ISR-Routine nur, wenn der Signalpegel hoch ist , Recht?
nkg2743
@ nkg2743 Ja, du bist richtig.
Golaž
5
Ich würde den letzten Satz "es wird nur dann aus der ISR-Routine austreten, wenn der Signalpegel hoch wird" umformulieren - weil er aus dem ISR austritt, aber dann den ISR immer wieder startet, anstatt den ISR nicht zu verlassen.
vsz
5

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 IRETBefehl 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 IRETBefehl 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.

Vladimir Cravero
quelle
Ein Beispiel für einen durch den Pegel ausgelösten Interrupt könnte eine Warnung bei niedrigem Batteriestand sein, aber ich bin mir nicht sicher, ob dies normalerweise so implementiert wird.
Greg d'Eon
1

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).

Superkatze
quelle
0

Ich habe Erfahrung mit der Überprüfung von Interrupts. Über die Erkennung könnten wir haben:

  • Flankenerkennung mit fallender Flanke / steigender Flanke durch externen Trigger-Interrupt.
  • Pegelerkennung mit Erkennung von niedrigem / hohem Pegel durch externen Trigger-Interrupt.

Die Logikschaltung vom Interrupt-Controller hat einen Flankendetektor und einen Pegeldetektor. Wir müssen die Funktion zuerst mit dem folgenden Überprüfungsszenario bestätigen:

  1. Einstellung unterbrechen
  2. Erkennungsmethode bestätigen (4 Erkennungsmethoden wie oben)
  3. Interrupt-Anforderung aktivieren
  4. Bestätigen Sie den Interrupt-Trigger als unsere Erwartung von [2]. Wichtiger Hinweis ist, dass bei der Behandlung im Interrupt-Handler das Timing für jede Art von Implementierungs-Interrupt (Flanken-Interrupt oder Pegel-Interrupt) voneinander abweichen kann. Wir müssen uns darum kümmern, um eine Schleife im Interrupt-Handler zu vermeiden.
Khanh Trinh
quelle
Das beantwortet die Frage nach den zwei verschiedenen Interrupts überhaupt nicht!
Jusaca