我觉得电源办理与监控是一个很杂乱很难掌控的部分,不只触及到到源形式的挑选,还牵扯到杂乱的中止、以及中止怎么处理等等。尽管学好这一部分对完成降低功耗的意图很有协助,但关于现在的咱们来说形似“ “功耗”一词还略微远了点。此外,这部分操控对避免和处理供电意外((过高过低一级)的产生很有协助,不过形似这个开发板假如不独立拿来做项项目而仅仅接在电脑USB供电的话,一般也不会有什么问题。所以,我也也只计划简略学一下。(到后期有机会会再细心学)。
I/O口和一切模仿单元包含晶振在内都由DVCC供电。内存(flash和RAM)和数字单元由中心电压VCORE供电。
DVCC:宽的电源电压规模1.8V-3.6V;
VCORE:DVCC经低压降电压调整器(LDO),产生的一个二次中心电压,专门为CPU数字逻辑供电,共有1.4V(0-12MHZ),1.6V(0-16MHZ),1.8V(0-20MHZ)和1.9V(0-25MHZ)四个等级。VCORE的最小答应电压依赖于挑选的MCLK巨细,也便是说高主频时需求配套较高的VCORE。
办理睬产生复位(主要是上电期间),监控会产生中止(监控电压是否过高过低)。
咱们最常用的是设置中心电压VCORE,还好有专门的函数库HAL_PMM.c/h。
在这个函数库里除了一些设置的界说外,最重要的便是界说了三个函数:
SetVCoreDown(uint8_t level):下降中心电压
SetVCoreUp(uint8_t level): 进步中心电压
SetVCore(uint8_t level):直接设置中心电压值(0-3共四级)
/*这个函数最重要,或许说有了这一个,前面两个就不需求了*/
五、体系作业形式
第四章咱们说到能够从电源层下手,到达从源头上操控功耗的意图。这一章 咱们就会讲CPU作业形式,怎么从次一级来操控功耗。
不同作业形式下,CPU会禁用一些模块,然后到达操控功耗的意图。
(PS:相同那句话,“功耗太远”,一般都不会去更改作业形式,所以简 单学习)
简介几句话:①改动作业形式会当即收效;
②产生中止时,当时的形式设置信息会被保存,以便康复(除非中止服务程序中改动了作业形式);
③处于LPM4.5形式时,PMM的电源监管不会收效,一切的RAM和寄存器都会丢掉,可是I/O口状况会确定;
④从LPM4.5唤醒,有一套专门的流程,有爱好就去看;
下面这张图很有意思,能够清楚的看清作业形式之间转化的流程与方向,以及每种作业形式是怎样设置的,又操控了哪些部分。
BOR: Brown-Out Reset 低电压检测复位(欠压复位)
POR: Power-On Reset 上电复位
PUC: Power-Up Clear 上电铲除
淡色部分表明一个事情,深色部分表明一种操作或设置
①设置作业形式主要是设置寄存器SR的SCG0、SCG1、OSCOFF、CPUOFF
位,AM(Active Mode)形式时四位均置零,且体系默以为AM形式;
②除了AM,其他都为低功耗形式,处理器进入低功耗形式今后,一般由中 断来唤醒。能够是外部中止,也能够是内部的守时器等中止;
③LPM0-LPM4形式下,外围模块都会正常作业,且RTC时钟不会中止;
④要进入LPM4.5这一形式(更少用),只需在LPM4的基础上多一个 PMMREGOFF置位。该形式下,体系的一切时钟、内存和监督办理机 制都停了,连实时时钟RTC都制止操作了。
⑤LPM0和LPM1一组,除了上图显现的特征外,该形式下SMCLK是选通的 (SMCLKOFF =0),DCO的时钟源假如是ACLK或许SMCLK,则DCO也是有 效的;
⑥ LPM2和LPM3一组,除了上图显现的特征外,该形式下SMCLK是制止的, DCO的时钟源假如是ACLK,则DCO也是有用的;
⑦MSP430的头文件对低功耗形式有翔实的界说,如:要进入低功耗形式0,可 在程序中直接写LPM0; 进入低功耗形式4,能够直接写LMP4。退出低功 耗形式如下:
LPM0_EXIT; //退出低功耗形式0 //太方便了有木有
LPM4_EXIT; //退出低功耗形式4(LPM4.5在外)
总结试验:一个很有意思的程序
/*低功耗形式的表现,不必无限循环,程序也不会停止*/
/*我们会发现,LPM3后边的句子不会履行,程序只会守时履行一下中止服务程序,这是由于LPM3形式下MCLK和SMCLK、FLL都制止了*/
#include<msp430.h>
void main(void)
{
WDTCTL=WDTPW+WDTCNTCL+WDTTMSEL+WDTIS1+WDTIS0;//WDT作守时器用
SFRIE1|=WDTIE; //开看门狗中止
P1DIR|=BIT1+BIT2; //P1.1接LED,设定为输出方向
P1OUT=BIT1+BIT2;
__enable_interrupt(); //开总中止
//_BIS_SR(GIE); 这句话的意思也是开总中止
/*这儿把握一个用法_BIS_SR( ):将括号内的变量置位*/
LPM3; //进入LPM3低功耗形式,此形式下SMCLK被制止
P1OUT&=~BIT2;//这句话履行不了,所以P1.2就会坚持常亮,而不会变暗
}
#pragma vector=WDT_VECTOR
__interrupt void WatchTimer(void)
{
P1OUT^=BIT1; //守时翻转,以完成闪耀
}