低电检测单元 (LVD)
备注
前置知识: 电源管理单元 (PMU)
警告
SPV1x A版(Rev.A)和B版(Rev.B)版芯片 PMU LVD/LVR控制寄存器LVD_CTL 的LVD_VOLT位域发生变化, 请阅读其寄存器描述获取相关信息。
LVD(Low Voltage Detect)为低电检测单元,用于实时监测电源电压,当电源电压与 LVD 设定阈 值满足触发条件时,则产生中断请求、低功耗唤醒信号或者复位,用户可根据该信号执行一些紧急任务。 另外,LVD 模块还可以用作于普通的模拟电压比较器使用。
外设特性
外设使用
典型使用场景
A. 在工作模式(Active Mode)下充当常规模拟电压比较器使用
LVD单元在正常工作模式(Active Mode)下可以作为模拟电压比较器,实时比较VBAT脚输入电压和指定阈值(LVD_VOLT)的相对大小关系, 若VBAT > LVD_VOLT则LVD_OUT为高电平,反之LVD_OUT为低电平。 LVD_OUT经过数字滤波消抖后输出LVD_DEB信号,其电平行为可以触发LVD内部信号LVD_PEND,从而按程序配置进一步产生 LVD中断请求信号LVD_INT,触发PMU中断请求PMU_IRQ,用于触发PMU中断服务函数响应,或用于睡眠模式下WFI/WFE唤醒。
清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的LVD_PEND置位, 防止未处置的PMU中断请求干扰后续配置流程。
API链接:
pmu_irq_clear_flag(), 其中 source 传参选择预设枚举 PMU_IRQ_Source_LVD通过 PMU LVD功能控制寄存器LVD_CTL ,配置电压比较阈值,电平事件和电平消抖时间。
API链接:
配置 PMU中断使能寄存器INT_EN, 设置LVD单元中断请求信号LVD_INT作为PMU中断源(之一)。
API链接:
pmu_irq_enable(), 其中 source 传参选择预设枚举 PMU_IRQ_Source_LVD配置并使能 ECLIC 单元中PMU对应的中断请求通道。
API链接:
当LVD单元触发PMU中断或作为WFE唤醒信号使SoC从Sleep Mode进入Active Mode后, 用户代码需要清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的ALARM_PEND置位。
API链接:
pmu_irq_clear_flag(), 其中 source 传参选择预设枚举 PMU_IRQ_Source_LVD
B. 在Standby/Hibernate低功耗模式下作为唤醒信号源
该场景下,LVD单元可作为低功耗Standby Mode和Hibernate Mode的唤醒源,在进入低功耗状态后通过触发低电压事件唤醒SoC。
SPV1x SoC提供一种低功耗模式下通过ALARM单元定时启动LVD检测的机制,。
清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的LVD_PEND置位, 防止未处置的PMU低功耗唤醒信号干扰后续配置流程。
API链接:
pmu_wak_clear_flag(), 其中 source 传参选择预设枚举 PMU_Lpm_Wakeup_Source_LVD通过 PMU LVD/LVR控制寄存器LVD_CTL ,配置电压比较阈值,电平事件和电平消抖时间。
API链接:
配置ALARM单元,在低功耗模式下定时启动LVD单元进行电压检测。
API链接:
alarm_init(), 其中 role 传参选择预设枚举 ALARM_As_Standy_Or_Hibernate_Mode_Wakeup_Source配置PMU_ALARM_CTL.ALARM_LVD = 1。
配置 PMU低功耗唤醒信号使能寄存器WAK_EN, 设置LVD单元低功耗唤醒信号LVD_WAK作为低功耗模式唤醒源(之一)。
API链接:
pmu_wak_enable(), 其中 source 传参选择预设枚举 PMU_Lpm_Wakeup_Source_LVD如果在Standby Mode下使用ALARM唤醒功能,需要使能 ECLIC 单元中PMU对应的中断请求通道。 如果仅在Hibernate Mode下使用ALARM唤醒功能,则无需此步骤。
调用指定的函数,将SoC置于Standby Mode或Hibernate Mode。
SoC从LVD事件产生的唤醒信号恢复工作后(Active Mode),用户程序清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的ALARM_PEND置位, 确保下一次低功耗状态的正常进入和唤醒。
API链接:
pmu_wak_clear_flag(), 其中 source 传参选择预设枚举 PMU_Lpm_Wakeup_Source_LVD
API说明
-
enum lvd_volt_t
LVD触发电压枚举定义。
LVD_Volt_1o8V:1.8v触发
LVD_Volt_2o0V:2.0v触发
LVD_Volt_2o2V:2.2v触发
LVD_Volt_2o4V:2.4v触发
LVD_Volt_2o6V:2.6v触发
LVD_Volt_2o8V:2.8v触发
LVD_Volt_3o0V:3.0v触发
LVD_Volt_3o2V:3.2v触发
-
enum lvd_event_t
LVD输入电平事件类型枚举定义。
LVD_Event_High_Level: 高电平
LVD_Event_Low_Level: 低电平
LVD_Event_Rising_Edge:电平上升沿
LVD_Event_Falling_Edge:电平下降沿
-
enum lvd_debounce_time_t
LVD/LVR输入信号消抖时间配置枚举定义。
LVD_Debounce_Time_0us:无消抖
LVD_Debounce_Time_31us
LVD_Debounce_Time_93us
LVD_Debounce_Time_218us
LVD_Debounce_Time_468us
LVD_Debounce_Time_968us
LVD_Debounce_Time_1968us
LVD_Debounce_Time_3968us
-
void lvd_init(lvd_volt_t volt, lvd_event_t event, lvd_debounce_time_t debounce)
对LVD功能进行初始化(不涉及复位功能LVR配置)。
- 参数
volt – LVD触发电压,通过枚举定义
lvd_volt_t选择。event – 需要响应的LVD,通过枚举定义
lvd_event_t选择。debounce – LVD输入信号消抖时间,通过枚举定义
lvd_debounce_time_t选择。
- 返回
无
寄存器定义