amobbs.com 阿莫电子技术论坛

标题: msp430f149内部watchdog [打印本页]

作者: xiatianzhang    时间: 2012-11-25 22:08
标题: msp430f149内部watchdog
谁用过内部的看门狗?它的时钟源我选择的是内部的800K,但是怎么我的主时钟也跟着它啊 我选择的是外部的8M。以前是用x5043做外部的看门狗的,现在用内部的貌似不行。不知道哪里设置错了。我内部的看门狗不能选择外部8M分频的?还是不能选择内部的800K RC。我糊涂了、求大虾指点一下!
作者: 和为和    时间: 2012-11-26 13:05
F149的看门狗时钟只能选择SMCK、ACLK
作者: xiatianzhang    时间: 2012-11-26 13:49
和为和 发表于 2012-11-26 13:05
F149的看门狗时钟只能选择SMCK、ACLK

我看了 AD IO定时器都是SMCLK和 ACLK选择的,看门狗还有一个aclk。我选择aclk了。还是老复位。不知道哪里设置错误了,有没有例子看下啊、

以下是我设置的
WDTCTL = 0X5A04;看门狗选择ACLK。

作者: 和为和    时间: 2012-11-26 14:02
每隔一段时间要喂狗

WDTCTL = WDTPW | WDT_ARST_250;

这是用 ACLK 32.768KHZ 的时钟,大概250毫秒,要小于这个时间内喂狗。
作者: xiatianzhang    时间: 2012-11-26 14:19
和为和 发表于 2012-11-26 14:02
每隔一段时间要喂狗

WDTCTL = WDTPW | WDT_ARST_250;

void main()
{
    WDTCTL = WDTPW + WDTHOLD;                                                   //停止看门狗
    //WDTCTL = WDTPW+SSEL1;//+ WDTHOLD;                                                   //停止看门狗   
    //WDT_ARST_1000;
    _DINT();                                                                    //关中断
    BordBord_Config();                                                          //板子配置
    _EINT();                                                                    //开中断  
    P1OUT=0xFF;
    P2OUT=0xFF;
    P3OUT=0xFF;
    OLED_reset();                                                               //OLED硬件复位
    OM_ini();                                                                   //OLED液晶初始化
    clr_scr();                                                                  //清屏
    uchar button = 120;                                                         //按键定时计数
    WDTCTL = WDTPW|WDT_ARST_250;
    //WDT_ARST_250;
    WDTCTL = WDTPW + WDTCNTCL;
    while(1)
    {
          WDTCTL = WDTPW + WDTCNTCL;
          if (Keybuf != 0)
          {
               HandleKey();
               button = 120;
          }
          else
          {
               _NOP();
          }           
          What_Key();
}
我就是这个时间段内复位的。
作者: 和为和    时间: 2012-11-26 14:25
喂狗是用同样的语句来喂就行了。
void main()
{
    WDTCTL = WDTPW + WDTHOLD;                                                   //停止看门狗
    //WDTCTL = WDTPW+SSEL1;//+ WDTHOLD;                                                   //停止看门狗   
    //WDT_ARST_1000;
    _DINT();                                                                    //关中断
    BordBord_Config();                                                          //板子配置
    _EINT();                                                                    //开中断  
    P1OUT=0xFF;
    P2OUT=0xFF;
    P3OUT=0xFF;
    OLED_reset();                                                               //OLED硬件复位
    OM_ini();                                                                   //OLED液晶初始化
    clr_scr();                                                                  //清屏
    uchar button = 120;                                                         //按键定时计数
    WDTCTL = WDTPW|WDT_ARST_250;
    //WDT_ARST_250;
    //WDTCTL = WDTPW + WDTCNTCL;
    while(1)
    {
          WDTCTL = WDTPW|WDT_ARST_250;
          if (Keybuf != 0)
          {
               HandleKey();
               button = 120;
          }
          else
          {
               _NOP();
          }           
          What_Key();
}
作者: xiatianzhang    时间: 2012-11-26 15:19
xiatianzhang 发表于 2012-11-26 14:19
void main()
{
    WDTCTL = WDTPW + WDTHOLD;                                                   //停 ...

WDTCTL = WDTPW + WDTCNTCL;
这个是喂狗的语句。但是老复位晕死了!!!!!!!!!!!!
作者: qiuchen    时间: 2012-11-26 15:53
增加喂狗次数试试。如果你把看门狗时钟选择ACLK的话,应该不会到8M的。
作者: 和为和    时间: 2012-11-26 16:14
在仿真时是不可以打开看门狗的,因为后台时钟旧一直在走的。
作者: xiatianzhang    时间: 2012-11-26 16:58
qiuchen 发表于 2012-11-26 15:53
增加喂狗次数试试。如果你把看门狗时钟选择ACLK的话,应该不会到8M的。

800k



作者: xiatianzhang    时间: 2012-11-26 16:59
和为和 发表于 2012-11-26 16:14
在仿真时是不可以打开看门狗的,因为后台时钟旧一直在走的。

那怎么办?以前是外部看门狗的。程序没问题、但是换成内部的看门狗就不能运行了。
作者: qiuchen    时间: 2012-11-26 17:09
xiatianzhang 发表于 2012-11-26 16:58
800k

800k的时钟是来自于DCO吗?8M是在MCLK上还是在SMCLK上呢?
作者: 和为和    时间: 2012-11-26 19:29
暂时关掉看门狗,等软件调试完成后再打开看门狗。
我没留意F149的内部低频RC是多少。MCLK是给CPU内核使用的,SMCLK是用于外设的。你可以看下使用指南中的时钟部份。
我的意见只是供你参考。
作者: 和为和    时间: 2012-11-26 19:45
[attach]71995[/attach]

根据使用指南的框图,F149并没有800K的时钟上,只有 ACLK 和 SMCLK 两种。

ACLK 就是外部的 32768HZ的时钟。

而 SMCLK 是内部DCO的输出时钟。

如果为了省电,那看门狗不建议选择SMCLK,因为MCU一进入省电模式,基本上DCO是会关掉的。
作者: xiatianzhang    时间: 2012-11-26 22:28
qiuchen 发表于 2012-11-26 17:09
800k的时钟是来自于DCO吗?8M是在MCLK上还是在SMCLK上呢?

是dco        
作者: xiatianzhang    时间: 2012-11-26 22:31
和为和 发表于 2012-11-26 19:29
暂时关掉看门狗,等软件调试完成后再打开看门狗。
我没留意F149的内部低频RC是多少。MCLK是给CPU内核使用的 ...

我看了系统的主时钟也即使MCLK是跑8M的。其余的像AD 定时器。UART等都是外设使用的是SMCLK。看门狗也使用SMCLK或者ALCK。我选择是ACLK内部的800K。因为选择SMLCK的话其他的AD 定时器。UART的时钟和看门狗都是一样了。这样不好。我程序AD采样的。
作者: qiuchen    时间: 2012-11-27 08:30
xiatianzhang 发表于 2012-11-26 22:31
我看了系统的主时钟也即使MCLK是跑8M的。其余的像AD 定时器。UART等都是外设使用的是SMCLK。看门狗也使用 ...

首先DCO是不能用作ACLK的,所以你的ACLK肯定没配置到DCO上,所以你的ACLK是失效的。看门狗默认在ACLK失效的情况下,切换到了SMCLK上,所以他跑的是8M。以下是时钟框图。




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4