mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 aus LPM3 aufwecken


Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,
ich bin gerade dabei eine eigene Firmware für meine ez430 Chronos zu 
schreiben. Damit die Knopfzelle lange hält, soll der Prozessor zur 
größten Zeit im Stromsparmodus(LPM3) verbleiben. Zum Testen habe ich 
folgenden Code gschrieben (MSPGCC)

#include  "cc430x613x.h"
#include <signal.h>
#include <stdlib.h>
#include "lcd.h"



interrupt (WDT_VECTOR) WDTServiceRoutine(void) {
  SFRIFG1 &= ~WDTIFG;  
}

void main(void)
{
  P5SEL |= 0x03;                            // Select XIN, XOUT on P5.0 and P5.1
  UCSCTL6 &= ~XT1OFF;                  // XT1 On, Highest drive strength
  //UCSCTL6 &= ~XCAP_3;  
  do
  {
        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + XT1HFOFFG + DCOFFG);
    SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  } while ((SFRIFG1 & OFIFG));  
  PMMCTL0_H  = 0xA5;
  PMMCTL0_L |= PMMHPMRE;
  PMMCTL0_H  = 0x00;  

  WDTCTL =  WDT_ADLY_1000; //WDT auf 1 sec aufziehen
  SFRIE1 |= WDTIE; // WDT int ein
  initlcd();
  _EINT(); //INTs aktivieren
  LCDM1 |= (1<<5);
  while(1) {
    LCDM1 ^= (1<<7);
    LPM3; //schlafen legen
  
    
    

  }
  __no_operation();  // For debugger
}
Dieser soll im 1sec-Takt ein Segment toggeln. Das segment bleibt jedoch 
an.
Wenn ich das Seg-Togglen in den INT verlager, dann geht's. In der 
Originalen Firmware sieht das ganze aber ungefähr so aus:
while(1)

  {

    // When idle go to LPM3

      idle_loop();



      // Process wake-up events

      if (button.all_flags || sys.all_flags) wakeup_event();

      

      // Process actions requested by logic modules

      if (request.all_flags) process_requests();

      

      // Before going to LPM3, update display

      if (display.all_flags) display_update();  

   }
idle_loop(); macht de facto nichts anderes als LPM3;
Was mache ich falsch bzw. welches Bit in welchem Register habe ich 
übersehen.
PS: Kann mir jemand ein GUTES und tiefgängiges MSP430-Tutorial von 
ähnlicher Qualität wie das AVR(GCC)-Tutorial empfehlen?

Autor: Christian C. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Deiner ISR musst Du dafür sorgen, dass der MSP nach dem RETI auch 
aufwacht. Dazu müssen die LPM3-Bits im Statusregister (SR) nach dem RETI 
gelöscht sein. Das machst Du, in dem Du sowas wie "bic.w #LPM3, 0(SP)" 
machst. Das löscht die LPM3-Bits des auf dem Stack geretteten SR.
Nach dem RETI wird das SR wieder mit dem Inhalt aus dem Stack 
beschrieben und der MSP wacht auf.

Programmiere das Teil nur in Assembler. Das müsstest Du dann in C 
genauso machen. Vielleicht hat der IAR ja auch einen eigenen Befehl 
dafür.

Autor: siegmar (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die family guides sind eigentlich sehr umfangreich.
Auch in den Applikationsbeispielen, fndest Du alles was Du brauchst.
Kostet halt etwas Zeit um sich einzuarbeiten.
Ansonsten kannst Du auch das Yahoo Forum durchsuchen.
Hab leider keine Uhr zur Hand, sonst ......
"Ohne Fleiß, keine Preis"
gilt auch hier !
Viel Spaß beim Lesen der Datenblätter... steht alles drin!
Noch einen schönen Abend
Gruß
Siegmar

Autor: Lukas K. (carrotindustries)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank, jetzt läuft's keksfreu
MSPGCC hat dafür ein Makro LPM3_EXIT
Nen wirklich GUTES Tutorial hat's aber keines?

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.