TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2541动态切换POWER SAVING方法?

大家好!

鉴于SPI和UART在低功耗情况下不稳定的情况,我希望可以通过外部中断事件触发退出POWER SAVING,串口发送数据,再通过定时器事件判断相应的条件重新进入POWER SAVING。工程中开启了POWER SAVING,协议栈版本1.4.2.2

我找到了如下接口:

osal_pwrmgr_device( PWRMGR_ALWAYS_ON );

osal_pwrmgr_device( PWRMGR_BATTERY );

在中断触发事件中调用osal_pwrmgr_device( PWRMGR_ALWAYS_ON );退出POWER SAVING,一切正常;

在定时器事件中判断条件后调用osal_pwrmgr_device( PWRMGR_BATTERY );后,程序出现卡死,调试终止于FFFFFF;

如果在定时器事件中判断条件后调用osal_pwrmgr_device( PWRMGR_BATTERY );处打断点,继续运行程序就正常运行,不会卡死;

于是我在osal_pwrmgr_device( PWRMGR_BATTERY );家了一段while延时函数,延时大于某个时间,程序就不会卡死了,但是蓝牙广播信号在这之后消失。

我想问的是:

1. 动态切换POWER SAVING调用这两个接口是否正确?是否有其他更好的接口?

2. 切换POWER SAVING的时机是什么,就是在哪里调用好些?我在自己添加的应用task对应的process event函数里按照事件(中断和定时器)处理de 。重新进入POWER SAVING时是否需要对任务进行类似重新初始化的处理?(我试过重新初始化了但是没用)

3. 用asm("NOP");延时时间过长是否会影响蓝牙广播(不是连接)?若有影响如何重新开启蓝牙广播?

4. 问题3的现象是蓝牙广播被终止了还是整个系统任务都错乱了?

求助各位,谢谢!

Viki Shi:

1、这两个接口没问题

2&3&4、最好不要在定时函数里调用,尤其是还加延时。定时器里只作条件判断,其余的都放在外面做

赞(0)
未经允许不得转载:TI中文支持网 » CC2541动态切换POWER SAVING方法?
分享到: 更多 (0)