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
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.
>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 |
LPM4_bits sind für LPM4. Du benutzt nicht zufällig ACLK für den WDT?
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
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?
>> 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.
??? In der main, in einer ISR, ...? Zeig doch einfach den Code.
Läuft alles in main. Wie Clemens L. schrieb könnte durchaus ALCK vom Timer oder vom Watchdog das Problem verursachen. Analyse läuft.
Die Erklärung steht im FUG unter 10.2.5 erklärt. ALCK und Lpm4 schließen sich aus.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.