Hallo Zusammen, Ich bin hier grad am programmieren und bisschen mit dem AVR Simulator am simulieren. Installiert hab ich Atmel Studio 6. Wenn ich jetzt zb einen Timer overflow habe geht er auch in die ISR rein und führt sie aus nur das Problem ist das er kein zweites mal dort reingeht. Das selbe Problem besteht bei einem Pin interrupt (Logikwechsel am Pin). Ist dies ein allgemeines Problem des Simulators? Gruß Daniel
Daniel schrieb: > Ich bin hier grad am programmieren und bisschen mit dem AVR Simulator am > simulieren. Installiert hab ich Atmel Studio 6. Wenn ich jetzt zb einen > Timer overflow habe geht er auch in die ISR rein und führt sie aus nur > das Problem ist das er kein zweites mal dort reingeht. Das selbe Problem > besteht bei einem Pin interrupt (Logikwechsel am Pin). Ist dies ein > allgemeines Problem des Simulators? Ich bin fast sicher, dass es an der Zeile 42 liegt. Schau da nochmal genauer hin...
ret statt reti verwendet? Außerdem wollte Nachtschicht ausdrücken, dass ein Quelltext hilfreich sein könnte.
Daniel schrieb: > Ähm, Quelltext? Ick hab keen Quelltext vom Simulator. Aber vielleicht von dem, was du da simulierst ...
Also hier mal mein code. Aufgerufen wird der Timerinterrupt und PCINT3 Interrupt ja, halt nur einmal leider. Den USART Interrupt kann ich nicht simulieren aber nich weiter schlimm. Gruß Daniel
Also was ich grad beim Simulieren herausgefunden habe ist folgendes. Mit dem Befehl sei(); wird das GIE bit im SREG nicht gesetzt. Mit dem Befehl SREG |= (1<<SREG_I); jedoch schon. Wie kann ich das jetzt verstehen? Wenn nun ein Interrupt aufgerufen wird dann wird das GIE bit im SREG gelöscht. D. h. weitere Interrupts sind dann gesperrt. Wieso macht der Simulator das?
Hi
>Wieso macht der Simulator das?
Weil der Controller das auch so macht. Am Ende einer Interruptroutine
steht immer der Assemblerbefehl 'reti', der das I-Flag wieder
einschaltet.
MfG Spess
>Am Ende einer Interruptroutine steht immer der Assemblerbefehl 'reti',
Ich beende meine ISR-Routinen immer mit 'return' und das funktioniert
bisher immer.
Wird dieser reti Befehl automatisch ausgeführt damit das I-Flag wieder ein ist oder muss ich das manuell setzen? Ich befürchte einfach das dies nur der Simulator nicht setzt auf dem µC selbst jedoch schon.
Hat hier jemand auch schonmal das Problem gehabt, dass das I-Flag im SREG nach einer Interruptausführung nicht wieder aktiviert wird? Ist dies ein Simulatorbug? Gruß Daniel
Bei mir ist das Problem auch schon aufgetreten, dass das I-Flag nach dem Interrupt wieder gesetzt wird. Ich vermute mal dies ist ein Fehler der Atmel Studio Software ;)
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.