2943|2

11

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

430g2553内部DCO时钟配置问题,,, [复制链接]

一下代码功能:设置DCO频率,将MCLK和SMCLK设置为DCO,,调用定时器——A比较功能。输出PWM波,
                    理论上上输出频率为DCO频率1/10才对,可是设置DCO为16MHZ时,输出为2.89KHZ,
                    设置DCO为1MHZ时,输出为2.25KHZ。。希望前辈指点。。
              
void main( void )
{
  int i;
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  while(CALBC1_1MHZ==0xff||CALDCO_1MHZ==0XFF);
  BCSCTL1=CALBC1_1MHZ;
  DCOCTL=CALDCO_1MHZ;
  BCSCTL2|=SELM_1+DIVM_0+SELS+DIVS_0;
  BCSCTL3|=LFXT1S_2;                     //时钟配置
   while(IFG1 & OFIFG)
  {
    IFG1 &= ~OFIFG; //清除OSCFault 标志
    for(i= 0xff; i>0; i--); //延时,待稳定.
  }
  
P1SEL |= BIT2;  //TA1从P1.2输出  
P1DIR |= BIT2;  //TA1从P1.2输出

TACTL |= MC_1 + TASSEL_2;    以MSCLK为输入
TACCTL1 = OUTMOD_3;   
TACCR0 = 10 ;    //频率大概为定时器输入时钟频率1/10
TACCR1 = 5;


  _EINT();
  while(1);
}
此帖出自单片机论坛

最新回复

本帖最后由 huixianfxt 于 2014-7-11 09:58 编辑 void main( void ) {   int i;   // Stop watchdog timer to prevent time out reset   WDTCTL = WDTPW + WDTHOLD;                                   // 停止开门狗   while(CALBC1_1MHZ==0xff||CALDCO_1MHZ==0XFF);                // 检查校准信息是否被擦除   BCSCTL1=CALBC1_1MHZ;                                        // 设置SELX的范围   DCOCTL=CALDCO_1MHZ;                                         // 设置DCOX的值和频率调整值MODX   BCSCTL2|=SELM_1+DIVM_0+SELS+DIVS_0;                         // MCLK=DCO频率 ,不分频。 SMCLK为VLO频率,不分频   BCSCTL3|=LFXT1S_2;                                          // VLO作为低频时钟源    while(IFG1 & OFIFG)   {     IFG1 &= ~OFIFG; //清除OSCFault 标志     for(i= 0xff; i>0; i--); //延时,待稳定.   }    P1SEL |= BIT2;  //TA1从P1.2输出   P1DIR |= BIT2;  //TA1从P1.2输出 TACTL |= MC_1 + TASSEL_2;                                     // up 模式,SMCLK为时钟源 TACCTL1 = OUTMOD_3;                                           // toggle 模式 TACCR0 = 10 ;                                                 // 频率大概为定时器输入时钟频率1/10 TACCR1 = 5;   _EINT();   while(1); } 不知道楼主看出来了没?楼主根本不明白自己写的程序(或者不是自己的程序),还是好好看看相应寄存器的功能吧!看看论坛WSTT,chunyang出的MCU工程师炼成记吧!   详情 回复 发表于 2014-7-11 09:56
点赞 关注(1)
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
BCSCTL3|=LFXT1S_2;                     //时钟配置

这句是用VLO做时钟,把它去了.
此帖出自单片机论坛
 
 

回复

951

帖子

1

TA的资源

纯净的硅(中级)

板凳
 
本帖最后由 huixianfxt 于 2014-7-11 09:58 编辑

void main( void )
{
  int i;
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;                                   // 停止开门狗
  while(CALBC1_1MHZ==0xff||CALDCO_1MHZ==0XFF);                // 检查校准信息是否被擦除
  BCSCTL1=CALBC1_1MHZ;                                        // 设置SELX的范围
  DCOCTL=CALDCO_1MHZ;                                         // 设置DCOX的值和频率调整值MODX
  BCSCTL2|=SELM_1+DIVM_0+SELS+DIVS_0;                         // MCLK=DCO频率 ,不分频。 SMCLK为VLO频率,不分频
  BCSCTL3|=LFXT1S_2;                                          // VLO作为低频时钟源
   while(IFG1 & OFIFG)
  {
    IFG1 &= ~OFIFG; //清除OSCFault 标志
    for(i= 0xff; i>0; i--); //延时,待稳定.
  }
  
P1SEL |= BIT2;  //TA1从P1.2输出  
P1DIR |= BIT2;  //TA1从P1.2输出

TACTL |= MC_1 + TASSEL_2;                                     // up 模式,SMCLK为时钟源
TACCTL1 = OUTMOD_3;                                           // toggle 模式
TACCR0 = 10 ;                                                 // 频率大概为定时器输入时钟频率1/10
TACCR1 = 5;


  _EINT();
  while(1);
}
不知道楼主看出来了没?楼主根本不明白自己写的程序(或者不是自己的程序),还是好好看看相应寄存器的功能吧!看看论坛WSTT,chunyang出的MCU工程师炼成记吧!
此帖出自单片机论坛
 
个人签名人有的时候真是奇怪,选择了会后悔,放弃了会遗憾,完美只能是一种理想,不是一种存在。
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表