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.

MSP430FR5994 current consumption in LPM3 mode cannot go down to 0.7uA

Other Parts Discussed in Thread: MSP430FR5994, MSP-EXP430FR5994

Hi,

I am using the MSP430FR5994 LaunchPad. And make FR5994 working at LPM3 mode. I removed all the connections between the FET and MSP430FR5994, except the GND and 3V3. And test the current on 3V3 while the FR5994 is running the LPM3 example code. The current is nearly 2mA. Is there any solutions to fix this problem. Thanks!

The code is here,

#include <msp430.h>

int main(void)
{
    // VLOCLK, ~1s interrupts
    WDTCTL = WDTPW | WDTTMSEL | WDTSSEL_2 | WDTIS_5;
    SFRIE1 |= WDTIE;                        // Enable WDT interrupt

    // Configure GPIO
    P1OUT = 0;
    P1DIR = 0xFF;

    P2OUT = 0;
    P2DIR = 0xFF;

    P3OUT = 0;
    P3DIR = 0xFF;

    P4OUT = 0;
    P4DIR = 0xFF;

    P5OUT = 0;
    P5DIR = 0xFF;

    P6OUT = 0;
    P6DIR = 0xFF;

    P7OUT = 0;
    P7DIR = 0xFF;

    P8DIR = 0xFF;
    P8OUT = 0;

    PJOUT = 0;
    PJDIR = 0xFFFF;

    // Disable the GPIO power-on default high-impedance mode to activate
    // previously configured port settings
    PM5CTL0 &= ~LOCKLPM5;

    // Clock System Setup
    CSCTL0_H = CSKEY_H;                     // Unlock CS registers
    CSCTL1 = DCOFSEL_0;                     // Set DCO to 1 MHz
    CSCTL2 = SELM__DCOCLK | SELS__DCOCLK | SELA__VLOCLK;
    CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;   // Set all dividers to 1
    CSCTL4 = LFXTOFF | HFXTOFF;
    CSCTL0_H = 0;                           // Lock CS registers

    P1DIR |= BIT0;                          // Turn on LED

    __bis_SR_register(LPM3_bits | GIE);
    __no_operation();                       // For debugger
}

// Watchdog Timer interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=WDT_VECTOR
__interrupt void WDT_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(WDT_VECTOR))) WDT_ISR (void)
#else
#error Compiler not supported!
#endif
{
    P1OUT ^= BIT0;                          // Toggle P1.0 (LED)
}

  • You toggle a LED - are you sure the current draw isn't caused by the LED? 2mA is a typical value for a low current LED.

  • I am sure it is not cause by the LED.
    When LED-on, the current is about 3.3mA.
    When LED-off, the current is about 2.6mA.
  • Hi Cash,

    I ran the exact same code on my MSP-EXP430FR5994, with the exception of the LED toggle for true LPM3 measurements, and found that the current consumption was near 700 nA. The difference between our setups may have been that I am using a high-resolution DC Power Analyzer to measure the current, what test equipment are you using and are you sure it is rated to measure current values on the micro-amp scale?

    Regards,
    Ryan
  • First of all, you should put the instruction "LPM3" in while(1){}. Otherwise, when watchdog interrupt occurs, the CPU will be waked up and run into end of main(). What will happen when exiting from main()? It will depend on the on_exit implementation of RTS library.

    main()
    {
        ...
        ...
        while (1) {
            LPM3;
            asm(" NOP");
        }
    }

    Secondly, the current consumed by a LED depends on the connected circuit. Could you please show the circuit to control LED?

**Attention** This is a public forum