新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于MSP430F449時鐘

        關于MSP430F449時鐘

        作者: 時間:2016-11-13 來源:網絡 收藏
        SP430系列MCU的賣點是超低功耗,除了端口的低漏電流之最之外,我認為和低功耗關系最大的莫過于他的時鐘模塊了。典型的430CPU一般可以在3個震蕩器之中選取時鐘源:低頻晶體(LFXT)、高頻晶體(XT)和內部的數控RC振蕩器(DCO)。

        前幾周使用MSP430F449做產品,因為之前成功地使用過MSP430F149做過東西,心想449也是一個模子出來的換湯不換藥,遂成竹在胸,殊不知,險些栽了跟頭,就在這個多時鐘源的時鐘模塊上。

        本文引用地址:http://www.104case.com/article/201611/316329.htm

        449和149的時鐘模塊的最大區別在于449的時鐘包含了可編程FLL模塊,打開449的頭文件,連寄存器的名字都和149完全不一樣,一切均以“FLL”開頭。少頃,但見其內容大同小異,遂把以前的寫的149的時鐘初始化代碼中的寄存器改了名號,直接用在了449上。但是馬上就出現了問題:在測試IFG1中的時鐘失效標志位OFIFG之時,會不定期地出現OFIFG始終不復位的情況,程序就這樣在這里止步不前(OFIFG置位表示至少有一個時鐘源實效,如果置之不理,強行運行下面的代碼的話,CPU有可能會強制使用DCO作為MCLK時鐘源,這樣就會使定時操作出現錯誤)。我的板子上接了32K的LFXT和8M的XT2,遂懷疑匹配負載電容有問題,因為低速晶體振蕩器LFXT提供了內置的匹配電容。但是不管如何搭配內部與外部電容,始終不得解。

        這之后的某日,我借出恭之便仔細研讀了449文檔里的時鐘模塊相關內容,發現OFIFG竟然是時鐘模塊控制寄存器FLL_CTL0中XT1OF、XT2OF、LFOF、DCOF這4的狀態位相或的結果,頓時靈光一現,遂編寫代碼將相關狀態位于幾個管腳上LED關聯,察看其狀態,結果令我大吃一驚:我一直認為有重大嫌疑的LFXT和XT并沒有任何問題,LFOF與XT2OF都會在上電后瞬間復位,而我一直覺得絕對不會有問題的DCOF卻一直置位!

        接下來,我仔細查閱了文檔,原來在SCFI1中有5位設置了DCO tap數值,這個數值若這個數值設置的過高或過低都會使DCOF置位,從而使OFIFG置位,而PUC后這五位都是復位的,就是說,DCO tap值在PUC后被設置為最低值0,所以有可能會使DCOF置位。

        上網搜了一下,其實這個DCO還是蠻強大的,雖說其頻率會受到溫度與電壓的影響,通過調整也能到達相當的精度。因為我已經把LFXT和XT都備全了,這個應用也不需要節電,所以沒有再太多的研究這個DCO到底怎么用,在程序里做了個計數,把DCO tap所有的可能數值都試了一下,以保證時鐘初始化的順利。

        我最后時鐘初始化代碼如下,以供和我遇到同樣問題的朋友參考。

        /******************************************************/
        //初始化系統時鐘
        void SysClkInit(void)
        {
        unsigned int i;
        unsigned char DCOtap = 0x01;

        SCFQCTL |= SCFQ_M;
        FLL_CTL0 &= XCAP18PF;
        _BIS_SR(OSCOFF);
        FLL_CTL1 &= ~XT2OFF;

        IFG1 &= ~OFIFG; // Clear oscillator fault flag

        do
        {
        IFG1 &= ~OFIFG;
        for (i = 5000; i; i--); // Delay
        SCFI1 |= ((DCOtap++) & 0x0f) << 3;
        } while (IFG1 & OFIFG); // Test osc fault flag
        FLL_CTL1 = (SELM1 + SELS); // Select SMCLK source as XT2CLK
        return;
        }
        /******************************************************/

        這段代碼已經經過反復測試,再也沒有遇到時鐘初始化通不過的情況了。



        關鍵詞: MSP430F449時

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 嘉荫县| 游戏| 凤山市| 宁津县| 广平县| 龙川县| 科尔| 平顺县| 兖州市| 甘德县| 屏边| 白河县| 左贡县| 蓬安县| 兖州市| 宿迁市| 平定县| 平安县| 凌云县| 兴和县| 泽库县| 沂南县| 临夏市| 泗水县| 德钦县| 德兴市| 泸定县| 凌源市| 澄迈县| 镇宁| 兴国县| 石阡县| 邮箱| 无锡市| 横峰县| 福鼎市| 菏泽市| 南川市| 西昌市| 绥宁县| 巨野县|