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.

[参考译文] MSP-EXP430F5529LP:将其设置为睡眠模式 LPM4、但仍获得超过500uA 的电流。

Guru**** 2478765 points
Other Parts Discussed in Thread: MSP-EXP430F5529LP

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1290714/msp-exp430f5529lp-set-it-to-sleep-mode-lpm4-but-still-get-over-500ua-current

器件型号:MSP-EXP430F5529LP

尊敬的先生:

我将此板连接到一个简单的键盘、尝试将其设置为进入 LPM4模式、禁用所有 I/O 并禁用所有 SPI 和 I2C、确认 I/O 没有进行电流确认、已启用按键唤醒并可以唤醒。   

在电流测试期间、移除了从 SBW_TST 到 GND 的所有9个跳线、移除了 JP8、电路板仍然接收到500uA 以上的电流。   

请告知我错过了哪些程序。

非常感谢。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Martin:

    您是否有机会 在 CCS 中运行示例代码 MSP430F55xx_LPM4.c 来查看功 耗?

    如果 仍然无法正常工作、请告诉我。

    此致、

    肖恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sean:

    感谢您的答复。

    我将这部分代码放到了睡眠例程中、 在睡眠模式下仍然需要大约50uA 的时间、并且无法再唤醒。

    如果取出这行代码"  UCSCTL4 = SELA_1;",则可以按键唤醒。  

    谢谢!

    WDTCTL = WDTPW | WDTHOLD;//停止 WDT

    //设置 UCS
    UCSCTL4 = SELEA_1;//确保 VLO 为 ACLK 源

    //端口配置
    P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00;
    P7OUT = 0x00;P8OUT = 0x00;PJOUT = 0x00;
    P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF;
    P7DIR = 0xFF;P8DIR = 0xFF;PJDIR = 0xFF;

    //禁用 VUSB LDO 和 SLDO
    USBKEYPID = 0x9628;//将 USB KEY和 PID 设置为0x9628
    //启用对 USB 配置寄存器的访问
    USBPWRCTL &&~(SLDOEN+VUSBEN);//禁用 VUSB LDO 和 SLDO
    USBKEYPID = 0x9600;//禁用对 USB 配置寄存器的访问

    //禁用 SVS
    PMMCTL0_H = PMMPW_H;// PMM 密码
    SVSMHCTL &&~Ω(SVMHE+SVSHE);//禁用高侧 SVS
    SVSMLCTL &=~Ω(SVMLE+SVSLE);//禁用低侧 SVS

    _ bis_SR_register (LPM4_bits);//输入 LPM4

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sean、您好!

    如果我运行演示代码 MSP430F55xx_LPM4.C、 只需要2.5uA。   但我的程序有2个设置例程、  

    增加 VCoreToLevel2();
    initClock45C(); 25MHz

    否则、它运行得太慢。

    因此、当它具有这2个例程时、它将在 LPM4睡眠模式期间消耗大约500uA 的电流。  

    有什么解决方法的想法吗?

    谢谢!

    void initClockTo25MHz()
    {
    UCSCTL3 |= SELREF_2; // Set DCO FLL reference = REFO
    UCSCTL4 |= SELA_2; // Set ACLK = REFO
    __bis_SR_register(SCG0); // Disable the FLL control loop
    
    UCSCTL0 = 0x0000; // Set lowest possible DCOx, MODx
    UCSCTL1 = DCORSEL_5; // Select DCO range 16MHz operation
    UCSCTL2 = FLLD_0 + 749; // 487; // Set DCO Multiplier 487 for 16MHz,
    // (N + 1) * FLLRef = Fdco
    // (487 + 1) * 32768 = 16MHz
    // Set FLL Div = fDCOCLK
    
    __bic_SR_register(SCG0); // Enable the FLL control loop
    
    // Worst-case settling time for the DCO when the DCO range bits have been
    // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
    // UG for optimization.
    // 32 x 32 x 16 MHz / 32,768 Hz = 500000 = MCLK cycles for DCO to settle
    __delay_cycles(750000);//
    // __delay_cycles(500000);//
    // Loop until XT1,XT2 & DCO fault flag is cleared
    do
    {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG; // Clear fault flags
    }while (SFRIFG1&OFIFG); // Test oscillator fault flag
    }
    
    uint16_t setVCoreUp(uint8_t level){
    uint32_t PMMRIE_backup, SVSMHCTL_backup, SVSMLCTL_backup;
    
    //The code flow for increasing the Vcore has been altered to work around
    //the erratum FLASH37.
    //Please refer to the Errata sheet to know if a specific device is affected
    //DO NOT ALTER THIS FUNCTION
    
    //Open PMM registers for write access
    PMMCTL0_H = 0xA5;
    
    //Disable dedicated Interrupts
    //Backup all registers
    PMMRIE_backup = PMMRIE;
    PMMRIE &= ~(SVMHVLRPE | SVSHPE | SVMLVLRPE |
    SVSLPE | SVMHVLRIE | SVMHIE |
    SVSMHDLYIE | SVMLVLRIE | SVMLIE |
    SVSMLDLYIE
    );
    SVSMHCTL_backup = SVSMHCTL;
    SVSMLCTL_backup = SVSMLCTL;
    
    //Clear flags
    PMMIFG = 0;
    
    //Set SVM highside to new level and check if a VCore increase is possible
    SVSMHCTL = SVMHE | SVSHE | (SVSMHRRL0 * level);
    
    //Wait until SVM highside is settled
    while((PMMIFG & SVSMHDLYIFG) == 0)
    {
    ;
    }
    
    //Clear flag
    PMMIFG &= ~SVSMHDLYIFG;
    
    //Check if a VCore increase is possible
    if((PMMIFG & SVMHIFG) == SVMHIFG)
    {
    //-> Vcc is too low for a Vcore increase
    //recover the previous settings
    PMMIFG &= ~SVSMHDLYIFG;
    SVSMHCTL = SVSMHCTL_backup;
    
    //Wait until SVM highside is settled
    while((PMMIFG & SVSMHDLYIFG) == 0)
    {
    ;
    }
    
    //Clear all Flags
    PMMIFG &= ~(SVMHVLRIFG | SVMHIFG | SVSMHDLYIFG |
    SVMLVLRIFG | SVMLIFG |
    SVSMLDLYIFG
    );
    
    //Restore PMM interrupt enable register
    PMMRIE = PMMRIE_backup;
    //Lock PMM registers for write access
    PMMCTL0_H = 0x00;
    //return: voltage not set
    return false;
    }
    
    //Set also SVS highside to new level
    //Vcc is high enough for a Vcore increase
    SVSMHCTL |= (SVSHRVL0 * level);
    
    //Wait until SVM highside is settled
    while((PMMIFG & SVSMHDLYIFG) == 0)
    {
    ;
    }
    
    //Clear flag
    PMMIFG &= ~SVSMHDLYIFG;
    
    //Set VCore to new level
    PMMCTL0_L = PMMCOREV0 * level;
    
    //Set SVM, SVS low side to new level
    SVSMLCTL = SVMLE | (SVSMLRRL0 * level) |
    SVSLE | (SVSLRVL0 * level);
    
    //Wait until SVM, SVS low side is settled
    while((PMMIFG & SVSMLDLYIFG) == 0)
    {
    ;
    }
    
    //Clear flag
    PMMIFG &= ~SVSMLDLYIFG;
    //SVS, SVM core and high side are now set to protect for the new core level
    
    //Restore Low side settings
    //Clear all other bits _except_ level settings
    SVSMLCTL &= (SVSLRVL0 + SVSLRVL1 + SVSMLRRL0 +
    SVSMLRRL1 + SVSMLRRL2
    );
    
    //Clear level settings in the backup register,keep all other bits
    SVSMLCTL_backup &=
    ~(SVSLRVL0 + SVSLRVL1 + SVSMLRRL0 + SVSMLRRL1 + SVSMLRRL2);
    
    //Restore low-side SVS monitor settings
    SVSMLCTL |= SVSMLCTL_backup;
    
    //Restore High side settings
    //Clear all other bits except level settings
    SVSMHCTL &= (SVSHRVL0 + SVSHRVL1 +
    SVSMHRRL0 + SVSMHRRL1 +
    SVSMHRRL2
    );
    
    //Clear level settings in the backup register,keep all other bits
    SVSMHCTL_backup &=
    ~(SVSHRVL0 + SVSHRVL1 + SVSMHRRL0 + SVSMHRRL1 + SVSMHRRL2);
    
    //Restore backup
    SVSMHCTL |= SVSMHCTL_backup;
    
    //Wait until high side, low side settled
    while(((PMMIFG & SVSMLDLYIFG) == 0) &&
    ((PMMIFG & SVSMHDLYIFG) == 0))
    {
    ;
    }
    
    //Clear all Flags
    PMMIFG &= ~(SVMHVLRIFG | SVMHIFG | SVSMHDLYIFG |
    SVMLVLRIFG | SVMLIFG | SVSMLDLYIFG
    );
    
    //Restore PMM interrupt enable register
    PMMRIE = PMMRIE_backup;
    
    //Lock PMM registers for write access
    PMMCTL0_H = 0x00;
    
    return true;
    }
    
    bool increaseVCoreToLevel2()
    {
    uint8_t level = 2;
    uint8_t actlevel;
    bool status = true;
    
    //Set Mask for Max. level
    level &= PMMCOREV_3;
    
    //Get actual VCore
    actlevel = PMMCTL0 & PMMCOREV_3;
    
    //step by step increase or decrease
    while((level != actlevel) && (status == true))
    {
    if(level > actlevel)
    {
    status = setVCoreUp(++actlevel);
    }
    }
    
    return (status);
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sean、您好!

    是否有任何示例代码可以将 cMSP430F55xx 设置为高速(即24MHz)并能够以最小低电流进入睡眠模式 LPM4,但可以通过密钥(端口1.x)唤醒?

    我确实需要它在紧急情况下。

    非常感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Martin:

    要 在一个线程中包含代码、请使用上面的代码格式、选择"插入"、"代码"、然后选择语言、这有助于我们阅读。

    通过上述两个函数、我无法找到器件消耗电流的原因、该电流消耗应来自请求时钟的外设。 请阅读用户指南中的第5.2.11节因此、您可能需要在进入 LPM4之前设置一个断点、查看请求时钟的确切外设并禁用时钟、或设置 UCSCTL8寄存器位以禁用所有时钟请求(《用户指南》第5.4.9节)。

    以下是由 P1.4MSP430F55xx_P1_03.c 唤醒的示例代码

    此致、

    肖恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sean:

    我认为它不是由 I/O 问题引起的。   原因是当我使用演示代码 MSP430F55xx_LPM4.c 时、它可以以<3uA 的值进入 LPM4。

    这意味着我的电路板没有 I/O 电流冲突。  

    但是、一旦我在上电期间添加了加速例程、请等待一秒钟、然后进入相同的睡眠模式、电流会超过1mA。

    因此、同一个睡眠模式条目的工作方式不同。  

    我还尝试在睡眠模式之前添加这些内容、它仍然无法正常工作。

    UCSCTL3=0;
    UCSCTL4 = 0x44;
    UCSCTL0 = 0x0000;//  
    UCSCTL1 = 0x20;//  
    UCSCTL2 = 0x106F;

    请尝试添加加速例程、亲自观察。

    非常感谢!

    void initClockTofast()
    {
    BUCSCTL3 = UCSCTL3;
    BUCSCTL4=UCSCTL4;
    UCSCTL3 |= SELREF_2;//设置 DCO FLL 基准= REFO
    UCSCTL4 |= SELA _2;//设置 ACLK = REFO
    _ bis_SR_register (SCG0);//禁用 FLL 控制环路

    BUCSCTL2 = UCSCTL2;
    BUCSCTL1=UCSCTL1;
    UCSCTL0=0x0000;//设置尽可能低的 DCOx、MODx
    UCSCTL1=DCORSEL_5;//选择 DCO 范围16MHz 运行
    UCSCTL2 = FLLD_0 + 487;//+ 749;// 487;//将 DCO 乘法器487设置为16MHz、749为25MHz。
    //(N + 1)* FLLRef = Fdco
    //(487 + 1)* 32768 = 16MHz
    //设置 FLL Div = fDCOCLK

    __BIC_SR_register (SCG0);//启用 FLL 控制环路

    //当 DCO 范围位已存在时 DCO 最坏情况下的稳定时间
    //更改了 n x 32 x 32 x f_MCLK / f_FLL_reference。 请见5xx 中的 UCS 章节
    //针对优化进行 UG。
    // 32 x 32 x 16 MHz / 32,768Hz = 500000 = DCO 的 MCLK 周期稳定
    __delay_cycles (750000);//
    //_delay_cycles (500000);//
    //循环直到 XT1、XT2和 DCO 故障标志被清除
    正确
    {
    UCSCTL7 &=~(XT2OFFG + XT1LFOFFG + DCOFFG);//清除 XT2、XT1、DCO 故障标志
    SFRIFG1并且=~OFIFG;//清除故障标志
    —while (SFRIFG1&OFIFG);//测试振荡器的故障标志

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    作者:Martin

    您能否提供所运行的 c 文件的完整代码以获取该1mA? 我在添加此函数时遇到问题、程序卡在底部的循环中。(SFRIFG 值卡在0x102)。  

    我将尝试将时钟设置为25MHz、然后进入 LPM4。 让我 明天回复您。

    此致、

    肖恩

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sean、您好!

    这里是我在原始  MSP430F55xx_LPM4.c 代码的基础上修改的代码、只是在上电时增加了速度、延迟了一位并断电。   

    LPM4模式导致超过1mA。  

    我曾尝试在 LPM4之前添加这些值。  我使用了其他代码、尝试在修改 UCSCTLx 之前读出它们并取回这些值。  我会尝试添加这些函数、但实际上没有帮助。  

    UCSCTL3=0;
    UCSCTL4 = 0x44;
    UCSCTL0 = 0x0000;//  
    UCSCTL1 = 0x20;//  
    UCSCTL2 = 0x106F;

    谢谢。

    马丁

    #include <msp430.h> 
    #include <stdint.h>
    #include <stdbool.h>
    
    //******************************************************************************
    // Device Initialization *******************************************************
    //******************************************************************************
    
    
    
    uint16_t BUCSCTL2;
    uint16_t BUCSCTL1;
    uint16_t BUCSCTL3;
    uint16_t BUCSCTL4;
    
    void initClockTo25MHz()
    {
        BUCSCTL3 = UCSCTL3;
        BUCSCTL4 = UCSCTL4;
        UCSCTL3 |= SELREF_2;                      // Set DCO FLL reference = REFO
        UCSCTL4 |= SELA_2;                        // Set ACLK = REFO
        __bis_SR_register(SCG0);                  // Disable the FLL control loop
    
        BUCSCTL2 = UCSCTL2;
        BUCSCTL1 = UCSCTL1;
        UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx
        UCSCTL1 = DCORSEL_5;                      // Select DCO range 16MHz operation
        UCSCTL2 = FLLD_0 + 487; // + 749; // 487;                   // Set DCO Multiplier 487 for 16MHz, 749 for 25Mhz.
                                                  // (N + 1) * FLLRef = Fdco
                                                  // (487 + 1) * 32768 = 16MHz
                                                  // Set FLL Div = fDCOCLK
    
        __bic_SR_register(SCG0);                  // Enable the FLL control loop
    
        // Worst-case settling time for the DCO when the DCO range bits have been
        // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
        // UG for optimization.
        // 32 x 32 x 16 MHz / 32,768 Hz = 500000 = MCLK cycles for DCO to settle
        __delay_cycles(750000);//
       // __delay_cycles(500000);//
        // Loop until XT1,XT2 & DCO fault flag is cleared
        do
        {
            UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG); // Clear XT2,XT1,DCO fault flags
            SFRIFG1 &= ~OFIFG;                          // Clear fault flags
        }while (SFRIFG1&OFIFG);                         // Test oscillator fault flag
    }
    
    int main(void)
    {
     //   increaseVCoreToLevel2();
    
        initClockTo25MHz();
    
        __delay_cycles(750000);//
        __delay_cycles(750000);//
        __delay_cycles(750000);//
        __delay_cycles(750000);//
        __delay_cycles(750000);//
        __delay_cycles(750000);//
        __delay_cycles(750000);//
        __delay_cycles(750000);//
        __delay_cycles(750000);//
    /**
        UCSCTL3 = 0;
        UCSCTL4 = 0x44;
        UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx
        UCSCTL1 = 0x20;                      // Select DCO range 16MHz operation
        UCSCTL2 = 0x101F;
     // Setup UCS
    **/
        WDTCTL = WDTPW | WDTHOLD;                 // Stop WDT
      UCSCTL4 = SELA_1;                       // Ensure VLO is ACLK source
    
      // Port Configuration
      P1OUT = 0x00;P2OUT = 0x04;P3OUT = 0x00;P4OUT = 0x7f;P5OUT = 0x00;P6OUT = 0x00;
      P7OUT = 0x00;P8OUT = 0x00;PJOUT = 0x00;
      P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF;
      P7DIR = 0xFF;P8DIR = 0xFF;PJDIR = 0xFF;
    
      // Disable VUSB LDO and SLDO
      USBKEYPID   =     0x9628;           // set USB KEYandPID to 0x9628
                                          // access to USB config registers enabled
      USBPWRCTL &= ~(SLDOEN+VUSBEN);      // Disable the VUSB LDO and the SLDO
      USBKEYPID   =    0x9600;            // access to USB config registers disabled
    
      // Disable SVS
      PMMCTL0_H = PMMPW_H;                // PMM Password
      SVSMHCTL &= ~(SVMHE+SVSHE);         // Disable High side SVS
      SVSMLCTL &= ~(SVMLE+SVSLE);         // Disable Low side SVS
    
      __bis_SR_register(LPM4_bits);             // Enter LPM4
      __no_operation();
    
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sean、您好!

    如果不调用 setVCoreUp()例程,我就无法将时钟速度设置为25MHz,而只能将它设置为22Mhz。  

    现在在我的代码中、我只能将时钟设置为22Mhz、而在 LPM4模式下、最低设置为61uA、然后可进行密钥唤醒并再次运行。

     但是、如果我添加线   

    UCSCTL4 = SELA _1;  

    它可以低至50uA、但  无法通过按键唤醒。

    谢谢!

    马丁

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    作者:Martin  

    这是我使用 MSP-EXP430F5529LP 进行的测试。

    首次使用 MSP430F55xx_LPM4.c 运行、电流读数为1.1uA、表明器件处于 LPM4中。

    然后、在进入 LPM4之前、我添加了使用25MHz DCO 切换 P1.1的代码:

    #include <msp430.h>
    
    void SetVcoreUp (unsigned int level);
    
    int main(void)
    {
      volatile unsigned int i;
    
      WDTCTL = WDTPW+WDTHOLD;                   // Stop WDT
      P1DIR |= BIT1;                            // P1.1 output
    
      P1DIR |= BIT0;                            // ACLK set out to pins
      P1SEL |= BIT0;
      P2DIR |= BIT2;                            // SMCLK set out to pins
      P2SEL |= BIT2;
      P7DIR |= BIT7;                            // MCLK set out to pins
      P7SEL |= BIT7;
    
      // Increase Vcore setting to level3 to support fsystem=25MHz
      // NOTE: Change core voltage one level at a time..
      SetVcoreUp (0x01);
      SetVcoreUp (0x02);
      SetVcoreUp (0x03);
    
      UCSCTL3 = SELREF_2;                       // Set DCO FLL reference = REFO
      UCSCTL4 |= SELA_2;                        // Set ACLK = REFO
    
      __bis_SR_register(SCG0);                  // Disable the FLL control loop
      UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx
      UCSCTL1 = DCORSEL_7;                      // Select DCO range 50MHz operation
      UCSCTL2 = FLLD_0 + 762;                   // Set DCO Multiplier for 25MHz
                                                // (N + 1) * FLLRef = Fdco
                                                // (762 + 1) * 32768 = 25MHz
                                                // Set FLL Div = fDCOCLK/2
      __bic_SR_register(SCG0);                  // Enable the FLL control loop
    
      // Worst-case settling time for the DCO when the DCO range bits have been
      // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
      // UG for optimization.
      // 32 x 32 x 25 MHz / 32,768 Hz ~ 780k MCLK cycles for DCO to settle
      __delay_cycles(782000);
    
      // Loop until XT1,XT2 & DCO stabilizes - In this case only DCO has to stabilize
      do
      {
        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
                                                // Clear XT2,XT1,DCO fault flags
        SFRIFG1 &= ~OFIFG;                      // Clear fault flags
      }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag
    
    
    
        P1OUT ^= BIT1;                          // Toggle P1.1
        __delay_cycles(600000);                 // Delay
    
    
      WDTCTL = WDTPW | WDTHOLD;                 // Stop WDT
    
     // Setup UCS
      UCSCTL4 = SELA_1;                       // Ensure VLO is ACLK source
    
      // Port Configuration
      P1OUT = 0x00;P2OUT = 0x00;P3OUT = 0x00;P4OUT = 0x00;P5OUT = 0x00;P6OUT = 0x00;
      P7OUT = 0x00;P8OUT = 0x00;PJOUT = 0x00;
      P1DIR = 0xFF;P2DIR = 0xFF;P3DIR = 0xFF;P4DIR = 0xFF;P5DIR = 0xFF;P6DIR = 0xFF;
      P7DIR = 0xFF;P8DIR = 0xFF;PJDIR = 0xFF;
    
      // Disable VUSB LDO and SLDO
      USBKEYPID   =     0x9628;           // set USB KEYandPID to 0x9628
                                          // access to USB config registers enabled
      USBPWRCTL &= ~(SLDOEN+VUSBEN);      // Disable the VUSB LDO and the SLDO
      USBKEYPID   =    0x9600;            // access to USB config registers disabled
    
      // Disable SVS
      PMMCTL0_H = PMMPW_H;                // PMM Password
      SVSMHCTL &= ~(SVMHE+SVSHE);         // Disable High side SVS
      SVSMLCTL &= ~(SVMLE+SVSLE);         // Disable Low side SVS
    
      __bis_SR_register(LPM4_bits);             // Enter LPM4
      __no_operation();
    }
    
    
    void SetVcoreUp (unsigned int level)
    {
      // Open PMM registers for write
      PMMCTL0_H = PMMPW_H;
      // Set SVS/SVM high side new level
      SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level;
      // Set SVM low side to new level
      SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level;
      // Wait till SVM is settled
      while ((PMMIFG & SVSMLDLYIFG) == 0);
      // Clear already set flags
      PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
      // Set VCore to new level
      PMMCTL0_L = PMMCOREV0 * level;
      // Wait till new level reached
      if ((PMMIFG & SVMLIFG))
        while ((PMMIFG & SVMLVLRIFG) == 0);
      // Set SVS/SVM low side to new level
      SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
      // Lock PMM registers for write access
      PMMCTL0_H = 0x00;
    }

    电流读数为1.3uA、没有问题。

    请尝试上面的代码吗?

    此致、

    肖恩