標籤:
第四章我們提到可以從電源層入手,達到從源頭上控制功耗的目的。這一章 我們就會講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; //定時翻轉,以實現閃爍
}
文章摘錄於:http://blog.lehu.shu.edu.cn/879836630/A449441.html
(8)MSP430F5529 系統工作模式