MSP430时钟分析
2016-08-15 来源:eefocus
最近开始学习MSP430,在所有单片机学习中,时钟的设置无疑是最基本的一项工作! 尤其对于现在的单片机,外部有低速,高速两种晶振,内部还有PLL的内部时钟源,设置好系统工作的时钟则是工作完美开始的表现。
我一共用了两种系列的430单片机,MSP430F149和MSP430F437,系列的不同,时钟的设置也略有不同,下面从149的时钟一步一步来说吧!
在f149中,基础时钟是被叫做basic clock module,
其一共有三个时钟源:
一个LFXT1CLK,为低速/高速晶振源,通常接32.768khz,也可以接(400khz~8Mhz)
一个为XT2CLK,外接标准高速晶振,通常是接8Mhz,也可以接(400khz~8Mhz)
还有一个叫DCOCLK,为内部晶振,有RC震荡回路构成。
在430内部一共有三个时钟系统
一个为ACLK,通常由LFXT1CLK作为时钟源,可以通过软件控制改时钟的分频系树。
一个为MCLK,即Main CLK,一听就知道是主时钟单元,为系统内核提供时钟,它可以通过软件从三个时钟源选择,
一个为SMCLK,称作辅助主时钟,也是可以由软件选择时钟源。
Basic Clock Module Registers(基础时钟寄存器)
DCO control register DCOCTL
Basic clock system control 1 BCSCTL1
Basic clock system control 2 BCSCTL2
SFR interrupt enable register 1 IE1
SFR interrupt flag register 1 IFG1
DCOCTL寄存器是用来配置DCOCLK的,这里暂且不提
BCSCTL1 与BCSCTL2 寄存器则显得比较重要,这两个寄存器控制了你整个系统中430的工作时钟系统。
BCSCTL1寄存器:
7 6 5 4 3 210
XT2OFF XTS DIVAx XT5V RSELx
XT20FF: 用来控制XT2晶振的开启和关闭,置1时关闭,置0时,开启
XTS: 用来选择低速晶体的工作模式(可忽略)
DIVAx: 用来选择ACLK的分频系数
XT5V: 无用
RSELx: 选择电阻(没用过,一般置0)
BCSCTL2
7 6 5 4 3 2 1 0
SELMx DIVMx SELS DIVSx DOCR
SELMx: 选择MCLK的时钟源,
00 DCOCLK
01 DCOCLK
10 XT2CLK
11 LFX1CLK
DIVMx: MCLK的分频
00 1分频
01 2分频
10 4分频
11 8分频
SELS:SMCLK的时钟源,0时为内置DCO,1时为外置高速XT2
DIVSx:SMCLK的分频,同MCLK分频
DCOR:控制频率的电阻是内部还是外部(没用过)
实例初始化程序
void Init_CLK(void)
{
unsigned int i;
BCSCTL1=0x00; //XT2开启,LFXTCLK为低频模式,ACLK分频为0
do
{
IFG1&=~OFIFG;
for(i=0x20;i>0;i--);
}
while((IFG1&OFIFG)==OFIFG); //当OSCFault=1 即晶振不起振则等待
BCSCTL2=0X00;
BCSCTL2|=SELM1; //MCLK 时钟为XT2,
BCSCTL2|=SELS; //SMCLK时钟为XT2
}
进入单片机查看更多内容>>
我一共用了两种系列的430单片机,MSP430F149和MSP430F437,系列的不同,时钟的设置也略有不同,下面从149的时钟一步一步来说吧!
在f149中,基础时钟是被叫做basic clock module,
其一共有三个时钟源:
一个LFXT1CLK,为低速/高速晶振源,通常接32.768khz,也可以接(400khz~8Mhz)
一个为XT2CLK,外接标准高速晶振,通常是接8Mhz,也可以接(400khz~8Mhz)
还有一个叫DCOCLK,为内部晶振,有RC震荡回路构成。
在430内部一共有三个时钟系统
一个为ACLK,通常由LFXT1CLK作为时钟源,可以通过软件控制改时钟的分频系树。
一个为MCLK,即Main CLK,一听就知道是主时钟单元,为系统内核提供时钟,它可以通过软件从三个时钟源选择,
一个为SMCLK,称作辅助主时钟,也是可以由软件选择时钟源。
Basic Clock Module Registers(基础时钟寄存器)
DCO control register DCOCTL
Basic clock system control 1 BCSCTL1
Basic clock system control 2 BCSCTL2
SFR interrupt enable register 1 IE1
SFR interrupt flag register 1 IFG1
DCOCTL寄存器是用来配置DCOCLK的,这里暂且不提
BCSCTL1 与BCSCTL2 寄存器则显得比较重要,这两个寄存器控制了你整个系统中430的工作时钟系统。
BCSCTL1寄存器:
7 6 5 4 3 210
XT2OFF XTS DIVAx XT5V RSELx
XT20FF: 用来控制XT2晶振的开启和关闭,置1时关闭,置0时,开启
XTS: 用来选择低速晶体的工作模式(可忽略)
DIVAx: 用来选择ACLK的分频系数
XT5V: 无用
RSELx: 选择电阻(没用过,一般置0)
BCSCTL2
7 6 5 4 3 2 1 0
SELMx DIVMx SELS DIVSx DOCR
SELMx: 选择MCLK的时钟源,
00 DCOCLK
01 DCOCLK
10 XT2CLK
11 LFX1CLK
DIVMx: MCLK的分频
00 1分频
01 2分频
10 4分频
11 8分频
SELS:SMCLK的时钟源,0时为内置DCO,1时为外置高速XT2
DIVSx:SMCLK的分频,同MCLK分频
DCOR:控制频率的电阻是内部还是外部(没用过)
实例初始化程序
void Init_CLK(void)
{
unsigned int i;
BCSCTL1=0x00; //XT2开启,LFXTCLK为低频模式,ACLK分频为0
do
{
IFG1&=~OFIFG;
for(i=0x20;i>0;i--);
}
while((IFG1&OFIFG)==OFIFG); //当OSCFault=1 即晶振不起振则等待
BCSCTL2=0X00;
BCSCTL2|=SELM1; //MCLK 时钟为XT2,
BCSCTL2|=SELS; //SMCLK时钟为XT2
}
相关文章