Thread 中讨论的其他器件: CC1310
工具与软件:
我将使用 LAUNCHXL-CC1310进行开发。
我目前在进入睡眠模式时测量的电流为70uA、但 cc1310手册显示进入睡眠模式时的电流为0.7uA。 那么、为了降低这里的电流值、我需要做什么呢? 在1.CC1310中是否有任何默认设置为高电平的引脚值? 如果我把它们更改为低电平、会更低一点吗?
2.您能告诉我哪些引脚需要视为低电平吗?
3.我现在已经在 main.c 文件中编写了类似这样的电源管理策略代码来进入睡眠模式、但当我通过 CCS 调试单步执行该代码时、当执行 PRCMSleep ();函数时、"CPUWFI"部分中"PowerCC26XX_tirtos.c"文件中的 PowerCC26XX_StandbyPolicy 函数中会出现错误、如图中所示、什么是此错误? 根据我的发现、流向 CPU 的电流似乎会切断、对吗? 由于此误差、CPU 现在处于通电状态、因此无法完全进入睡眠模式、这就是我测量到70uA 的原因。
main.c
POWER_releaseConstraint (PowerCC26XX_SB_disallow);// standy 전환 제약 해제-> STANDBY 모드 진입
POWER_setConstraint (PowerCC26XX_RETAIN_VIMS_CACHE_IN_STANDBY);// VISM 메모리 데이터 저장 유지
PowerCC26XX_standbyPolicy ();//待机模式 에서의 전원 관리 μ A
PowerCC26XX_tirtos.c
void PowerCC26XX_standbyPolicy (void)
{
bool justIdle = true;
uint32_t 约束;
uint32_t 节拍;
uint32_t time;
/*禁用中断*/
CPUcpsid();
/*检查运行条件、最佳选择 DCDC 与 GLDO */
SysCtrl_DCDC_VoltageConditionalControl();
/*查询声明的约束*/
约束= Power_getConstraintMask ();
/*快速检查是否仅允许 WFI;如果是、则立即执行*/
if ((约束&
((1 << PowerCC26XX_disallow_standby)|(1 << PowerCC26XX_disallow_idle)))=
((1 << PowerCC26XX_disallow_standby)|(1 << PowerCC26XX_disallow_idle))){
PRCMSleep();
}
/*
*检查是否允许自动激活任何睡眠模式
*/
否则{
/*检查是否允许我们进入待机状态*/
如果((约束条件和(1 << PowerCC26XX_disallow_standby))= 0){
ticks = Clock_getTicksUntilInterrupt ();
/*将刻度转换为 usec */
时间=节拍* Clock_tickPeriod;
如果(Time > Power_getTransitionLatency (PowerCC26XX_STANDBY、Power_Total)){
/*安排唤醒事件*/
tick—= PowerCC26XX_WAKEDELAYSTANDBY / Clock_tickPeriod;
if (PowerCC26XX_CONFIG.enableMaxStandbyDuration){
/*如果请求、安排提前唤醒。 */
if (tick > PowerCC26XX_CONFIG.maxStandbyDuration){
节拍= PowerCC26XX_CONFIG.maxStandbyDuration;
}
}
CLOCK_setTimeout (Clock_Handle (((Clock_Struct *)&PowerCC26XX_MODULE.clockObj)、tick);
CLOCK_START (Clock_Handle ((Clock_Struct *)&PowerCC26XX_MODULE.clockObj));
/*进入待机模式*/
POWER_SLEEP (PowerCC26XX_STANDBY);
CLOCK_STOP (Clock_Handle ((Clock_Struct *)&PowerCC26XX_MODULE.clockObj));
justIdle = false;
}
}
/*空闲(如果允许)*/
if (JustIdle){
如果((约束条件和(1 << PowerCC26XX_disallow_idle))= 0){
uint32_t modeVIMS;
/* 1. 获取当前 VIMS 模式*/
执行{
modeVIMS = VIMSModeGet (VIMS_BASE);
} while (modeVIMS == VIMS_MODE_CHANGE);
/* 2. 将闪存配置为空闲或非空闲状态下保持开启状态、如果将 VIMS 配置为 GPRAM */、则保持开启状态
如果((约束条件和(1 << PowerCC26XX_NEED_FLASH_IN_IDLE))||
(modeVIMS == VIMS_MODE_DISABLED)){
HWREG (PRCM_BASE + PRCM_O_PDCTL1VIMS)|= PRCM_PDCTL1VIMS_ON;
}
否则{
HWREG (PRCM_BASE + PRCM_O_PDCTL1VIMS)并且=~PRCM_PDCTL1VIMS_ON;
}
/* 3. 在 IDLE 中*/、始终保持高速缓存保留打开
PRCMCacheRetentionEnable();
/* 4. 关闭 CPU 电源域*/
PRCMPowerDomainOff (PRCM_DOMAIN_CPU);
/* 5. 确保所有可能的未完成 AON 写入完成*/
SysCtrlAonSync();
/* 6. 输入 IDLE */
PRCMDeepSleep ();
/* 7. 确保唤醒后 MCU 和 AON 同步*/
SysCtrlAonUpdate();
}
否则{
PRCMSleep();
}
}
}
CPUcpsie();
}
