[原创] 【分享】关于喂狗

ccstc   2012-8-15 11:28 楼主
    喂狗,也就是在看门狗定时器溢出之前对其进行清零的操作。
    网上和书里对喂狗的介绍不多,大部分都只说使用“WDTCTL = WDTPW + WDTCNTCL;”即可。一般使用起来没什么问题,但是当不使用默认的看门狗时钟源和分频系数之后,问题就来了。(以G2XXX系列,SMCLK=1M,ACLK=32K为例)直接使用“WDTCTL = WDTPW + WDTCNTCL;”喂狗之后,看门狗就被重置成复位状态,看门狗复位时间就变成了32ms,如果远小于你的喂狗时间,程序就没法正常工作了,典型表现为定时重新启动。仔细查看WDTCTL寄存器之后,就能发现问题。
看门狗定时器.jpg


    要正确喂狗最好的办法就是不改变原有看门狗配置的情况下将WDTCNTCL置1。这样看来,简单的就是“WDTCTL |= WDTPW + WDTCNTCL;”,其中需要注意的是WDTPW位读出来是0x69,而需要写入的是0x5A,实际上0x69|0x5A=0x7B,这就造成了在喂狗的时候,密码错误造成单片机重启。所以正确的喂狗语句就初始化看门狗的语句。当然如果想使用通用的喂狗语句,“WDTCTL = WDTPW + WDTCNTCL + (WDTCTL & 0x00FF);”应该是最正确的(其中(WDTCTL & 0x00FF)是用来获取看门狗配置的)。

回复评论 (4)

好帖子!分析的很清晰透彻!
Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
点赞  2012-8-15 15:13
我用的都是

WDTCTL = WDTPW + WDTHOLD 啊
点赞  2012-8-16 10:18

回复 板凳 457887107 的帖子

WDTCTL = WDTPW + WDTHOLD
这个是停止看门狗,不是喂狗
点赞  2012-8-16 15:25
430头文件已经很清新了  喂狗一般直接加上时间(头文件里面都处理过了)
点赞  2012-8-16 15:56
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复