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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.