www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 GIE nachträgliches Interrupt auslösen


Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hätte eine Frage zum MSP430 die ich mir leider durch die 
Datenblätter nicht beantworten kann, vielleicht hat ja jemand bereits 
Erfahrung damit.

und zwar würde ich gerne eine art CriticalSection-Funktion bauen in der 
kurz Variablenwerte geändert werden aber hald wärenddessen kein anderer 
Code (ISRs) ausgeführt werden sollen

was soweit auch kein Problem ist indem ich mit _DINT() und danach mit 
_EINT() die Interrupts aktiviere und deaktiviere

nun aber zu meiner Frage:
wenn wärend der Zeitspanne wo ich die Interrupts ausgeschaltet habe ein 
Interrupt auftreten würde, wird dieser dann nachträglich (wenn der 
Interrupt wieder aktiviert wird) ausgelöst?

Das einzige was ich zu dem Thema in Datenblättern finden konnte ist der 
Satz aus msp430f1232 Seite 9 vorletzte Zeile:

(Non)-maskable: the individual interrupt enable bit can disable an 
interrupt event, but the general interrupt enable cannot.

Soll das jetzt heißen GIE ist unnütz weil es eh keine interrupts 
deaktiveren kann (was ja nicht wirklich stimmt) oder soll damit 
angemerkt werden das man das machen kann was ich will nur ist es da hald 
etwas knapper formuliert?

mfg Benedikt

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benedikt wrote:
> nun aber zu meiner Frage:
> wenn wärend der Zeitspanne wo ich die Interrupts ausgeschaltet habe ein
> Interrupt auftreten würde, wird dieser dann nachträglich (wenn der
> Interrupt wieder aktiviert wird) ausgelöst?

Ja (afair...)

> Das einzige was ich zu dem Thema in Datenblättern finden konnte ist der
> Satz aus msp430f1232 Seite 9 vorletzte Zeile:

Die eigentlich Erklärungen sind in den User Guides nicht in den 
Datenblättern (MSP430x1xx Family User's Guide (Rev. F) etc.)

> (Non)-maskable: the individual interrupt enable bit can disable an
> interrupt event, but the general interrupt enable cannot.
>
> Soll das jetzt heißen GIE ist unnütz weil es eh keine interrupts
> deaktiveren kann (was ja nicht wirklich stimmt) oder soll damit
> angemerkt werden das man das machen kann was ich will nur ist es da hald
> etwas knapper formuliert?

Nein, nicht maskierbar sind Reset/NMI, Flash-Zugriffsfehler und 
Oszillator-Fehler d.h. wenn bspw. ein Oszillator-Fehler auftritt und der 
entsprechende Interrupt eingeschaltet ist (OFIE) wird dieser Interrupt 
ausgeführt, egal ob GIE an oder aus ist.

> mfg Benedikt

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab gerade die Antwort gefunden
http://www.mikrocontroller.net/articles/Interrupt

genial dieses Forum
:)

mfg benedikt

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
THX Arc für die schnelle antwort.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht noch als Ergänzung:

>und zwar würde ich gerne eine art CriticalSection-Funktion bauen in der
>kurz Variablenwerte geändert werden aber hald wärenddessen kein anderer
>Code (ISRs) ausgeführt werden sollen.
>was soweit auch kein Problem ist indem ich mit _DINT() und danach mit
>_EINT() die Interrupts aktiviere und deaktiviere

Genau das kann/wird Dir zum Verhängnis werden!
Nehmen wir an, Du bist in einem Programmteil, in dem die IRQ's gesperrt 
sind (GIE=0). Aus diesem Teil rufst Du nun Deine Funktion 
"CriticalSection()" auf, die beim Rücksprung die IRQ's aber nun 
freigibt, obwohl sie vorher gesperrt waren...!

In IAR gibt es dafür die sogenannte Monitor-Funktion
(z.B. __monitor void CriticalSection(void) ).
Monitorfunktionen verbieten während ihrer Ausführung die IRQ's und 
stellen bei ihrer Beendigung den vorherigen Status wieder her.

Alternativ kannst Du z.B. das Statusregister (GIE-Bit) sichern und beim 
Beenden Deiner Funktion wiederherstellen.

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.