微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2541 PM2/PM3與喚醒的設置問題

CC2541 PM2/PM3與喚醒的設置問題

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

首先我看了範例中的程式,覺得應該是把options內的power saving設置好,在關閉定時event,應該就可以讓系統自動進入PM2 or PM3。

我做了幾個測試,首先我把程式中有osal_start_timerEx的event都註解掉,並設breakpoint在halsleep()處,可以看到確實執行到了halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP : HAL_SLEEP_TIMER;  同時有觀察到耗電已經有到0.1~0.2mA的狀況。

但今天我不註解掉這些event,改用osal_stop_timerEx停掉這些event,就進不去PM2了,有需要做其它設置嗎?

剛剛trace了一下程序,發現程式跑到 osal_pwrmgr_powerconserve()中的 if ( pwrmgr_attribute.pwrmgr_device != PWRMGR_ALWAYS_ON ) 就直接skip出去了,沒執行到裏頭的OSAL_SET_CPU_INTO_SLEEP( next );

可是我在設定的時候已經有設定power saving且有正確執行到osal_pwrmgr_device( PWRMGR_BATTERY ); 也有觀察到pwrmgr_attribute.pwrmgr_device被設成1,是否有仍有其他因素會將此值清除為PWRMGR_ALWAYS_ON  ??

Huazhen Jiang,

只要在工程的属性配置里面,POWER_SAVING没有被注释掉,系统就会自动进行PM2/3的切换,根据实时的工作模式进行自动完成。

看是否有定时任务?

感謝兩位的回答,我應該是把所有定時任務都關閉了。

剛剛trace了下程式,發現是下列函數會持續把pwrmgr_attribute.pwrmgr_task_state 設成2

if (dmaRdyDly == 0)
{
(void)osal_set_event(Hal_TaskID, HAL_PWRMGR_HOLD_EVENT);
}

爬了一下之前的文章,發現將HAL_UART = FALSE的時候,就不會進入這個判斷了,如此可以順利進入休眠,功耗也掉到100uA左右,現在我加入一個再收到我特定CMD之後忽略上述判斷,可以順利進入PM2了。

想請教的是,進入PM2,應該是允許定時事件,可這時候的Timer有準嗎? 因為我看網路上的資料,都說這時候只有sleepTimer才能喚醒,這是不是我原先裏頭的osal_start_timerEx( simpleBLETaskId, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD ); 就不會固定500ms跑了

PS:SBP_PERIODIC_EVT_PERIOD =500ms

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

网站地图

Top