Interrupts speichern

Gast #134573
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
Gast #134574
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
Gast #134575
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!
Gast #134576
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
Gast #134578
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.