以下资料大部分参考TI官方的《MSP430x5xx and MSP430x6xx Family User Guide》
实验内容:将MSP430F5529 Launch Pad 的核心电压提升到3级
一、电源管理模块和供电监控系统
1、电源管理模块介绍
PMM模块涉及与设备的电源及其监控有关的所有功能。它的主要功能是首先为核心逻辑产生一个电源电压,其次,为设备上电压(DVCC)和核心电压(VCORE)提供几个机制以实现对它们的监督和监控。
PMM使用集成的低压差线性稳压调节器(LDO)来调节从应用到设备的主磁芯电压( D V c c DV_{cc} DVcc)产生二次磁芯电压( V c o r e V_{core} Vcore),一般来说, V c o r e V_{core} Vcore为CPU、内存(闪存和RAM)、数字模块供电,而 D V c c DV_{cc} DVcc为I/Os和所有模拟模块(包括振荡器)供电。
在本章中,调节器的输入端或主端称为它的高端,输出端或副端在本章中称为它的低端
磁芯所需的最小电压取决于所选的MCLK速率。下图显示了给定核心电压和系统频率之间的关系,下图只针对MSP430F5529 Launch Pad,其他设备请参阅特定设备的数据表,以确定对给定设备支持哪些核心电压水平和系统频率性能可能达到的水平。
PMM模块提供了监控
D
V
c
c
DV_{cc}
DVcc和
V
c
o
r
e
V_{core}
Vcore的方法,这两个功能检测电压是否低于特定阈值。一般来说,区别在于
D
V
c
c
DV_{cc}
DVcc监控导致开机复位(POR)事件,而
V
c
o
r
e
V_{core}
Vcore监控导致软件可以处理的产生中断标志。因此,
D
V
c
c
DV_{cc}
DVcc分别由高侧检测器(SVSH)和高侧监控器(SVMH)监督和监视,
V
c
o
r
e
V_{core}
Vcore分别由低侧检测器(SVSL)和低侧监控器(SVML)进行监督和监视。因此,有四个独立的监督和监控模块可以在任何给定的时间处于活动状态。由这些模块强制的阈值是由调节器产生
V
c
o
r
e
V_{core}
Vcore所使用的相同电压基准导出的。
除了SVSH、SVMH、SVSL和SVML模块外,
V
c
o
r
e
V_{core}
Vcore还被断电复位(BOR)电路进一步监控。
D
V
c
c
DV_{cc}
DVcc在通电时从0 V上升时,BOR保持设备处于重置状态,直到
V
c
o
r
e
V_{core}
Vcore达到足够的水平,可以以默认的MCLK速率运行,同时
S
V
S
H
SVS_H
SVSH和
S
V
S
L
SVS_L
SVSL机制被激活。在操作期间,如果
V
c
o
r
e
V_{core}
Vcore低于预设阈值,BOR还会生成重置。如果不需要
S
V
S
L
SVS_L
SVSL的灵活性,BOR可用于提供更低功率的监控供电的手段。
Brown-Out Reset 低电压检测复位(欠压复位)
Power-On Reset 上电复位
Power-Up Clear 上电清除
下图为PMM框图:
2、
V
c
o
r
e
V_{core}
Vcore和校准器
D
V
c
c
DV_{cc}
DVcc可以从一个宽的输入电压范围供电,但设备的核心逻辑必须保持在一个低于这个范围允许的电压。由于这个原因,调节器已经集成到PMM中。调节器从
D
V
c
c
DV_{cc}
DVcc导出必要的核心电压(
V
c
o
r
e
V_{core}
Vcore)
更高的
V
c
o
r
e
V_{core}
Vcore级别需要更高的MCLK的速度,高级别的
V
c
o
r
e
V_{core}
Vcore会消耗更多的电能,因此核心电压被可编程为4个步骤,以允许它只提供给定MCLK设置所需的电能。该级别由PMMCOREV位控制。注意,默认设置(PMMCOREV的最低值)允许在非常宽的频率范围内运行MCLK。因此,许多应用程序不需要更改PMM。
在将MCLK提高到更高的速度之前,软件必须确保
V
c
o
r
e
V_{core}
Vcore级别对于所选频率足够高。如果不这样做,可能会迫使CPU在没有足够电量的情况下尝试操作,从而导致不可预测的结果。
该调节器支持两种不同的负载设置,以优化功率。以下情况需要采用大电流模式:
1、CPU处于活动、LPM0或LPM1模式
2、一个大于32Khz的时钟源被用来驱动任何模块
3、执行中断
否则,采用小电流模式。硬件根据上述标准自动控制负载设置。
3、电源电压监控器和监视器
高侧主管和监控器(SVSH和SVMH)负责
D
V
c
c
DV_{cc}
DVcc,低侧主管(SVSL)和低侧监控器(SVML)负责
V
c
o
r
e
V_{core}
Vcore。默认情况下,所有这些模块都是活动的,但是可以使用相应的启用位(SVSHE、SVMHE、SVSLE、SVMLE)禁用每个模块,从而节省一些电能。
4、SVS和SVM阈值
由SVS和SVM模块执行的电压阈值是可以选择的。下表列出了SVS和SVM阈值寄存器、它们控制的电压阈值以及阈值选项的数量。
寄存器 | 描述 | 阈值 | 可用级别 |
---|---|---|---|
SVSHRVL | S V S H SVS_H SVSH复位电压电平 | S V S H I T − SVSH_{IT-} SVSHIT− | 4 |
SVSMHRRL | S V S H SVS_H SVSH和 S V M H SVM_H SVMH复位释放电压电平 | S V S H I T + SVSH_{IT+} SVSHIT+, S V M H SVM_H SVMH | 8 |
SVSLRVL | S V S L SVS_L SVSL复位电压电平 | S V S L I T − SVSL_{IT-} SVSLIT− | 4 |
SVSMLRRL | S V S L SVS_L SVSL和 S V M L SVM_L SVML复位释放电压电平 | {SVSL_{IT+}}, S V M L SVM_L SVML | 4 ( 1 ) 4^{(1)} 4(1) |
( 1 ) ^{(1)} (1)寄存器设置支持8个级别(0到7);然而,级别3到7是相同的
5、推荐
S
V
S
L
SVS_L
SVSL设置
对于每个核心电压,两个供应电压监督水平是可用的。SVSLRVL位定义
V
c
o
r
e
V_{core}
Vcore的电压水平,低于此水平复位被激活。SVSMLRRL位定义了释放复位的虚核电压水平。虽然可以选择各种设置,但是有一组SVSLRVL和SVSMLRRL设置非常适合PMMCOREV选择的每个核心电压。默认情况下,SVSL事件总是生成一个POR (SVSLPE = 1), TI官方建议总是设置SVSLPE = 1以确保设备能够稳定启动。
下表列出了最常用和推荐的设置:
6、推荐
S
V
S
H
SVS_H
SVSH设置
对于高侧供应,有两个供应电压监督水平可用。SVSMHRRL位定义
D
V
c
c
DV_{cc}
DVcc的电压水平,在这个水平上复位被释放。SVSHRVL寄存器定义了
D
V
c
c
DV_{cc}
DVcc的电压级别,低于这个电压级别就打开复位。这些设置应根据给定应用中设备运行所需的最小电压以及系统电源特性来选择。尽管可以使用各种设置,但最常见的设置是基于所需的最大频率,这又决定了监控的最小
D
V
c
c
DV_{cc}
DVcc级别。默认情况下,SVSH事件总是生成一个POR (SVSHPE = 1), TI官方建议总是设置SVSHPE = 1以确保设备的稳定启动。
下表列出了最常用和推荐的设置:
S V S H SVS_H SVSH和 S V M H SVM_H SVMH的可用电压阈值设置依赖于 V c o r e V_{core} Vcore的电压电平设置。
表2-4总结了所有可用的可能设置。未列出的所有其他设置无效,不应使用;另外,SVSMHRRL必须始终等于或大于SVSHRVL
图2-3显示了
S
V
M
H
SVM_H
SVMH的可用设置
根据这些阈值,SVS和SVM的行为最好用图形来描述。图2-4显示了检测器和监控器如何响应各种供应故障条件。
如图2-4所示,监测阈值内存在滞后,因此有效的阈值取决于电压轨是上升还是下降。在监测阈值中没有滞后现象。
SVS 滞后
只有当SVSMHRRL的位设置等于或大于SVSHRVL的位设置时,才会有稳定的迟滞。因此,必须选择一个SVSMHRRL设置,该设置等于或大于SVSHRVL设置。
7、高侧检测器(SVSH)和高侧监控器(SVMH)
SVSH和SVMH模块是默认启用的,可以通过分别清除SVSHE和SVMHE位来禁用。
下图显示了
S
V
S
H
SVS_H
SVSH和
S
V
M
H
SVM_H
SVMH框图:
如果 D V c c DV_{cc} DVcc低于 S V S H SVS_H SVSH级别,则设置SVSHIFG ( S V S H SVS_H SVSH中断标志)。如果 D V c c DV_{cc} DVcc仍然低于 S V S H SVS_H SVSH级别,并且软件试图清除SVSHIFG,硬件会立即重新设置。如果在设置SVSHIFG时设置了SVSHPE (SVSH POR enable)位,则生成一个POR信号。
如果 D V c c DV_{cc} DVcc低于 S V M H SVM_H SVMH级别,则设置SVMHIFG ( S V M H SVM_H SVMH中断标志)。如果 D V c c DV_{cc} DVcc仍然低于 S V M H SVM_H SVMH级别,并且软件试图清除SVMHIFG,硬件将立即再次设置它。如果在设置SVMHIFG时设置了SVMHIE ( S V M H SVM_H SVMH中断启用)位,则会生成一个中断。如果在设置SVMHIFG时需要一个POR,可以通过在清除SVMHOVPE位时设置SVMHVLRPE ( S V M H SVM_H SVMH电压水平达到POR enable)位来配置 S V M H SVM_H SVMH。
如果 D V c c DV_{cc} DVcc上升到 S V M H SVM_H SVMH水平以上,设置SVMHVLRIFG ( S V M H SVM_H SVMH电压水平达到)中断标志,如果此时设置SVMHVLRIE ( S V M H SVM_H SVMH电压水平达到中断启用),也会产生中断。
另外, S V M H SVM_H SVMH模块可以用于过电压检测,前提是设置最高核心电压(PMMCOREV = 11b),除了设置SVMHVLRPE之外,还需要设置SVMHOVPE (SVMH过电压POR enable)位。在这些条件下,如果上升的DVCC超过安全设备运行,就会产生POR信号
S V S H SVS_H SVSH和 S V M H SVM_H SVMH模块具有节电操作的可配置性能模式。如果这些 S V S H SVS_H SVSH和 S V M H SVM_H SVMH功率模式被修改,或者如果一个电压电平被修改,那么会有一个延迟会覆盖中断和POR信号,直到 S V S H SVS_H SVSH和 S V M H SVM_H SVMH稳定。当SVSMHDLYST(延迟状态)读取为零时,延迟失效。另外,设置SVSMHDLYIFG (SVSH和SVMH delay expired)中断标志,如果设置SVSMHDLYIE (SVSH和SVMH delay expired interrupt enable),此时也会产生一个中断。
在电源故障情况下,设置SVSHMD会导致在LPM2、LPM3和LPM4中设置SVSH中断标志。如果没有设置SVSHMD,则在LPM2、LPM3和LPM4中没有设置SVSH中断标志。此外,可以通过设置SVSMHEVM屏蔽所有SVSH和SVMH事件。对于大多数应用程序,应该清除SVSMHEVM。
所有的中断标志SVSH和SVMH保持设置,直到BOR或软件清除。
软件必须启用高端SVS来修改RTC和LFXT寄存器。
8、低侧检测器(SVSL)和低侧监控器(SVML)
SVSL和SVML模块在默认情况下是启用的,可以通过分别清除SVSLE和SVMLE位来禁用。图2-6显示了SVSL和SVML的框图。
如果 V c o r e V_{core} Vcore低于 S V S L SVS_L SVSL级别,则设置SVSLIFG ( S V S L SVS_L SVSL中断标志)。如果 V c o r e V_{core} Vcore仍然低于 S V S L SVS_L SVSL级别,并且软件试图清除SVSLIFG,硬件会立即重新设置。如果在设置SVSLIFG时设置了SVSLPE (SVSL POR enable)位,则生成一个POR信号
如果 V c o r e V_{core} Vcore低于 S V M L SVM_L SVML级别,设置SVMLIFG ( S V M L SVM_L SVML中断标志)。如果 V c o r e V_{core} Vcore仍然低于 S V M L SVM_L SVML级别,并且软件试图清除SVMLIFG,硬件会立即重新设置。如果SVMLIFG设置时设置了SVMLIE ( S V M L SVM_L SVML中断启用)位,则会生成一个中断。如果在设置SVMLIFG时需要一个POR,可以通过在SVMLOVPE位被清除时设置SVMLVLRPE ( S V M L SVM_L SVML电压水平达到POR enable)位来配置 S V M L SVM_L SVML
如果 V c o r e V_{core} Vcore高于 S V M L SVM_L SVML水平,则设置SVMLVLRIFG ( S V M L SVM_L SVML电压水平达到)中断标志。如果在此情况发生时设置SVMLVLRIE ( S V M L SVM_L SVML电压水平达到中断启用),则也会产生中断
S V M L SVM_L SVML模块也可以用于过电压检测。除了设置SVMLVLRPE之外,还可以通过设置SVMLOVPE ( S V M L SVM_L SVML过电压POR enable)位来实现这一点。在这些条件下,如果 V c o r e V_{core} Vcore超过设备的安全阈值运行,将产生一个POR信号。
S V S L SVS_L SVSL和 S V M L SVM_L SVML模块具有节电操作的可配置性能模式。如果这些 S V S L SVS_L SVSL和 S V M L SVM_L SVML功率模式被修改,或者如果一个电压电平被修改,那么会有一个延迟会覆盖中断和POR信号,直到 S V S L SVS_L SVSL和 S V M L SVM_L SVML稳定。当SVSMHDLYST(延迟状态)读取为零时,延迟失效。另外,设置SVSMHDLYIFG (SVSH和SVMH delay expired)中断标志,如果设置SVSMHDLYIE (SVSH和SVMH delay expired interrupt enable),此时也会产生一个中断。
在电源故障情况下,设置SVSLMD会导致在LPM2、LPM3和LPM4中设置 S V S L SVS_L SVSL中断标志。如果没有设置SVSLMD,则在LPM2、LPM3和LPM4中没有设置 S V S L SVS_L SVSL中断标志。此外,可以通过设置SVSMLEVM屏蔽所有 S V S L SVS_L SVSL和 S V M L SVM_L SVML事件。对于大多数应用程序,应该清除SVSMLEVM。
所有 S V S L SVS_L SVSL和 S V M L SVM_L SVML的中断标志保持设置,直到BOR或软件清除。
9、电源电压监督和监视器之电源
当设备通电时,默认情况下启用
S
V
S
H
SVS_H
SVSH和
S
V
S
L
SVS_L
SVSL函数。最初,
D
V
c
c
DV_{cc}
DVcc是低的,因此PMM在POR复位中保持设备。当
S
V
S
H
SVS_H
SVSH和
S
V
S
L
SVS_L
SVSL级别都满足时,就释放重置。下图显示了这个过程:
10、增加
V
c
o
r
e
V_{core}
Vcore以支持更高的MCLK频率
在重置后,
V
c
o
r
e
V_{core}
Vcore和所有的PMM阈值都默认为最低的可能级别。这些默认设置允许广泛的MCLK操作,并且在许多应用程序中不需要更改这些级别。但是,如果应用程序需要更高的MCLK频率提供的性能,软件应该确保在更改MCLK之前
V
c
o
r
e
V_{core}
Vcore已经被提升到一个足够的电压级别,因为如果不能向CPU提供足够的电压,可能会产生不可预测的结果。对于给定的设备,已经建立了最大MCLK频率所需的最小
V
c
o
r
e
V_{core}
Vcore级别(具体值请参阅指定设备数据表)
将PMMCOREV设置为增加
V
c
o
r
e
V_{core}
Vcore后,有一段时间延迟,直到新电压建立。在必要的核心电压稳定之前,软件不能提高MCLK。在增加MCLK之前,可以使用
S
V
M
L
SVM_L
SVML来验证VCORE是否满足要求的最小值。下图显示了这个过程:
需要注意的是, V c o r e V_{core} Vcore级别一次只能增加一个级别。
11、SVS和SVM的性能模式和唤醒时间
监督员/监视器可以在两种模式中工作:正常和全面的性能。不同之处在于响应时间和功耗的权衡;全性能模式有更快的响应时间,但消耗相当多的电力比正常模式。在外部电源解耦不能充分防止
D
V
c
c
DV_{cc}
DVcc上出现快速峰值的应用程序中,或者当应用程序对故障有特殊的容错时,可以考虑使用全性能模式。在这种情况下,全性能模式提供了额外的保护层。
有两种方式控制的性能模式:手动和自动。在手动模式下,除了LPMx之外,其他所有运行模式的正常/全性能选择都是相同的。SVS和SVM在LPMx.5中始终是禁用的,在这种情况下,使用SVSHFP、SVMHFP、SVSLFP或SVMLFP位对它们各自的模块进行正常或全性能选择。
在自动模式下,硬件根据实际的操作模式改变正常或全性能选择。
12、端口控制
该PMM确保在欠压事件期间,I/O引脚不以不受控的方式产生动作。在这些事件中,输出被禁用,包括正常驱动和弱上拉或下拉功能。如果CPU正常工作,然后发生欠压事件,那么配置为输入的任何引脚都会在事件发生时锁定其PxIN寄存器值,直到电压恢复。在欠压事件期间,外部电压变化的引脚不登记内部。这有助于防止出现不稳定的行为。
二、源代码
#include <msp430.h>
void SysClock_Init(void);
void main()
{
WDTCTL = WDTPW + WDTHOLD;
SetVcoreUp(0x01);
SetVcoreUp(0x02);
SetVcoreUp(0x03);
while(1);
}
void SetVcoreUp(unsigned int level)
{
//Open PMM register for write
PMMCTL0_H = PMMPW_H; //PMMCTL0_H是电源管理寄存器PMMCTL0的高8位,PMMPW_H解锁PMM所有的寄存器
//Set SVS/SVM high side new level
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // SVLE --> 此位控制SVSL使能 SVMHE --> 此位控制SVMHE使能
//SVSHRVL --> SVSH 复位电平电压
//Set SVM low side to new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 *level;
//Wait till SVM is settle
while((PMMIFG & SVSMLDLYIFG) == 0);
//Clear already set flags
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG);
//Set Vcore to new level
PMMCTL0_L = PMMCOREV0 *level;
//Wait till new level reached
if((PMMIFG & SVMLIFG))
while((PMMIFG & SVMLVLRIFG) == 0);
//Set SVS/SVM low side to new level
SVSMLCTL = SVSLE +SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level;
//Lock PMM registers for write access
PMMCTL0_H = 0x00; //锁存所有寄存器
}