www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IRQ Priorität MSP430


Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
ich stehe gerade vor einem schwewigenden problem....
ich möchte den msp alle 8s aus dem lpm3 wecken (mittels wdtirq) das geht 
soweit auch sehr gut! das problem ist ich warte während des wdt irq auf 
einen uart irq der nicht ausgelöst wird. ich vermute das hängt mit der 
priorität zusammen.... gibt es einen weg dies zu umgehen?

mfg marcel

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beim Start der WDT-ISR gleich wieder _EINT(); einfügen.
Besser ist aber, in der ISR des WDT den Stack zu verändern, dass nach 
dem Reti kein LPM mehr aktiv ist. Gibts einen Befehl, weiß aber grade 
nich ausm Kopf. BIC_SR_IRQ...irgendwas....

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube da hilft nur umbauen.
Z.B. in der WDT Routine:
while (1)
{
  if (IFG1 & URXIFG0) // RX aktivität?
  {
    // mach was mit UART
  }
}

Oder die WDT Routine beenden und danach auf den UART IRQ warten.

Und natürlich darauf achten das der UART auch mit dem DCO läuft, oder 
den Quarz (falls vorhanden) vorher aktivieren.

Autor: Jörg S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Beim Start der WDT-ISR gleich wieder _EINT(); einfügen.
Ich mag mich irren, aber ich glaube in den ISRs sind die Interrupts eh 
schon aktiviert. Da der Watchdog aber eine sehr hohe Priorität hat, 
lässt der sich einfach nicht durch einen anderen unterbrechen.

> Gibts einen Befehl, weiß aber grade nich ausm Kopf.
> BIC_SR_IRQ...irgendwas....
LMP3_EXIT wäre es für IAR Compiler.

Autor: Marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

erstmal danke für die infos! ich werde das mal mit dem _EINT(); 
probieren. ich werde über meine erfolge/misserfolge berichten.....

meine bisherige idee war folgendes:

wdt irq kommt:

...
-    sende zeichen über uart
while(flag==0)
{
-    gehe in lpm3
}

-   auswertung
ende wdt irq

uartrx irq
-   rxdaten sichern
-   8 daten byte empfangen?

ja:
-     geh nicht in den lpm3
-     flag = 1;

nein:
-     gehe in den lpm3

end uartrx irq

Problem jetzt läuft der stack über und die auswertung geht net :(. ich 
ahbe 80 byte für den stack (laut iar fenster)......



Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Priorätät spielt nur eine Rolle, wenn mehrere Interrupts 
gleichzeitig anstehen. Da wird dann der WDT zuerst angesprungen und dann 
der niederpriore. Ich mach das immer so, und es funktioniert.

Man sollte allerdings die ISR immer so kurz wie möglich halten, und in 
der main-schleife dann die Auswertung machen. Mit Exit_LPMx kann man den 
Prozessor am Leben lassen, nach dem der Int beendet ist, ansonsten geht 
er in den LPM, der vorher war.

Es sei hier besonders auf die SLAA294A verwiesen.

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.