CC2541低功耗模式下的 PWRMGR_ALWAYS_ON 相关问题
问题背景:项目所用MCU为CC2541,项目用到了低功耗模式( POWER_SAVING )
问题描述:项目有一个功能是使用蜂鸣器报警,利用PWM驱动。当我把PWM配置后,执行osal_pwrmgr_device( PWRMGR_ALWAYS_ON );但是蜂鸣器只响了一下,调试发现未知原因把pwrmgr_attribute.pwrmgr_device 重新改为了PWRMGR_BATTERY,而且不是用osal_pwrmgr_device()这个函数改的。
我换成官方的SimpleBLEPeripheral例程,做以下修改
if ( events & SBP_START_DEVICE_EVT )
{
// Start the Device
VOID GAPRole_StartDevice( &simpleBLEPeripheral_PeripheralCBs );
// Start Bond Manager
VOID GAPBondMgr_Register( &simpleBLEPeripheral_BondMgrCBs );
// Set timer for first periodic event
//osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_PERIODIC_EVT, SBP_PERIODIC_EVT_PERIOD );
osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
return ( events ^ SBP_START_DEVICE_EVT );
}
测试后也是会无缘无故把pwrmgr_attribute.pwrmgr_device 重新改为了PWRMGR_BATTERY。从而进入低功耗。
希望有人能解答。有点儿着急。
(void)osal_pwrmgr_task_state(Hal_TaskID, PWRMGR_HOLD);
利用上面的代码避免低功耗,Hal_TaskID可以改成其他的ID。