Forum: Mikrocontroller und Digitale Elektronik Interrupt Priorität AVR


von Mandy (Gast)


Lesenswert?

Hallo,

ich habe einen Atmega8.
Dabei habe ich mehrere Interrupts. Gemäß der Interrupt Tabelle 
(Datenblatt) ist der INT0 das höchstwertige Interrupt.
Gleichzeitig gibt es in meinem Programm jedoch noch ein Compare Match, 
welches höher priorisiert ist (für mein Programm, jedoch nicht in der 
Tabelle).
Das Compare Match schaltet lediglich einen Port um, mehr nicht.
Nun habe ich aber das Problem, das beim Auftreten von INT0 und falls zur 
gleichen Zeit der Port abgeschaltet werden soll, INT0 ausgeführt wird 
und der Port zu spät abgeschaltet wird.
Das Compare Match wäre hier zeitkritischer.
Meine Frage, wie löst man das?
In der INT0 Interrupt Routine das Flag abfragen, ob das Compare Match 
gesetzt ist und den einen Befehl (Port abschalten) dort machen, 
Interrupt Flag löschen, oder gibt es bessere Lösungen?

Danke.

Grüße
Mandy

von Da D. (dieter)


Lesenswert?

Wenn du genau weißt, was du tust, kannst du verschachtelte Interrupts 
zulassen.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Unterbrechbare_Interruptroutinen

von Ulrich (Gast)


Lesenswert?

Die Compare-match-Funktion der der Timer kann auch unabhängig von der 
CPU die PWM Ausgänge beeinflussen. Man hat da aber ein paar 
einschränkungen bei der Wahl der Pins usw.

Sonst halt geschachelte Interrupts, oder gar keine andern Interrupts 
nutzen und die anderen Dinge per Polling erledigen.
Geschachtele Interrupts müssen dabei nicht unbedingt schneller sein, als 
wenn man die ISRs wirklich auf das absolute Minimum reduziert.

von Falk B. (falk)


Lesenswert?

@  Mandy (Gast)

>Das Compare Match schaltet lediglich einen Port um, mehr nicht.

Und warum braucht man dazu einen Interrupt? Das kann die Hardware 
allein, das ist ja der Witz an den OCRx Pins .. .

MfG
Falk

von Mandy (Gast)


Lesenswert?

Falk Brunner schrieb:
> Und warum braucht man dazu einen Interrupt? Das kann die Hardware
> allein, das ist ja der Witz an den OCRx Pins .. .

Ok, da müsste ich das Layout ändern, wäre aber eine saubere Lösung.
Wenn ich dann zusätzlich das Compare Match wieder deaktivieren will (was 
nicht sehr zeitkritisch ist), könnte ich ja die ISR Compare Match 
trotzdem noch ausführen lassen, zum deaktivieren oder?
Die Hardware ändert meinen Pin dann trotzdem direkt beim Compare Match, 
richtig?

Grüße
Mandy

von Falk B. (falk)


Lesenswert?

@  Mandy (Gast)

>Wenn ich dann zusätzlich das Compare Match wieder deaktivieren will (was
>nicht sehr zeitkritisch ist), könnte ich ja die ISR Compare Match
>trotzdem noch ausführen lassen, zum deaktivieren oder?

Ja.

>Die Hardware ändert meinen Pin dann trotzdem direkt beim Compare Match,
>richtig?

Ja.

MFG
Falk

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.