搜索
bottom↓
回复: 6

MSP430新手请教大家一个有关时钟配置的问题

[复制链接]

出0入0汤圆

发表于 2013-3-9 16:48:41 | 显示全部楼层 |阅读模式
本人这几天才接触MSP430,板子上芯片是MSP430F149,把书上一个例子稍作改动想用看门狗定时功能产生一个方波(周期性取反P1.0),下面是代码
  1. #include <msp430x14x.h>

  2. void main(void)
  3. {
  4.   unsigned int i ;
  5.   WDTCTL = WDT_MDLY_8 ;           //看门狗定时器定时周期设为8ms
  6.   IE1 |= WDTIE ;                  //使能WDT中断
  7.   P5DIR |= 0X10 ;                 //P5.4输出
  8.   P5SEL |= 0X10 ;                 //P5.4用作MCLK输出
  9.   P1DIR |= 0X01 ;                 //P1.01输出
  10.   BCSCTL1 &= ~XT2OFF ;            //xt2有效
  11.   do
  12.   {
  13.     IFG1 &= ~OFIFG ;             //清除振荡器失效标志
  14.     for(i = 0xff ; i > 0; i--) ; //适当延时
  15.   }
  16.   while((IFG1 & OFIFG) != 0) ;   //
  17.   BCSCTL2 |= SELM1+SELS ;        //设置MCLK=SMCLK=XT2CLK
  18.   BCSCTL2 |= DIVM0+DIVM1 ;       //设置8分频
  19.   _EINT() ;               //系统中断允许
  20.   while(1)
  21.   {
  22.     _BIS_SR(CPUOFF) ;     //进入LPM0
  23.     _NOP() ;
  24.   }
  25. }

  26. //看门狗中断服务子程序
  27. #pragma vector = WDT_VECTOR
  28. __interrupt void watchdog_timer(void)
  29. {
  30.   P1OUT ^= 0X01 ;         //P1.0取反
  31. }
复制代码
结果示波器在P1.0口啥也没看到 ,更奇怪的是用示波器观测P5.4口是,发现一会是1MHZ一会又是695KHZ,两频率之间跳变,
实在想不明白为什么。后来查看资料得知,将MCLK设置为LFXT1或XT2时,顺序应如下:
1.复位OscOff
2.清除OFIFG
3.延时等待至少50us
4.再次检查OFIFG,如果仍然置位,则继续2,3步骤,直到OFIFG=0为止。
然道是没有复位OSCOFF吗?因为是初学者,还不知道怎么去用C语言复位OSCOFF,特向论坛高手请教。我的单片机是MSP430F149,XT2接8M晶振。谢谢了。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2013-3-9 16:51:15 | 显示全部楼层
  1. #include <msp430x14x.h>
  2. void main(void)
  3. {
  4.   unsigned int i ;
  5.   WDTCTL = WDTPW+WDTHOLD ;        //停止看门狗
  6.   P5DIR |= 0X10 ;                 //P5.4输出
  7.   P5SEL |= 0X10 ;                 //P5.4用作MCLK输出
  8.   BCSCTL1 &= ~XT2OFF ;            //XT2有效
  9.   do
  10.   {
  11.     IFG1 &= ~OFIFG ;              //清除振荡器失效标志
  12.     for(i = 0xff;i > 0;i--) ;     //延时
  13.   }
  14.   while((IFG1 & OFIFG)!= 0) ;     //如果振荡器失效标志存在
  15.   BCSCTL2 |= SELM1 ;              //设置 MCLK = XT2
  16.   BCSCTL2 |= DIVM0+DIVM1 ;
  17.   while(1) ;
  18. }
复制代码
用这段代码的时候示波器在P5.4口看到很稳定的1M时钟信号。

出0入0汤圆

 楼主| 发表于 2013-3-9 16:51:48 | 显示全部楼层
好吧,先自顶一下。

出0入0汤圆

发表于 2013-3-10 10:15:08 | 显示全部楼层
时钟配置我也一直搞不清,我只外接了一个4M的晶振,想倍频,但看那些资料,貌似没有倍频的,(貌似DCO可以,不过要想有稳定的频率,还是要有一个低频晶振才可以。)给你顶下吧,希望高手出现?

出0入0汤圆

发表于 2013-3-10 21:18:41 | 显示全部楼层
楼主,是不是受到看门狗的影响,我没用过看门狗,但是你第一个程序的看门狗是设置为8ms的,关闭看门狗以后就没事了,会不会是XT2稳定时间过长,然后被看门狗复位了

出0入0汤圆

 楼主| 发表于 2013-3-11 16:41:03 | 显示全部楼层
angus1121 发表于 2013-3-10 21:18
楼主,是不是受到看门狗的影响,我没用过看门狗,但是你第一个程序的看门狗是设置为8ms的,关闭看门狗以后 ...

这个很有可能,我没想过。试试看看

出0入0汤圆

 楼主| 发表于 2013-3-12 18:09:35 | 显示全部楼层
cbing2000 发表于 2013-3-11 20:44
_BIS_SR(CPUOFF) ;     -----等效于进入LPM0.
进入LPM0就是关闭MCLK。这时候你还要去测量MCLK输出? 当然不 ...

首先,谢谢你啊。
今天我有把程序改成了这样

  1. #include <msp430x14x.h>

  2. void main(void)
  3. {
  4.   unsigned int i ;
  5.   WDTCTL = WDT_MDLY_8 ;          //看门狗定时器定时周期设为8ms
  6.   IE1 |= WDTIE ;                  //使能WDT中断
  7.   P1DIR |= BIT4 ;                 //P1.4输出
  8.   P1SEL |= BIT4 ;                 //P1.4用作SMCLK输出
  9.   P1DIR |= BIT0 ;                 //P1.0输出
  10.   BCSCTL1 &= ~XT2OFF ;            //xt2有效
  11.   do
  12.   {
  13.     IFG1 &= ~OFIFG ;             //清除振荡器失效标志
  14.     for(i = 0xff ; i > 0; i--) ; //适当延时
  15.   }
  16.   while((IFG1 & OFIFG) != 0) ;   //
  17.   BCSCTL2 |= SELS ;              //设置SMCLK=XT2CLK
  18.   BCSCTL2 |= DIVS_3 ;            //设置8分频,SMCLK即为1M
  19.   _EINT() ;                      //系统中断允许
  20.   while(1)
  21.   {
  22.     LPM0 ;     //进入LPM0
  23.     _NOP() ;
  24.     for(i = 0xff ; i > 0; i--) ;
  25.   }
  26. }

  27. //看门狗中断服务子程序
  28. #pragma vector = WDT_VECTOR
  29. __interrupt void watchdog_timer(void)
  30. {
  31.   LPM0_EXIT ;
  32.   P1OUT ^= BIT0 ;         //P1.0取反
  33. }
复制代码
测P1.4口的波形还是不对,老在700khz和1Mhz两个值之间跳变,DCO默认设置是800Khz左右,但不稳定,那个700几Khz的应该是DCO的信号,我是在想不明白?
WDTCTL = WDT_MDLY_8,这个语句好像只要SMCLK设置为1Mhz,看门狗定时器就被设为普通定时器定时8ms吧,不一定要是SMCLK=DCO=1Mhz的。
然后我有吧while里面的3条语句全注释掉,把中断服务程序里的LPM0_EXIT也注释掉,但结果还是一样跳变,没什么影响。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 21:08

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表