微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于CC2541的低功耗问题

关于CC2541的低功耗问题

时间:10-02 整理:3721RD 点击:

问题一:

  我开了宏定义POWER_SAVING,进不去低功耗,但是我通过调试,修改hal_drivers.c中的HAL_PWRMGR_HOLD_EVENT事件(如图),这样就可以,不知道对系统影响大不大?

问题二:

  不开宏定义POWER_SAVING,1、采用自己编写的函数进入低功耗,需要在蓝牙断开后进入低功耗模式5s唤醒(如图),这个方法可进入低功耗模式,但是测试得出结论,手机反复连接和断开蓝牙几次后(不定,有时3次,有时十几次)就进入了未知地方,程序完全好像就死掉了。2、采用系统给定的睡眠函数halSleep(),完全进不去低功耗!我猜测应该进入低功耗之前要作一些判断或者关闭什么东西吧?

请求大家帮忙解决这个问题,感激不尽!

sunxiang,

很好的尝试。

但是建议你不要去手动调用进入低功耗的函数,这些是由OSAL来自动调度的。

在坛子里说了N次了,只要你没有广播,没有连接,没有timer事件,系统是会自动进入PM3模式的,就是休眠模式,这个时候是只能由IO中断来唤醒。

在广播间隔和连接间隔间,或者timer事件间,都是PM2模式。

各种功耗的情况,你可以用电流表或者示波器来看系统进入了哪种模式。电流应该是接近或者一样的,跟datasheet上。

但是,我不做那个修改,完全进不去啊。   我想不用系统来调度(不开POWER_SAVING),平时都是主动模式,在蓝牙断开过后进入低功耗(PM2模式)5s就可以了 ,这个怎么解决呢?

非常感激你的回答!

sunxiang,

只要你确保没有我之前说过的那些动作在代码里面,系统是会自动进入低功耗模式的,不需要任何改动。

你需要确认一下你的代码在你想要进入低功耗模式的时候,是否还有不该运行的东西在运行,比如timer。

// Should we even look into power conservation if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON ) { // Are all tasks in agreement to conserve if ( pwrmgr_attribute.pwrmgr_task_state == 0 ) { } }

如上述代码所示,进入低功耗需要判断两个变量的值,一个是pwrmgr_attribute.pwrmgr_device,一个是pwrmgr_attribute.pwrmgr_task_state,你可以用source insight查看下这两个变量在哪里修改过。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top