www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Freigeben und sperren von IRQs


Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute!

Ich programmiere AVR-MEGAs mit dem Codesvision.

Beim aktuellen Projekt verwende ich den 16-Bit
Timer 1 des ATMEGA2561.

Wenn ich jetzt z.B. das 16-Bit OCR1A-Register
beschreiben möchte sieht das so aus.
OCR1AH=0x10;
OCR1AL=0xFE;

Der 16-Bit Wert wird erst übernommen wenn der zweite
Befehl durch ist.
Zwischen den beiden Befehlen darf laut Datenblatt,
so wie ich das verstanden habe, kein IRQ auftreten,
da sonst der gesamte 16-Bit Wert nicht geschrieben werden
kann.

Die einzige Möglichkeit besteht nun darin, die IRQs zu sperren.
Dies mach ich mit:
#asm("CLI")
OCR1AH=0x10;
OCR1AL=0xFE;
#asm("SEI")

Nun könnte es aber in diesem Fall sein, dass der IRQ von einer
übergeordneten Funktion, aus welchen Gründen auch immer, bereits
gesperrt wurde und von dieser Timerwertzuweisung nicht freigegeben
werden darf.
Wie kann ich feststellen, ob die IRQs bereits gesperrt sind oder
nicht?

Danke für eure Antworten.
Tut mir leid, bin leider noch nicht ganz so sattelfest.

Tschüss
Martin

Autor: ArminD (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

man kann über das I-Bit des Registers SREG
feststellen ob Interrupts gesperrt sind
oder nicht:
I = 1: Interrupts freigegeben
I = 0: Interrupts gesperrt

Gruss,
Armin

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach das SREG sichern und statt sei() wieder zurück schreiben.


Allerdings ist mir kein einziger Fall bekannt, wo Interrupts längere
Zeit gesperrt werden, da dies zu sehr den Programmablauf
durcheinanderbringen würde.

Nach der Initialisierung gibts ein einmaliges sei() und dann läuft das
Programm.


Peter

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke.
Tschüss Martin

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.