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.

[参考译文] RTOS/MSP432P401R:使用 driverlib 进行电源控制模式选择

Guru**** 2577385 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/608554/rtos-msp432p401r-power-control-mode-selection-using-driverlib

器件型号:MSP432P401R

工具/软件:TI-RTOS

大家好、我正在为我的项目使用 MSP432 Launchpad、我正在使用 MSP 驱动程序库来配置电路板

其中一种模式是电源控制模式、I hv 调用了一个用于设置内核电压  MAP_PCM_SetCoreVoltageLevel (PCM_VCORE1)的函数;

此功能的设置是什么,它在哪种电源模式下工作?

MAP_PCM_SetCoreVoltageLevel (PCM_VCORE1);在"cpu.c"中定义

我已在随附的文档中逐一映射了函数调用、请参阅、让我帮助了解它设置为 PCM 的内容

P {裕度-底部:0.25cm;线高:120%;}

/********* /

bool PCM_setCoreVoltageLevel (uint_fast8_t voltageLevel)

return __PCM_setCoreVoltageLevelAdvanced (voltageLevel,0,true);

/********* /

静态 bool __PCM_setCoreVoltageLevelAdvanced (uint_fast8_t voltageLevel,

uint32_t 超时、bool 分块)

uint8_t powermode、bCurrentVoltageLevel;

uint32_t regValue;

bool boolTimeout;

assert (voltageLevel = PCM_VCORE0 || voltageLevel = PCM_VCORE1);

/*获取当前功率模式和级别*/

powermode = PCM_getPowerMode();

bCurrentVoltageLevel = PCM_getCoreVoltageLevel ();

boolTimeout =超时>0? true:false;

/*如果我们已经处于他们请求的电源模式,请返回*/

if (bCurrentVoltageLevel = voltageLevel)

返回 true;

while (bCurrentVoltageLevel!= voltageLevel)

regValue = PCM->CTL0;

开关(PCM_getPowerState())

案例 PCM_AM_LF_VCORE1:

案例 PCM_AM_DCDC_VCORE1:

案例 PCM_AM_LDO_VCORE0:

PCM->CTL0 =(PCM_KEY |(PCM_AM_LDO_VCORE1)

|(regValue &~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK));

中断;

案例 PCM_AM_LF_VCORE0:

案例 PCM_AM_DCDC_VCORE0:

案例 PCM_AM_LDO_VCORE1:

PCM->CTL0 =(PCM_KEY |(PCM_AM_LDO_VCORE0)

|(regValue &~(PCM_CTL0_KEY_MASK | PCM_CTL0_AMR_MASK));

中断;

默认值:

断言(false);

if (分块)

while (BITBAND_peri (PCM->CTL1、PCM_CTL1_PMR_BUSY_OFS))

if (boolTimeout &&!(--timeout))

返回 false;

其他

返回 true;

bCurrentVoltageLevel = PCM_getCoreVoltageLevel ();

/*如果我们一直处于 LDO 模式,则更改电源模式*/

if (powermode!= PCM_getPowerMode())

如果(powermode = PCM_DCDC_MODE)

返回 PCM_setPowerMode (PCM_DCDC_MODE);

其他

返回 PCM_setPowerMode (PCM_LF_MODE);

返回 true;

/********* /

uint8_t PCM_getPowerMode (void)

uint8_t currentPowerState;

currentPowerState = PCM_getPowerState ();

开关(电流电源状态)

案例 PCM_AM_LDO_VCORE0:

案例 PCM_AM_LDO_VCORE1:

案例 PCM_LPM0_LDO_VCORE0:

案例 PCM_LPM0_LDO_VCORE1:

返回 PCM_LDO_MODE;

案例 PCM_AM_DCDC_VCORE0:

案例 PCM_AM_DCDC_VCORE1:

案例 PCM_LPM0_DCDC_VCORE0:

案例 PCM_LPM0_DCDC_VCORE1:

返回 PCM_DCDC_MODE;

案例 PCM_LPM0_LF_VCORE0:

案例 PCM_LPM0_LF_VCORE1:

案例 PCM_AM_LF_VCORE1:

案例 PCM_AM_LF_VCORE0:

返回 PCM_LF_MODE;

默认值:

断言(false);

返回 false;

/********* /

uint8_t PCM_getCoreVoltageLevel (void)

uint8_t currentPowerState = PCM_getPowerState ();

开关(电流电源状态)

案例 PCM_AM_LDO_VCORE0:

案例 PCM_AM_DCDC_VCORE0:

案例 PCM_AM_LF_VCORE0:

案例 PCM_LPM0_LDO_VCORE0:

案例 PCM_LPM0_DCDC_VCORE0:

案例 PCM_LPM0_LF_VCORE0:

返回 PCM_VCORE0;

案例 PCM_AM_LDO_VCORE1:

案例 PCM_AM_DCDC_VCORE1:

案例 PCM_AM_LF_VCORE1:

案例 PCM_LPM0_LDO_VCORE1:

案例 PCM_LPM0_DCDC_VCORE1:

案例 PCM_LPM0_LF_VCORE1:

返回 PCM_VCORE1;

案例 PCM_LPM3:

返回 PCM_VCORELPM3;

默认值:

断言(false);

返回 false;

/********* /

uint8_t PCM_getPowerState (void)

返回(PCM->CTL0 | PCM_CTL0_CPM_MASK);

/********* /

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

    我对你的问题并不十分清楚、但我想提供帮助。 我将尽力回答我认为您提出的问题、因此、如果我不回答您的问题、请随时告诉我。

    对于所有 DriverLib API 查询、您应首先参阅 API 指南。 这一点与下面的链接有关、这是我在答复中所指的内容。
    dev.ti.com/.../
    转到模块、然后转到 PCM 以查看我所指的内容。

    调用 PCM_setCoreVoltageLevel 时、您可以选择将 PCM_VCORE 设置为0或1。 当您尝试以高于24MHz 的任何频率运行器件时、这一点很重要。 如果您希望以高于24MHz 的频率运行、则需要使用 PCM_VCORE1。 请参阅下面链接的数据表中的第5.6节"工作模式 CPU 频率范围"。

    为了决定是使用 LDO、DCDC 还是在 LF 模式下使用器件、您需要使用 PCM_setPowerMode。 第5.5节"工作模式 Vcc 范围"提供了有关每种情况下的电压电平的更多信息。

    www.ti.com/.../msp432p401r
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我得到了它,这是一个小信息,它是如何工作的 PCM->CTL0 |函数"getPowerState()"中的 PCM_CTL0_CPM_MASK