mikrocontroller.net

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


Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: romanua (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: romanua (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.