要了解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 }
【人生沒有白走的路,每一步都算數!】