中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MSP430時鐘設置及應用總結

        MSP430時鐘設置及應用總結

        作者: 時間:2016-11-25 來源:網絡 收藏
        ********************************基于MSP430F1612***************************

        在MSP430單片機中,一個時鐘周期 = MCLK晶振的倒數。如果MCLK是8MHz,則一個時鐘周期為1/8us。

        本文引用地址:http://www.antipu.com.cn/article/201611/321423.htm

        一個機器周期 = 一個時鐘周期,即430每個動作都能完成一個基本操作。

        一個指令周期 = 1~6個機器周期,具體根據具體指令而定。

        另外,指令長度只是一個存儲單位,與時間沒有必然的關系。

        MSP430單片機的時鐘模塊主要包括:

        三個時鐘:輔助時鐘ACLK 、主時鐘MCLK 、子系統(tǒng)時鐘SMCLK

        三個振蕩器:低頻時鐘源LFXT1 、高頻時鐘源XT2 、數字控制RC振蕩器DCO

        而MSP430單片機工作所需時鐘就是由這些振蕩器振蕩后經處理產生的。

        (1)ACLK:是LFXT1CLK信號經1/2/4/8分頻后得到的,主要用作低速外圍的時鐘

        (2)MCLK:是LFXT1CLK,XT2CLK,DCOCLK的三者之一決定,由軟件選擇,然后經1/2/4/8分頻后得到,主要用于CPU和系統(tǒng)

        (3)SMCLK:可由LFXT1CLK和DCOCLK,或者XT2CLK與DCOCLK決定,然后經1/2/4/8分頻后得到,主要用于高速外圍模塊

        MSP430的時鐘模塊由DCOCTL,BCSCTL1,BCSCTL2,IE1,IFG1這五個寄存器來確定,具體的功能如下所示:

        DCOCTL:控制DCO振蕩器

        BCSCTL1:控制XT2,LFXT1,DCO振蕩,并控制ACLK的分頻情況

        BCSCTL2:設置三個時鐘源分別選擇什么振蕩器

        我們在程序里對寄存器的設置,也就是對三個振蕩器進行設置,時鐘振蕩器設置好了,還要對時鐘模塊進行設置,也就是讓三個時鐘模塊MCLK SMCLK ACLK選擇相應的時鐘振蕩器以得到不同頻率的時鐘。

        PUC信號后,系統(tǒng)選擇內部電阻以實現頻率的輸出。RSELx = 4 與 DCOx = 3,開始時使DCO有一個適中的頻率。MCLK與SMCLK的時鐘信號全部來自DCO,約為800KHz(芯片手冊)。PUC信號后將LFXT1設置到LF模式(XTS=0),并且關斷HF模式(XTS=1)與關斷XT2振蕩器。

        (1)DCOCTL:DCO控制寄存器,地址為56H,初始值為60H

        // 7 6 5 4 3 2 1 0

        // DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0

        //

        // DCO0~DCO2:DCO Select Bit,定義了8種頻率之一,而頻率由注入直流發(fā)生器的電流定義

        // MOD0~MOD4:Modulation Bit,頻率的微調

        //

        // DCO的設置:通過設置DCOCTL和BCSCTL1,設置DCO的頻率

        // (1)DCO的調節(jié):

        設置DCOR比特來選擇是外部電阻還是內部電阻,以確定一個基準頻率

        通過BCSCTL1寄存器的RSELx來進行分頻,確定時鐘頻率;

        通過DCOCTL寄存器中DCOx在標稱頻率基礎上分段粗調,選擇頻率;

        通過DCOCTL寄存器中MODx的值對頻率進行細調,選擇 DCOx 與 DCOx+1 之間的頻率

        // 注意:DCO工作在最高頻率時,內部電阻正常值大約為200k,此時DCO的工作頻率大約為5MHz。

        例子:

        //DCOCTL初始值為60H,即DCOCTL |= DCO1 + DCO2;

        DCOCTL |= DCO0 + DCO1 + DCO2; // Max DCO

        //MOD0~MOD4:Modulation Bit,頻率的微調一般保持默認即可

        //系統(tǒng)默認情況下,RSELx=4

        (2)BCSCTL1(ACLK):Basic Clock System Control 1,地址為58H,初始值為84H

        // 7 6 5 4 3 2 1 0

        // XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0

        //

        // RSEL2~RSEL0:選擇某個內部電阻以決定標稱頻率(0最低,7最高)

        // XT5V:1,該比特未用,必須選擇復位

        // DIVA0~DIVA1:選擇ACLK的分頻系數。DIVA=0,1,2,3(DIVA_0,DIVA_1...),ACLK的分頻系數分別為:1,2,4,8

        // XTS:選擇LFXT1工作在低頻晶體模式(XTS=0)還是高頻晶體模式(XTS=1)

        // XT2OFF:控制XT2振蕩器的開啟(XT2OFF=0)與關閉(XT2OFF=1)

        //

        // BCSCTL1的設置:初始值為84H

        //使用XT2振蕩器

        //控制XT2振蕩器的開啟(XT2OFF=0)與關閉(XT2OFF=1)

        BCSCTL1 &= ~XT2OFF;//清OSCOFF/XT2

        do

        {

        IFG1 &= ~OFIFG;//清OFIFG

        OSC_Delay = 255;

        while(OSC_Delay --);//延時等待

        }

        while(IFG1 & OFIFG);//直到OFIFG=0為止

        //RSEL2~RSEL0:選擇某個內部電阻以決定標稱頻率(0最低,7最高)

        BCSCTL1 |= RSEL0 + RSEL1 + RSEL2;// XT2on,max RSEL

        //選擇ACLK的分頻系數:DIVA=0,1,2,3,ACLK的分頻系數分別為:1,2,4,8

        //BCSCTL1 |= DIVA_2;//對ACLK進行2分頻

        //(3)BCSCTL2(SMCLK,MCLK):Basic Clock System Control 2,地址為58H,初始值為00H

        // 7 6 5 4 3 2 1 0

        // SELM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCOR

        //

        // DCOR:Enable External Resister,0—選擇內部電阻,1—選擇外部電阻

        // DIVS0~DIVS1:DIVS=0,1,2,3,對應SMCLK的分頻因子為1,2,4,8

        // SELS:選擇SMCLK的時鐘源,0:DCOCLK,1:XT2CLK/LFXTCLK

        // DIVM0~DIVM1:選擇MCLK的分頻因子,DIVM=0,1,2,3,對應MCLK的分頻因子為1,2,4,8

        // SELM0~SELM1:選擇MCLK的時鐘源,0,1:DCOCLK,2:XT2CLK,3:LFXT1CLK

        //

        // BCSCTL2的設置:初始值為00H

        //設置BCSCTL2,選定MCLK和SMCLK的時鐘源XT2,并可以設置其分頻因子

        //注意:ACLK只能來源于LFXT1,可以在BCSCTL1里設置ACLK的分頻,就是說ACLK最大只能為32768Hz(XIN 與 XOUT間接32.768KHz晶振)

        //DCOR一般設置為默認值

        //設置SMCLK的分頻因子,DIVS0~DIVS1:DIVS=0,1,2,3,對應SMCLK的分頻因子為1,2,4,8

        //BCSCTL2 = DIVS_0;

        //BCSCTL2 = DIVS_1;

        //BCSCTL2 = DIVS_2;

        //BCSCTL2 = DIVS_3;

        //設置MCLK的分頻因子,DIVM0~DIVM1:DIVM=0,1,2,3,對應MCLK的分頻因子為1,2,4,8

        //BCSCTL2 = DIVM_0;

        //BCSCTL2 = DIVM_1;

        //BCSCTL2 = DIVM_2;

        //BCSCTL2 = DIVM_3;

        //BCSCTL2:設置三個時鐘源分別選擇什么振蕩器

        //SELM0~SELM1:選擇MCLK的時鐘源,0,1:DCOCLK,2:XT2CLK,3:LFXT1CLK

        //選擇 MCLK 時鐘源為XT2,

        //BCSCTL2 = SELM_2 ;

        //SELS:選擇SMCLK的時鐘源,0:DCOCLK,1:XT2CLK/LFXTCLK

        //選擇 SMCLK 時鐘源為XT2

        //BCSCTL2 = SELS ;

        //選擇MCLK 與 SMCLK為XT2

        BCSCTL2 = SELM_2 + SELS;

        //(4)IE1,Interrupt Enable Register 1

        // 7 6 5 4 3 2 1 0

        // OFIE

        // 7~2 and 0 : These bits may be used by other modules

        // OFIE:Oscillator fault interrupt enable. 0---Interrupt not enabled

        // 1---Interrupt enabled

        //(5)IEG1,Interrupt Flag Register 1

        // 7 6 5 4 3 2 1 0

        // OFIFG

        // 7~2 and 0 : These bits may be used by other modules

        // OFIE:Oscillator fault interrupt flag. 0 No interrupt pending

        // 1 Interrupt pending

        //

        在PUC信號后,默認情況下由DCOCLK作MCLK與SMCLK的時鐘信號,由于DCOCTL初始值為60H,根據需要可將MCLK的時鐘源另外設置為LFXT1或者XT2,設置順序如下:

        //(1)清OSCOFF/XT2

        //(2)清OFIFG

        //(3)延時等待至少50us

        //(4)再次檢查OFIFG,如果仍置位,則重復(1)~(4)步,直到OFIFG=0為止

        //(5)設置BCSCTL2的相應SELM




        評論


        技術專區(qū)

        關閉