Forum: Mikrocontroller und Digitale Elektronik Interrupt Priorität der ATMEL AVR


von A. Arndt (Gast)


Lesenswert?

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

von Robin T. (rotoe) Benutzerseite


Lesenswert?

Der Timer Interrupt hat höhere Priorität als der UART.

von Fabian B. (fabs)


Lesenswert?

Dann wird die Prio durch die Reihenfolge der Vektoren vorgegeben. Schau 
mal ins Datenblatt, da steht die Liste.

Gruß
Fabian

von A. Arndt (Gast)


Lesenswert?

Hallo,

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

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

Gruss
A. Arndt

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von gast (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?


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