定时检测单元 (ALARM)
备注
前置知识: 电源管理单元 (PMU)
定时检测单元 (ALARM) 为PMU内建功能单元,以32KHz OSC_PMU时钟信号为计数驱动, 提供多个离散档位的时间周期设定,可以用于触发PMU中断请求或用于建立SoC低功耗唤醒信号。
外设特性
可以在SoC Active Mode下充当定时器用途,周期性触发PMU中断。
可以在SoC Standby/Hibernate Mode下基于定时功能触发低功耗唤醒信号。
可以在SoC Standby/Hibernate Mode下定时启动低电压检测 (LVD) 功能。
外设使用
典型使用场景
A. 在工作模式(Active Mode)下充当常规PMU定时器
该场景下,ALARM单元作为硬件定时器性质外设,周期性产生PMU中断, 除执行定时逻辑外,也可作为SoC Sleep Mode下的WFI/WFE唤醒源。
清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的ALARM_PEND置位, 防止未处置的PMU中断请求干扰后续配置流程。
API链接:
pmu_irq_clear_flag(), 其中 source 传参选择预设枚举 PMU_IRQ_Source_ALARM配置 PMU ALARM定时检测单元控制寄存器ALARM_CTL ,通过ALARM_CTL.ALARM_TIME 选择ALARM的定时周期。 ALARM单元提供10/25/50/100/250/500/1000/2000ms的有限定时周期选择。
配置 PMU_ALARM_CTL.ALARM_EN = 1,开启ALARM定时事件的信号输出使能,ALARM单元将在计数到达定时后,向PMU输出 中断请求信号ALARM_INT和低功耗唤醒信号ALARM_WAK。
API链接:
alarm_init(), 其中 role 传参选择预设枚举 ALARM_As_Active_Mode_PMU_Timer配置 PMU中断使能寄存器INT_EN, 设置ALARM单元中断请求信号ALARM_INT作为PMU中断源(之一)。
API链接:
pmu_irq_enable(), 其中 source 传参选择预设枚举 PMU_IRQ_Source_ALARM使能 ECLIC 单元中PMU对应的中断请求通道。
配置 PMU_ALARM_CTL.ALARM_ON = 1,手动开启ALARM定时器计数。
API链接:
当ALARM定时器触发PMU中断或作为WFE唤醒信号使SoC从Sleep Mode进入Active Mode后, 用户代码需要清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的ALARM_PEND置位。
API链接:
pmu_irq_clear_flag(), 其中 source 传参选择预设枚举 PMU_IRQ_Source_ALARM用户按需手动关闭ALARM计数,或等待ALARM下次中断请求触发(周期性ALARM)。
API链接:
B. 在Standby/Hibernate低功耗模式下定时触发唤醒信号
该场景下,ALARM单元可作为低功耗Standby Mode和Hibernate Mode的唤醒源,在进入低功耗状态指定时长后触发 唤醒信号。
清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的ALARM_PEND置位, 防止未处置的PMU低功耗唤醒信号干扰后续配置流程。
API链接:
pmu_wak_clear_flag(), 其中 source 传参选择预设枚举 PMU_Lpm_Wakeup_Source_ALARM配置 PMU ALARM定时检测单元控制寄存器ALARM_CTL ,通过ALARM_CTL.ALARM_TIME 选择ALARM的定时周期。 ALARM单元提供10/25/50/100/250/500/1000/2000ms的有限定时周期选择。
配置 PMU_ALARM_CTL.ALARM_EN = 1,开启ALARM定时事件的信号输出使能,ALARM单元将在计数到达定时后,向PMU输出 中断请求信号ALARM_INT和低功耗唤醒信号ALARM_WAK。
配置 PMU_ALARM_CTL.OSC_PMU_ON = 1, 保证SoC进入低功耗模式后,ALARM正常计数。
API链接:
alarm_init(), 其中 role 传参选择预设枚举 ALARM_As_Standy_Or_Hibernate_Mode_Wakeup_Source配置 PMU低功耗唤醒信号使能寄存器WAK_EN, 设置ALARM单元低功耗唤醒信号ALARM_WAK作为低功耗模式唤醒源(之一)。
API链接:
pmu_wak_enable(), 其中 source 传参选择预设枚举 PMU_Lpm_Wakeup_Source_ALARM如果在Standby Mode下使用ALARM唤醒功能,需要使能 ECLIC 单元中PMU对应的中断请求通道。 如果仅在Hibernate Mode下使用ALARM唤醒功能,则无需此步骤。
调用指定的函数,将SoC置于Standby Mode或Hibernate Mode。
SoC从ALARM定时产生的唤醒信号恢复工作后(Active Mode),用户程序清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的ALARM_PEND置位, 确保下一次低功耗状态的正常进入和唤醒。
API链接:
pmu_wak_clear_flag(), 其中 source 传参选择预设枚举 PMU_Lpm_Wakeup_Source_ALARM
C. 在Standby/Hibernate低功耗模式下定时启动低电压检测 (LVD)
详情请参考 低电检测单元 (LVD) 章节。
API说明
-
enum alarm_role_t
ALARM单元工作场景设置。
ALARM_As_Active_Mode_PMU_Timer:ALARM作为常规PMU定时器使用,后续可以用于触发PMU中断或唤醒低功耗Sleep Mode下的SoC。
ALARM_As_Standy_Or_Hibernate_Mode_Wakeup_Source:ALARM作为SoC低功耗Standby/Hibernate Mode的定时唤醒源。
-
enum alarm_time_t
ALARM单元定时周期设置。
ALARM_Time_10ms:ALARM定时10ms
ALARM_Time_25ms:ALARM定时25ms
ALARM_Time_50ms:ALARM定时50ms
ALARM_Time_100ms:ALARM定时100ms
ALARM_Time_250ms:ALARM定时250ms
ALARM_Time_500ms:ALARM定时500ms
ALARM_Time_1s:ALARM定时1s
ALARM_Time_2s:ALARM定时2s
-
void alarm_init(alarm_role_t role, alarm_time_t period)
alarm单元配置初始化。
- 参数
role – alarm工作场景设置,通过枚举定义
alarm_role_t选择。period – alarm定时周期设置,通过枚举定义
alarm_time_t选择。
- 返回
无
-
void alarm_manully_start()
ALARM单元手动开启计时。
- 返回
无
-
void alarm_manully_stop()
ALARM单元手动关闭计时,ALARM内部计数清0。
- 返回
无
-
void alarm_deinit()
清除ALARM控制寄存器配置,常用于低功耗Standby/Hibernate模式唤醒后处理阶段。
- 返回
无
寄存器定义