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
Wenn du genau weißt, was du tust, kannst du verschachtelte Interrupts zulassen. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Unterbrechbare_Interruptroutinen
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.
@ 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
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
@ 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.