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:driverlib示例pcm_go to _lpm3将lpm3更改为lpm4当前使用仍为0.2mA

Guru**** 2595805 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/638851/ccs-msp432p401r-driverlib-example-pcm_go_to_lpm3-changing-lpm3-to-lpm4-current-usage-still-at-0-2ma

部件号:MSP432P401R
主题中讨论的其他部件:ENERGYTRACE

工具/软件:Code Composer Studio

我正在使用driverlib的 pcm_go_to_lpm3示例,但我将第115行更改为 map_pcm_gotoLPM4();,而不 是map_pcm_gotoLPM3();。 我正在使用万用表读取调试器和微控制器之间3V3引脚上的电流,我正在读取0.2mA。 我不应该期待一个更接近1uA的东西吗?

/*--版权所有--,BSD
*版权所有(c) 2017,Texas Instruments Incorporated
*保留所有权利。
*
**
允许以源代码和二进制格式重新发布和使用,无论是否进行*修改,只要
满足以下条件*:
*
****重新发布源代码必须保留上述版权
*声明,此条件列表和以下免责声明。
*
***以二进制格式重新分发时,必须在

随分发提供的*文档和/或其他材料中复制上述版权*声明,此条件列表和以下免责声明。
*
***

未经事先书面许可,不得使用德州仪器(TI)公司的名称或*其贡献者的名称来支持或促销由本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*,

不提供任何明示或暗示的担保,包括但不限于*对适销性和特定*用途适用性的暗示担保。 在任何情况下,版权所有者或
*贡献者均不对任何直接,间接,附带,特殊,
*示范, 或后果性损害(包括但不限于
*购买替代商品或服务;使用,数据或利润损失;
(*或业务中断),但根据任何责任理论
,*无论是合同,严格责任还是侵权行为(包括疏忽或
*其他),均因使用本软件而导致*
,即使已被告知此类损害的可能性。
-/copyright--*//*******************************************************************************************************

* MSP432 PCM -转至LPM3
*
*说明:在此非常简单的示例中
,演示了如何使用PCM API转至* LPM3。 设备配置为GPIO中断
*(当用户按下WFP 1.1 上的按钮时唤醒设备),然后
*使用PCM_gotoLPM3功能将设备置于LPM3中。 此外
,*设备的配置方式可最大限度地降低功耗,并
*达到有关功耗的数据表规格。
*
** MSP432P401
* -----------
* /|\\| |
* || |
* --|RST WFP 1.0 |-->WFP 1.0 LED
* | |
* | WFP 1.1 |<--Toggle Switch*
| |
* | **

******************* /*
DriverLib包括*/
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>/*

Standard包括*/
#include <stdint.h>
#include <stdbool.h>

int main(void){

/*停止监视程序*/
MAP_WDT_A_HoldTimer();

/*将WFP 1.0 配置为输出,将WFP 1.1 (开关)配置为输入*/
MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN0);

/*将WFP 1.1 配置为输入并启用中断*/
MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);
MAP_GPIO_enableInterrupt (GPIO端口_P1,GPIO _PIN1);
MAP_Interrupt_enableInterrupt (INT_Port1);
MAP_Interrupt_enableSleepOnIsrExit();

/*端接所有剩余引脚以最小化功耗。 这是
通过注册访问来完成,以简化操作并最大限度地减少分支API
呼叫*/
MAP_GPIO_setAsOutputPin (GPIO端口P2,PIN_All8);
MAP_GPIO_setAsOutputPin (GPIO端口PB,PIN_ALL16);
MAP_GPIO设置输出引脚(GPIO_PORT_PC, PIN_ALL16);
MAP_GPIO设置输出引脚(GPIO_PORT_PD,PIN_ALL16);
MAP_GPIO设置输出引脚(GPIO_PORT_PE, PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO端口P2,PIN_All8);
MAP_GPIO_setOutputLowOnPin (GPIO端口PB,PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO端口PC,PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO端口PD,PIN_ALL16);
MAP_GPIO_setOutputLowOnPin (GPIO端口PE,PIN_ALL16);

/*启动LFXT并从中获取ACLK和BCLK */
MAP_CS_setExternalClockSourceFrequency(3.2万,48000000);</s>48000000
MAP_GPIO设置外围模块功能输出引脚(GPIO_PORT_PJ,
GPIO _PIN0 | GPIO _PIN1,GPIO主要模块功能);
MAP_CS_startLFXT (CS_LFXT_DRIVE3);
MAP_CS_INITClockSignal (CS_ACLK,CS_LFXTCLK_SELECT,CS_CLock_diver_1);
MAP_CS_initClockSignal (CS_BCLK,CS_LFXTCLK_SELECT,CS_CLock_diver_1);

/*正在禁用高压侧监控器*/
MAP_PSS_DisableHighide();

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

/*启用主中断*/
MAP_Interrupt_enableMaster();

/*转至LPM3 */
同时(1)
{
/*请注意,虽然此示例仅涉及LPM3,但LPM4实际上是
仅LPM3禁用WDT_A/RTC_C。 为方便起见,用户可以
如果要API处理,请使用MAP_PCM_GotoLPM4()函数
禁用这些组件*/
MAP_PCM_GotoLPM4();
}
}/*

GPIO ISR */
void Port1_IRQHandler(void){

UINT32_t状态;

状态= MAP_GPIO _getEnabledInterruptStatus(GPIO_PORT_P1);
MAP_GPIO清除InterruptFlag (GPIO端口P1,状态);

/*切换LED上的输出*/
IF (状态和GPIO _PIN1)
{
MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1, GPIO_PIN0);
}

}

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

    我怀疑您的LaunchPad仍处于调试模式。 在进行功率分析时,如果您的器件处于调试模式,MSP432实际上不会进入LPM0之外的低功耗模式,我认为这是因为调试仍需要器件时钟系统。 因此,设备在调试中“模拟”低功耗模式。 复制实际电源数的方法是确保设备未处于调试模式。 通常,最好的方法是拔下设备,重新插入,然后设备将完全重置。

    您可以从此处访问CCS中的EnergyTrace。 为此,请按照以下SimpleLink Academy实验的任务6中的步骤操作:
    dev.ti.com/.../

    本实验通常向您展示测试MSP432功耗的正确方法,但在本例中,使用的是您没有使用的RTOS示例。 然而,大多数建议仍然适用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Evan:

    感谢您的及时回复。 我在教程中学习了tirtos示例,这是成功的。 当我按照非RTOS示例的步骤操作时,我仍然不成功。 我相信您是对的,这是在调试模式下存在的问题,因为我无法给出任何其他解释, 但我不确定为什么在RTOS示例中使用的退出调试模式的步骤不会转移到非RTOS示例。

    我的总体目标是修改VCD示例(可在此处找到: www.ti.com/.../SIMPLELINK-SDK-VOICE-DETECTION-PLUGIN)。 我已断开屏幕连接,使用一个按钮注册/更新单个单词,另一个按钮开始识别阶段。 我使用外部源作为VAD来触发msp432从睡眠模式唤醒并尝试处理单词。 除了msp432不会进入深度睡眠之外,其他一切都准备就绪。 我将尝试为RTOS实施修改此项,并看看如何进行。 加上音频麦克风板,可以达到~0.8mA,但我认为可以更低。  

    如果您对如何使用非RTOS示例有任何其他建议,我们将非常感谢您。

    谢谢!

    唐老鸭

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

    很抱歉回复太晚。 我一直在尝试重新创建您的问题,但我认为我发现了一个问题,即无法在7.3 中启动能量跟踪,目前正在对此进行调试。 为了提供帮助,您能否告诉我您使用的CCS是什么版本?

    在语音检测应用程序中,您是尝试使用RTOS深度睡眠电源策略,还是使用driverlib呼叫手动将设备置于睡眠状态?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Evan:

    我在Windows 10 (64位)上使用7.3。 我正在使用driverlib调用(map_pcm_gotoLPM3())手动将设备置于睡眠状态。 这是我进入深度睡眠的功能。 我几乎运行了tirtos版本,但我在使用目录包括访问Power_setPolicy()时遇到了困难。

    谢谢!

    唐老鸭

    void enterLowPowerMode(){
    LEDs_shutdown ();
    LEDs_off1 ();
    buttons_shutdown (buttons);
    audio_stopCollect (音频);
    布尔模式状态= false;
    LEDs_setColor2 (0,0,0);
    ADC14_DisableModule();
    MAP_GPIO_setAsOutputPin (AUDIO_OUT端口,AUDIO_OUT PIN);
    MAP_GPIO_setOutputLowOnPin (AUDIO_OUT端口,AUDIO_OUT PIN);
    AUDIO_STODownCollect (音频);
    
    //关闭浮动SPI引脚
    // D SCLK 1.5
    MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN5);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P1,GPIO _PIN5);
    // LP_DAC 5.5
    MAP_GPIO设置输出引脚(GPIO_PORT_P5, GPIO _PIN5);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P5,GPIO _PIN5);
    // D SYNC 5.2
    MAP_GPIO设置输出引脚(GPIO_PORT_P5, GPIO_PIN2);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P5,GPIO _PIN2);
    // 5.0 上的AMP
    MAP_GPIO设置输出引脚(GPIO_PORT_P5, GPIO_PIN0);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P5,GPIO _PIN0);
    // D MOSI 1.6
    MAP_GPIO_setAsOutputPin (GPIO端口P1,GPIO _PIN6);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P1,GPIO _PIN6);
    // PWM AUD 2.5
    MAP_GPIO_setAsOutputPin (GPIO端口P2,GPIO _PIN5);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,GPIO _PIN5);
    MAP_Interrupt_DisableMaster();
    MAP_DMA_DisableModule();
    MAP_ADC14_DisableModule();
    MAP_DMA_DisableChannel (DMA_CHANGE_7);
    MAP_ADC14_DisableConversion();
    MAP_Timer_a_stopTimer (TIMER_A0_BASE);
    MAP_ADC14_DisableInterrupt (ADC_INT0);
    MAP_Interrupt_DisableInterrupt (INT_DMA_INT1);
    MAP_PCM_enableRudeMode();
    
    /*停止监视程序*/
    MAP_WDT_A_HoldTimer();
    
    /*端接所有剩余引脚以最小化功耗。 这是
    通过注册访问来完成,以简化操作并最大限度地减少分支API
    呼叫*/
    MAP_GPIO_setAsOutputPin (GPIO端口P2,PIN_All8);
    MAP_GPIO_setAsOutputPin (GPIO端口PB,PIN_ALL16);
    MAP_GPIO设置输出引脚(GPIO_PORT_PC, PIN_ALL16);
    MAP_GPIO设置输出引脚(GPIO_PORT_PD,PIN_ALL16);
    MAP_GPIO设置输出引脚(GPIO_PORT_PE, PIN_ALL16);
    MAP_GPIO_setOutputLowOnPin (GPIO端口P2,PIN_All8);
    MAP_GPIO_setOutputLowOnPin (GPIO端口PB,PIN_ALL16);
    MAP_GPIO_setOutputLowOnPin (GPIO端口PC,PIN_ALL16);
    MAP_GPIO_setOutputLowOnPin (GPIO端口PD,PIN_ALL16);
    MAP_GPIO_setOutputLowOnPin (GPIO端口PE,PIN_ALL16);
    
    /*启动LFXT并从中获取ACLK和BCLK */
    MAP_CS_setExternalClockSourceFrequency(3.2万,48000000);</s>48000000
    MAP_GPIO设置外围模块功能输出引脚(GPIO_PORT_PJ,
    GPIO _PIN0 | GPIO _PIN1,GPIO主要模块功能);
    MAP_CS_startLFXT (CS_LFXT_DRIVE3);
    MAP_CS_INITClockSignal (CS_ACLK,CS_LFXTCLK_SELECT,CS_CLock_diver_1);
    MAP_CS_initClockSignal (CS_BCLK,CS_LFXTCLK_SELECT,CS_CLock_diver_1);
    
    /*设置系统时钟*/
    MAP_CS_setDCOCenteredFrequency(CS_DCO_Frequency_1_5);
    // MAP_CS_INITClockSignal (CS_MCLK,CS_DCOCLK_SELECT,CS_CLock_DICROLOR_1);
    // MAP_CS_INITICClockSignal (CS_HSMCLK, CS_DCOCLK_SELECT,CS_CLock_diver_2);
    // MAP_CS_INITClockSignal (CS_SMCLK,CS_DCOCLK_SELECT,CS_CLock_diver_4);
    
    
    /*正在禁用高压侧监控器*/
    MAP_PSS_DisableHighide();
    
    ramd_int_setup();
    /*启用“粗鲁”模式,强制设备进入睡眠状态
    *待处理的时钟请求
    */
    MAP_PCM_enableRudeMode();
    
    /*启用主中断*/
    MAP_Interrupt_enableMaster();
    
    interrupT_disableSleepOnIsrExit();
    while (modeStatus == false){
    modeStatus = map_pcm_gotoLPM3();
    }
    } 

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

    Donald,

    几件事。

    首先,请参阅随附的文件。 我对pcm_go to _lpm3.c文件进行了一些更改,以便更好地设置低功耗测量。 您看到.2~mA测量值的原因是因为存在6个左右浮动引脚,因为端口1未正确初始化。

    请参见所附代码示例中的差异,在该示例中,我初始化所有端口以输出低电平,然后初始化LFXT和LED的引脚。 使用这个代码,我看到了使用EnergyTrace的1.1uA的意思。

    在代码示例中,您有相同的错误(正确,因为PCM示例也不正确),上面示例中的第48行和第53行将更改为:

    MAP_GPIO设置输出引脚(GPIO_PORT_PA,PIN_ALL16);
    
    MAP_GPIO设置输出低引脚(GPIO_PORT_PA,PIN_ALL16); 

    修改的文件: e2e.ti.com/.../0068.pcm_5F00_go_5F00_to_5F00_lpm3.c

    其次,如果您使用RTOS,为什么不明确遵循powerdeepsleep示例? 您可以在此处将电源策略设置为  

    Power_setPolicy((Power_PolicyFxn)PowerMSP432_deepPolicy); 

    您可以像您所经历的SimpleLink Academy一样终止IO,并使用GPIO中断从该电源策略唤醒。 只是好奇!  

    无论哪种方式,这至少都能让您朝着正确的方向前进!

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

    做到了! 添加这两行将获得PCM_GO至_lpm3示例和我自己的代码! 我试图将powerdeepsleep示例应用到我的项目的RTOS版本,但我在使用setPolicy函数时遇到了一些目录问题。 我仍然不确定那里发生了什么问题。 我真的不在乎项目是如何运作的,只是它确实有效。 我现在使用lpm3时的空闲时间大约为1.3uA。

    谢谢!

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

    Donald,

    不知道你想得到多少低功率数字,但我发现我们的驾驶库中另一个差异.

    您可以更改行:

    MAP_CS_startLFXT (CS_LFXT_DRIVE3); 

    目标:

    MAP_CS_startLFXT (CS_LFXT_Drive0); 

    这会将LFXT的驱动强度设置为最低强度,并为您提供另外100或200 nA的节省。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴我能帮助你! 如果您有任何其他与此主题不相关的问题,请随时发布新帖子!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Evan:

    我会多玩几下设置,尝试找到一个好的位置。 我不能在中断唤醒时间响应上牺牲太多。 将来是否有机会更新driverlib示例/教程,或者是否关注TI-RTOS? 非常感谢您的帮助。

    谢谢!

    唐老鸭
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经提交了一个错误来更新driverlib示例,但主要关注的是如何使用TI驱动程序。 尽管如此,我们正在积极地发展这两个方面。 :)
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    然后,我将开始学习车手。 我主要是和他们两个一起在一个方形的位置,所以我最好搬到TI正在移动的任何地方。 这是一个愉快的Evan!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    还是个唐老鸭!

    仅供参考:SimpleLink Academy是开始学习TI驱动程序的最佳场所。 它清楚地描述了使用TI驱动程序的好处以及如何配置这些驱动程序的说明。

    一些有用的链接
    SLA概述: dev.ti.com/.../
    TI-RTOS/驱动程序上的SLA: dev.ti.com/.../tirtos_basics.html
    配置TI-Drivers: dev.ti.com/.../
    移植TI驱动程序:dev.ti.com/.../
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Donald,

    另一件事, 请参阅章节6.4 .2.2 (SRAM存储库保留配置和备份内存),了解有关进一步优化电流消耗的详细信息。 您必须小心关闭自己的SRAM存储库,但您可以这样做并进一步优化电流消耗。

    示例:

    /*禁用SRAM存储库的保留*/
    /* SRAM Bank 0始终保留,不能关闭*/
    sysctl_disableSRAMBankRetention (sysctl_SRA_Bank1 | sysctl_SRAM_Bank2 |)
    sysctl_SRAM_BANK3 | sysctl_SRAM_BANK4 |
    sysctl_SRAM_BANK5 | sysctl_SRAM_BANK6 |
    sysctl_SRAM_BANK7); 

    我只是想注意到这一点,而且这是在我的头脑中发生的!