www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupts speichern


Autor: ubootfanat (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ubootfanat (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder Dein Compiler optimiert Dir irgendetwas weg.

Autor: ubootfanat (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.