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.

[参考译文] MSP430FR2355:CPUOFF=0时、SCG0、SCG1和 OSCOFF 状态之间的功耗没有显著变化

Guru**** 2535760 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1041829/msp430fr2355-no-significant-power-consumption-change-between-scg0-scg1-and-oscoff-states-with-cpuoff-0

器件型号:MSP430FR2355

您好!

我尝试使用 VLO 操作 MCU 并关闭 FLL、DCO 和 REFO 模块以尽可能降低功耗、或 CPUOFF=0、SCG1=1、SCG0=1和 OSCOFF=1。 我已将 MCLK、ACLK 和 SMCLK 设置为从 VLO 运行、清除 DCOFFG、XT1OFFG 和 OFIFG 标志、然后使用_ bis_SR_register (SCG0+SCG1+OSCOFF)尝试关闭所有这些、但功耗没有明显变化。 但是、当在尝试设置 SCG0、SCG1和 OSCOFF 之前使用_bis_SR_register (CPUOFF)关闭 CPU 时、如果在禁用这些模块后设置这些位、则会显示预期的功耗下降。 换言之、只有关闭 CPU 不会导致明显的功耗变化、并且只有设置 SCG1、SCG0和 OSCOFF 才会导致明显的功耗变化、但将它们一起设置会导致功耗严重下降。 我的代码如下

#include <msp430.h>
#include <msp430fr2355.h>

void main(void) {
    WDTCTL = WDTPW | WDTHOLD;               // Stop watchdog timer
    PM5CTL0 &= ~LOCKLPM5;                   // Disable the GPIO power-on default high-impedance mode
                                            // to activate previously configured port settings
    P1DIR |= 0x01;                          // Set P1.0 to output direction
    P1OUT = 0x00;                           // Disablee LED blinking

    // Set all GPIOs to outputs pulled low
    P2DIR |= 0x01;
    P2OUT = 0;
    P3DIR |= 0x01;
    P3OUT = 0;
    P4DIR |= 0x01;
    P4OUT = 0;
    P5DIR |= 0x01;
    P5OUT = 0;
    P6DIR |= 0x01;
    P6OUT = 0;
    PADIR |= 0x01;
    PAOUT = 0;
    PBDIR |= 0x01;
    PBOUT = 0;
    PCDIR |= 0x01;
    PCOUT = 0;

    RTCCTL &= ~RTCSS;                       // turn off RTC (no clock)

    CSCTL6 |= XT1FAULTOFF;                  // turns off automatic fault switch ACLK to REFO

    CSCTL4 |= (SELMS >> 1);                 // Set MCLK/SMCLK to VLO
    //CSCTL5 |= SMCLKOFF;                     // turn off SMCLK
    CSCTL4 &= ~SELA;                        // clear SELA bits
    CSCTL4 |= SELA & (SELA << 1);           // set ACLK source to VLO

    CSCTL7 &= ~(XT1OFFG+DCOFFG);            // clear XT1 and DCO fault flags
    SFRIFG1 &= ~OFIFG;                      // clear oscillator fault interrupt flag [HAS TO BE DONE AFTER PREVIOUS LINE]

    while((SFRIFG1 & OFIFG) && (CSCTL7 & XT1OFFG) && (CSCTL7 & DCOFFG));

    __bis_SR_register(SCG0+SCG1+OSCOFF);
    //__bis_SR_register(CPUOFF);

    //LPM0;
    unsigned int i = 0;

    while(1) {
        if (i % 10) {
            P1OUT = 0x01;
        }
        else {
            P1OUT = 0x00;
        }

        ++i;
    }
}

while 循环仅用于查看 CPU 是否处于开启状态或不是处于视觉状态。  

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

    在您设置 CPUOFF 之前、CPU 会生成一个时钟请求、以防止时钟关闭。 见3.2.12

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

    即使清除这些时钟请求使能位也不允许关闭振荡器 、并且在运行__bis_SR_register (SCG0+SCG1+OSCOFF)时、我仍然会看到相同的功耗

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

    在设置任何其他时钟控制位时、保持 CPUOFF = 0未记录、因此不是有效的低功耗模式。

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

    因此,在关闭我不使用的时钟源的同时,没有办法保持 CPU 从 VLOCLK 运行? 它们会为我们的应用消耗大量功率。 我觉得在硬件中实现这一点不应该太困难,我不明白为什么它是无效的电源模式

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

    我注意到其他 MSP 电路板上也是如此、TI 社区中的任何人是否知道在维护 CPU 的同时是否可以关闭 DCO/FLL? 换句话说、是否完全不可能设置 SCG0=1、SCG1=1、OSCOFF=1和 CPUOFF=0并且获得与具有 CPU 额外功耗的 LP 模式相似的功耗?

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

    你不能这么做。 CPU 来自 MCLK、不能来自 VLO!  如果关闭内部或扩展时钟、CPU 将不工作、因此 MCU 将无法使您的设置工作。

    您可以从我附加的图片中获取更多信息。 您只能在更改 SCG0/1时看到 CPU 始终处于关闭状态。

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

    我可以从 VLO 获取 MCLK、我已通过正确引脚上的输出进行确认、但我越深入了解这一点、我就越同意在维护 CPU 时不能关闭不使用的振荡器源

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

    当我仔细检查时、您是对的。 MCLK 可由 VLO 提供...