Verschachtelter Vectored Interrupt Controller (NVIC) – Warum ist er „verschachtelt“ und „vektorisiert“?

In ARM-Mikrocontrollern gibt es ein Peripheriegerät namens NVIC (
Nested Vectored Interrupt Controller ) .

Worauf bezieht sich der Teil „verschachtelt“ und „vektorisiert“ oder warum ist er „verschachtelt“ und „vektorisiert“?

Antworten (2)

Früher hatte eine CPU eine oder vielleicht zwei Interruptleitungen. Vielleicht wäre einer N on M askable Interrupt für kritische Dinge, der andere Shared für alles.

In diesem Fall würde entweder ein externes Peripheriegerät oder einfach eine Software, die viele Statusregister überprüft, verwendet werden, um die Ursache des Interrupts zu bestimmen und den Ort des relevanten Handlers nachzuschlagen.

Besonders in einem Echtzeitsystem ist die Zeit wichtig, um zum ersten echten Befehl eines Interrupt-Handlers zu gelangen, daher wurden vektorisierte Interrupt - Controller eingeführt , um dem Prozessor direkt die richtige Adresse zu liefern und einige Befehle einzusparen.

Der verschachtelte Teil ermöglicht, dass viele Interrupts aktiviert und Prioritäten zugewiesen werden. Dadurch wird automatisch sichergestellt, dass ein einmal gestarteter Interrupt-Handler nicht durch eine neue Anfrage unterbrochen wird, es sei denn, diese Anfrage ist noch wichtiger. Dies vermeidet viele Komplikationen beim Aktivieren und Deaktivieren bestimmter Interrupts, die dasselbe bewirken könnten.

Ein letztes Merkmal der Architekturen der M-Klasse ist, dass, da der Stack-Push/Pop architektonisch und nicht in Software gehandhabt wird, Back-to-Back-Ausnahmen in der Lage sind, eine redundante Pop/Push-Sequenz zu überspringen – aber das hat nichts mit dem verschachtelten oder zu tun vektorisierte Beschreibungen. Zwei Ausnahmen auf der gleichen Präemptionsebene würden eine Tail-Chain verursachen. Wenn Sie drei gleichzeitig hätten, könnten Sie die Startreihenfolge auswählen, ohne sich Sorgen machen zu müssen, dass eine von ihnen tatsächlich einen bereits laufenden Handler stoppt.

Suchen Sie nach den Begriffen „nested interrupt“ und „vectored interrupt“.

Verschachtelt hat damit zu tun, dass Interrupts bedient werden können, während andere ISRs ausgeführt werden, wie von nxp in AN3496.pdf beschrieben

2.1 Anforderungen an verschachtelte Interrupts

In einem verschachtelten Interrupt-System darf ein Interrupt jederzeit und überall [auftreten], sogar [wenn] eine ISR ausgeführt wird. Aber nur die ISR mit der höchsten Priorität wird sofort ausgeführt. Die ISR mit der zweithöchsten Priorität wird ausgeführt, nachdem die mit der höchsten Priorität abgeschlossen ist. Die Regeln eines verschachtelten Interrupt-Systems sind:

• Alle Interrupts müssen priorisiert werden.

• Nach der Initialisierung darf jeder Interrupt jederzeit und überall auftreten.

• Wenn eine niederpriore ISR durch einen hochprioren Interrupt unterbrochen wird, wird die hochpriore ISR ausgeführt.

• Wenn ein ISR mit hoher Priorität durch einen Interrupt mit niedriger Priorität unterbrochen wird, wird der ISR mit hoher Priorität weiter ausgeführt.

• ISRs mit gleicher Priorität müssen in zeitlicher Reihenfolge ausgeführt werden.

"Vectored Interrupt" bedeutet nur, dass es einen Zeiger auf eine ISR gibt

"Vektorisiert" im Gegensatz zu der Art und Weise, wie ARM früher Interrupts ausgeführt hat - direkter Sprung zum Interrupt-Vektor, der dann eine Verzweigungsanweisung enthalten würde.