微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > 射频无线通信设计 > CC2541的低功耗函数解析

CC2541的低功耗函数解析

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

CC2541的低功耗函数解析




与功耗有关的重要函数解析:
void halSleep( uint16 osal_timeout )
1.首先将osal_timeout转成以320US为单位
2.获取下一次MAC定时器到期时间
3.halPwrMgtMode = (timeout == 0) ? HAL_SLEEP_DEEP: HAL_SLEEP_TIMER;//为PM2,PM3模式。
没有任务要执行就进入PM3深度睡眠,否则进入PM2睡眠,可以定时器唤醒。
4.唤醒OSAL机制的低功耗管理涉及文件:
OSAL_PwrMgr.h;OSAL电源管理的API头文件
OSAL_PwrMgr.c;OSAL电源管理的API C文件
hal_sleep.c;底层的电源管理文件
电源管理结构体
typedef struct
{
uint16 pwrmgr_task_state;//任务状态
uint16 pwrmgr_next_timeout;//下一次超时
uint16 accumulated_sleep_time;//睡眠时间
uint8pwrmgr_device;//电源管理设备属性,有PWRMGR_ALWAYS_ON和PWRMGR_BATTERY两种
} pwrmgr_attribute_t;
#define PWRMGR_ALWAYS_ON 0
#define PWRMGR_BATTERY 1
选择PWRMGR_ALWAYS_ON的话将不会进入睡眠模式,选择PWRMGR_BATTERY将允许HAL管理CPU进入SLEEP LITE或者SLEEP DEEP状态。
#define PWRMGR_CONSERVE 0
#define PWRMGR_HOLD 1
低功耗标志,主要用于osal_pwrmgr_task_state()这个函数中,用于标志每一任务是否需要低功耗。
extern pwrmgr_attribute_t pwrmgr_attribute//定义一个电源管理的全局变量。
osal_pwrmgr_init();
初始化电源管理函数,这个函数在OSAL.C里面的osal_init_system( )调用,也就是在OSAL系统初始化的时候将电源管理模式调成了不会进入睡眠模式的状态。
void osal_pwrmgr_init( void )
{
pwrmgr_attribute.pwrmgr_device =PWRMGR_ALWAYS_ON; //默认没有睡眠模式
pwrmgr_attribute.pwrmgr_task_state = 0;//清零
}
OSAL系统在检查完所有的任务事件之后发现没有事件需要处理,这样在POWER_SAVING宏定义打开的情况下将调用osal_pwrmgr_powerconserve( )函数,在这函数中将会根据选择系统进入休眠。退出休眠当出现IO中断或者复位时候会退出休眠,或者在休眠定时器中断时候也将会退出休眠。如果是IO中断或者休眠定时器中断退出之后将回到进入休眠的地方继续向下执行,复位退出的话进入程序的初部分执行。

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

网站地图

Top