MSP430教程9:MSP430單片機時鐘模塊
MSP430X1XX基本時鐘模塊有三個時鐘輸入源LFXT1CLK(低速32768Hz,高速450Hz到8MHz)、XT2CLK(450Hz到8MHz)、DCOCLK,提供以下三種時鐘信號
1.ACLK輔助時鐘:由LFXT1CLK信號經(jīng)1、2、4、8分頻后得到,可以由軟件選作各個外圍模塊的時鐘信號,一般用于低速外設(shè)。
2.MCLK系統(tǒng)主時鐘:MCLK可由軟件選擇來自LFXT1CLK、XT2CLK、DCOCLK三者之一,然后經(jīng)1、2、4、8分頻得到,MCLK主要用于CPU和系統(tǒng)。
3.SMCLK子系統(tǒng)時鐘:可由軟件選自LFXT1CLK和DCOCLK(MSP430X11X、MSP430X12X系列,因其不含XT2),或XT2CLK和DCOCLK,然后經(jīng)1、2、4、8分頻得到。SMCLK主要用于高速外圍模塊。
系統(tǒng)頻率與系統(tǒng)的工作電壓密切相關(guān)(MSP430工作電壓1.8V~3.6V,編程電壓2.7V~3.6V),所以不同的工作電壓,需要選擇不同的系統(tǒng)時鐘。當(dāng)兩個外部振蕩器失效時,DCO振蕩器會自動被選作MCLK的時鐘源。PUC信號之后,DCOCLK被自動選作MCLK和SMCLK的時鐘信號,LFXT1CLK被選作ACLK的時鐘信號,根據(jù)需要MCLK和SMCLK的時鐘源可以另外設(shè)置。
控制時鐘模塊的三個寄存器為DCO控制寄存器DCOCTL、基本時鐘系統(tǒng)控制寄存器1BCSCTL1、基本時鐘控制寄存器2BCSCTL2
1.DCOCTL
76 5432 10
DCO2DCO1 DCO0MOD4MOD3MOD2 MOD1 MOD0
DCO.0~DCO.2定義8種頻率之一(DCO=0~DCO=8),可分段調(diào)節(jié)DCOCLK頻率,相領(lǐng)兩種頻率相差10%。
MOD.0~MOD.4定義在32個DCO周期中插入的fdco+1周期個數(shù),而余下的周期為fdco周期,控制切換DCO和DCO+1選擇的兩種頻率,如果DCO常數(shù)為7,表示已經(jīng)選擇最高頻率,此時不能利用MOD.0~MOD.4進(jìn)行頻率調(diào)整。
DCOCTL POR后初始值為60H。
2.BCSCTL1
765 4 3210
XT2OFFXTS DIVA1 DIVA0 XT5V RSEL2RSEL1RSEL0
BCSCTL1初始值為84H
XT2OFF控制XT2的開啟和關(guān)閉
0XT2振蕩器開啟
1XT2振蕩器關(guān)閉(默認(rèn))
XTS控制LFXT1工作模式
0低頻模式(默認(rèn))
1高頻模式
DIVA1、DIVA0控制ACLK分頻
00不分頻(默認(rèn))
01 2分頻
10 4分頻
11 8分頻
XT5V此位設(shè)置為0
RSEL0~RSEL2三位控制內(nèi)部電阻以決定標(biāo)稱頻率
0選擇最低標(biāo)稱頻率
.........
7選擇最高標(biāo)稱頻率
3.BCSCLK2
76 543 21 0
SELM1SELM0DIVM1DIVM0SELS DIVS1DIVS0 DCOR
SELM1 SELM0選擇MCLK時鐘源
0 0DCOCLK(默認(rèn))
0 1DCOCLK
1 0LFXT1CLK對于MSP
1 1LFXT1CLK
DIVM1DIVM0選擇MCLK分頻
0 0不分頻
0 12分頻
1 04分頻
1 18分頻
SELS選擇SMCLK時鐘源
0 DCLK(默認(rèn))
1 LFXT1CLK對于MSP
DIVS1DIVS0選擇SMCLK分頻
00不分頻
01 2分頻
10 4分頻
11 8分頻
DCOR選擇DCO電阻
0內(nèi)部電阻
1外部電阻
時鐘模塊的應(yīng)用
一、設(shè)置MCLK=XT2,SMCLK=DCOCLK,將MCLK由P5.4輸出(MSP430X14X中引腳P5.4和MCLK復(fù)用)
#include"msp430x14x.h"
voidmain(void)
{
unsigned int i;
WDTCTL= WDTPW+WDTHOLD;//Stopwatchdog topreventtooverflow
P5DIR| =0X10; //SetP5.4 to output
P5SEL | =0X10; //SetP5.4 to MCLK mode
BCSCTL1 &= ~XT2OFF; //Enable XT2
do{
IFG1 & = ~OFIFG; //Clear OFIFG
for(i=0xff;i>0;i--);//Set a delay
}while(IFG1&OFIFG); //check-up the OFIFG
BCSCTL2 | = SELM_2;//SetXT2CLK the clock of MCLK
for(;;);
}
二、設(shè)置ACLK=MCLK=LFXT1=HF,將ACLK用P2.0(復(fù)用)輸出。
#include "msp430x14x.h"
void main(void)
{
unsigned int i,j;
WDTCTL = WDTPW+ WDTHOLD;
P1DIR =0x02;
P2DIR =0x01;
P2SEL=0x01;
BCSCTL1 | = XTS;
do{
IFG1 & = ~OFIFG;
for(i=0xff;i>0;i--);
}while(IFG1 & OFIFG);
BCSCTL2 | = SELM_3;
for(;;);
}
評論