|
|
发表于 2025-7-11 17:02:24
|
显示全部楼层
来自 上海
我们初始化有接口可以实现,static inline void blc_pm_select_internal_32k_crystal(void)
{
cpu_sleep_wakeup = cpu_sleep_wakeup_32k_rc;
pm_tim_recover = pm_tim_recover_32k_rc;
blt_miscParam.pm_enter_en = 1; // allow enter pm, 32k rc does not need to wait for 32k clk to be stable
}
_attribute_ram_code_sec_noinline_ unsigned int pm_tim_recover_32k_rc(unsigned int now_tick_32k)
{
unsigned int deepRet_tick;
#if (PM_TIM_RECOVER_MODE)
if(pm_timRecover.recover_flag == 0x03){
deepRet_tick = pm_timRecover.tick_sysClk + (unsigned int)(now_tick_32k - pm_timRecover.tick_32k) * tick_32k_calib / 16; // current clock
}
else
#endif
{
#if PM_LONG_SUSPEND_EN //do not consider deepsleep retention timer wake_up(bigger than 16S)
if(pm_long_suspend){
deepRet_tick = tick_cur + (unsigned int)(now_tick_32k - tick_32k_cur) / 16 * tick_32k_calib;
}
else{
deepRet_tick = tick_cur + (unsigned int)(now_tick_32k - tick_32k_cur) * tick_32k_calib / 16; // current clock
}
#else
deepRet_tick = tick_cur + (unsigned int)(now_tick_32k - tick_32k_cur) * tick_32k_calib / 16; // current clock
#endif
}
return deepRet_tick;
} |
|