原创 MSP430 Archive.1 Basic Clock Module

2013-11-3 15:24 834 1 1 分类: MCU/ 嵌入式
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分频。

框图如下:
寄存器

20131103152401875.jpg
操作
时钟部分的操作主要为选择时钟源,如果为高频晶振测试是否起振,选择分频,选择是否输出时钟信号这几个部分。

例程
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秒
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /3 下一条