warum speichert mein Controller ATmega16 einen externen Interrupt, obwohl dieser im GICR nicht zugelassen ist? wird dann im InterruptControllRegister (GICR) der Interrupt erlaubt (softwaremäßig während der laufzeit), wird sofort die zugehörige ISR aufgerufen! ist das normal? wie kann ich das verhindern? bin für jede hilfe dankbar! mfg ubootfanat
its not a bug, its a feature ... In manchen Applikationen kann es sinnvoll sein, bestimmte IR zu disablen, z.B. bei zeitkritischen Aktionen. Deswegen darf die IR-Anforderung aber nicht verlorengehen. Abhilfe in Deinem Fall: Vor dem Freigeben des IR das entsprechende IR-Flag löschen. Stefan
klang nicht schlecht, darum hab ich das auch schon versucht! GIFR = 0xFF; //löschen aller Interrupt-Flags GICR = (1<<INT0)|(1<<INT1); //Freigabe von INT0 und INT1 ...das geschieht in der ISR von INT1, der schon vorher freigegeben wurde wenn nun die ISR von INT1 abgeschlossen ist und die globale Interruptfreigabe wieder aktiv ist, wird sofort der gespeicherte INT0 behandelt!
Merkwürdig. Probier mal, die IR-Flags bitweise zu löschen. Viele Controller brauchen für die Behandlung der IR-Flags eine spezielle Vorgehensweise. Vielleicht bringt auch das Einfügen eines NOP zwischen Löschen des Flags und der Freigabe was. Stefan
den compiler kann ich ausschließen - der macht alles das was ich ihm sage. Auch die Versuche, das Interruptflag zu löschen hauen alle hin! Der gespeicherte und wieder gelöschte IR wird aber trotzdem ausgeführt!! aja, das alles nur im AVRStudio - in meinen Controller kann ich nicht hineinschauen :-) habt ihr noch Lösungsvorschläge? mfg ubootfanat
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.