An alle Interrupt Freunde, ich möchte via INT2 (PORTB2) einen S/W interrupt ausführen. Aber allein schon den INT2 initialisiere, wird gleich ein Interrupt ausgeführt, was aber nicht sein soll. Ich möchte vielmehr, dass erst bei einem negativen Signal in PORTB2 der erste interrupt ausgeführt wird. Dazu hier der code, device is ATmega32: cli sbi DDRB, PORTB2 ; Setze PORTB2 auf output sbi PORTB, PORTB2 ; Setze PORTB2 auf high in temp1, GICR ; hole Interrupt register ori temp1, (1<<INT2) ; enable INT2 out GICR, temp1 ; schreibe zurück sei Nach dieser code sequenz (sei) wird sofort der interrupt ausgeführt (im Simulator), was aber nicht sein soll. Was mache ich hier verkehrt ? Oder ist nur der Simulator falsch gestrickt ? Schon mal Danke für jede Antwort. Gruss Manni
Vielleicht solltest du vorher das Interrupt-Flag im Flagregister löschen. Wie es beim Mega32 heißt, weiß ich jetzt nicht, bei anderen AVRs heißt es GIFR. Gelöscht wird das Flag durch Schreiben einer 1, nicht durch Schreiben einer 0. Dann solltest du auch mal schaun, wo du den Auslösemode des Interrupts einstellen kannst (fallende/steigende Flanke, Low-Level), bei anderen AVRs ist das in MCUCR der Fall. Ich gehe mal davon aus, dass die Interrupt-Vektoren korrekt eingetragen sind (mit JMP) und der Stackpointer initialisiert wird. ...
@Hannes Danke dir für die Tips: - Interrupt Vector richtig eingestellt - Stack pointer korrekt initialisiert (SPH, SPL) - Low Level Trigger in MCUCR Es liegt aber einfach am AVR simulator. Das INTF2 Flag in GIFR setzt sich beim ersten Aufruf des Simulators richtig auf 0. Beim zweiten Aufruf des Simulators ist das Flag schon gesetzt (siehe attached Screenshot), wenn gerade mal vom RESET Vektor an die 1. instruction gesprungen wird. Na ja, das ist halt beim AVR Studio (Version 4.12, Built 460) so mit dem Gaul und dem Maul. Ich gehe mal davon aus, das im richtigen Leben (Code im controller) das Programm so läuft, wie es im Datenblatt beschrieben ist. Danke an Hannes für die Tips !!
macht er beim Timer auch. Wenn man zu Fuß das IntFlag löscht, geht alles richtig. Ist aber nur im Simulator. Mir konkret beim Mega48 aufgefallen. In real geht alles. So ist das mit dem Weib und dem Leib ;-)) AxelR.
@ Axel Ist ja gut zu hören, dass auch du das schon mit dem timer beobachtet hast. Mit dem hatte ich ich schon so meine Probleme bis ich endlich aufgehört habe zu simulieren und den code reingeworfen habe. Seitdem bin ich sehr misstrauisch, wenn ich was im Datenblatt gelesen habe und verstanden habe und dann tut nicht. Danke für deinen Hinweis Gruss Manni
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.