Noch mal Interrupt (ATMEGA64 mit WinAVR)

Gast #1563973
Lesenswert?

Hallo !

Ja, ich habe gesucht !

Ich habe ein Problem mit gleichzeitigen Interrupts.

1. Habe einen INT4 auf einer positiven Flanke
2. Habe einen ICP3 auf einer positiven Flanke (kein Prescaler, 16 MHz 
Takt)
3. Habe einen T3_OVF bei Überlauf von T3

(Alle Interrupt-Routinen sind nicht unterbrechbar (ISR_BLOCK) und sehr 
kurz.


Während ich im INT4 bin, kommt ein ICP3 und ein T3_OVF nahezu 
gleichzeitig.
(Voriger Zählerstand=65430, aktueller Zählerstand=53, Zähler wird nicht 
zurückgesetzt)
Wenn ich im INT4 fertig bin, wird die ICP3 Routine vor der T3_OVF 
gerufen, da diese in der "Vector-Tabelle" zuerst kommt. Jetzt ist mein 
Timer-Wert schon übergelaufen, aber ich "weiss" es nicht, da die T3_OVF 
noch nicht dran war. Da kann man (wahrscheinlich) auch nix machen.

Ich möchte nur wissen, ob und wie ich in "C" die noch anstehenden 
Interrupts auslesen kann. Gibt es da eine Möglichkeit ?

Danke
bitbo
Gast #1564304
Lesenswert?

OK, Danke für den Hinweis, aber das habe ich auch schon gemacht.
Merkwürdigerweise ist das immer gesetzt ?!?!
(Ich lese das am Anfang der ICP3 aus)

Sollte die T3_OVF Interrupt-Funktion das nicht beim Verlassen löschen ?
Soll/muss ich das in der T3_OVF selbst löschen ?

Unabhängig davon ist die Methode aber nicht sicher, denn bis die erste 
Anweisung in der ICP3 erreicht wird, könnte das Bit im Hintergrund doch
noch "eben" reinrutschen. Das ist doch ein Hardware-Bit, oder ?

Mir wäre wohler, wenn ich die aktuell anstehenden Interrupts auslesen 
könnte...Aber warte: Ist das dann nicht das Gleiche? Bis ich zum 
Auslesen komme, kann es ja dann auch "eben" reinrutschen ?!

Eine Idee?

Gruß
bitbo

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren