色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MSP430學(xué)習(xí)心得---時(shí)鐘

          MSP430學(xué)習(xí)心得---時(shí)鐘

          作者: 時(shí)間:2017-01-06 來源:網(wǎng)絡(luò) 收藏

            初始化和GPIO

          本文引用地址:http://cafeforensic.com/article/201701/342564.htm

            概述:

            本實(shí)驗(yàn)的目的是了解用于執(zhí)行對(duì) Value Line設(shè)備的初始化過程的步驟。在這個(gè)練習(xí)中,您將編寫初始化代碼,并運(yùn)行該設(shè)備使用各種資源。

            1、寫初始化代碼

            2、運(yùn)行CPU的MCLK的來源方式:VLO 、32768晶體、DCO

            3、主體程序部分

            4、觀察LED閃光燈速度

            

            1、在單片機(jī)中一共有三個(gè)或四個(gè)時(shí)鐘源:

            (1)LFXT1CLK,為低速/高速晶振源,通常接32.768kHz,也可以接(400kHz~16Mhz);

            (2)XT2CLK,可選高頻振蕩器,外接標(biāo)準(zhǔn)高速晶振,通常是接8Mhz,也可以接(400kHz~16Mhz);

            (3)DCOCLK,數(shù)控振蕩器,為內(nèi)部晶振,由RC震蕩回路構(gòu)成;

            (4)VLOCLK,內(nèi)部低頻振蕩器,12kHz標(biāo)準(zhǔn)振蕩器。

            2、在MSP430單片機(jī)內(nèi)部一共有三個(gè)時(shí)鐘系統(tǒng):

            (1)ACLK,Auxiliary Clock,輔助時(shí)鐘,通常由LFXT1CLK或VLOCLK作為時(shí)鐘源,可以通過軟件控制更改時(shí)鐘的分頻系數(shù);

            (2)MCLK,Master Clock,系統(tǒng)主時(shí)鐘單元,為系統(tǒng)內(nèi)核提供時(shí)鐘,它可以通過軟件從四個(gè)時(shí)鐘源選擇;

            (3)SMCLK,Sub-Main Clock,系統(tǒng)子時(shí)鐘,也是可以由軟件選擇時(shí)鐘源。

            Basic Clock Module Registers(基礎(chǔ)時(shí)鐘寄存器)

            DCO control register DCOCTL

            Basic clock system control 1 BCSCTL1

            Basic clock system control 2 BCSCTL2

            Basic clock system control 3 BCSCTL3

            SFR interrupt enable register 1 IE1

            SFR interrupt flag register 1 IFG1

            3、MSP430的時(shí)鐘設(shè)置包括3個(gè)寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3

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

            DCO2DCO1DCO0MOD4MOD3MOD2MOD1MOD0

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

            MOD0~MOD4: Modulation Bit,頻率的微調(diào)。

            一般不需要DCO的場(chǎng)合保持默認(rèn)初始值就行了。

            BCSCTL1,Basic Clock System Control 1,地址為57H,初始值為84H

            XT2OFFXTSDIVA1DIVA0XT5VRSEL2RSEL1RSEL0

            RSEL0~RSEL2: 選擇某個(gè)內(nèi)部電阻以決定標(biāo)稱頻率.0最低,7最高。

            XT5V: 1.

            DIVA0~DIVA1:選擇ACLK的分頻系數(shù)。DIVA=0,1,2,3,ACLK的分頻系數(shù)分別是1,2,4,8;

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

            XT2OFF: 控制XT2振蕩器的開啟(XT2OFF=0)與關(guān)閉(XT2OFF=1)。

            正常情況下把XT2OFF復(fù)位就可以了.

            BCSCTL2,Basic Clock System Control 2,地址為58H,初始值為00H

            SEM1SELM0DIVM1DIVM0SELSDIVS1DIVS0DCOR

            DCOR: Enable External Resistor. 0,選擇內(nèi)部電阻;1,選擇外部電阻

            DIVS0~DIVS1: DIVS=0,1,2,3對(duì)應(yīng)SMCLK的分頻因子為1,2,4,8

            SELS: 選擇SMCLK的時(shí)鐘源, 0:DCOCLK; 1:XT2CLK/LFXTCLK.

            DIVM0~1: 選擇MCLK的分頻因子, DIVM=0,1,2,3對(duì)應(yīng)分頻因子為1,2,4,8.

            SELM0~1: 選擇MCLK的時(shí)鐘源, 0,1:DCOCLK, 2:XT2CLK, 3:LFXT1CLK

            我用的時(shí)候一般都把SMCLK與MCLK的時(shí)鐘源選擇為XT2。

            其它:

            1. LFXT1: 一次有效的PUC信號(hào)將使OSCOFF復(fù)位,允許LFXT1工作,如果LFXT1信號(hào)沒有用作SMCLK或MCLK,可軟件置OSCOFF關(guān)閉LFXT1.

            2. XT2: XT2產(chǎn)生XT2CLK時(shí)鐘信號(hào),如果XT2CLK信號(hào)沒有用作時(shí)鐘MCLK和SMCLK,可以通過置XT2OFF關(guān)閉XT2,PUC信號(hào)后置XT2OFF,即XT2的關(guān)閉的。

            3. DCO振蕩器:振蕩器失效時(shí),DCO振蕩器會(huì)自動(dòng)被選做MCLK的時(shí)鐘源。如果DCO信號(hào)沒有用作SMCLK和MCLK時(shí)鐘信號(hào)時(shí),可置SCG0位關(guān)閉DCO直流發(fā)生器。

            4. 在PUC信號(hào)后,由DCOCLK作MCLK的時(shí)鐘信號(hào),根據(jù)需要可將MCLK的時(shí)鐘源另外設(shè)置為L(zhǎng)FXT1或XT2,設(shè)置順序如下:

            (1)清OSCOFF/XT2

            (2)清OFIFG

            (3)延時(shí)等待至少50uS

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

            (5)設(shè)置BCSCTL2的相應(yīng)SELM。

            實(shí)例分析

            1、CPU運(yùn)行在VLO時(shí)鐘下:

            這是最慢的時(shí)鐘,在約12千赫茲下運(yùn)行。因此,我們將通過可視化的LED閃爍的紅色慢慢地在約每3秒鐘率。我們可以讓時(shí)鐘系統(tǒng)默認(rèn)這種狀態(tài),設(shè)置專門來操作VLO。我們將不使用任何ALCK外設(shè)時(shí)鐘在此實(shí)驗(yàn)室工作,但你應(yīng)該認(rèn)識(shí)到,ACLK來自VLO時(shí)鐘。

            #include

            void main(void)

            {

            WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗定時(shí)器

            P1DIR = 0x40; // P1.6 配置輸出

            P1OUT = 0; // 關(guān)閉LED

            BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO

            IFG1 &= ~OFIFG; // 清除OSCFault 標(biāo)志

            __bis_SR_register(SCG1 + SCG0); // 關(guān)閉 DCO

            BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = VLO/8

            while(1)

            {

            P1OUT = 0x40; // 開啟LED

            _delay_cycles(100);

            P1OUT = 0; // 關(guān)閉 LED

            _delay_cycles(5000);

            }

            }

            2、CPU運(yùn)行在晶振(32768Hz)時(shí)鐘下:

            晶體頻率為32768赫茲,約3倍的VLO。如果我們?cè)谇懊娴拇a中使用晶振,指示燈應(yīng)閃爍大約每秒一次。你知道為什么32768赫茲是一個(gè)標(biāo)準(zhǔn)?這是因?yàn)檫@個(gè)數(shù)字是2的15次方,因此很容易用簡(jiǎn)單的數(shù)字計(jì)數(shù)電路,以每秒一次獲得率 ——手表和其他時(shí)間時(shí)基。認(rèn)識(shí)到ACLK來自外部晶振時(shí)鐘。

            #include

            void main(void)

            {

            WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗定時(shí)器

            P1DIR = 0x41; // P1.0 和P1.6配置輸出

            P1OUT = 0x01; // 開啟P1.0

            BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768Hz 晶振

            while(IFG1 & OFIFG)

            {

            IFG1 &= ~OFIFG; // 清除 OSCFault 標(biāo)志

            _delay_cycles(100000); // 為可見的標(biāo)志延時(shí)

            }

            P1OUT = 0; // 關(guān)閉P1

            __bis_SR_register(SCG1 + SCG0); // 關(guān)閉 DCO

            BCSCTL2 |= SELM_3 + DIVM_3; // MCLK = 32768/8

            while(1)

            {

            P1OUT = 0x40; // 開啟 LED

            _delay_cycles(100);

            P1OUT = 0; / / 關(guān)閉LED

            _delay_cycles(5000);

            }

            }

            3、CPU運(yùn)行在晶振(32768Hz)和DCO時(shí)鐘下:

            最慢的頻率,我們可以運(yùn)行DCO約在1MHz(這也是默認(rèn)速度)。因此,我們將開始切換MCLK到DCO下。在大多數(shù)系統(tǒng)中,你會(huì)希望ACLK上運(yùn)行的VLO或32768赫茲晶振。由于ACLK在我們目前的代碼是在晶體上運(yùn)行,我們會(huì)打開DCO計(jì)算。

            #include

            void main(void)

            {

            WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗定時(shí)器

            if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

            {

            while(1); // If cal const erased, 掛起

            }

            BCSCTL1 = CALBC1_1MHZ; // Set range

            DCOCTL = CALDCO_1MHZ; //設(shè)置DCO模式

            P1DIR = 0x41; // P1.0 和P1.6配置輸出

            P1OUT = 0x01; // P1.0 開啟

            BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768Hz

            while(IFG1 & OFIFG)

            {

            IFG1 &= ~OFIFG; // 清除OSCFault 標(biāo)志

            _delay_cycles(100000); // 為可見標(biāo)志延時(shí)

            _delay_cycles(100000); // 為可見標(biāo)志延時(shí)

            }

            P1OUT = 0; // P1.6 關(guān)閉

            // __bis_SR_register(SCG1 + SCG0); // 關(guān)閉DCO

            BCSCTL2 |= SELM_0 + DIVM_3; // MCLK = DCO

            while(1)

            {

            P1OUT = 0x40; // P1.6 開啟

            _delay_cycles(100);

            P1OUT = 0; / / P1.6 關(guān)閉

            _delay_cycles(5000);

            }

            }

            4、CPU運(yùn)行在DCO時(shí)鐘下:

            最慢的頻率,我們可以運(yùn)行DCO約在1MHz(這也是默認(rèn)速度)。因此,我們將開始切換MCLK到DCO下。在大多數(shù)系統(tǒng)中,你會(huì)希望在VLO或者是晶振下運(yùn)行ACLK。由于ACLK在我們目前的代碼是在VLO上運(yùn)行,我們會(huì)打開DCO運(yùn)行。

            #include

            void main(void)

            {

            WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗定時(shí)器

            if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)

            {

            while(1); // If cal const erased,掛起

            }

            BCSCTL1 = CALBC1_1MHZ; // Set range

            DCOCTL = CALDCO_1MHZ; // 設(shè)置DCO模式

            P1DIR = 0x40; // P1.6 配置輸出

            P1OUT = 0; // P1關(guān)閉

            BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO

            IFG1 &= ~OFIFG; // 清除 OSCFault 標(biāo)志

            //__bis_SR_register(SCG1 + SCG0); // 關(guān)閉DCO

            BCSCTL2 |= SELM_0 + DIVM_3; // MCLK = DCO/8

            while(1)

            {

            P1OUT = 0x40; // P1.6 關(guān)閉

            _delay_cycles(100);

            P1OUT = 0; // P1.6 開啟

            _delay_cycles(5000);

            }

            }



          關(guān)鍵詞: MSP430 時(shí)鐘

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉