电源管理
概述
PM 模块提供电源管理功能。
功能特性
提供电源管理基础功能。
支持相关设备注册参与电源管理。
支持投票控制低功耗功能。
支持休眠管理功能。
唤醒源管理
关机模式
深度睡眠
系统在空闲时自动进入休眠状态,当有唤醒源中断产生或系统 timer 到时时唤醒系统继续运行。
系统在深度睡眠期间,外设和cpu将停止工作并掉电,内存处于深度睡眠保持模式
依赖关系
系统进入休眠状态时软件和大部分外设不能继续工作,故进入休眠前需检查所有模块的状态,确保对系统电源无依赖方可进入休眠
所有对电源有依赖的模块可调用
wq_power_mgnt_register_node()注册依赖到电源管理,系统进入休眠前将检查依赖情况依赖检查的回调原型:
1typedef uint32_t (*idle_check_callback)(uint32_t time_ms);
参数 time_ms: 系统请求的休眠时间。 返回值 uint32_t: 模块空闲的时间,以毫秒为单位。
系统当前已添硬件外设的依赖关系,如果外设正在工作,则系统不会进入休眠状态
保存与恢复
系统进入休眠后,大部分外设将处于掉电状态,唤醒后,将处于复位状态,需要对睡眠前的外设状态进行保存并在唤醒后进行恢复
当前系统已对休眠时掉电的外设添加了保存和恢复,应用无需关心,唤醒后可继续正常使用。
唤醒源
进入低功耗模式后,已下中断具备对系统的唤醒能力:
AONGPIO, 仅*电平*中断支持唤醒, 仅ACORE
CHARGER, 5v/3.3v, 仅支持电平中断唤醒, 仅ACORE
TOUCH_KEY, 内置触摸设备中断, 仅ACORE
DEBOUNCE, 按键中断, 仅ACORE
IPC, 核间通信, 仅ACORE
BT, 仅BCORE
系统在无外部唤醒源时,在os指定的时间也会自动唤醒,故使用
os_delay()和 os_timer 也可使系统在指定时间继续工作备注
说明: 配置唤醒源时,应先单独配置中断,再开启对应的唤醒源,例如配置AONGPIO00 高电平唤醒
1wq_gpio_open_as_interrupt(WQ_GPIO_A00, WQ_GPIO_INT_LEVEL_HIGH, NULL); 2wq_gpio_wakeup_enable(WQ_GPIO_A00); 3wq_power_mgnt_enable_shutdown_wakeup_source(WQ_DS_WAKEUP_SRC_GPIO);
禁止低功耗状态
在特定场景下,可能需要临时禁止系统进入低功耗状态已提高系统响应速度,可使用
wq_power_mgnt_keep_active()使系统 禁止 进入低功耗状态wq_power_mgnt_release_keep_active()允许 进入低功耗状态
关机
系统仅保留极少模块用于唤醒,其余模块关闭且下电。使芯片处于极低功耗模式下,并且在指定唤醒源产生时使系统开机,从头还是初始化并加载运行软件。
相当于低功耗模式,关机模式时将关闭memory,故系统被唤醒时只能从rom阶段开始启动
API 介绍
Defines
-
DBGLOG_LIB_PM_INFO(fmt, arg...)
-
DBGLOG_LIB_PM_ERROR(fmt, arg...)
-
DBGLOG_LIB_PM_WARNING(fmt, arg...)
Typedefs
-
typedef uint32_t (*idle_check_callback)(uint32_t time_ms)
System idle check callback function type.
- Param time_ms:
System request to sleep time in millisecond
- Return:
uint32_t Allow to sleep time in millisecond
Functions
-
void *wq_power_mgnt_get_sleep_block_node(void)
Return the busy check function that block system enter deepsleep.
- 返回:
void* callback function pointer of busy node
-
WQ_RET wq_power_mgnt_register_node(idle_check_callback cb)
Register a system idle check module.
- 参数:
cb -- [in] idle check callback
- 返回:
WQ_RET WQ_RET_OK for success
-
WQ_RET wq_power_mgnt_unregister_node(idle_check_callback cb)
Unregister a system idle check module.
- 参数:
cb -- [in] idle check callback
- 返回:
WQ_RET WQ_RET_OK for success
-
WQ_RET wq_power_mgnt_early_init(void)
This function is to init power managment.
- 返回:
WQ_RET WQ_RET_OK for success else error.
-
WQ_RET wq_power_mgnt_init(uint32_t lowpower_thr_ms)
This function is to init power managment module after os inited. for threshold - when larger then this threshold, the corresponding sleep mode would be enter. the check priority if 0 is used, then this means always sleep if chance.
- 参数:
lowpower_thr_ms -- is lowpower thr.
- 返回:
WQ_RET WQ_RET_OK for success else error.
-
WQ_RET wq_power_mgnt_set_sleep_thr(uint32_t time_ms)
Set the threshold of min sleep time.
参见
- 参数:
time_ms -- lowpower threshold time ms.
- 返回:
WQ_RET
-
WQ_RET wq_power_mgnt_get_sleep_thr(uint32_t *time_ms)
Set the threshold of min sleep time.
参见
- 参数:
time_ms -- [out] deep sleep threshold pointer.
- 返回:
WQ_RET
-
void wq_power_mgnt_perf_get(uint32_t *chip_ms, uint32_t *bt_ms, uint32_t *sw_ms, uint32_t *lp_cnt)
This function is to get performance parameter.
- 参数:
chip_ms -- chip in lowpower millsecond.
bt_ms -- bcore in lowpower millsecond.
sw_ms -- current core lowpower millsecond.
lp_cnt -- current core lowpower count.
-
void wq_power_mgnt_keep_active(void)
Keep local domain at active mode.
-
void wq_power_mgnt_release_keep_active(void)
Stop keep local domain at active mode.
-
void wq_power_mgnt_shutdown(void)
System enter shutdown mode.
备注
Once this API is called, the system will immediately enter shutdown state. This API will not return
-
WQ_RET wq_power_mgnt_enable_deepsleep_wakeup_source(WQ_DS_WAKEUP_SRC src)
Enable wakeup source at deepsleep mode.
参见
- 参数:
src -- [in] wakeup src
- 返回:
WQ_RET
-
WQ_RET wq_power_mgnt_disable_deepsleep_wakeup_source(WQ_DS_WAKEUP_SRC src)
Disable wakeup source at deepsleep mode.
参见
- 参数:
src -- [in] wakeup src
- 返回:
WQ_RET
-
WQ_RET wq_power_mgnt_enable_shutdown_wakeup_source(WQ_DS_WAKEUP_SRC src)
Enable wakeup source at shutdown mode.
参见
- 参数:
src -- [in] wakeup src
- 返回:
WQ_RET
Enums
-
enum WQ_PM_DEVICE_PRIORITY
Values:
-
enumerator WQ_PM_DEVICE_PRIORITY_0
-
enumerator WQ_PM_DEVICE_PRIORITY_1
-
enumerator WQ_PM_DEVICE_PRIORITY_2
-
enumerator WQ_PM_DEVICE_PRIORITY_3
-
enumerator WQ_PM_DEVICE_PRIORITY_4
-
enumerator WQ_PM_DEVICE_PRIORITY_5
-
enumerator WQ_PM_DEVICE_PRIORITY_6
-
enumerator WQ_PM_DEVICE_PRIORITY_7
-
enumerator WQ_PM_DEVICE_PRIORITY_0
Functions
-
void *wq_pm_device_get_sleep_block(void)
-
pm_device_t *wq_pm_device_create(WQ_PM_DEVICE_PRIORITY priority)
-
WQ_RET wq_pm_device_destory(pm_device_t *dev)
-
uint32_t wq_pm_device_save(void)
-
uint32_t wq_pm_device_restore(void)
-
uint32_t wq_pm_device_get_sleep_time(bool clear)
-
void wq_pm_device_get_save_restore_time(uint32_t *save, uint32_t *restore)
-
struct pm_device