一起学习rtt的pm组件:调用和实现
调用流程首先应用设置进出休眠状态的回调函数,然后调用 rt_pm_request 请求休眠模式,触发休眠操作;PM 组件在系统空闲时检查休眠模式计数,根据投票数给出推荐的模式;接着 PM 组件调用 notfiy 通知应用,告知即将进入休眠模式;然后对注册的 PM 设备执行挂起操作,返回 OK 后执行 SOC 实现的的休眠模式,系统进入休眠状态(如果使能时间补偿,休眠之前会先启动低功耗定时器)。此时 CPU 停止工作,等待事件或者中断唤醒。当系统被唤醒后,由于全局中断为关闭状态,系统继续从该处执行,获取睡眠时间补偿系统的心跳,依次唤醒设备,通知应用从休眠模式退出。如此一个周期执行完毕,退出,等待系统下次空闲。
本帖最后由 keer_zu 于 2022-3-17 12:53 编辑
PM有关的API
请求休眠模式
void rt_pm_request(uint8_t sleep_mode);
参数模式
sleep_mode请求的休眠模式等级
sleep_mode 取以下枚举值:
enum
{
/* sleep modes */
PM_SLEEP_MODE_NONE = 0, /* 活跃状态 */
PM_SLEEP_MODE_IDLE, /* 空闲模式(默认) */
PM_SLEEP_MODE_LIGHT, /* 轻度睡眠模式 */
PM_SLEEP_MODE_DEEP, /* 深度睡眠模式 */
PM_SLEEP_MODE_STANDBY, /* 待机模式 */
PM_SLEEP_MODE_SHUTDOWN, /* 关断模式 */
PM_SLEEP_MODE_MAX,
};
调用该函数会将对应的模式计数加1,并锁住该模式。此时如果请求更低级别的功耗模式,将无法进入,只有释放(解锁)先前请求的模式后,系统才能进入更低的模式;向更高的功耗模式请求则不受此影响。该函数需要和 rt_pm_release 配合使用,用于对某一阶段或过程进行保护。
页:
[1]