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.

[参考译文] CCS/MSP432P401R:MCLK 为48MHz、无法真正进入深度睡眠模式

Guru**** 2618835 points

Other Parts Discussed in Thread: ENERGYTRACE

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/676930/ccs-msp432p401r-mclk-is-48mhz-unable-to-really-enter-deep-sleep

器件型号:MSP432P401R

工具/软件:Code Composer Studio

我正在开发可穿戴产品、因此我对功耗有要求。 我必须使用深度睡眠。

我使用了 CCS 中嵌入的工具:Energy Trace,测量我的产品的功率。

通过测量、我发现激活模式和 LPM3模式下的产品功耗相同、达到了20mA 电流。

因此、我认为我的产品没有真正进入 LPM3模式。 您有什么提示提示吗?

我写的关于睡眠 和时钟的代码如下所示:

int main (void)
{

/*停止看门狗*/
MAP_WDT_A_HOLDTimer();

MAP_Interrupt_disableMaster();

//minimize_power_all_GPIO
MAP_GPIO_setAsOutputPin (GPIO_PORT_P1、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P3、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P4、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P5、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P6、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P7、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P8、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P9、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_P10、PIN_ALL16);
MAP_GPIO_setAsOutputPin (GPIO_PORT_PJ、PIN_ALL16);

MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P1、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P2、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P3、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P4、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P5、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P6、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P7、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P8、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P9、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P10、PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO_PORT_PJ、PIN_ALL16);

//初始化 clk
MAP_PCM_setPowerMode (PCM_LDO_MODE);
MAP_PCM_setPowerState (PCM_AM_LDO_VCORE1);

MAP_PCM_setCoreVoltageLevel (PCM_VCORE1);
MAP_FlashCtl_setWaitState (FLASH_BANK0、1);
MAP_FlashCtl_setWaitState (FLASH_BANK1、1);

//为 DCO 频率计算启用 FPU
map_fpu_enableModule();

//将 DCO 频率设置为标准48MHz
//初始化时钟系统
MAP_CS_setDCOCenteredFrequency (CS_DCO_FREQUENCY 48);

for (indConfgClk = 0;indConfgClk < 1000;indConfgClk ++);

MAP_CS_initClockSignal (CS_MCLK、CS_DCOCLK_SELECT、CS_CLOCK _DIVIDER_1);// MCLK = 48M
MAP_CS_initClockSignal (CS_SMCLK、CS_DCOCLK_SELECT、CS_Clock_divider _1);// SMCLK = 48M

//使用所有 RAM 组
MAP_SYSCTL_enableSRAMBankRetention (SYSCTL_SRAM_BANK1);
MAP_SYSCTL_enableSRAMBankRetention (SYSCTL_SRAM_Bank2);
MAP_SYSCTL_enableSRAMBankRetention (SYSCTL_SRAM_BANK3);
MAP_SYSCTL_enableSRAMBankRetention (SYSCTL_SRAM_BANK4);
MAP_SYSCTL_enableSRAMBankRetention (SYSCTL_SRAM_BANK5);
MAP_SYSCTL_enableSRAMBankRetention (SYSCTL_SRAM_BANK6);
MAP_SYSCTL_enableSRAMBankRetention (SYSCTL_SRAM_BANK7);

//启用看门狗
WDT_A_CLOCKITERATIONS_2G);


init_dma();

init_uart();

init_spi();

/*禁用高侧电压监视器/监控器*/
MAP_PSS_disableHighSide();


/*启用“粗鲁”模式,无论设备如何,都强制设备进入睡眠状态
*未处理的时钟请求*/
MAP_PCM_enableRudeMode();

MAP_Interrupt_disableSlepOnIsrExit();
MAP_Interrupt_enableMaster();

while (1)
{

if (map_PCM_gotoLPM3 ())
{

}
其他
{
#ifdef __debug__
printf ("\r\nGoto Lpm3失败");
fflush (stdout);
#endif
}

}







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

    您是否在 SDK 中检查了 PCM_GO_TO_lpm3示例并使用相同的示例来复制行为? 如果您可以修改示例代码并向我们提供相同的代码、我们可以帮助您更好地调试问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "无法真正进入深度睡眠"

    如果您无法真正进入深度睡眠模式、您是否至少能够进入深度睡眠模式?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复,我更改为另一个电路板进行测试。 如果没有 gotoLPM3、则电流比 gotoLPM3中的电流大7mA。
    我认为 msp432处于睡眠状态、但电路也可以测试4mA 的电流。 我认为电路板上可能还有其他电子元件、这些元件都在消耗电能。我仍在寻找降低 MSP432功耗的方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的回复。 我更改为另一个电路板进行测试。 如果没有 gotoLPM3、则电流比 gotoLPM3中的电流大7mA。
    我认为 msp432处于睡眠状态。 但在 SDK,低 MCLK 的 PCM_GO_TO_lpm3示例中、我仍然有一个问题?。 而不使用其他外设。 但在我的项目中,我使用48MHz 的最高 MCLK 频率、并且我仍然使用许多外设、例如 DMA、UART、SPI。在这种情况下、在调用 gotoLPM3函数后、这些外设是否会自动关闭以降低功耗? 如果外设在睡眠期间未自动关闭、是否需要在进入睡眠前手动关闭?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好 Alex

    当使用粗鲁模式时、它将关闭到外设的时钟。 但是、如果您的应用程序控制外设、则不建议这样做。 必须始终正常关闭。 现在、如果可以将 MSP432P401R 的电源与电路的其余部分分离、我建议单独测量电流。

    我在 SDK 中有一个示例

    C:\ti\simplelink_msp432p4_sdk_2_10_00_14\examples\nortos\MSP_EXP432P401R\demos\CMSIS_DSPLib_Chithmsp432p401r

    它也是如此、即将器件从49MHz 的激活状态置于 LPM3状态(忽略其为 LPM3.5的注释)。 我运行了代码并使用 CCS Energytrace 进行检查、电流确实会下降到 uA 级别。 随附了 Energy Trace 的快照。