PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisfrage zur Architektur mit Interrups [solved]



clupus
18.02.2006, 18:15
Hallo allerseits,

ich hätte da eine kleine Verständlinsfrage zur Atmel-Architektur:
Wenn ich mit cli die Interrupts deaktiviere und z.B. ein Timer-Overflow passiert (Timer läuft ja weiter), wird kein Interrupt gefeuert. Eigentlich wird doch aber das Interrupt-Flag gesetzt, oder?

Wenn ich dann nach einigen (zeitkritschen) Schritten die Interrupts mit sei wieder aktiviere, wird dann der Timerx_Overflow gefeuert, oder "verpufft" der Interrupt, wenn ich ihn nicht manuell prüfe?

Wo ich schon dabei bin: Bei der alten 8051-Reihe war es noch so, dass der Interrupt bis zu 8 Maschienzyklen versetzt gefeuert wurde. Kann das bei den Megas auch passieren oder wird der Spung in den Interrupt-Vektor beim nächsten Takt ausgeführt?

MfG
Christian

PicNick
18.02.2006, 18:41
Nix puff. Mit sei() wird die Kiste wieder scharf und holt alle interrupts (in ihrer Priorität) nach.
Die laufende Instruktion wird immer fertig gemacht. Dann wird der Prog-Counter gepusht (4 Cyclen) und die Instruktion am Iterrrupt Vector wird ausgeführt. Da das meist ein far-jump ist, sind es wohl nochmal 2 cyclen.
Diese "verlorenen" Cyclen sind aber immer gleich, du kannst sie (bei Timern) einrechnen.
Ungewiss ist nur, ob die laufende Instruktion einen zweiten Fetch drinnen hat.
Bei einem Neumann-Prozessor ist das immer etwas unsicherer, da jeder Befehl eine verschiedene Anzahl Takten braucht.

Steht aber klitzeklein im Datasheet.