有关CH585三模例程中RF低功耗睡眠处理的讲解
一、LP模式
一级睡眠、保持连接
①浅睡时间到达,可主动调用:

②idel_sleep_flag成立后,启动RF_SLEEP_EVENT,

③上报率切换任务解析:
/*********************************************************************
* @fn app_switch_samping_rate
*
* @brief is_connected : 如果当前已连接成功,填TURE,否则填FALSE
*
* @return none
*/
/*查看dongle侧配对任务中定义的bound.pertime值,该值为RTC中断间隔*/
void app_switch_samping_rate(uint16_t new_rate, uint8_t is_connected)
{
samping_rate = new_rate;
if(work_mode==MODE_2_4G)
{
if(samping_rate>500)//1KHz及以上,采用0分频,即不分频,通过主循环的LowPower_Idle实现低功耗
{
//1KHz以上,使用sleep来不及睡眠唤醒,因此采用idle形式做低功耗处理
RFRole_LowPower( 0 );
TMR0_TimerInit(FREQ_SYS / (samping_rate-1));//设置与上报率对应的定时器定时周期
TMR0_Disable();
tmos_stop_task(app_taskId, APP_LOWPOWER_SEND_PACKET_EVT);
tmos_stop_task(app_taskId, APP_SLEEP_EVENT);
if(is_connected)
{
TMR0_Enable();
TMR0_ITCfg(ENABLE, TMR0_3_IT_CYC_END);
PFIC_EnableIRQ(TMR0_IRQn);//启动定时器中断
}
}
else//dongle端pertime设置的是32ms一次通讯连接
{
if((!samping_rate_recover) || (samping_rate == samping_rate_recover))//如果samping_rate_recover标志为0,说明没有进入idle睡眠阶段
//此处也可用if(!idle_sleep_flag)判断代替
{
if(samping_rate>250)//500Hz
{
RFRole_LowPower( 16 );;//16分频->2ms一次通讯连接,最多睡眠2ms会被RTC产生中断唤醒起来执行一轮主循环
}
else if(samping_rate>125)//250Hz
{
RFRole_LowPower( 8 );//8分频->4ms一次通讯连接,最多睡眠4ms会被RTC产生中断唤醒起来执行一轮主循环
}
else//125Hz
{
RFRole_LowPower( 4 );//4分频->8ms一次通讯连接,最多睡眠8ms会被RTC产生中断唤醒起来执行一轮主循环
}
}
else//保持连接、待机模式,采用0分频,即不分频->32ms一次通讯连接,最多睡眠32ms会被RTC产生中断唤醒起来执行一轮主循环
{
RFRole_LowPower( 0 );
}
TMR0_Disable();//关闭定时器外设,低功耗期间,不依赖定时器做键扫
if(is_connected)
{
last_rtc_count = RTC_GetCycle32k();
tmos_set_event(app_taskId, APP_LOWPOWER_SEND_PACKET_EVT);//启动低功耗睡眠任务(可用做低功耗期间的扫描标志位)
}
}
}
}
④APP_LOWPOWER_SEND_PACKET_EVT解析:

⑤主循环:

⑥查标志做一次采样、本例程以模拟数据发送作为示例:

⑦执行完采样,会跑入睡眠任务,


⑧此低功耗阶段,有三种方式退出,恢复工作状态:
1、产生GPIO中断唤醒(GPIO唤醒不会再重启APP_LOWPOWER_SEND_PACKET_EVT),唤醒后调用RF_weakup();可恢复进入低功耗前的原上报率模式;
2、低功耗期间主动调用了发送数据接口rf_send_data
3、低功耗期间主动调用app_switch_samping_rate接口,切换至1K-4KHz模式;
二、8K模式
一级睡眠,保持连接
同LP模式,一级待机时间到达,执行函数:

运行睡眠任务:

空闲任务讲解,除了下列的TMR3,由于idle的唤醒源有非常多,任何事件都可以唤醒,必须关闭其他所有外设的中断和事件配置,否则无法低功耗:


浙公网安备 33010602011771号