要了解MSP430 單片機的時鐘系統,首先要了解單片機的時鐘源

一,時鐘源種類

  MSP430單片機共有三個時鐘源:高頻時鐘源(XT2CLK),低頻時鐘源(LFXT1CLK),內部時鐘源(DCOCLK)

  高頻時鐘源一般由8M的晶振產生

  低頻時鐘源一般由32K的晶振產生

  內部時鐘源可由RC振盪器產生

二,時鐘系統種類:

  MSP430單片機共有三個系統時鐘:主系統時鐘(MCLK),子系統時鐘(SMCLK),輔助系統時鐘(ACLK)

  主系統時鐘(MCLK)可由軟件程序選擇來自低頻時鐘源(LFXT1CLK),高頻時鐘源(XT2CLK),內部時鐘源(DCOCLK)三者之一,然後經過1,2,4,8分頻。 一般用於CPU和系統

  子系統時鐘(SMCLK)可由軟件程序選擇來自低頻時鐘源(LFXT1CLK),高頻時鐘源(XT2CLK),內部時鐘源(DCOCLK)三者之一,然後經過1,2,4,8分頻。一般用於其他模塊 

  輔助系統時鐘(ACLK)只能是有低頻時鐘源(LFXT1CLK)信號經過1,2,4,8分頻得到的。 ACLK 可由軟件選為各個外圍模塊的時鐘信號, 一般用於低速外設。

三,MSP430的時鐘設置包括3個寄存器,DCOCTL、BCSCTL1、BCSCTL2 

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

DCO2

DCO1

DCO0

MOD4

MOD3

MOD2

MOD1

MOD0

 

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

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

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

XT2OFF

XTS

DIVA1

DIVA0

XT5V

RSEL2

RSEL1

RSEL0

 

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

  XT5V: 1.

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

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

  XT2OFF: 控制XT2振盪器的開啓(XT2OFF=0)與關閉(XT2OFF=1)。

  正常情況下把XT2OFF復位就可以了. (BCSCTL1&=~XT2OFF)

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

SEM1

SELM0

DIVM1

DIVM0

SELS

DIVS1

DIVS0

DCOR

  DCOR: .0,選擇內部電阻;1,選擇外部電阻

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

          DIVS1   DIVS0            SMCLK時鐘源

       0             0                       1分頻

         0             1                        2分頻

         1             0                        4分頻

         1             1                        8分頻

 

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

 

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

    DIVM1   DIVM0             MCLK時鐘源

       0             0                       1分頻

         0             1                        2分頻

         1             0                        4分頻

         1             1                        8分頻

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

             SELM1      SELM0            MCLK 時鐘源 

               0                 0                        DCOCLK

     0                 1                        DCOCLK

     1                 0                        XT2CLK

     1                  1                       LFXT1CLK

時鐘初始化 代碼 :

1 /*
 2  * 時鐘配置
 3  */
 4 void Clock_Init()
 5 {
 6   uchar i;
 7   BCSCTL1&=~XT2OFF;                 //打開XT2振盪器
 8   BCSCTL2|=SELM1+SELS+DIVS3;              //MCLK為8MHZ,SMCLK為1MHZ
 9   do{
10     IFG1&=~OFIFG;                   //清楚振盪器錯誤標誌
11     for(i=0;i<100;i++)
12        _NOP();
13   }
14   while((IFG1&OFIFG)!=0);           //如果標誌位1,則繼續循環等待
15   IFG1&=~OFIFG;
16 }

 

 

 【人生沒有白走的路,每一步都算數!】