Forum: Compiler & IDEs ISR Was macht das?


von Karl (Gast)


Lesenswert?

Hallo,
ich habe mir jetzt viele Internetseiten und die dazugehörigen seiten im 
GCC tutorial durchgelsen aber immer noch nicht verstanden was es mit der
Funktion
1
ISR(INT0_vect) {}
 auf sich hat. Bei meinem aktuellen Programm ist sie notwendig damit das 
Programm nach einem Sleep Mode an der Stelle weiter arbeitet an der es 
in den Sleep Modus gegangen ist und nicht komplett neu startet. Aber 
warum?
Die Interrupts aktiviere ich vor dem Sleep Mode mit sei() und auch den 
INT0 zum wecken des µC. Aktiviere ich damit schon die ISR Funktion oder 
erst mit dem Sleep Mode? Wie und Warum hängen die beiden zusammen?
Wäre über eine detailierte Beschreibung sehr dankbar.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Karl schrieb:

> Bei meinem aktuellen
> Programm ist sie notwendig damit das Programm nach einem Sleep Mode an
> der Stelle weiter arbeitet an der es in den Sleep Modus gegangen ist und
> nicht komplett neu startet. Aber warum?

Weil du aus dem Schlaf nur durch einen Interrupt geweckt werden
kannst, und ein aktivierter Interrupt springt immer zu seinem
Interruptvektor.  Auf diesem musst du eine gültige ISR hinterlegen,
da die Bibliothek ansonsten einen Sprung auf die Adresse 0 als
default-ISR einträgt (da ein aktivierter Interrupt mit fehlender
ISR in aller Regel ein Programmierfehler ist, auf den man auf diese
Weise am ehesten aufmerksam gemacht wird).

In deinem Falle braucht die ISR selbst aber keinen Code, da kannst
du auch schreiben:
1
EMPTY_INTERRUPT(INT0_vect);

Andererseits: je nachdem, wer den Interrupt auslöst, wirst du u. U.
den Interrupt selbst in der ISR abschalten wollen, damit er nicht
zu schnell wieder triggert.  Das ist insbesondere bei einem
pegelgetriggerten Externinterrupt praktisch zwingend notwendig.

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.