Forum: Mikrocontroller und Digitale Elektronik MSP430 im LPM


von Tobi (Gast)


Lesenswert?

Guten Abend,
im LPM3 vom MSP430 ist der CPU inaktiv. Wenn ich im DebugerModus den 
LPM3 aktiviere kann ich trotzdem die nächsten Befehle ausführen(LED 
blinken lassen).
Wenn CPU off ist! Wie werden dann die Befehle ausgeführt? Habe ich 
irgendwie ein Denkfehler? Kann mir bitte Jemanden Das erklären
Danke

von Christian R. (supachris)


Lesenswert?

Dazu wird natürlich die CPU aktiviert. Sieht man auch am Stromverbrauch. 
Im Debug-Modus, wenn du Einzelschittbetrieb oder solche Sachen machst, 
übernimmt der Debugger die komplette Kontrolle über die CPU. Wenn du 
nicht debugst, und den LPM3 aktivierst, hält die CPU definitiv an dem 
Befehl an. Erst wenn du durch einen Interrupt die CPU weckst, gehts 
weiter(zumindest in der ISR erst mal).

von Tobi (Gast)


Lesenswert?

Auch nicht im Debug Modus blinkt die LED weiter nach dem einschlaten des 
LPM3.

C Code:
main{
...
LPM3;//
while(1){
LED1_ON;
delay_ms(1000);
LED_off;}
...
}
Irgenwie komisch oder? Wie kann die LED blinken wenn CPU aus ist.
Merken: Alle Interrupts aus.

von Alex (Gast)


Lesenswert?

Poste doch bitte mal den Code, mit dem du den MSP in LPM3 schickst.

mfg Alex

von Tobi (Gast)


Lesenswert?

Das ist der define in msp430x14x.h:
#define LPM3  (SCG1+SCG0+CPUOFF).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dann ersetze doch mal das Macro in Deinem Quelltext durch dessen Inhalt:
1
main
2
{
3
  ...
4
  LPM3;//
5
  while(1)  
6
  {
7
    LED1_ON;
8
    delay_ms(1000);
9
    LED_off;
10
  }
1
main
2
{
3
  ...
4
  (SCG1+SCG0+CPUOFF);//
5
  while(1)  
6
  {
7
    LED1_ON;
8
    delay_ms(1000);
9
    LED_off;
10
  }


Merkst Du was?

von Tobi (Gast)


Lesenswert?

LED blinkt weiter! Keine funktions-Änderung

von Alex (Gast)


Lesenswert?

Wenn dann bitte so:
1
asm(bis.w LPM3,SR);

Oder über die von TI vergefertigten Funktionen. Findeste in der IAR Doku 
oder in den Examples von TI.

mfg Alex

von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

In TI Example wird auch das Macro LPMx benutzt sieh Anhang Zeile 145. 
Andereseits hat den Assembler Befehl in der Funktion nichts geändert(die 
LED leuchtet weiter)!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Merkst Du was?

Anscheinend war der Zaunpfahl nicht ausreichend groß.

  (SCG1+SCG0+CPUOFF);

Das sind einfach nur ein paar numerische Werte, die Bits im 
Statusregister beschreiben:

#define CPUOFF              (0x0010)
#define SCG0                (0x0040)
#define SCG1                (0x0080)

Allerdings hast Du die Headerdatei nicht richtig gelesen, die von Dir 
erwähnte Macrodefinition ist für Assembler. Die in der gleichen 
Headerdatei vorhandene Macrodefinition für C sieht so aus:

#define LPM3_bits           (SCG1+SCG0+CPUOFF)
#define LPM3      _BIS_SR(LPM3_bits)     /* Enter Low Power Mode 3 */

_BIS_SR() ist eine Funktion, die den übergebenen Wert ins Statusregister 
schreibt.

Damit führt LPM3; sehr wohl das aus, was es soll. Könnte es sein, daß Du 
"nicht im Debug modus" falsch verstanden hast und damit Release- statt 
Debug-Code meinst, Dein Programm aber sehr wohl noch unter Kontrolle des 
Debuggers läuft?

von Jörg S. (joerg-s)


Lesenswert?

Poste doch mal den GESAMTEN Quelltext (Watchdog?, CLK init?,..).

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.