Forum: Mikrocontroller und Digitale Elektronik Interrupts speichern


von ubootfanat (Gast)


Lesenswert?

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

von Stefan Kleinwort (Gast)


Lesenswert?

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

von ubootfanat (Gast)


Lesenswert?

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!

von Stefan Kleinwort (Gast)


Lesenswert?

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

von thkais (Gast)


Lesenswert?

Oder Dein Compiler optimiert Dir irgendetwas weg.

von ubootfanat (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.