This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
使用MSP430F6736,想使用LPM3.5模式,官网上例程无LPM3.5的相关配置,是否相关例程呢?如何进入。以及使用LPM3.5模式下与LPM3模式有无特别需要注意的。
参考下其他型号的例程
//****************************************************************************** // MSP430F665x Demo - LPM4.5, Backup RAM // // Description: Board is setup to first init all ports, setup for P1.4 lo/hi // transition interrupt, and start XT1 for setting BAKMEM registers. // After registers are written, XT1 is disabled, and LPM4.5 is entered. // Upon a lo/hi transition to P1.4, the device will awaken from LPM4.5 // and attempt to verify if the contents remain as they were programmed // previous to entering LPM4.5. If so, the LED is lit, if not, the LED // will blink quickly. If the device was not properly put into LPM4.5 // (see NOTE) before the transition was made, the LED will blink slowly // NOTE: A backup supply is not required since backup is disabled by setting // the BAKDIS bit. // // // NOTE: This code example was tested on the MSP-TS430PZ100USB Rev1.2 board. // To get proper execution of this code example, first switch the JP3 // to external power, and force 3.0V on the VCC pin. Remove JP1 and set // a multimeter on current reading to ensure proper entrance/exit of // LPM4.5. Now build the code example and program the device via the // Debug button. Press "Run" then "Terminate All" buttons. Detatch the // JTAG interface with the FET from the board. You should read around // 0.38uA current through JP1. Attatch a jumper wire from P1.4 (Pin 38) // to Vcc, to trigger a lo/hi transition. The LED on the board should // light up, signifying a successful verificaiton of the programmed // values for all four BAKMEM registers. // // MCLK = SMCLK = default DCO~1MHz // // MSP430F665x // ----------------- // /|\| | // | | | // --|RST | // /|\ | | // --o--|P1.4 P1.0|-->LED // \|/ // // P. Thanigai // Texas Instruments Inc. // May 2012 // Built with IAR Embedded Workbench Version: 5.40 & CCS V5.2 //****************************************************************************** #include <msp430.h> void Board_Init(void); void EnterLPM45(void); void WakeUpLPM45(void); void SetBAKMEM(void); int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT if(SYSRSTIV == 0x08) { WakeUpLPM45(); P1DIR |= BIT0; // P1.0 Output // read backup RAM. if values match, turn on LED. else, clear LED. if((BAKMEM0==0x0000)&&(BAKMEM1==0x1111)&&(BAKMEM2==0x2222)&&(BAKMEM3==0x3333)) { while(1) P1OUT |= BIT0; // all values match, turn on LED } else { while(1) // Blink LED fast if values don't { // all match P1OUT ^= BIT0; __delay_cycles(20000); } } } Board_Init(); SetBAKMEM(); EnterLPM45(); P1DIR |= BIT0; // Code should NOT go here while(1) // Blink LED slow if not an LPM4.5 { // Wakeup condition P1OUT ^= BIT0; __delay_cycles(500000); } } #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=PORT1_VECTOR __interrupt void Port1_ISR (void) #elif defined(__GNUC__) void __attribute__ ((interrupt(PORT1_VECTOR))) Port1_ISR (void) #else #error Compiler not supported! #endif { PMMCTL0_H = PMMPW_H; // open PMM PM5CTL0 &= ~LOCKIO; // Clear LOCKBAK and enable ports PMMCTL0_H = 0x00; // close PMM P1IFG &= ~BIT4; // Clear P1.4 IFG __bic_SR_register_on_exit(LPM4_bits); // Exit LPM4.5 __no_operation(); } void Board_Init(void) { // Port Configuration P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00; P7OUT = 0x00;P8OUT = 0x00;P9OUT = 0x00;PJOUT = 0x00; P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF; P7DIR = 0xFF;P8DIR = 0xFF;P9DIR = 0xFF;PJDIR = 0xFF; // P1.4 Interrupt Configuration P1IES &= ~BIT4; // P1.4 Lo/Hi edge P1IE = BIT4; // P1.4 interrupt enabled P1IFG = 0; // P1.4 IFG cleared // Disable VUSB LDO and SLDO USBKEYPID = 0x9628; // set USB KEYandPID to 0x9628 // enable access to USB config reg USBPWRCTL &= ~(SLDOEN+VUSBEN); // Disable the VUSB LDO and the SLDO USBKEYPID = 0x9600; // disable access to USB config reg __delay_cycles(10000); // settle FLL } void EnterLPM45(void) { __enable_interrupt(); // Turn off Clock for LPM4.5 operation UCSCTL6 |= XT1OFF; // XT1 Off BAKCTL |= BAKDIS; // Supply power from Vcc, Vbat disabled PMMCTL0_H = PMMPW_H; // Open PMM Registers for write and set PMMCTL0_L |= PMMREGOFF; // PMMREGOFF __bis_SR_register(LPM4_bits); // Enter LPM4.5 mode with interrupts __no_operation(); // enabled } void WakeUpLPM45(void) { PMMCTL0_H = PMMPW_H; // open PMM PM5CTL0 &= ~LOCKIO; // Clear LOCKIO and enable ports PMMCTL0_H = 0x00; // close PMM // Restore Port settings P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00; P7OUT = 0x00;P8OUT = 0x00;P9OUT = 0x00;PJOUT = 0x00; P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF; P7DIR = 0xFF;P8DIR = 0xFF;P9DIR = 0xFF;PJDIR = 0xFF; while(BAKCTL & LOCKBAK) // Unlock backup sub system BAKCTL &= ~(LOCKBAK); } void SetBAKMEM(void) { // Set backup RAM values BAKMEM0 = 0x0000; BAKMEM1 = 0x1111; BAKMEM2 = 0x2222; BAKMEM3 = 0x3333; }
//****************************************************************************** // MSP430F66x Demo - RTC_B, LPM3.5, & alarm // // Description: The RTC_B module is used to set the time, start RTC operation, // and read the time from the respective RTC registers. Software will set the // original time to 11:59:45 am on Friday June 22,2012. Then the RTC will // be activated through software, and an alarm will be created for the next // minute (12:00:00 pm). The device will then enter LPM3.5 awaiting // the event interrupt. Upon being woken up by the event, the LED on the board // will be set. // // NOTE: This code example was created and tested using the MSP-TS430PZ100USB // Rev1.2 board. To ensure that LPM3.5 is entered properly, upon opening the // debug window either hit the "Run Free" button on the dropdown menu next to // the run button if you are using CCS, or make sure to check that the // "Release JTAG on GO" option is selected if you are using IAR. // Also ensure Vcc is tied to Vbat if no backup supply is used // // //* An external watch crystal on XIN XOUT is required for ACLK *// // ACLK = 32.768kHz, MCLK = SMCLK = default DCO~1MHz // // MSP430F66xx // ----------------- // /|\| XIN|- // | | | 32kHz // --|RST XOUT|- // | | // | P1.0|--> LED // | Vbat |--- // | | | // | Vcc |--- // P. Thanigai // Texas Instruments Inc. // May 2012 // Built with IAR Embedded Workbench Version: 5.40 & CCS V5.2 //***************************************************************************** #include <msp430.h> void Board_Init(void); void RTC_Init(void); void EnterLPM35(void); void WakeUpLPM35(void); int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT if(SYSRSTIV == 0x08) { // When woken up from LPM3.5, reinit WakeUpLPM35(); // If woken up at noon, set LED if((RTCHOUR == 0x12)&&(RTCMIN == 0x00)&&(RTCSEC == 0x00)) { P1OUT |= BIT0; P1DIR |= BIT0; while(1); } // If values do not match, blink LED fast else { while(1) // continuous loop { P1OUT ^= BIT0; // XOR P1.0 __delay_cycles(20000); // Delay } } } // Init board & RTC, then enter LPM3.5 Board_Init(); RTC_Init(); EnterLPM35(); // Code should not get here // Blink LED slowly if LPM3.5 not entered properly WakeUpLPM35(); while(1) { P1OUT ^= BIT0; // XOR P1.0 __delay_cycles(200000); // Delay } } #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__) #pragma vector=RTC_VECTOR __interrupt void RTCISR (void) #elif defined(__GNUC__) void __attribute__ ((interrupt(RTC_VECTOR))) RTCISR (void) #else #error Compiler not supported! #endif { PMMCTL0_H = PMMPW_H; // open PMM PM5CTL0 &= ~LOCKIO; // Clear LOCKBAK and enable ports PMMCTL0_H = 0x00; // close PMM RTCCTL0 &= ~RTCTEVIFG; __bic_SR_register_on_exit(LPM4_bits); // Exit LPM4.5 __no_operation(); } void Board_Init(void) { // Port Configuration P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00; P7OUT = 0x00;P8OUT = 0x00;P9OUT = 0x00;PJOUT = 0x00; P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF; P7DIR = 0xFF;P8DIR = 0xFF;P9DIR = 0xFF;PJDIR = 0xFF; // Disable VUSB LDO and SLDO USBKEYPID = 0x9628; // set USB KEYandPID to 0x9628 // enable access to USB config reg USBPWRCTL &= ~(SLDOEN+VUSBEN); // Disable the VUSB LDO and the SLDO USBKEYPID = 0x9600; // disable access to USB config reg __delay_cycles(10000); // settle FLL } void RTC_Init(void) { // Setup Clock UCSCTL6 &= ~(XT1OFF); // XT1 On UCSCTL6 |= XCAP_3; // Internal load cap while(BAKCTL & LOCKBAK) // Unlock XT1 pins for operation BAKCTL &= ~(LOCKBAK); do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags }while (SFRIFG1&OFIFG); // Test oscillator fault flag // Configure RTC_B RTCCTL01 |= RTCTEVIE + RTCBCD + RTCHOLD; // BCD mode, RTC hold, enable RTC // event interrupt RTCYEAR = 0x2012; // Year = 0x2012 RTCMON = 0x06; // Month = 0x06 = June RTCDAY = 0x22; // Day = 0x22 = 22nd RTCDOW = 0x05; // Day of week = 0x05 = Friday RTCHOUR = 0x11; // Hour = 0x11 RTCMIN = 0x59; // Minute = 0x59 RTCSEC = 0x45; // Seconds = 0x45 RTCCTL1 |= RTCTEV_0; // Set RTCTEV for 1 minute alarm RTCCTL01 &= ~(RTCHOLD); // Start RTC calendar mode // Turn off Clock for LPM4.5 operation UCSCTL6 |= XT1OFF; // XT1 Off } void EnterLPM35(void) { __enable_interrupt(); PMMCTL0_H = PMMPW_H; // Open PMM Registers for write PMMCTL0_L |= PMMREGOFF; // and set PMMREGOFF __bis_SR_register(LPM4_bits); // Enter LPM3.5 mode with interrupts __no_operation(); // enabled } void WakeUpLPM35(void) { PMMCTL0_H = PMMPW_H; // open PMM PM5CTL0 &= ~LOCKIO; // Clear LOCKBAK and enable ports PMMCTL0_H = 0x00; // close PMM // Restore Port settings P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00; P7OUT = 0x00;P8OUT = 0x00;P9OUT = 0x00;PJOUT = 0x00; P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF; P7DIR = 0xFF;P8DIR = 0xFF;P9DIR = 0xFF;PJDIR = 0xFF; // Restore Clock so that RTC will be read UCSCTL6 &= ~(XT1OFF); // XT1 On UCSCTL6 |= XCAP_3; // Internal load cap while(BAKCTL & LOCKBAK) // Unlock XT1 pins for operation BAKCTL &= ~(LOCKBAK); do { UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags SFRIFG1 &= ~OFIFG; // Clear fault flags }while (SFRIFG1&OFIFG); // Test oscillator fault flag // Reconfig/start RTC RTCCTL01 |= RTCBCD + RTCHOLD; RTCCTL01 &= ~RTCHOLD; }
关于LPM3.5 建议您参考下TRM内的内容
http://www.ti.com/lit/ug/slau208q/slau208q.pdf
When LPMx.5 (LPM3.5 or LPM4.5) is entered, the voltage regulator of the Power Management Module(PMM) is disabled. All RAM and register contents are lost. Although the I/O register contents are lost, the I/O pin states are locked upon LPMx.5 entry. See the Digital I/O chapter for further details. Wakeup from LPM4.5 is possible from a power sequence, a RST event, or from specific I/O. Wakeup from LPM3.5 is possible from a power sequence, a RST event, RTC event, or from specific I/O.
以及
1.4.2 Entering and Exiting Low-Power Modes LPMx.5