Forum: Mikrocontroller und Digitale Elektronik ARM7 mit VIC und priorisierte Interrupts


von A.K. (Gast)


Lesenswert?

Wenn man ARM7+VIC mit nested Interrupt betreiben will: Ist es überhaupt
möglich, das mit dem VIC korrekt durchzuführen?

Der VIC hat zwar Prioritäten und diese wirken sich auf den Vektor aus,
aber ohne nested Interrupts ist das nicht mehr als die Priorisierung
der AVRs.

Wenn man nun das Interrupt-Nesting wie von ARM und Philips beschrieben
durchführt, ist m.E. die Priorisierung nicht vollständig korrekt.

Beispielszenario:
- Interrupt für Vektor #10 liegt an.
- VIC liefert Vektor 10 und sperrt alle IRQs ab 10.
- Handler für 10 schaltet IRQs wieder ein (nesting).
- Interrupt für Vektor #5 liegt an.
- VIC liefert Vektor 5 und sperrt alle IRQs ab 5.
- Handler für 5 läuft durch.
- Handler für 5 schreibt als Acknowledge ins Vektorregister.
- Der Acknowledge gibt mangels Alternative alle IRQs wieder frei.
- Handler für 5 returned, nun sind die IRQs wieder eingeschaltet.
- Nun sind wir wieder im Handler für 10.

==> zu diesem Zeitpunkt kommen alle Interrupts durch, es sollten
aber bei korrekter Handhabung der Prioritäten nur die diejenigen < 10
durchkommen dürfen <==

Für korrekte Handhabung benötigt man m.E. etwas vergleichbar dem Stack
für die laufende Priorität von Atmels ARM7.

Zum VIC fehlt in der ARM-Doku und bei Philips die präzise Beschreibung
der Arbeitsweise der Prioritätslogik. Und auch sonst habe nirgends
etwas zu diesem Problem gefunden.

von romanua (Gast)


Lesenswert?

Aus SAM7 Manual:

Interrupt Nesting.

The priority controller utilizes interrupt nesting in order for the
high priority interrupt to be handled during the service of lower
priority interrupts. This requires the interrupt service routines of
the lower interrupts to re-enable the interrupt at the processor
level.

When an interrupt of a higher priority happens during an already
occurring interrupt service routine, the nIRQ line is re-asserted. If
the interrupt is enabled at the core level, the current execution is
interrupted and the new interrupt service routine should read the
AIC_IVR. At this time, the current interrupt number and its priority
level are pushed into an embedded HARDWARE STACK, so that they are
saved and restored when the higher priority interrupt servicing is
finished and the AIC_EOICR is written. The AIC is equipped with an
8-level wide hardware stack in order to support up to eight interrupt
nestings pursuant to having eight priority levels.

von romanua (Gast)


Lesenswert?

Sorry, habe jetzt nicht bemerkt, dass deine Frage auf Philips bezogen
ist.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.