Interrupt Priorität der ATMEL AVR

Gast #845505
Hallo,

wie ist das eigentlich mit den Prioritäten der Interrupts, wenn ich z.B. 
mit UART-Interrupt arbeite, also Interrupt auslösen bei Eintreffen von 
Daten über den UART und ich lasse noch einen Timer laufen ?

Wenn diese Bedingung nun beide gleichzeit eintreffen..., also 
Dateneintreffen beim UART und ein Timer, z.B. 100ms-Takt ?

Gruss
A. Arndt
Gast #845513
Hallo,

dann geht mir also das Dateneingangssignal durch die Lappen...?

Vektoren, bin nur Hobbyelektroniker, was sollen die denn ??

Gruss
A. Arndt
Moderator Persönliche Seite #845520
A. Arndt wrote:

> dann geht mir also das Dateneingangssignal durch die Lappen...?

Nur, wenn deine ISR für den Timer unendlich lange braucht.  Wenn sie
kurz gehalten ist, dann beendet sie sich, und danach wird die ISR
der UART aufgerufen und kann ihr Zeichen verarbeiten.  Selbst falls
bereits das nächste Zeichen einläuft, tickt das ja derzeit gerade mal
erst seine ersten Bits ins Schieberegister, erst nach 8 bits wird von
da in den Empfängerpuffer übernommen.  Bei 9600 Bd dauert das stolze
ca. 1 ms, eine mittlere Unendlichkeit. ;-)

> Vektoren, bin nur Hobbyelektroniker, was sollen die denn ??

Die zeigen auf die ISR.
Gast #845530
Wenn beide Interrupts zur gleichen Zeit eintreffen, dann kann natürlich 
eine Priorität helfen, doch wie wahrscheinlich ist dies ???

I.d.R. wird eine Priorität bei Nested Interrupts angewendet, d.h. wenn 
während eines laufenden Interrupts ein neuer Interrupt mit höherer 
Priorität aufläuft wird der laufende unterbrochen und der aktuelle 
bearbeitet. Nach der Abarbeitung wird dann der unterbrochene 
fortgesetzt.

Meines Wissens hat der AVR eine "feste" Prioritätenreihenfolge, das man 
diese durch die Reihenfolge im Code angeben kann wäre mir neu !!!

Aber wo liegt dein Problem? Wenn zwei oder mehr Interrupts auflaufen 
werden sie der Reihe nach abgearbeitet. Der Uart hat nicht umsonst einen 
Buffer in dem der Empfang einwenig gespeichert wird (man sollte 
natürlich nicht zu lange warten!)

Generell gilt :
In den Interrupt-Routinen nicht zuviel treiben, d.h. UART-Buffer nur 
auslesen, Timer nur auslesen bzw. neuen Wert schreiben mehr nicht. Die 
generelle Bearbeitung der Daten sollte durch das Timing der 
Main-Schleife  erfolgen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.