<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          MSP430學(xué)習(xí)之時鐘

          作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          時鐘初始化和GPIO

          概述:

          本文引用地址:http://www.ex-cimer.com/article/201611/316537.htm

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

          1、寫初始化代碼

          2、運行CPU的MCLK的來源方式:VLO 、32768晶體、DCO

          3、主體程序部分

          4、觀察LED閃光燈速度

          MSP430時鐘:

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

          (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)部一共有三個時鐘系統(tǒng):

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

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

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

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

          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è)置包括3個寄存器,DCOCTL、BCSCTL1、BCSCTL2、BCSCTL3

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

          DCO2

          DCO1

          DCO0

          MOD4

          MOD3

          MOD2

          MOD1

          MOD0

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

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

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

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

          XT2OFF

          XTS

          DIVA1

          DIVA0

          XT5V

          RSEL2

          RSEL1

          RSEL0

          RSEL0~RSEL2: 選擇某個內(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

          SEM1

          SELM0

          DIVM1

          DIVM0

          SELS

          DIVS1

          DIVS0

          DCOR

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

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

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

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

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

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

          其它:

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

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

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

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

          (1)清OSCOFF/XT2

          (2)清OFIFG

          (3)延時等待至少50uS

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

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

          實例分析

          1、CPU運行在VLO時鐘下:

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

          #include <msp430g2231.h>

          void main(void)

          {

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

          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運行在晶振(32768Hz)時鐘下:

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

          #include

          void main(void)

          {

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

          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)志延時

          }

          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運行在晶振(32768Hz)和DCO時鐘下:

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

          #include

          void main(void)

          {

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

          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)志延時

          }

          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運行在DCO時鐘下:

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

          #include

          void main(void)

          {

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

          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);

          }

          }

          以下將會分析上面4個例子的代碼細(xì)微差別:

          首先讓我們看一下msp430x20x2.h這個文件中的內(nèi)容,由于頭文件信息量很大這里就只簡單說明和以上四個代碼有關(guān)的部分,其余請大家自行閱讀。

          一、WDTCTL = WDTPW + WDTHOLD; // 關(guān)閉看門狗定時器(例1、2、3、4)

          頭文件中的相關(guān)說明如下:

          /************************************************************

          * WATCHDOG TIMER

          ************************************************************/

          #define __MSP430_HAS_WDT__ /* Definition to show that Module is available */

          SFR_16BIT(WDTCTL); /* Watchdog Timer Control */

          /* The bit names have been prefixed with "WDT" */

          #define WDTIS0 (0x0001)

          #define WDTIS1 (0x0002)

          #define WDTSSEL (0x0004)

          #define WDTCNTCL (0x0008)

          #define WDTTMSEL (0x0010)

          #define WDTNMI (0x0020)

          #define WDTNMIES (0x0040)

          #define WDTHOLD (0x0080)

          #define WDTPW (0x5A00)

          這個指令設(shè)置密碼(WDTPW)和停止位定時器(WDTHOLD),所有的WatchDog配置都需要在WDTPW的輔助下完成。

          舉例如下:

          A、間隔時間由Bit0-2位編碼:

          1、看門狗的時鐘由FSMCLK(假設(shè)為1MHz)

          #defineWDT_MDLY_32 (WDTPW+WDTTMSEL+WDTCNTCL) /* 32ms interval (default) */

          #defineWDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) /* 8ms " */

          #defineWDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) /* 0.5ms " */

          #defineWDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms " */

          2、看門狗的時鐘由FACLK(假設(shè)為32KHz)

          #defineWDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) /* 1000ms " */

          #defineWDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms " */

          #defineWDT_ADLY_16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms " */

          B、看門狗模式——在過期時間后重啟:

          1、看門狗的時鐘由FSMCLK(假設(shè)為1MHz)

          #defineWDT_MRST_32 (WDTPW+WDTCNTCL) /* 32ms interval (default) */

          #defineWDT_MRST_8 (WDTPW+WDTCNTCL+WDTIS0) /* 8ms " */

          #defineWDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTIS1) /* 0.5ms " */

          #defineWDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms " */

          2、看門狗的時鐘由FACLK(假設(shè)為32KHz)

          #defineWDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) /* 1000ms " */

          #defineWDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms " */

          #defineWDT_ARST_16 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms " */

          #defineWDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms " */

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

          P1OUT = 0; // P1關(guān)閉 (例1、2、3、4)

          其中DIR 和P1OUT分別配置IO口的方向和輸出值,這里不在贅述,請參考手冊。

          三、BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO (例1和例4)

          BCSCTL3 |= LFXT1S_0; // LFXT1 = 32768Hz (例2和例3)

          /************************************************************

          * Basic Clock Module

          ************************************************************/

          #define__MSP430_HAS_BC2__

          /* Definition to show that Module is available */

          SFR_8BIT(DCOCTL); /* DCO Clock Frequency Control */

          SFR_8BIT(BCSCTL1); /* Basic Clock System Control 1 */

          SFR_8BIT(BCSCTL2); /* Basic Clock System Control 2 */

          SFR_8BIT(BCSCTL3); /* Basic Clock System Control 3 */

          #defineMOD0 (0x01) /* Modulation Bit 0 */

          #defineMOD1 (0x02) /* Modulation Bit 1 */

          #defineMOD2 (0x04) /* Modulation Bit 2 */

          #defineMOD3 (0x08) /* Modulation Bit 3 */

          #defineMOD4 (0x10) /* Modulation Bit 4 */

          #defineDCO0 (0x20) /* DCO Select Bit 0 */

          #defineDCO1 (0x40) /* DCO Select Bit 1 */

          #defineDCO2 (0x80) /* DCO Select Bit 2 */

          #defineLFXT1OF (0x01)

          /* Low/high Frequency Oscillator Fault Flag */

          #defineXT2OF (0x02)

          /* High frequency oscillator 2 fault flag */

          #defineXCAP0 (0x04) /* XIN/XOUT Cap 0 */

          #defineXCAP1 (0x08) /* XIN/XOUT Cap 1 */

          #defineLFXT1S0 (0x10) /* Mode 0 for LFXT1 (XTS = 0) */

          #defineLFXT1S1 (0x20) /* Mode 1 for LFXT1 (XTS = 0) */

          #defineXT2S0 (0x40) /* Mode 0 for XT2 */

          #defineXT2S1 (0x80) /* Mode 1 for XT2 */

          #defineXCAP_0 (0x00) /* XIN/XOUT Cap : 0 pF */

          #defineXCAP_1 (0x04) /* XIN/XOUT Cap : 6 pF */

          #defineXCAP_2 (0x08) /* XIN/XOUT Cap : 10 pF */

          #defineXCAP_3 (0x0C) /* XIN/XOUT Cap : 12.5 pF */

          #defineLFXT1S_0 (0x00)

          /* Mode 0 for LFXT1 : Normal operation */

          #defineLFXT1S_1 (0x10) /* Mode 1 for LFXT1 : Reserved */

          #defineLFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */

          #defineLFXT1S_3 (0x30)

          /* Mode 3 for LFXT1 : Digital input signal */

          #defineXT2S_0 (0x00) /* Mode 0 for XT2 : 0.4 - 1 MHz */

          #defineXT2S_1 (0x40) /* Mode 1 for XT2 : 1 - 4 MHz */

          #defineXT2S_2 (0x80) /* Mode 2 for XT2 : 2 - 16 MHz */

          #defineXT2S_3 (0xC0)

          /* Mode 3 for XT2 : Digital input signal */

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

          __bis_SR_register()是在intrinsics.h這個頭文件中定義了,實現(xiàn)的功能是將SR中的位置零。

          關(guān)于頭文件中的代碼作用

          #ifdef__cplusplus

          extern"C"

          {

          #endif

          #ifdef__cplusplus

          }

          #endif/* extern "C" */

          一般用于將C++代碼以標(biāo)準(zhǔn)C形式輸出(即以C的形式被調(diào)用),這是因為C++雖然常被認(rèn)為是C的超集,但是C++的編譯器還是與C的編譯器不同的。C中調(diào)用C++中的代碼這樣定義會是安全的。

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

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

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

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

          MSP430中有如下定義:

          #defineRSEL0 (0x01) /* Range Select Bit 0 */

          #defineRSEL1 (0x02) /* Range Select Bit 1 */

          #defineRSEL2 (0x04) /* Range Select Bit 2 */

          #defineRSEL3 (0x08) /* Range Select Bit 3 */

          #defineDIVA0 (0x10) /* ACLK Divider 0 */

          #defineDIVA1 (0x20) /* ACLK Divider 1 */

          #defineXTS (0x40)

          /* LFXTCLK 0:Low Freq. / 1: High Freq. */

          #defineXT2OFF (0x80) /* Enable XT2CLK */

          #defineDIVA_0 (0x00) /* ACLK Divider 0: /1 */

          #defineDIVA_1 (0x10) /* ACLK Divider 1: /2 */

          #defineDIVA_2 (0x20) /* ACLK Divider 2: /4 */

          #defineDIVA_3 (0x30) /* ACLK Divider 3: /8 */

          #defineDIVS0 (0x02) /* SMCLK Divider 0 */

          #defineDIVS1 (0x04) /* SMCLK Divider 1 */

          #defineSELS (0x08)

          /* SMCLK Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK */

          #defineDIVM0 (0x10) /* MCLK Divider 0 */

          #defineDIVM1 (0x20) /* MCLK Divider 1 */

          #defineSELM0 (0x40) /* MCLK Source Select 0 */

          #defineSELM1 (0x80) /* MCLK Source Select 1 */

          #defineDIVS_0 (0x00) /* SMCLK Divider 0: /1 */

          #defineDIVS_1 (0x02) /* SMCLK Divider 1: /2 */

          #defineDIVS_2 (0x04) /* SMCLK Divider 2: /4 */

          #defineDIVS_3 (0x06) /* SMCLK Divider 3: /8 */

          #defineDIVM_0 (0x00) /* MCLK Divider 0: /1 */

          #defineDIVM_1 (0x10) /* MCLK Divider 1: /2 */

          #defineDIVM_2 (0x20) /* MCLK Divider 2: /4 */

          #defineDIVM_3 (0x30) /* MCLK Divider 3: /8 */

          #defineSELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */

          #defineSELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */

          #defineSELM_2 (0x80)

          /* MCLK Source Select 2: XT2CLK/LFXTCLK */

          #defineSELM_3 (0xC0)

          /* MCLK Source Select 3: LFXTCLK */

          六、BCSCTL1 = CALBC1_1MHZ; //設(shè)置值 (例3、4)

          #ifndef__DisableCalData

          SFR_8BIT(CALDCO_16MHZ); /* DCOCTL Calibration Data for 16MHz */

          SFR_8BIT(CALBC1_16MHZ); /* BCSCTL1 Calibration Data for 16MHz */

          SFR_8BIT(CALDCO_12MHZ); /* DCOCTL Calibration Data for 12MHz */

          SFR_8BIT(CALBC1_12MHZ); /* BCSCTL1 Calibration Data for 12MHz */

          SFR_8BIT(CALDCO_8MHZ); /* DCOCTL Calibration Data for 8MHz */

          SFR_8BIT(CALBC1_8MHZ); /* BCSCTL1 Calibration Data for 8MHz */

          SFR_8BIT(CALDCO_1MHZ); /* DCOCTL Calibration Data for 1MHz */

          SFR_8BIT(CALBC1_1MHZ); /* BCSCTL1 Calibration Data for 1MHz */

          #endif/* #ifndef __DisableCalData */

          關(guān)于SFR_8BIT的相關(guān)說明:

          External references resolved by a device-specific linker command file

          (外部引用解決的特定于設(shè)備的連接器命令文件)

          #defineSFR_8BIT(address)extern volatile unsigned charaddress

          #defineSFR_16BIT(address)extern volatile unsigned intaddress

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

          {

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

          } (例3、例4)

          請注意這里的陷阱。它可以清除內(nèi)存段信息。

          八、IFG1 &= ~OFIFG; // 清除OSCFault 標(biāo)志 (例1、例4)

          時鐘系統(tǒng)將強制使用的MCLK作為其源的DCO在一個時鐘故障的存在。因此,我們必須清除故障標(biāo)志。

          FG1中斷標(biāo)志寄存器是1。寄存器中的位域是唯一的振蕩器故障中斷標(biāo)志 - OFIFG。

          九、while(IFG1 & OFIFG)

          {

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

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

          } (例2、例3)

          在上面的代碼我們把OSCFault標(biāo)志繼續(xù)做我們的任務(wù),由于時鐘系統(tǒng)將默認(rèn)為VLO?,F(xiàn)在,我們希望確保該標(biāo)志保持清零,這意味著晶體是啟動并運行著的。

          如果該故障標(biāo)志是明確的,我們就退出循環(huán)。我們需要等待清算后的標(biāo)志,直到我們再次測試50微秒。該_delay_cycles(100000)。我們需要它是那么長的時間,所以我們可以看到在代碼開頭的LED燈。否則,它會這么快,我們的光將無法看到它。

          配置:

          BCSCTL1

          BCSCTL2

          BCSCTL3

          DCOCTL

          IFG1

          VLO(12KHz)

          SELM_3 + DIVM_3

          LFXT1S_2

          32768KHz

          SELM_3 + DIVM_3

          LFXT1S_0

          While

          晶振、DCO

          SELM_0+ DIVM_3

          LFXT1S_0

          While

          DCO

          CALBC1_1MHZ

          SELM_0+ DIVM_3

          LFXT1S_2

          CALDCO_1MHZ

          結(jié)果:

          ACLK

          MCLK

          LFXT1

          VLO(12KHz)

          VLO

          VLO/8

          VLO

          32768Hz

          32768Hz

          32768Hz/8

          32768Hz

          晶振、DCO

          32768Hz

          DCO

          32768Hz

          DCO

          VLO

          DCO/8

          VLO




          關(guān)鍵詞: MSP430時

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();