看门狗在正常设计的产品里都会用到,主要是解决程序跑飞、异常死机等,程序内部引起的问题情况下可以自动复位重启的功能。
看门狗本身就是个定时器,和普通的定时器差不多。 就是设置一个固定的超时时间,正常情况下,程序比如在看门狗的超时时间到达之前重置时间(这个就叫做喂狗);在程序正常运转的情况下,因为每次都会去喂狗,就不会有超时的现象。如果因为程序逻辑出现问题,程序在指定的时间内没办法去喂狗,就导致看门狗定时器超时,超时就会产生软件复位,程序重启,这样就可以避免产品宕机。 这种重启操作一般都可以解决这种偶然产生的一些程序BUG。 就像我们常用的电脑,卡死,或者出现一些奇怪问题,重启差不多都能解决。
下面就介绍CC2530的看门狗程序配置,具体的配置直接截图出来了。 在手册里起始介绍的起始已经很详细了,只要明白看门狗这个功能的作用、含义,就可以直接看第3章的代码去实操,分析代码的配置对着手册看一遍就差不多了。
#include
#define uint unsigned int
#define RLED P1_0
#define GLED P1_1
void CC2530_InitLEDIO(void)
{
P1DIR |= 0x03; //P10、P11定义为输出
RLED = 1;
GLED = 1;
//LED灯初始化为关
}
void CC2530_Init_Watchdog(void)
{
WDCTL = 0x00;
//时间间隔一秒,看门狗模式
WDCTL |= 0x08;
//启动看门狗
}
void CC2530_SET_MAIN_CLOCK(source)
{
if(source)
{
CLKCONCMD |= 0x40; /*RC*/
while(!(CLKCONSTA &0X40)); /*待稳*/
}
else
{
CLKCONCMD &= ~0x47; /*晶振*/
while((CLKCONSTA &0X40)); /*待稳*/
}
}
void CC2530_FeetDog(void)
{
WDCTL = 0xa0;
WDCTL = 0x50;
}
void CC2530_Delay(uint n)
{
uint i;
for(i=0;i
审核编辑:汤梓红
;i++);>
全部0条评论
快来发表一下你的评论吧 !