Other Parts Discussed in Thread: SYSCONFIG, CC2652R7, SYSBIOS
Thread 中讨论的其他器件:CC2652R7、 SYSBIOS、SysConfig
您能帮助我解决 CC2652R7 LaunchPad 上的深度睡眠功耗问题吗?
我使用的是具有外部+3.3V 电源的独立 CC2652R7 LaunchPad。
我使用的是修改了 main ()的 Project Zero 副本,以使用 API PRCMDeepSleep ()将微控制器置于深度睡眠模式。 这些副本来自 CCS 10.4版、使用 SDK 版本 simplelink_13x2_26x2_SDK_5_20_00_52、以及 CCS 12.1版、使用 SDK 版本 simplelink_13x2_26x2_SDK_6_20_00_29。
我不使用您的电源策略 API、并且在.syscfg 中禁用了电源策略。 从未执行 SYSBIOS。
当我使用 CCS 10.4版编译 main ()和项目时,我得到一个"_oad.bin"文件,该文件以接近0uA 的电源电流执行 PRCMDeepSleep ()。
当我使用 CCS 12.1版编译 main ()和工程时,我得到了一个"_oad.bin"文件,该文件以大约595uA 的电源电流执行 PRCMDeepSleep ()。
系统启动文件或 main ()中的 Project Zero Board_initGeneral()函数似乎导致在 CCS 12.1版中打开某个功能,而在 CCS 10.4版中未打开该功能,这会导致深度睡眠期间电源电流过大。
或者,CCS 版本12.1中 SDK PRCMDeepSleep ()中的函数不会关闭与版本10.4相同的模块。
您能否帮助我在 CCS 12.1版中找到额外深度睡眠电流的来源、并告诉我可以使用哪个 API 或直接寄存器写入来获得我在 CCS 10.4版中看到的近0uA 深度睡眠电流。
以下是我在两个 CCS 版本的 main ()开始处使用的代码。 我在两个 CCS 版本中都使用直接寄存器写入、以避免 API 可能存在的任何差异或异常。
//#include for PRCMDEEPSLEP()
#Include DeviceFamily_structPath (driverlib/sys_ctrl.h)
int main()
{
uint32_t un32时长;
/*在堆栈中提出的用于陷阱断言的注册应用程序回调*/
RegisterAssertCback (AssertHandler);
Board_initGeneral();
IntMasterDisable();
//将所有 DIOxx 设置为 GPIO 模式,输入被禁用
IOCPortConfigureSet (0、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (1、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (2、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (3、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (4、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (5、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (6、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (7、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (8、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (9、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (10、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (11、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (12、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (13、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (14、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (15、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (16、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (17、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (18、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (19、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (20、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (21、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (22、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (23、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (24、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (25、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (26、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (27、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (28、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (29、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (30、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
IOCPortConfigureSet (31、IOC_PORT_GPIO、IOC_IOMODE_NORMAL + IOC_INPUT_DISABLE);
//禁止任何 DIOxx 线路作为输出
HWREG (0X400220D0)= 0x0;
//确保在进入深度睡眠之前启用 RTC
//注意:在 CCS 10.0.0中,RTC_CTL 寄存器具有其"组合"事件
// 标志全部设置为1
HWREG (0X40092000)= 0X00070001;
//关闭当前使用的模块的时钟
// PRCM。 RFCCLKG 关闭 RFC 时钟
HWREG (0X40082000 + 0X002C)= 0x0;
// PRCM。 VIMSCLkG 关闭 VIMS 时钟
HWREG (0X40082000 + 0X0030)= 0x0;
// PRCM。 GPIOCLKGR 关闭 GPIO 时钟门运行/全部模式
HWREG (0X40082000 + 0X0048)= 0x0;
// PRCM。 GPTCLKGR 关闭 GPTx 时钟运行/全部模式
HWREG (0X40082000 + 0X0054)= 0x0;
// PRCM。 SSICLKGR 关闭 SSIx 时钟运行/全部模式
HWREG (0X40082000 + 0X0078)= 0x0;
// PRCM。 UARTCLKGR 关闭 UART 时钟运行/全部模式
HWREG (0X40082000 + 0X006C)= 0x0;
// PRCM。 CLKLOADCTL 载入那些需要载入请求的寄存器
HWREG (0X40082000 + 0X0010)= 0x1;
// PRCM。 OSCIMSC 选择振荡器中断屏蔽
HWREG (0X40082000 + 0X0290)= 0x0;
// PRCM。 OSCICR 振荡器原始中断清除
HWREG (0X40082000 + 0X0296)= 0xF;
// AON_RTC。 同步将事务同步到 AON 域
//通过读取此寄存器
un32Hold = HWREG (0X40092000 + 0x2C);
//关闭电源域的电源
// PRCM。 PDCTL0关闭电源域串行、外设
HWREG (0X40082000 + 0X012C)= 0x0;// 0-5uA 睡眠电流、但复位问题
// PRCM。 PDCTL1关闭电源域 VIMS、RFC、CPU
HWREG (0X40082000 + 0X017C)= 0x0;
// PRCM。 RFCBITS 关闭 RFC
HWREG (0X40082000 + 0X01CC)= 0x0;
// PRCM。 RFCMODESEL 选择 RFC 模式0 (??)
HWREG (0X40082000 + 0X01D0)= 0x0;
// PRCM。 VDCTL 请求微型 LDO
HWREG (0X40082000 + 0X000C)= 0x1;
// PRCM。 CLKLOADCTL 载入那些需要载入请求的寄存器
HWREG (0X40082000 + 0X0010)= 0x1;
// AON_PMCTL:JTAGCFG:JTAG_PD_FORCE_ON 关闭 JTAG
HWREG (0X40090000 + 0X0034)= 0x0;
//主机中断使能
IntMasterEnable();
PRCMDeepSleep ();
谢谢。
|
ReplyForward |