專(zhuān)注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

MSP430時(shí)鐘設(shè)置程序

作者:佚名   來(lái)源:不詳   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月31日   【字體:

1/

void main (void)
{
unsigned int i;
WDTCL = WDTPW+WDTHOLD; //停止看門(mén)狗
P5DIR = 0x10; //設(shè)置P5.4輸出
P5SEL = 0x10; //設(shè)置P5.4口為外圍模塊用作MCLK信號(hào)輸出
BCSCTL1 &= ~XT2OFF; //使TX2有效,TX2上電時(shí)默認(rèn)為關(guān)閉的.
do
{
IFG1 &= ~OFIFG; //清振蕩器失效標(biāo)志
for(i= 0xff; i>0; i--); //延時(shí),待穩(wěn)定.
}
while ((IFG1 & OFIFG)!=0); //若振蕩器失效標(biāo)志有效
BCSCTL2 |= SELM1; //使MCLK = XT2
for(;;);
}
 
2/
#include <msp430x11x1.h>
void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // 停止看門(mén)狗
BCSCTL1 |= XTS;
// 設(shè)置時(shí)基寄存器1,使ACLK = LFXT1 = HF XTAL,也就是高頻模式.
P2DIR |= 0x01; // 設(shè)置P2.0方向寄存器為輸出
P2SEL |= 0x01; // 設(shè)置P2.0口為外圍模塊用作ACLK信號(hào)輸出
P1DIR |= 0x02; // 設(shè)置P1.1方向寄存器為輸
do
{
IFG1 &= ~OFIFG; // 清振蕩器失效標(biāo)志
for (i = 0xFF; i > 0; i--); // 延時(shí),待穩(wěn)定
}
while ((IFG1 & OFIFG)); //若振蕩器失效標(biāo)志有效?
BCSCTL2 |= SELM_3;// 設(shè)置時(shí)基寄存器2,使主時(shí)鐘信號(hào)MCLK = LFXT1 (可靠的)
for (;;) // 無(wú)窮循環(huán)
{
P1OUT |= 0x02; // P1.1 = 1
P1OUT &= ~0x02; // P1.1 = 0
}
}
 
1-LFXT1CLK: 低頻/高頻時(shí)鐘源.由外接晶體振蕩器,而無(wú)需外接兩個(gè)振蕩電容器.較常使用的晶體振蕩器是32768HZ。
2-XT2CLK: 高頻時(shí)鐘源.由外接晶體振蕩器。需要外接兩個(gè)振蕩電容器,較常用的晶體振蕩器是8MHZ。
3-DCOCLK: 數(shù)字可控制的RC振蕩器。d
/*******************************************************************************************************************/
BCSCTL 基本時(shí)鐘系統(tǒng)控制寄存器1
   D7
 D6
  D5
  D4
  D3
  D2
  D1
  D0
DCO.2
DCO.1
DCO.0
MOD.4
MOD.3
MOD.2
MOD.1
MOD.0
 

 
BCSCTL |=DCOx; //位選擇,x為0,1,2。DCO0=0x20;DCO1=0x40;DCO2=0x80;
BCSCTL |=MODx;//模塊選擇,x為0,1,2,3,4;MOD0=0x01,MOD1=0x2;MOD2=0x04;MOD3=0x08,MOD4=0x10;
/********************************************************************************************************************/
BCSCTL1 基本時(shí)鐘系統(tǒng)控制寄存器1
  D7
 D6
   D5
  D4
  D3
  D2
  D1
  D0
XT2OFF
TXS
DIVA.1
DIVA.0
XT5V
Rsel.2
Resl.1
Resl.0
 
BCSCTL1 |=XT2OFF; //使能啟用XT2CLK
BCSCTL1 |=TXS;       //啟用
頻; BCSCTL1 &=~TXS;//啟用
 
BCSCTL1 |=DIVA_x; //ACLK時(shí)鐘源分頻,x為0,不分頻,1是2分頻,2是4分頻,3是8分頻
BCSCTL1 |=XT5V;    //
BCSCTL1 |=RSELx;  //x可選0,1,2,3,頻率范圍選擇
  
/*********************************************************************************************************************/
BCSCTL2 基本時(shí)鐘系統(tǒng)控制寄存器2
    D7
    D6
    D5
    D4
   D3
   D2
  D1
   D0
SELM.1
SELM.0
DIVM.1
DIVM.0
SELS
DIVS.1
DIVS.0
DCOR
BCSCTL2寄存器默認(rèn)為0x00,需要哪個(gè)時(shí)鐘源,幾分頻,按下列相加即可。
BCSCTL2 |=SELM_x;   //MCLK時(shí)鐘源選擇,x為0,1選內(nèi)部時(shí)鐘DCOCLK,2選XT2,3選LFXTCLK
BCSCTL2 |=DIVM_x;   //MCLK時(shí)鐘源分頻,x為0,不分,1是2分頻,2是4分頻,3是8分頻
BCSCTL2 |=SELS;   //SMCLK時(shí)鐘源選XT2CLK,默認(rèn)選DCOCLK
BCSCTL2 |=DIVS_x;   //SMCLK時(shí)鐘源分頻,x為0,不分,1是2分頻,2是4分頻,3是8分頻 
BCSCTL2 |=DCOR;//使能外部電阻,默認(rèn)使能內(nèi)部電阻。宏定義DCOR=0x01;
對(duì)于輔助時(shí)鐘的分頻,設(shè)置BCSCTL1 
/**********************************************************************************/

 
MSP430單片機(jī)時(shí)鐘模塊提供3個(gè)時(shí)鐘信號(hào)輸出,以供給片內(nèi)各部電路使用。
1-ACLK: 輔助時(shí)鐘信號(hào).由圖所示,ACLK是從LFXT1CLK信號(hào)由1/2/4/8分頻器分頻后所得到的.由BCSCTL1寄存器設(shè)置DIVA相應(yīng)為來(lái)決定分頻因子.ACLK可用于提供CPU外圍功能模塊作時(shí)鐘信號(hào)使用.
2-MCLK: 主時(shí)鐘信號(hào).由圖所示,MCLK是由3個(gè)時(shí)鐘源所提供的。他們分別是LFXT1CLK,XT2CLK(F13、F14,如果是F11,F11X1則由LFXT1CLK代替),DCO時(shí)鐘源信號(hào)提供.MCLK主要用于MCU和相關(guān)系統(tǒng)模塊作時(shí)鐘使用。同樣可設(shè)置相關(guān)寄存器來(lái)決定分頻因子及相關(guān)的設(shè)置。
3-SMCLK: 子系統(tǒng)時(shí)鐘,SMCLK是由2個(gè)時(shí)鐘源信號(hào)所提供.他們分別是XT2CLK(F13、F14)和DCO,如果是F11、F11X1則由LFXT1CLK代替TX2CLK。同樣可設(shè)置相關(guān)寄存器來(lái)決定分頻因子及相關(guān)的設(shè)置。
 
 
 
 
DCOCTL DCO控制寄存器
7
6
5
4
3
2
1
0
DCO.2
DCO.1
DCO.0
MOD.4
MOD.3
MOD.2
MOD.1
MOD.0
 
DCO.0-DCO.4 定義8種頻率之一,可以分段調(diào)節(jié)DCOCLK頻率,相鄰兩種頻率相差10%。而頻率由注入直流發(fā)生器的電流定義。
MOD.0-MOD.4 定義在32個(gè)DCO周期中插入的Fdco+1周期個(gè)數(shù),而在下的DCO周期中為Fdco周期,控制改換DCO和DCO+1選擇的兩種頻率。如果DCO常數(shù)為7,表示已經(jīng)選擇最高頻率,此時(shí)不能利用MOD.0-MOD.4進(jìn)行頻率調(diào)整。
 
 
 
BCSCTL1 基本時(shí)鐘系統(tǒng)控制寄存器1
7
6
5
4
3
2
1
0
XT2OFF
TXS
DIVA.1
DIVA.0
XT5V
Rsel.2
Resl.1
Resl.0
 
XT2OFF 控制XT2振蕩器的開(kāi)啟與關(guān)閉。
TX2OFF=0,XT2振蕩器開(kāi)啟。
TX2OFF=1,TX2振蕩器關(guān)閉(默認(rèn)為T(mén)X2關(guān)閉)
XTS 控制LFXT1 工作模式,選擇需結(jié)合實(shí)際晶體振蕩器連接情況。
XTS=0,LFXT1 工作在低頻模式(默認(rèn))。
XTS=1,LFXT1 工作在高頻模式(必須連接有高頻相應(yīng)的高頻時(shí)鐘源)。
DIVA.0 DIVA.1 控制ACLK分頻。
0 不分頻(默認(rèn))
1 2分頻
2 4分頻
3 8分頻
XT5V 此位設(shè)置為0。
Resl1.0,Resl1.1,Resl1.2 三位控制某個(gè)內(nèi)部電阻以決定標(biāo)稱(chēng)頻率。
Resl=0,選擇最低的標(biāo)稱(chēng)頻率。
……..
Resl=7,選擇最高的標(biāo)稱(chēng)頻率。
BSCCTL2 |= DIVM_x    (x=0,1,2,3)MCLK分頻(x=0,不分頻;x=1,2分頻;x=2,4分頻;x=3,8分頻)
 DIVS_0
BCSCTL2 基本時(shí)鐘系統(tǒng)控制寄存器2
7
6
5
4
3
2
1
0
SELM.1
SELM.0
DIVM.1
DIVM.0
SELS
DIVS.1
DIVS.0
DCOR
 
SELM.1 SELM.0 選擇MCLK時(shí)鐘源
時(shí)鐘源為DCOCLK默認(rèn)
時(shí)鐘源為DCOCLK
時(shí)鐘源為LFXT1CLK(對(duì)于MSP430F11/12X),時(shí)鐘源為XT2CLK(對(duì)于MSP430F13/14/15/16X);
時(shí)鐘源為LFTXTICLK
DIVM.1 DIVM.0 選擇MCLK分頻
0 1分頻(默認(rèn)
1 2分頻
2 4 分頻
3 8 分頻
SELS 選擇SMCLK時(shí)鐘源
時(shí)鐘源為DCOCLK默認(rèn)
時(shí)鐘源為LFXT1CLK(對(duì)于MSP430F11/12X),時(shí)鐘源為XT2CLK(對(duì)于MSP430F13/14/15/16X)。
DIVS.1 DIVS.0 選擇SMCLK分頻。
0 1分頻
1 2分頻
2 4分頻
4 8分頻
DCOR 選擇DCO電阻
內(nèi)部電阻
外部電阻
PUC信號(hào)之后,DCOCLK被自動(dòng)選擇MCLK時(shí)鐘信號(hào),根據(jù)需要,MCLK的時(shí)鐘源可以另外設(shè)置為LFXT1或者XT2。設(shè)置順序如下:
[1] 復(fù)位OscOff
[2] 清除OFIFG
[3] 延時(shí)等待至少50us
[4] 再次檢查OFIFG,如果仍然置位,則重復(fù)[3]、[4]步驟,直到OFIFG=0為止。
 
低功耗設(shè)置的技巧問(wèn)題:
1、LPM4:在振蕩器關(guān)閉模式期間,處理機(jī)的所有部件工作停止,此時(shí)電流消耗最小。此時(shí)只有在系統(tǒng)上電電路檢測(cè)到低點(diǎn)電平或任一請(qǐng)求異步響應(yīng)中斷的外部中斷事件時(shí)才會(huì)從新工作。因此在設(shè)計(jì)上應(yīng)含有可能需要用到的外部中斷才采用這種模式。否則發(fā)生不可預(yù)料的結(jié)果。
2、LPM3:在DC發(fā)生器關(guān)閉期間,只有晶振是活動(dòng)的。但此時(shí)設(shè)置的基本時(shí)序條件的DC發(fā)生器的DC電流被關(guān)閉。由于此電路的高阻設(shè)計(jì),使功耗被抑制。注:當(dāng)從DC關(guān)閉到啟動(dòng)DC0要花一端時(shí)間(ns-us)
 3、LPM2:在此期間,晶鎮(zhèn)振和DC發(fā)生器是工作的,所以可實(shí)現(xiàn)快速啟動(dòng)。
4、LPM1:在此振蕩器已經(jīng)工作,所以不存在啟動(dòng)時(shí)間延時(shí)問(wèn)題。
 
 
 
 
 
Timer_A的寄存器
 
寄存器
縮寫(xiě)
讀定類(lèi)型
地址
初態(tài)
 
Timer_A控制寄存器
TACTL
R/W
160H
POR復(fù)位
 
Timer_A計(jì)數(shù)器
TAR
R/W
170H
POR復(fù)位
 
捕撈/比較控制寄存器0
CCTL0
R/W
162H
POR復(fù)位
 
捕撈/比較寄存器0
CCR0
R/W
172H
POR復(fù)位
 
捕撈/比較控制寄存器1
CCTL1
R/W
164H
POR復(fù)位
 
捕撈/比較寄存器1
CCR1
R/W
174H
POR復(fù)位
 
捕撈/比較控制寄存器2
CCTL2
R/W
166H
POR復(fù)位
 
捕撈/比較寄存器2
CCR2
R/W
176H
POR復(fù)位
 
中斷向量寄存器
TAIV
R/W
12EH
POR復(fù)位
 
 
 
 
 
TACTL 控制寄存器
15--10
9
8
7
6
5
4
3
2
1
0
未用
SSEL1
SSEL0
ID1
ID0
MC1
MC0
未用
CLR
TAIE
TAIFG
 
SSEL1、SSEL0選擇定時(shí)器輸入分頻器的時(shí)鐘源
  Timer_A時(shí)鐘源
SSEL1
SSEL0
輸入時(shí)鐘源
說(shuō)明
0
0
TACLK
用特定的外部引腳信號(hào)
0
1
ACLK
輔助時(shí)鐘
1
0
SMCLK
子系統(tǒng)時(shí)鐘
1
1
INCLK
見(jiàn)器件說(shuō)明
 
ID1,ID0 輸入分頻選擇
00 不分頻
01 2分頻
10 4分頻
11 8分頻
MC1MC0 計(jì)數(shù)模式控制位
00 停止模式
01 增計(jì)數(shù)模式
10 連續(xù)計(jì)數(shù)模式
11 /減計(jì)數(shù)模式
CLR 定時(shí)器清除位
PORCLR置位時(shí)定時(shí)器和輸入分頻器復(fù)位。CLR由硬件自動(dòng)復(fù)位,其讀出始終為0。定時(shí)器在下一個(gè)有效輸入沿開(kāi)始工作。如果不是被清除模式控制暫停,則定時(shí)器以增計(jì)數(shù)模式開(kāi)始工作。
TAIE 定時(shí)器中斷允許位
禁止定時(shí)器溢出中斷
允許定時(shí)器溢出中斷
TAIFG 定時(shí)器溢出標(biāo)志位
增計(jì)數(shù)模式當(dāng)定時(shí)器由CCR0計(jì)數(shù)到到0時(shí),TAIFG置位。
連續(xù)計(jì)數(shù)模式:當(dāng)定時(shí)器由0FFFFH計(jì)數(shù)到0時(shí),TAIFG置位。
/減計(jì)數(shù)模式:當(dāng)定時(shí)器由CCR0減計(jì)數(shù)到0時(shí),TAIFG置位。
 
 
 
CCTLx 捕獲/比較控制寄存器
15 14
13 12
11
10
9
8
7 6 5
4
3
2
1
0
CAPTMOD1-0
CCIS1-0
SCS
SCCIx
CAP
OUTMODx
CCIEx
CCIx
OUT
COV
CCIFx
 
 
 
TIMER_A有多個(gè)捕獲比較模塊,每個(gè)模塊都有自己的控制寄存器CCTLx
CAPTMOD1-0 選擇捕獲模式
00 禁止捕獲模式
01 上升沿捕獲
10 下降沿捕獲
11 上升沿與下降沿都捕獲
CCISI1-0 在捕獲模式中用來(lái)定提供捕獲事件的輸入端
00 選擇CCIxA
01 選擇CCIxB
10 選擇GND
11 選擇VCC
SCS 選擇捕獲信號(hào)與定時(shí)器時(shí)鐘同步、異步關(guān)系
異步捕獲
同步捕獲
異步捕獲模式允許在請(qǐng)求時(shí)立即將CCIFG置位和捕獲定時(shí)器值,適用于捕獲信號(hào)的周期遠(yuǎn)大于定時(shí)器時(shí)鐘周期的情況。但是,如果定時(shí)器時(shí)鐘和捕獲信號(hào)發(fā)生時(shí)間競(jìng)爭(zhēng),則捕獲寄存器的值可能出錯(cuò)。
在實(shí)際中經(jīng)常使用同步捕獲模式,而且捕獲總是有效的。
SSCIx 比較相等信號(hào)EQUx將選擇中的捕獲、比較輸入信號(hào)CCIx(CCIxA,CCIxB,VccGND)進(jìn)行鎖存,然后可由SCCIx讀出。
CAP 選擇捕獲模式還是比較模式。
比較模式
捕獲模式
注意:同時(shí)捕獲和捕獲模式選擇
如果通過(guò)捕獲比較寄存器CCTLx中的CAP使工作模式從比較模式變?yōu)椴东@模式,那么不應(yīng)同時(shí)進(jìn)行捕獲;否則,在捕獲比較寄存器中的值是不可預(yù)料的,推薦的指令順序?yàn)椋?/span>[1]修改控制寄存器,由比較模式換到捕獲模式。
[2]捕獲
OUTMODx 選擇輸出模式
000 輸出
001 置位
010 PWM翻轉(zhuǎn)/復(fù)位
011 PWM置位/復(fù)位
100 翻轉(zhuǎn)/置位
101 復(fù)位
110 PWM翻轉(zhuǎn)/置位
111 PWM復(fù)位/置位
 
 
 
 
 
 
 
 
 
 
 
 
 
CCIx 捕獲比較模的輸入信號(hào)
捕獲模式:由CCIS0CCIS1選擇的輸入信號(hào)通過(guò)該位讀出。
比較模式:CCIx復(fù)位。
OUT 輸出信號(hào)
輸出低電平
輸出高電平
如果OUTMODx選擇輸出模式0(輸出),則該位對(duì)應(yīng)于輸入狀態(tài)。
COV 捕獲溢出標(biāo)志
輸出低電平
輸出高電平
[1]當(dāng)CAP=0時(shí),選擇比較模式。捕獲信號(hào)發(fā)生復(fù)位,沒(méi)有使COV置位的捕獲事件。
[2]當(dāng)CAP=1時(shí),選擇捕獲模式,如果捕獲寄存器的值被讀出再次發(fā)生捕獲事件,則COV置位。程序可檢測(cè)COV來(lái)斷定原值讀出前是否又發(fā)生捕獲事件。讀捕獲寄存器時(shí)不會(huì)使溢出標(biāo)志復(fù)位,須用軟件復(fù)位。
CCIFGx 捕獲比較中斷標(biāo)志
捕獲模式:寄存器CCRx捕獲了定時(shí)器TAR值時(shí)置位。
比較模式:定時(shí)器TAR值等于寄存器CCRx值時(shí)置位。
 
#include <msp430x14x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看門(mén)狗定時(shí)器
P1DIR |= 0x01; // 設(shè)P1.0為輸出
TACTL = TASSEL_1 + MC_2 + TAIE; // ACLK, 定時(shí)器A計(jì)數(shù)模式,且開(kāi)中斷功能
_BIS_SR(LPM3_bits + GIE); //進(jìn)入LPM3 低功耗模式和開(kāi)總中斷允許
}
// Timer_A3中斷向量(TAIV)處理程序
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch( TAIV ) //應(yīng)用switch語(yǔ)句來(lái)處理多中斷源的向量
{ //向量列表通過(guò)case語(yǔ)句來(lái)分多中斷源的入口
case 2: break; // CCR1比較/捕獲寄存器的中斷入口,
//本例子未用到。
case 4: break; // CCR2比較/捕獲寄存器的中斷入口,
微控網(wǎng)為你準(zhǔn)備的 MSP430F 單片機(jī)入門(mén)必修課 //
關(guān)閉窗口