AVR: Mehrere IRQs während einer ISR

OP #1245084
Hi!
Es geht um Atmel AVRs...
Klar ist mir bisher (man möge mich korrigieren):
1. Wird während der Abarbeitung einer ISR ein IRQ ausgelöst, so wird 
dieser nach Verlassen der ISR abgearbeitet, weil die ISR weitere IRQs 
sperrt und erst bei Ende wieder freigibt (I-Flag)
2. Treten  2 IRQs absolut gleichzeitig auf, so werden sie entsprechend 
ihrer Priorität abgearbeitet
3. Der AVR kann sich immer nur einen IRQ "merken" während er mit einer 
ISR beschäftigt ist.

Frage:
Wenn innerhalb einer ISR zunächst einer und dann ein weiterer IRQ 
auftritt, welcher der beiden wird im Anschluss ausgeführt? Der letzte 
oder der mit höherer Priorität?

Danke schonmal,
Gruß


Infos gibt es unter anderem hier:
http://www.mikrocontroller.net/articles/Interrupt
Beitrag "AVR ASM Interrupt Priorität"
Moderator Persönliche Seite
Hut Schugh wrote:

> 2. Treten  2 IRQs absolut gleichzeitig auf, so werden sie entsprechend
> ihrer Priorität abgearbeitet

Die Priorität wirkt auch dann, wenn während einer Interruptsperre
(durch CLI, oder weil gerade eine ISR aktiv ist) beim erneuten
Freigeben der Sperre mehrere Interrupts anhängig sind.  Sie müssen
dann nicht exakt gleichzeitig auftreten.

> 3. Der AVR kann sich immer nur einen IRQ "merken" während er mit einer
> ISR beschäftigt ist.

Einen für jede Interruptquelle.  Zu jeder Quelle gehört intern ein
Signal, das den anhängigen Interrupt kennzeichnet, und ein Signal
kann natürlich immer nur entweder aktiv sein oder nicht.

Manche Interruptquellen können sich dann auch noch mehr als eine
Anforderung merken, bspw. sind manche UARTs doppelt gepuffert.  Damit
kann es passieren, dass das UART-RXC-Interrupt-Flag selbst dann noch
aktiv bleibt, wenn man ein Byte aus dem UDR gelesen hat.  Wenn man
das nicht innerhalb der ISR selbst testet, würde nach dem Verlassen
der ISR dann sofort wieder ein Interrupt ausgelöst.
Gast
wenn man einfach mal logisch rangeht:

Es gibt für jeden IRQ ein Flag der anzeigt ob diese IRQ Aufgetreten ist.

Sobalt das I-Flag gesetzt ist wird in der Reihenfolge der IRQ-Adresse 
die Liste der Flags durchgegangen und in dieser Reihenfolge die passende 
ISR aufgerufen.

Wo sollte sich jetzt der Atmel die Reihenfolge der IRQ merken könnne?
OP
Sehr hilfreich, für jeden Vektor also nur einer, nicht insgesamt. Das 
war mein Missverständinis. Dann wird natürlich auch der Rest logisch...
Allerdings ist hier in älteren Threads immer mal wieder zu lesen, AVRs 
hätten keine Priorisierung, was mich wundert.
Danke
Moderator Persönliche Seite
Hut Schugh wrote:

> Allerdings ist hier in älteren Threads immer mal wieder zu lesen, AVRs
> hätten keine Priorisierung, was mich wundert.

Das ist auch richtig, wenn man eine ,,klassische'' Priorisierung
meint, bei der ein höher priorisierter Interrupt die ISR eines
niedriger priorisierten Interrupts unterbrechen kann.
Persönliche Seite
Die Priorität ergibt sich durch die Position in der 
Interrupttvektortabelle, soweit ich weiß. Der Interrupt, der direkt 
hinter dem Reset Vektor liegt hat dabei die höchste Priorität.

Der "Interruptspeicher" ist nichts anderes als das jeweilige Flag des 
jeweiligen Moduls. Zum Beispiel gibt es beim Timer ein OVFIF (Overflow 
Interrupt flag). Ist das gesetzt, wird der Interrupt so bald wie möglich 
ausgeführt. Kommt aber in der Zwischenzeit ein neuer Interruptrequest, 
dann wird das Flag wieder gesetzt. Wenn das Flag aber zu dem Zeitpunkt 
schon 1 war, dann bleibt es 1 und der erste Interrupt geht verloren.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.