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
Schau einfach die Interrupt Flags fuer die betroffenen Interrupts an. Fuer z.B. Timer3 overflow: das TOV3 Bit im ETIFR Register Gruss Marc
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
Das Problem ist bekannt. Man liest einen Timer und etwas später das Überlaufbit. Und nun weiß man nicht, war es schon vor oder erst nach dem Timerlesen gesetzt. Die Lösung findest Du hier: Beitrag "AVR Timer mit 32 Bit" Peter
Hi ! Vielen Dank, bei mir funktioniert es nun einwandfrei !!! Aber ich habe einen kleinen Bug in Timer32.c gefunden. (siehe Link in vorigem Beitrag) Thanks and bye, bitbo
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.