新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MSP430F5529 (四)電源&&&(五)工作模式

        MSP430F5529 (四)電源&&&(五)工作模式

        作者: 時間:2016-11-28 來源:網絡 收藏
        我覺得電源管理與監控是一個很復雜很難掌控的部分,不僅涉及到到源模式的選擇,還牽扯到復雜的中斷、以及中斷如何處理等等。雖然學好這一部分對實現降低功耗的目的很有幫助,但對于目前的我們來說貌似“ “功耗”一詞還稍微遠了點。此外,這部分控制對防止和處理供電意外((過高過低等)的發生很有幫助,不過貌似這個開發板如果不獨立拿來做項項目而只是接在電腦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; //定時翻轉,以實現閃爍
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 安乡县| 上高县| 竹溪县| 梧州市| 敦化市| 左贡县| 富锦市| 桂阳县| 明溪县| 社旗县| 樟树市| 安徽省| 四平市| 焉耆| 湘潭县| 双柏县| 阳山县| 金塔县| 兴仁县| 武城县| 邓州市| 介休市| 乐亭县| 平凉市| 宝丰县| 河东区| 会同县| 东丽区| 广东省| 沙田区| 上杭县| 仁怀市| 宜良县| 沈丘县| 皋兰县| 淮安市| 太湖县| 祁阳县| 通城县| 临桂县| 社旗县|