gast wrote:
> Hmm OK.
> Ich verstehe das jetzt mal so:
> Ein Pegelinterrupt ist z.B. ein gesetztes Bit. Dieses bleibt dauerhaft
> gesetzt und kann daher auch im Sleepmode erkannt werden. Ein edge
> interrupt ist nur eine kurzzeitige Flanke und wird daher nicht erkannt.
> Daraus folgere ich, dass ein Timer Overflow zu den level interrupts
> gehört da er ja ein Bit setzt und damit einen konstanten Pegel hält bis
> das Bit gelöscht wird. Richtig?
Nein. "Level Interrupt" bezieht sich ausschließlich auf die externen
Interrupts. Es gibt (das haben andere oben schon mehrfach geschrieben)
bei den externen Interrupts 2 Möglichkeiten, nämlich flankengetriggert
("edge triggered", auch ereignisgetriggert genannt) und pegelgetriggert
("level triggered", auch als zustandsgetriggert bezeichnet).
Bei einem flankengetriggerten Interrupt wird das Interrupt-Flag bei
einem Pegel- Wechsel (also von 0 auf 1 oder umgekehrt) gesetzt. Wenn
das Flag gelöscht wird, dann wird es erst wieder gesetzt, wenn die
nächste entsprechende Flanke (Pegelwechsel) auftritt.
Bei einem pegelgetriggerten Interrupt ist die Bedingung für das Setzen
des Interrupt-Flags ein betimmter Pegel an dem entsprechenden Pin.
D.h., wenn an dem Pin z.B. Low-Pegel (logisch 0) anliegt, dann wird das
Flag gesetzt. Wenn das Flag gelöscht wird, der Low-Pegel am Pin aber
immer noch da ist, wird das Flag sofort wieder gesetzt.
Im ersten Fall wird auf ein Ereignis reagiert. Mit einem solchen
Interrupt kann man z.B. zählen. Im zweiten Fall wird auf einen Zustand
getriggert. Damit kann man nicht sinnvoll zählen.
Für die Auswertung von ereignisgetriggerten Interrupts benötigt der µC
i.d.R. zur Synchronisation einen Takt (bei sog. synchronen Interrupts).
Wenn dieser aber deaktiviert ist (sleep-Modus), dann können keine
Ereignisse ausgewertet werden, weshalb INT0 in dem Modus zum Aufwecken
nur als Pegel-Interrupt funktioniert. Für pegelgetriggerte Interrupts
wird kein Takt benötigt.
"Takt" schreibt man übrigens immer noch ohne "c" vor dem "k"!