电源管理单元 (PMU)

电源管理单元 (PMU) 负责产生芯片的各个部分电源,并对其进行管理和时序控制。

外设特性

  1. 对SoC内部LDO进行开关控制和电压调节。

  2. 提供多种PMU中断触发机制。

  3. 实现SoC层面的低功耗模式。

  4. 提供多种机制用于从低功耗状态唤醒SoC。

外设使用

典型使用场景

PMU根据使用方向,可以划分为以下典型场景:

A. 对SoC内部LDO进行控制调节

SoC SPV1x面向应用方案提供5路片上电源,分别由不同的低压降稳压器(LDO)对Vcc外部输入电压转化获得, 用于供给片上外设模块,并按需通过IO引脚向片外设备输出供电。

../../_images/kiwi-pmu-ldo-description.png

上述LDO的关闭和开启在SoC进入和退出指定低功耗模式时,由PMU统一进行硬件控制,无需用户程序开销。 同时,PMU模块设置了 PMU电压控制寄存器VOLT_CTL ,在应用场景满足的情况下,用户程序可以在进出低功耗模式前对LDO 电压进行调整,从而改变片上电源电压,达到降低低功耗模式下静态功耗的目的。

API链接:

警告

  • 芯片上电时IOVCC默认值为3.2V,如方案应用要求调整IOVCC电压为2.0V时,可以在应用程序中进行设置。 需要注意,由于变动压差较大,电压调整的过程中可能会造成Nor Flash的读取错误。 因此建议是将调整IOVCC的代码放在IRAM中执行,或者执行分级调压策略。

  • 当CPU以高速时钟运行DVDD电压分级调压策略代码时,两次调压间隔不应少于100微秒。

B. PMU中断配置

PMU单元通过 PMU中断使能寄存器INT_EN 可以选择最多4路信号作为PMU中断的触发信号,它们分别是:

  1. ONOFF中断请求信号ONOFF_INT

  2. ALARM中断请求信号ALARM_INT

  3. LVD中断请求信号LVD_INT

  4. LVR中断请求信号LVR_INT

API链接:

请分别阅读以下章节,获得指定信号对应的单元配置方法:

PMU中断触发后,用户程序(如PMU中断处理函数)可以通过检索 PMU中断请求/低功耗唤醒信号状态寄存器PEND 的数据位, 判断PMU中断的来源并进行相应处理,然后通过对PEND寄存器对应数据位写1操作清楚请求标志。

API链接:

C. 低功耗模式:待机/休眠(Standby/Hibernate)进入和唤醒

PMU单元通过 PMU低功耗唤醒信号使能寄存器WAK_EN 可以选择最多4路信号作为SoC进入低功耗Standby/Hibernate Mode后的唤醒信号,它们分别是:

  1. ONOFF低功耗唤醒信号ONOFF_WAK

  2. ALARM低功耗唤醒信号ALARM_WAK

  3. LVD低功耗唤醒信号LVD_WAK

  4. LVR低功耗唤醒信号LVR_WAK

API链接:

请分别阅读以下章节,获得指定信号对应的单元配置方法:

然后阅读 低功耗模式配置和唤醒 章节内容,获得SoC层面低功耗模式的配置和进入方法。


注意事项

待补充


API说明

enum pmu_iovcc_volt_t

IOVCC电压设置枚举定义。

  • IOVCC_Volt_2o0V:IOVCC电压设置为2.0V

  • IOVCC_Volt_2o2V:IOVCC电压设置为2.2V

  • IOVCC_Volt_2o4V:IOVCC电压设置为2.4V

  • IOVCC_Volt_2o6V:IOVCC电压设置为2.6V

  • IOVCC_Volt_2o8V:IOVCC电压设置为2.8V

  • IOVCC_Volt_3o0V:IOVCC电压设置为3.0V

  • IOVCC_Volt_3o2V:IOVCC电压设置为3.2V

  • IOVCC_Volt_3o4V:IOVCC电压设置为3.4V

void pmu_iovcc_volt_set(pmu_iovcc_volt_t volt)

设置IOVCC电压。

param volt

IOVCC目标电压值,通过枚举定义 pmu_iovcc_volt_t 选择。

returns

void pmu_iovcc_disable(void)

关闭IOVCC。

returns

enum pmu_siovcc_volt_t

SIOVCC电压设置枚举定义。

  • SIOVCC_Volt_3o0V:SIOVCC电压设置为3.0V

  • SIOVCC_Volt_2o2V:SIOVCC电压设置为2.2V

void pmu_siovcc_volt_set(pmu_siovcc_volt_t volt)

设置SIOVCC电压。

param volt

SIOVCC目标电压值,通过枚举定义 pmu_siovcc_volt_t 选择。

returns

enum pmu_avcc_volt_t

AVCC电压设置枚举定义。

  • AVCC_Volt_1o8V:AVCC电压设置为1.8V

  • AVCC_Volt_2o0V:AVCC电压设置为2.0V

  • AVCC_Volt_2o2V:AVCC电压设置为2.2V

  • AVCC_Volt_2o4V:AVCC电压设置为2.4V

  • AVCC_Volt_2o6V:AVCC电压设置为2.6V

  • AVCC_Volt_2o8V:AVCC电压设置为2.8V

  • AVCC_Volt_3o0V:AVCC电压设置为3.0V

  • AVCC_Volt_3o2V:AVCC电压设置为3.2V

void pmu_avcc_volt_set(pmu_avcc_volt_t volt)

设置AVCC电压。

param volt

AVCC目标电压值,通过枚举定义 pmu_avcc_volt_t 选择。

returns

enum pmu_dvdd_volt_t

DVDD电压设置枚举定义。

  • DVDD_Volt_0o9V:DVDD电压设置为0.9V

  • DVDD_Volt_1o05V:DVDD电压设置为1.05V

  • DVDD_Volt_1o20V:DVDD电压设置为1.20V

  • DVDD_Volt_1o35V:DVDD电压设置为1.35V

void pmu_dvdd_volt_set(pmu_dvdd_volt_t volt)

设置DVDD电压。

param volt

DVDD目标电压值,通过枚举定义 pmu_dvdd_volt_t 选择。

returns

enum pmu_irq_source_t

PMU中断源枚举定义。

  • PMU_IRQ_Source_ONOFF:选择ONOFF作为PMU中断源

  • PMU_IRQ_Source_ALARM:选择ALARM作为PMU中断源

  • PMU_IRQ_Source_LVD:选择LVD作为PMU中断源

  • PMU_IRQ_Source_LVR:选择LVR作为PMU中断源

void pmu_irq_enable(pmu_irq_source_t source)

使能指定的一个PMU中断源。

参数
返回

void pmu_irq_disable(pmu_irq_source_t source)

失能指定的一个PMU中断源。

参数
返回

int32_t pmu_irq_get_flag(pmu_irq_source_t source)

查询指定PMU中断源的中断状态(Pending)。

参数
返回

指定中断源的中断状态(Pending)。

返回类型

int32

返回值
  • 0 – 该中断源未产生待响应中断。

  • 1 – 该中断源已产生中断待响应。

void pmu_irq_clear_flag(pmu_irq_source_t source)

清除指定PMU中断源的中断状态(Pending)。

参数
返回

enum pmu_lpm_wakeup_source_t

PMU低功耗模式唤醒源枚举定义。

  • PMU_Lpm_Wakeup_Source_ONOFF:选择ONOFF作为PMU低功耗模式唤醒源

  • PMU_Lpm_Wakeup_Source_ALARM:选择ALARM作为PMU低功耗模式唤醒源

  • PMU_Lpm_Wakeup_Source_LVD:选择LVD作为PMU低功耗模式唤醒源

  • PMU_Lpm_Wakeup_Source_LVR:选择LVR作为PMU低功耗模式唤醒源

void pmu_wak_enable(pmu_lpm_wakeup_source_t source)

使能指定的一个PMU低功耗唤醒源。

参数
返回

void pmu_wak_disable(pmu_lpm_wakeup_source_t source)

失能指定的一个PMU低功耗唤醒源。

参数
返回

int32_t pmu_wak_get_flag(pmu_lpm_wakeup_source_t source)

查询指定PMU低功耗唤醒源的输出信号状态。

参数
返回

指定低功耗唤醒源的输出信号状态。

返回类型

int32

返回值
  • 0 – 该低功耗唤醒源未产生唤醒信号。

  • 1 – 该低功耗唤醒源已产生唤醒信号。

void pmu_wak_clear_flag(pmu_lpm_wakeup_source_t source)

清除指定PMU低功耗唤醒源的输出信号状态。

参数
返回

void pmu_ctl_reset(void)

重置(部分)PMU模块下属控制寄存器和INT/WAK控制寄存器。

返回


寄存器定义

../../_images/kiwi-reg-pmu-volt-ctl.png
../../_images/kiwi-reg-pmu-int-en.png
../../_images/kiwi-reg-pmu-wak-en.png
../../_images/kiwi-reg-pmu-pend.png