MSP430F149的時鐘系統(tǒng)
MSP430F149有三個時鐘源:外部LF(XT1一般為32.768K),HF(XT2一般為8M),內(nèi)部DCO。從時鐘系統(tǒng)模塊可得到三種時鐘信號:MCLK,SMCLK,ACLK。
本文引用地址:http://www.2s4d.com/article/201611/322340.htm上電默認狀況下MCLK,SMCLK信號來自DCO,ACLK來自LF。根據(jù)官方PDF說法默認狀況下DCO模塊配置為RSELX=4,DCO=3,因此DCO應為1M,但示波器實測MCLK/SMCLK為680K,測試溫度約25攝氏度。
標注:MCLK主時鐘、SMCLK子時鐘、ACLK活動時鐘。
P5.4,P5.5,P5.6的第二功能分別對應MCLK,SMCLK,ACLK時鐘信號,可用示波器測量。測試時發(fā)現(xiàn)頻率后兩位一直在跳動,頻率穩(wěn)定度很差。
MSP430系列單片機選擇晶振為時鐘源時,時鐘周期就是晶振周期。一個機器周期 =一個時鐘周期,即430每個動作都能完成一個基本操作; 一個指令周期 = 1~6個機器周期,具體根據(jù)具體指令而定。 如果選擇8M晶振,則一個機器周期為125ns。51單片機選擇12M晶振,它的機器周期是時鐘周期/12,一個機器周期為1us,可見 MSP430的的速度是51的8倍。
2、使用方法概述
2.1 程序架構
一般在系統(tǒng)初始化關閉看門狗后要配置系統(tǒng)時鐘,配置步驟為:
1、打開晶振;
2、等待晶振起振。清除OFIFG,延時,判斷OFIFG是否為0,為0則晶振正常起振,退出判斷;
3、選擇MCLK/SMCLK時鐘源;
uchar iq0;
BCSCTL1&=~XT2OFF; //打開XT2振蕩器
do
{
IFG1 &= ~OFIFG; // 清除振蕩器失效標志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延時,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判斷XT2是否起振
BCSCTL2 =SELM_2+SELS; //選擇MCLK、SMCLK為XT2
2.2 細節(jié)描述
對于DCO可以通過配置電阻和DCO得到不同的頻率。電阻可配置片內(nèi)或片外(DCOR一般片內(nèi)),片內(nèi)電阻有8中選擇(RSELX),DCO有8中選擇(DCOX)。
3、相關寄存器
1、DCOCTL
DCOx Bits
7-5
DCO frequency select. These bits select which of the eight discrete DCO
frequencies of the RSELx setting is selected.
2、BCSCTL0
XT2OFF Bit 7 XT2 off. This bit turns off the XT2 oscillator
0 XT2 is on
1 XT2 is off if it is not used for MCLK or SMCLK.
RSELx Bits
2-0
Resistor Select. The internal resistor is selected in eight different steps.
The value of the resistor defines the nominal frequency. The lowest
nominal frequency is selected by setting RSELx=0.
3、BCSCTL0
SELMx Bits
7-6
Select MCLK. These bits select the MCLK source.
00 DCOCLK
01 DCOCLK
10 XT2CLK when XT2 oscillator present on-chip. LFXT1CLK when XT2
oscillator not present on-chip.
11 LFXT1CLK
SELS Bit 3 Select SMCLK. This bit selects the SMCLK source.
0 DCOCLK
1 XT2CLK when XT2 oscillator present on-chip. LFXT1CLK when XT2
oscillator not present on-chip.
DCOR Bit 0 DCO resistor select
0 Internal resistor
1 External resistor
4、實例
4.1 配置MCLK/SMCLK
見本節(jié)2.1。
4.2配置DCO
void main(void)
{
WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer
DCOCTL = DCO0 + DCO1 + DCO2; // Max DCO
BCSCTL1 = RSEL0 + RSEL1 + RSEL2; // XT2on, max RSEL
BCSCTL2 |= SELS; // SMCLK = XT2
P5DIR |= 0x70; // P5.6,5,4 outputs
P5SEL |= 0x70; // P5.6,5,5 options
while(1)
{
}
}
實測DCO最低128K,最高4.58M。
評論