Forum: Mikrocontroller und Digitale Elektronik Problem mit Interrupt


von Sven (Gast)


Lesenswert?

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.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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...

von Falk B. (falk)


Lesenswert?

@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

von sebastians (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.