低电检测单元 (LVD)

备注

前置知识: 电源管理单元 (PMU)

警告

SPV1x A版(Rev.A)和B版(Rev.B)版芯片 PMU LVD/LVR控制寄存器LVD_CTL 的LVD_VOLT位域发生变化, 请阅读其寄存器描述获取相关信息。

LVD(Low Voltage Detect)为低电检测单元,用于实时监测电源电压,当电源电压与 LVD 设定阈 值满足触发条件时,则产生中断请求、低功耗唤醒信号或者复位,用户可根据该信号执行一些紧急任务。 另外,LVD 模块还可以用作于普通的模拟电压比较器使用。

外设特性

外设使用

../../_images/kiwi-lvd-module.png

典型使用场景

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唤醒。

  1. 清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的LVD_PEND置位, 防止未处置的PMU中断请求干扰后续配置流程。

    API链接:

  2. 通过 PMU LVD功能控制寄存器LVD_CTL ,配置电压比较阈值,电平事件和电平消抖时间。

    API链接:

  3. 配置 PMU中断使能寄存器INT_EN, 设置LVD单元中断请求信号LVD_INT作为PMU中断源(之一)。

    API链接:

  4. 配置并使能 ECLIC 单元中PMU对应的中断请求通道。

    API链接:

  5. 当LVD单元触发PMU中断或作为WFE唤醒信号使SoC从Sleep Mode进入Active Mode后, 用户代码需要清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的ALARM_PEND置位。

    API链接:

B. 在Standby/Hibernate低功耗模式下作为唤醒信号源

该场景下,LVD单元可作为低功耗Standby Mode和Hibernate Mode的唤醒源,在进入低功耗状态后通过触发低电压事件唤醒SoC。

SPV1x SoC提供一种低功耗模式下通过ALARM单元定时启动LVD检测的机制,。

  1. 清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的LVD_PEND置位, 防止未处置的PMU低功耗唤醒信号干扰后续配置流程。

    API链接:

  2. 通过 PMU LVD/LVR控制寄存器LVD_CTL ,配置电压比较阈值,电平事件和电平消抖时间。

    API链接:

  3. 配置ALARM单元,在低功耗模式下定时启动LVD单元进行电压检测。

    API链接:

    • alarm_init() , 其中 role 传参选择预设枚举 ALARM_As_Standy_Or_Hibernate_Mode_Wakeup_Source

  4. 配置PMU_ALARM_CTL.ALARM_LVD = 1。

  5. 配置 PMU低功耗唤醒信号使能寄存器WAK_EN, 设置LVD单元低功耗唤醒信号LVD_WAK作为低功耗模式唤醒源(之一)。

    API链接:

    • pmu_wak_enable(), 其中 source 传参选择预设枚举 PMU_Lpm_Wakeup_Source_LVD

  6. 如果在Standby Mode下使用ALARM唤醒功能,需要使能 ECLIC 单元中PMU对应的中断请求通道。 如果仅在Hibernate Mode下使用ALARM唤醒功能,则无需此步骤。

  7. 调用指定的函数,将SoC置于Standby Mode或Hibernate Mode。

  8. SoC从LVD事件产生的唤醒信号恢复工作后(Active Mode),用户程序清除 PMU中断请求/低功耗唤醒信号状态寄存器PEND 中的ALARM_PEND置位, 确保下一次低功耗状态的正常进入和唤醒。

    API链接:


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 选择。

返回


寄存器定义

../../_images/kiwi-reg-pmu-lvd-ctl-1.png ../../_images/kiwi-reg-pmu-lvd-ctl-2.png