给你写的launchpad430--CLK

相关说明

首先我们应该搞清楚G2553的内部时钟,这样方便我们以后进行定时器、串口等外设的设置。

如下如所示:

从图中我们可以看出,系统的工作时钟主要有三个:

ACLK辅助工作时钟;

MCLK系统CPU时钟;

SMCLK次工作时钟。

这三个时钟为系统的必要时钟,也就是说我们上程序开始的是应该进行相应的配置,这样系统才能按照我们的要求去工作。

ACLK

有图可以看出,主要由VLOCLK和XT1为其提供时钟,我们只需要在这直接进行选择就行了。VLOCLK约为12KHz

  //设置ACLK为12K
  BCSCTL3_bit.LFXT1S0 = 0;
  BCSCTL3_bit.LFXT1S1 = 1;
这两位可以对其进行配置。

MCLK和SMCLK一般选择DCO产生的时钟。

 //1Mhz
  if (CALBC1_1MHZ==0xFF)					// If calibration constant erased
  {											
    while(1);                               // do not load, trap CPU!!	
  } 
  DCOCTL = 0;                               // Select lowest DCOx and MODx settings
  BCSCTL1 = CALBC1_1MHZ;                    // Set range
  DCOCTL = CALDCO_1MHZ;                     // Set DCO step + modulation */
这是TI提供的DCO配置代码,因此我们只要模仿着配置就行了!

注意该配置只限于以下的选项:

/*-------------------------------------------------------------------------
 *   Calibration Data
 *-------------------------------------------------------------------------*/
  /* DCOCTL  Calibration Data for 16MHz */
__no_init volatile unsigned __READ char CALDCO_16MHZ @ 0x10F8;

  /* BCSCTL1 Calibration Data for 16MHz */
__no_init volatile unsigned __READ char CALBC1_16MHZ @ 0x10F9;

  /* DCOCTL  Calibration Data for 12MHz */
__no_init volatile unsigned __READ char CALDCO_12MHZ @ 0x10FA;

  /* BCSCTL1 Calibration Data for 12MHz */
__no_init volatile unsigned __READ char CALBC1_12MHZ @ 0x10FB;

  /* DCOCTL  Calibration Data for 8MHz */
__no_init volatile unsigned __READ char CALDCO_8MHZ @ 0x10FC;

  /* BCSCTL1 Calibration Data for 8MHz */
__no_init volatile unsigned __READ char CALBC1_8MHZ @ 0x10FD;

  /* DCOCTL  Calibration Data for 1MHz */
__no_init volatile unsigned __READ char CALDCO_1MHZ @ 0x10FE;

  /* BCSCTL1 Calibration Data for 1MHz */
__no_init volatile unsigned __READ char CALBC1_1MHZ @ 0x10FF;
也就说你要想实现CALDCO_4MHZ 和 CALBC1_1MHZ就得自己写。

得到了DCOCLK,然后我们只需要将DCOCLK连接到MCLK和SMCLK就可以了!

当然这连接之间还可以配置分频系数,例如DCOCLK = 16MHz,我们通过分频可以得到MCLK = 8MHz,SMCLK = 4MHz。

通过以下寄存器配置:

  //MCLK分频
  BCSCTL2_bit.DIVM0 = 0;
  BCSCTL2_bit.DIVM1 = 1;
  
  //SMCLK分频
  BCSCTL2_bit.DIVS0 = 0;
  BCSCTL2_bit.DIVS1 = 0;
这样我们就可配置自己的系统时钟了!


测试方法

通过芯片的P1.0和P1.4脚可以输出ACLK和SMCLK

  P1DIR |= 0x11;                            // P1.0,4 outputs
  P1SEL |= 0x11;                            // P1.0,4 ACLK, SMCLK output

举例说明

配置ACLK = 12kHz,SMCLK = 4MHz,MCLK = 8MHz

int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  
  //设置ACLK为12K
  BCSCTL3_bit.LFXT1S0 = 0;
  BCSCTL3_bit.LFXT1S1 = 1;
  
  //MCLK分频,2分频
  BCSCTL2_bit.DIVM0 = 1;
  BCSCTL2_bit.DIVM1 = 0;
  
  //MCLK时钟源为DCOCLK
  BCSCTL2_bit.SELM0 = 0;
  BCSCTL2_bit.SELM1 = 0;
  
  //SMCLK分频,4分频
  BCSCTL2_bit.DIVS0 = 0;
  BCSCTL2_bit.DIVS1 = 1;
  
  //SMCLK时钟源为DCOCLK
  BCSCTL2_bit.SELS  = 0; 
  
  //DCOCLK = 16Mhz
  if (CALBC1_16MHZ==0xFF)	             // If calibration constant erased
  {											
    while(1);                                // do not load, trap CPU!!	
  } 
  DCOCTL = 0;                                // Select lowest DCOx and MODx settings
  BCSCTL1 = CALBC1_16MHZ;                    // Set range
  DCOCTL  = CALDCO_16MHZ;                    // Set DCO step + modulation */
  
  //配置测试管脚
  P1DIR |= 0x11;                            // P1.0,4 outputs
  P1SEL |= 0x11;                            // P1.0,4 ACLK, SMCLK output

  while(1)
  {
    
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值