Forum: Mikrocontroller und Digitale Elektronik MSP430 - Problem mit LPM4 (low power mode)


von Juergen P. (optronik)


Lesenswert?

Ich habe leichte Verständnisschwierigkeiten bez. MSP430 LPM Modes, im 
speziellen geht es um einen MSP430G2553 und LPM4.

Laut Datenblatt werden bei LPM4 alle Taktquellen abgeschaltet ("CPU and 
all clocks disabled"). Offenbar ist das bei meiner Anwendung jedoch 
nicht der Fall.

Folgendes Szenario:

Timer A wird über ACLK betrieben. ACLK wiederum hängt an einem externen 
32Khz Quarz.
CPU läuft mit DCO, interner 1MHz Takt.

Die Anwendung läuft im Normalfall mit Timer A Interrupt und LPM3. Wird 
jedoch die Batteriespannung niedrig soll die Anwendung in LPM4 gehen und 
dann nur noch über einen Pin-Change Interrupt anzusprechen sein.

Nun ist es leider der Fall dass die Anwendung in LPM4 gehen soll, der 
Timer Interrupt jedoch fleißig weiterläuft (LED Blinkroutine wurde dort 
testweise eingebaut). Dies widerspricht den Angaben im Datenblatt, ACLK 
läuft weiter und evtl. auch andere Taktquellen.

Sehe ich das richtig? Die Frage wäre zudem was getan werden muss um 
zuverlässig in LPM4 zu kommen und auch dort zu bleiben.

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

Anscheinend bist du nicht im LPM4 sondern LPM3.

Du solltest alle Codeteile überprüfen, in denen SR geändert wird.

Zum Testen kannst du ACLK auf P1.0 ausgeben.

von Juergen P. (optronik)


Lesenswert?

>Anscheinend bist du nicht im LPM4 sondern LPM3.

Demnach sollte folgende Instruktion alle Clocks stoppen?
1
__bis_SR_register(LPM4_bits + GIE);  // Enter Lowest Power mode w/ interrupts enabled

von Clemens L. (c_l)


Lesenswert?

LPM4_bits sind für LPM4.

Du benutzt nicht zufällig ACLK für den WDT?

von Juergen P. (optronik)


Lesenswert?

ACLK wird in der Tat für WDT benutzt. Allerdings wird dieser vor LPM4 
abgeschaltet:
1
IE1 &= ~WDTIE; //disable watchdog timer interrupt
2
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

Und wenn WDT weiterlaufen würde - mit was wäre zu rechnen? Wenn die 
Angabe im Datenblatt stimmt sollte die Taktquelle ACLK deaktiviert 
werden und WDT nicht bedient werden.

: Bearbeitet durch User
von Clemens L. (c_l)


Lesenswert?

ACLK_request würde das Abschalten verhindern.

von interrupt (Gast)


Lesenswert?

Juergen P. schrieb:
> Anscheinend bist du nicht im LPM4 sondern LPM3.
>
> Demnach sollte folgende Instruktion alle Clocks
> stoppen?__bis_SR_register(LPM4_bits + GIE);  // Enter Lowest Power mode
> w/ interrupts enabled

Wo wird das denn aufgerufen?

von Juergen P. (optronik)


Lesenswert?

>> Demnach sollte folgende Instruktion alle Clocks
>> stoppen?__bis_SR_register(LPM4_bits + GIE);  // Enter Lowest Power mode
>> w/ interrupts enabled
>
> Wo wird das denn aufgerufen?

An der Stelle an der die Anwendung in den Tiefschlaf gehen soll.

von interrupt (Gast)


Lesenswert?

???
In der main, in einer ISR, ...?
Zeig doch einfach den Code.

von Juergen P. (optronik)


Lesenswert?

Läuft alles in main.

Wie Clemens L. schrieb könnte durchaus ALCK vom Timer oder vom Watchdog 
das Problem verursachen.
Analyse läuft.

von interrupt (Gast)


Lesenswert?

Die Erklärung steht im FUG unter 10.2.5 erklärt. ALCK und Lpm4 schließen 
sich aus.

von Clemens L. (c_l)


Lesenswert?

WDTHOLD ist nicht genug, um ACLK_request zu deaktivieren; du musst den 
Interval-Timer-Modus konfigurieren (WDTTMSEL).

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.