時鐘就像是單片機的脈搏,沒有時鐘單片機是無法工作的,還有其他一些模塊也是需要
三個時鐘輸出:
輔助時鐘ACLK(AuxillaryClock):由軟件選擇來自VLOCK、LFXT1CLK之一經(jīng)過
1,2,4,8分頻之后得到,為外圍模塊提供時鐘源。
主系統(tǒng)時鐘MCLK(MainSystemClock):由軟件選擇來自VLOCK、LFXT1CLK和
DCOCLK之一經(jīng)過1,2,4,8分頻之后得到,為CPU和系統(tǒng)提供時鐘。
子系統(tǒng)時鐘SMCLK(SubSystemClock):和MCLK一樣由軟件選擇來自VLOCK、
LFXT1CLK和DCOCLK之一經(jīng)過1,2,4,8分頻之后得到,為外圍各個模塊提供時鐘。
四個時鐘源:
VLOCLK:片內(nèi)超低功耗12KHz的內(nèi)部振蕩器。XT2CLK:G2553是沒有XT2CLK這個模塊的。
DCOCLK:片內(nèi)可數(shù)字控制的振蕩器DCOCLK,在軟件的調(diào)節(jié)下該時鐘的輸出范圍為
0.6MHz到26MHz。
LFXT1CLK:由外部時鐘源提供的LFXT1CLK時鐘源,也即LanuchPad開發(fā)板上未焊
接的時鐘電路,在這里我們可以焊接一個32.768KHz的低頻時鐘晶體由G2553的XIN引腳輸入。
在MSP430單片機中,一個時鐘周期 = MCLK晶振的倒數(shù)。如果MCLK是8MHz,則一個時鐘周期為1/8us。
一個機器周期 = 一個時鐘周期,即430每個動作都能完成一個基本操作。
一個指令周期 = 1~6個機器周期,具體根據(jù)具體指令而定。
另外,指令長度只是一個存儲單位,與時間沒有必然的關(guān)系。
MSP430單片機的時鐘模塊主要包括:
三個時鐘:輔助時鐘ACLK 、主時鐘MCLK 、子系統(tǒng)時鐘SMCLK
三個振蕩器:低頻時鐘源LFXT1 、高頻時鐘源XT2 、數(shù)字控制RC振蕩器DCO
而MSP430單片機工作所需時鐘就是由這些振蕩器振蕩后經(jīng)處理產(chǎn)生的。
(1)ACLK:是LFXT1CLK信號經(jīng)1/2/4/8分頻后得到的,主要用作低速外圍的時鐘
?。?)MCLK:是LFXT1CLK,XT2CLK,DCOCLK的三者之一決定,由軟件選擇,然后經(jīng)1/2/4/8分頻后得到,主要用于CPU和系統(tǒng)
(3)SMCLK:可由LFXT1CLK和DCOCLK,或者XT2CLK與DCOCLK決定,然后經(jīng)1/2/4/8分頻后得到,主要用于高速外圍模塊
MSP430的時鐘模塊由DCOCTL,BCSCTL1,BCSCTL2,IE1,IFG1這五個寄存器來確定,具體的功能如下所示:
DCOCTL:控制DCO振蕩器
BCSCTL1:控制XT2,LFXT1,DCO振蕩,并控制ACLK的分頻情況
BCSCTL2:設(shè)置三個時鐘源分別選擇什么振蕩器
我們在程序里對寄存器的設(shè)置,也就是對三個振蕩器進(jìn)行設(shè)置,時鐘振蕩器設(shè)置好了,還要對時鐘模塊進(jìn)行設(shè)置,也就是讓三個時鐘模塊MCLK SMCLK ACLK選擇相應(yīng)的時鐘振蕩器以得到不同頻率的時鐘。
PUC信號后,系統(tǒng)選擇內(nèi)部電阻以實現(xiàn)頻率的輸出。RSELx = 4 與 DCOx = 3,開始時使DCO有一個適中的頻率。MCLK與SMCLK的時鐘信號全部來自DCO,約為800KHz(芯片手冊)。PUC信號后將LFXT1設(shè)置到LF模式(XTS=0),并且關(guān)斷HF模式(XTS=1)與關(guān)斷XT2振蕩器。
?。?)DCOCTL:DCO控制寄存器,地址為56H,初始值為60H
// 7 6 5 4 3 2 1 0
// DCO2 DCO1 DCO0 MOD4 MOD3 MOD2 MOD1 MOD0
//
// DCO0~DCO2:DCO Select Bit,定義了8種頻率之一,而頻率由注入直流發(fā)生器的電流定義
// MOD0~MOD4:Modulation Bit,頻率的微調(diào)
//
// DCO的設(shè)置:通過設(shè)置DCOCTL和BCSCTL1,設(shè)置DCO的頻率
// (1)DCO的調(diào)節(jié):
設(shè)置DCOR比特來選擇是外部電阻還是內(nèi)部電阻,以確定一個基準(zhǔn)頻率
通過BCSCTL1寄存器的RSELx來進(jìn)行分頻,確定時鐘頻率;
通過DCOCTL寄存器中DCOx在標(biāo)稱頻率基礎(chǔ)上分段粗調(diào),選擇頻率;
通過DCOCTL寄存器中MODx的值對頻率進(jìn)行細(xì)調(diào),選擇 DCOx 與 DCOx+1 之間的頻率
// 注意:DCO工作在最高頻率時,內(nèi)部電阻正常值大約為200k,此時DCO的工作頻率大約為5MHz。
例子:
//DCOCTL初始值為60H,即DCOCTL |= DCO1 + DCO2;
DCOCTL |= DCO0 + DCO1 + DCO2; // Max DCO
//MOD0~MOD4:Modulation Bit,頻率的微調(diào)一般保持默認(rèn)即可
//系統(tǒng)默認(rèn)情況下,RSELx=4
?。?)BCSCTL1(ACLK):Basic Clock System Control 1,地址為58H,初始值為84H
// 7 6 5 4 3 2 1 0
// XT2OFF XTS DIVA1 DIVA0 XT5V RSEL2 RSEL1 RSEL0
//
// RSEL2~RSEL0:選擇某個內(nèi)部電阻以決定標(biāo)稱頻率(0最低,7最高)
// XT5V:1,該比特未用,必須選擇復(fù)位
// DIVA0~DIVA1:選擇ACLK的分頻系數(shù)。DIVA=0,1,2,3(DIVA_0,DIVA_1.。。),ACLK的分頻系數(shù)分別為:1,2,4,8
// XTS:選擇LFXT1工作在低頻晶體模式(XTS=0)還是高頻晶體模式(XTS=1)
// XT2OFF:控制XT2振蕩器的開啟(XT2OFF=0)與關(guān)閉(XT2OFF=1)
//
// BCSCTL1的設(shè)置:初始值為84H
//使用XT2振蕩器
//控制XT2振蕩器的開啟(XT2OFF=0)與關(guān)閉(XT2OFF=1)
BCSCTL1 &= ~XT2OFF;//清OSCOFF/XT2
do
{
IFG1 &= ~OFIFG;//清OFIFG
OSC_Delay = 255;
while(OSC_Delay --);//延時等待
}
while(IFG1 & OFIFG);//直到OFIFG=0為止
//RSEL2~RSEL0:選擇某個內(nèi)部電阻以決定標(biāo)稱頻率(0最低,7最高)
BCSCTL1 |= RSEL0 + RSEL1 + RSEL2;// XT2on,max RSEL
//選擇ACLK的分頻系數(shù):DIVA=0,1,2,3,ACLK的分頻系數(shù)分別為:1,2,4,8
//BCSCTL1 |= DIVA_2;//對ACLK進(jìn)行2分頻
//(3)BCSCTL2(SMCLK,MCLK):Basic Clock System Control 2,地址為58H,初始值為00H
// 7 6 5 4 3 2 1 0
// SELM1 SELM0 DIVM1 DIVM0 SELS DIVS1 DIVS0 DCOR
//
// DCOR:Enable External Resister,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~DIVM1:選擇MCLK的分頻因子,DIVM=0,1,2,3,對應(yīng)MCLK的分頻因子為1,2,4,8
// SELM0~SELM1:選擇MCLK的時鐘源,0,1:DCOCLK,2:XT2CLK,3:LFXT1CLK
//
// BCSCTL2的設(shè)置:初始值為00H
//設(shè)置BCSCTL2,選定MCLK和SMCLK的時鐘源XT2,并可以設(shè)置其分頻因子
//注意:ACLK只能來源于LFXT1,可以在BCSCTL1里設(shè)置ACLK的分頻,就是說ACLK最大只能為32768Hz(XIN 與XOUT間接32.768KHz晶振)
//DCOR一般設(shè)置為默認(rèn)值
//設(shè)置SMCLK的分頻因子,DIVS0~DIVS1:DIVS=0,1,2,3,對應(yīng)SMCLK的分頻因子為1,2,4,8
//BCSCTL2 = DIVS_0;
//BCSCTL2 = DIVS_1;
//BCSCTL2 = DIVS_2;
//BCSCTL2 = DIVS_3;
//設(shè)置MCLK的分頻因子,DIVM0~DIVM1:DIVM=0,1,2,3,對應(yīng)MCLK的分頻因子為1,2,4,8
//BCSCTL2 = DIVM_0;
//BCSCTL2 = DIVM_1;
//BCSCTL2 = DIVM_2;
//BCSCTL2 = DIVM_3;
//BCSCTL2:設(shè)置三個時鐘源分別選擇什么振蕩器
//SELM0~SELM1:選擇MCLK的時鐘源,0,1:DCOCLK,2:XT2CLK,3:LFXT1CLK
//選擇 MCLK 時鐘源為XT2,
//BCSCTL2 = SELM_2 ;
//SELS:選擇SMCLK的時鐘源,0:DCOCLK,1:XT2CLK/LFXTCLK
//選擇 SMCLK 時鐘源為XT2
//BCSCTL2 = SELS ;
//選擇MCLK 與 SMCLK為XT2
BCSCTL2 = SELM_2 + SELS;
//(4)IE1,Interrupt Enable Register 1
// 7 6 5 4 3 2 1 0
// OFIE
// 7~2 and 0 : These bits may be used by other modules
// OFIE:Oscillator fault interrupt enable. 0---Interrupt not enabled
// 1---Interrupt enabled
//(5)IEG1,Interrupt Flag Register 1
// 7 6 5 4 3 2 1 0
// OFIFG
// 7~2 and 0 : These bits may be used by other modules
// OFIE:Oscillator fault interrupt flag. 0 No interrupt pending
// 1 Interrupt pending
//
在PUC信號后,默認(rèn)情況下由DCOCLK作MCLK與SMCLK的時鐘信號,由于DCOCTL初始值為60H,根據(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
關(guān)于msp430 定時器的捕獲比較單元,怎么有3對TA0,TA1,TA2管腳,外加一個TA0
都是TA捕獲模式的輸出口,可用作PWM輸出.TA0輸出不能調(diào)整占空比.TA1、TA2輸出占空比分別對應(yīng)CCTL1/CCR0和CCTL2/CCR0.(置位/復(fù)位模式及復(fù)位/置位模式,這兩種模式PWM控制最常用)
AD的輔助參考電壓和參考電壓沒有區(qū)別,一個大小叫法不同
ad轉(zhuǎn)換時的參考電壓是內(nèi)部T行網(wǎng)絡(luò)的標(biāo)準(zhǔn)電壓,參考電壓可以認(rèn)為是你的最高上限電壓(不超過電源電壓),當(dāng)信號電壓較低時,可以降低參考 你的參考電壓,在計算實際電壓時,就需要將參考電壓考慮進(jìn)去。參考電壓的穩(wěn)定性對你的系統(tǒng)性能有很大的影響。 外接了參考電源就不能設(shè)置為內(nèi)部參考,否則短路。
AD外部電壓的來源 主要就是從引腳的VCC上的3.3V 接到芯片引腳VEREF上,0電平接V- 就可以了 430芯片里面集成了AD轉(zhuǎn)換器 所以不用外接 參考電壓 比如說AD會把參考電壓當(dāng)成0,比參考電壓高是正輸出。
AVDD 在這里的解釋一般為:A代表模擬 VDD代表數(shù)字供電 這個AVDD一般在聲卡部分AVSS 在這里的解釋一般為:A代表模擬 VSS代表接地 VSS這個一般在橋的腳位里出現(xiàn)的比較多
Vref參考電壓 比如說AD會把參考電壓當(dāng)成0,比參考電壓高是正輸出。Vr+,Vr-: AD模塊最大,最小值參考電壓 當(dāng)輸入大于最大值,AD輸出0xfff,小于最小值時,輸出為0x0000
有一些模塊的時鐘是有自己特有的時鐘源的,如Timer_A:
Timer_A的時鐘選擇有四種:TACLK、ACLK、SMCLK和INCLK。Timer_A是不能選擇MCLK作為時鐘源的。而INCLK和TACLK是Timer_A特有的時鐘源。
評論
查看更多