MSP430F149的时钟还是很简单的,没有锁相环等内容。
本部分不包含watchdog及其设置。
本部分包含延时内容
时钟源:LFXT1CLK:可以接32768Hz低频晶振,也可以接450KHz~8MHz的高频晶振。
XT2CLK:只能接450KHz~8MHz的高频晶振。
DCOCLK:内部数控振荡器,800KHz左右频率,可调,温漂等较大。
时钟信号:
经过时钟源进入Basic Clock Module后产生的时钟信号,430内部不同模块的时钟信号源不同,但都是从这三个来的。
ACLK:Auxiliary clock,辅助时钟。只能从LFXT1CLK产生,可1,2,4,8分频。
MCLK:主时钟,可从LFXT1CLK,XT2CLK,DCOCLK产生,可1,2,4,8分频。
SMCLK:子系统时钟,时钟源同主时钟,可1,2,4,8分频。
框图如下:
寄存器
操作
时钟部分的操作主要为选择时钟源,如果为高频晶振测试是否起振,选择分频,选择是否输出时钟信号这几个部分。
例程
void Basic_Clock_Init(void)
{
unsigned int i;
BCSCTL1 &= ~XT2OFF; //清OSCOFF/XT2,用XT2板载高速晶振,即打开XT振荡器
do{
IFG1&=~OFIFG; //清除震荡标志
for(i=0xffff;i>0;i--)
_NOP(); //延时足够长等待晶振起振
}while((IFG1&OFIFG)!=0); //若标志为1,继续等待晶振起振
BCSCTL2 |= SELM_2 + DIVM_2 + SELS; //起振之后再将高频晶振作为主时钟
//若需输出此处可加入相关IO设置
}
延时
在 intrinsics.h中,有这样一段内容
/* Insert a delay with a specific number of cycles. */
__intrinsic void __delay_cycles(unsigned long __cycles);
这就构成了430最精准的延时,具体的要根据系统时钟,这里以8MHz为例
//--------------------延时定义------------------
#define CPU_F ((double)8000000) //此处数值对应8MHz主时钟,其余频率自己计算和定义
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
//******************************延时说明*************************************
// 只有在8MHz、4MHz、2MHz晶振下0.5us的延时才有意义,32768的不能对应1us延时
// delay_us(1); //1 微秒的延时
// delay_ms(1); //1 毫秒的延时
// delay_us(3.5); //延时3.5微秒
// delay_ms(3.5); //延时3.5毫秒
// delay_ms(1000); //延时1秒
文章评论(0条评论)
登录后参与讨论