Hallo zusammen, ich habe ein keleines Problem mit Interrupts. Also, von der Uni aus, arbeiten wir grad mit dem Asuro in Assembler. Jetzt ist die Aufgabe, in einer ISR (INT1) einen SLEEP Modus zu aktivieren (Idle), aus dem der µC durch ein Timer Overflow Interrupt wieder aufgeweckt werden soll, aber das Ganze halt wie gesagt innerhalb der ersten ISR (INT1). (Wozu das gut sein soll ist mir auch ein Rätsel, aber die wollen das so...) Problem ist, wenn ich jetz in der INT1 ISR die externen Interrupts deaktiviere um dann mit SEI alle anderen Interrupts wieder global zu aktivieren, damit der Timer Overflow Interrupt den µC wieder wecken kann, funktioniert von Anfang an gar kein Interrupt mehr. Also Programm geflasht, Kiste angeschmissen und er reagiert auf gar keinen Interrupt mehr, er kommt noch nciht mal zu dem Punkt wo ich das SEI in der ISR stehen hab. Sobald ich das SEI aus der ISR wieder rausnehme funktionieren danach alle Interrupts wieder. Hab schon im Datenblatt usw. nachgeschaut, aber bin da nicht wirklich schlau geworden. Wäre super wenn mir da jemand den entscheidenen Tip geben könnte :) danke schon mal... und LG, Sven T.
> aber das Ganze halt wie gesagt innerhalb der ersten ISR (INT1). Also willst du einen Interrupt in einer Interruptroutine zulassen? > er kommt noch nciht mal zu dem Punkt wo ich das SEI in der ISR > stehen hab. Sobald ich das SEI aus der ISR wieder rausnehme > funktionieren danach alle Interrupts wieder. Poste doch mal deinen Code. Sonst ist das Stochern im Trüben...
@Sven (Gast) >wieder aufgeweckt werden soll, aber das Ganze halt wie gesagt innerhalb >der ersten ISR (INT1). (Wozu das gut sein soll ist mir auch ein Rätsel, >aber die wollen das so...) Dann sag den Jungs mal, die sollen sich mal ein paar Grundlagen reinziehen und nicht so einen Bockmist erzählen. Für die sinnvolle Nutzung des Sleep Mode muss die ISR nämlich wieder verlassen werden, vor allem weil der AVR keine verschachtelten Interrupts kann. MFG Falk
Vielleicht willst du den SLEEP-Mode garnicht in der Interrupt-Routine aktivieren sondern nur ein Flag setzen, so dass die Hauptschleife wenn sie nichts mehr zu tun hat in den SLEEP-Mode geht?
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.