www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage Interrupt-Prioritäten


Autor: Micha R. (michaavr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine grundsätzliche Frage zu Interrupts.

In welcher Prioritätsfolge werden Interrupts abgearbeitet?

Kann ich mich da an der Interrupt-Vektor-Tabelle (Datenblatt) 
orientieren?
Also Interrupt-Vektor 1 hat eine höhere Prio als beispielsweise 2 oder 
7?

Und bedeutet das dann auch, wenn ich z.B. beim ATmega8 den Timer 
1-Overflow (Vector 9) und RS232-RxC-Interrupt (Vector 12) verwende, dass 
dann auch der die ISR-Routine des UART unterbrochen wird, wenn Timer1 
Interrupt ausgelöst wird?

Also eine ISR-Routine, die gerade abgearbeitet wird durch einen 
Interrupt mit niedrigerer Vector.Nr unterbrochen werden kann?

Würde mich freuen, eine klare Antwort zu erhalten.

Gruß Mitch.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Micha R. wrote:
> In welcher Prioritätsfolge werden Interrupts abgearbeitet?
> Kann ich mich da an der Interrupt-Vektor-Tabelle (Datenblatt)
> orientieren?
> Also Interrupt-Vektor 1 hat eine höhere Prio als beispielsweise 2 oder
> 7?

Kann man so sagen. Bei zeitgleich auftretenden Interrupts wird bei den 
AVRs derjenige zuerst aufgerufen, der in der Interrupt-Vektor-Tabelle 
weiter vorne steht.

> Und bedeutet das dann auch, wenn ich z.B. beim ATmega8 den Timer
> 1-Overflow (Vector 9) und RS232-RxC-Interrupt (Vector 12) verwende, dass
> dann auch der die ISR-Routine des UART unterbrochen wird, wenn Timer1
> Interrupt ausgelöst wird?
>
> Also eine ISR-Routine, die gerade abgearbeitet wird durch einen
> Interrupt mit niedrigerer Vector.Nr unterbrochen werden kann?

Kann man so nicht sagen. Beim Anspringen der Interruptroutine werden bei 
den AVRs alle Interrupts gesperrt und erst beim RETI wieder freigegeben. 
Ausser der Code in der Interruptroutine gibt selbst die Interrupts 
wieder frei, dann kann sie auch unterbrochen werden. Man sollte aber 
wissen, was man macht, wenn man das macht ;-)

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt bei den AVRs (anders als bei einigen anderen µCs) keine 
Prioritäten i.e.S., weil im Normalfall kein Interrupt die Abarbeitung 
eines anderen unterbrechen kann. Es gibt nur eine 
Abarbeitungsreihenfolge für gleichzeitig auftretende Ereignisse, und 
die ist wiederum durch die Reihenfolge der Vektoren in der Vektortabelle 
gegeben. Dabei werden die anstehenden Ereignisse von der niedrigsten 
Vektoradresse an abgearbeitet.

Autor: Micha R. (michaavr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt ja irgendwie soweit klar und einleuchtend.

Aber was passiert denn dann wenn ein interrupt ausgelöst wird, wärend 
ein anderer gerade ausgeführt wird. Wird der spätere Interrupt dann 
unter den Tisch gekehrt (vergessen) oder dann nachgeholt?

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Micha R. wrote:
> Aber was passiert denn dann wenn ein interrupt ausgelöst wird, wärend
> ein anderer gerade ausgeführt wird. Wird der spätere Interrupt dann
> unter den Tisch gekehrt (vergessen) oder dann nachgeholt?

Er wird nachgeholt. Stauen sich jedoch mehrere Interrupts aus gleicher 
Quelle, gehen welche verloren. Es wird nur ein Interrupt aus der 
gleichen Quelle in der "Warteposition" gehalten.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wird der spätere Interrupt dann unter den Tisch gekehrt (vergessen) oder >dann 
nachgeholt?

Sobald die aktuelle ISR verlassen wird, stellt der Controller anhand der 
Interrupt-Flags fest, dass ein (oder sogar mehrere) neuer Interrupt 
aufgetreten ist, und springt in die Interrupt-Vektor-Tabelle.

Das lässt sich übrigens alles wunderbar in dem von Falk geposteten 
Wiki-Artikel nachlesen...

Autor: Micha R. (michaavr)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja da habe ich gerade gelesen. Jetzt ist es klar!

Danke für eure Hilfe!

Mitch.

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.