睡眠定时器的周期受外部按键中断的影响的问题咨询!
大家好,
小弟现调试CC2540蓝牙模块,使用的是TI的例程,定义工作在低功耗模式POWER_SAVING,试验的功能是开机广播1min后关闭广播,广播过程中有KFD_BATTERY_CHECK_EVT事件在执行,所以模块工作在PM2模式下,广播过程打开LED,这样在PM2下会进入SleepTimer睡眠,所以LED会闪烁。广播到达1min后,关闭广播、关闭LED灯以及停止KFD_BATTERY_CHECK_EVT事件(osal_stop_timerEx(keyfobapp_TaskID, KFD_BATTERY_CHECK_EVT);),模块进入了PM3工作模式。
进入PM3工作模式后我通过外部按键来唤醒模块并开始执行KFD_BATTERY_CHECK_EVT事件 ,通过执行osal_start_timerEx( keyfobapp_TaskID, KFD_BATTERY_CHECK_EVT, BATTERY_CHECK_PERIOD )函数,此时LED灯也恢复闪烁。
这时出现了问题,按键触发重新执行KFD_BATTERY_CHECK_EVT事件 ,LED闪烁的频率与刚开机的闪烁频率不一样,用示波器抓取LED端的电平变化,发现刚开机的时候两次LED亮的时间间隔为109.2ms(有小小波动),而按键中断唤醒后的间隔为30.4ms(有小小波动),所以导致LED的闪烁不一样。
从图中可看时间间隔就是睡眠定时器(sleeotimer)的定时器周期,跟踪程序开机和按键唤醒的区别是osal_pwrmgr_powerconserve函数中的next (next = osal_next_timeout(),next传给OSAL_SET_CPU_INTO_SLEEP( next ))参数不一样,开机时的next值稳定在400(有小小波动),按键唤醒后这个值是100,(有小小波动)。
大家帮忙看看,为什么外部按键唤醒后影响睡眠定时器的时间?
开机LED灯的两次闪烁时间间隔为109.2ms
按键唤醒后的LED两次闪烁时间间隔为30.4ms
自己顶上去了,都没人回复吗?