智能创客,中国最大的极客空间,智能平台,免费教学,视频教程,手把手教你创造儿时梦想!

标题: Zigbee之旅(八):几个重要的CC2430基础实验——看门狗 [打印本页]

作者: znck007    时间: 2014-2-9 10:39
标题: Zigbee之旅(八):几个重要的CC2430基础实验——看门狗
一、承上启下

  再好的操作系统,不管是现在的Win7还是以后Win8、Win9,总会出现BlueScreen的时候,更何况是小小的单片机呢~ 电气噪声、电源故障、静电放电等不可预知的原因,都可能造成嵌入式系统的运行出现异常。

  而看门狗(Watch Dog),准确的说应该是看门狗定时器,则正是专门用来监测单片机程序运行状态的电路结构。其基本原理是:启动看门狗定时器后,它就会从0开始计数,若程序在规定的时间间隔内没有及时对其清零,看门狗定时器就会复位系统(相当于重启电脑),如下图所示(word画的,画得比较eggache~):

  下面我们就来介绍简单的看门狗应用方法:怎么放狗?怎么喂?若不喂,会出现什么情况?


二、看门狗的故事(1)实验简介

  若喂狗,系统正常运行;若不喂狗,系统不断重启。


(2)程序流程图




(3)实验源码及剖析/*
    实验说明:看门狗实验,若不喂狗,系统一直重启。
*/

#include

#define led1 P1_0         
#define led2 P1_1         
#define led3 P1_2         
#define led4 P1_3   

/*系统时钟初始化
-------------------------------------------------------*/
void xtal_init(void)
{
  SLEEP &= ~0x04;             //都上电
  while(!(SLEEP & 0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            //选择32MHz 晶体振荡器
  SLEEP |= 0x04;
}

/*LED初始化
-------------------------------------------------------*/
void led_init(void)
{
  P1SEL  = 0x00;              //P1为普通 I/O 口
  P1DIR |= 0x0F;              //P1.0 P1.1 P1.2 P1.3 输出
  
  led1 = 1;                   //关闭所有LED
  led2 = 1;
  led3 = 1;
  led4 = 1;
}

/*看门狗初始化
-------------------------------------------------------*/
void watchdog_Init(void)   
{
  WDCTL = 0x00;              //看门狗模式,时间间隔一秒
  WDCTL |= 0x08;             //启动看门狗
}

/*喂狗程序
-------------------------------------------------------*/
void FeetDog(void)   
{
  WDCTL = 0xa0;
  WDCTL = 0x50;
}

/*延时函数(小于1秒。读者可以想一下,若大于1秒,会出现什么情况)
-------------------------------------------------------*/
void Delay(void)
{
  unsigned int n;
  for(n=50000;n>0;n--);
  for(n=50000;n>0;n--);
  for(n=50000;n>0;n--);
  for(n=50000;n>0;n--);
  for(n=50000;n>0;n--);
  for(n=50000;n>0;n--);
  for(n=50000;n>0;n--);
}

/*主函数
-------------------------------------------------------*/
void main(void)
{
  xtal_init();  
  led_init();
  watchdog_Init();

  Delay();
  led1 = 0;         //点亮led1
  
  while(1)
  {
    FeetDog();      //喂狗指令(加入后系统不复位,小灯不闪烁;若注释,则系统不断复位,小灯每隔1s闪烁一次)
  }
}

  从上面的源码可以看出,看门狗的操作方法非常简单,整个过程仅涉及一个新的SFR,即 WDCTL。下面给出CC2430中文手册里对其的具体描述:

  看门狗的使用可以总结为:选择模式 → 选择定时器间隔 → 放狗 → 喂狗


  (1)选择模式:

  看门狗定时器有两种模式,即“看门狗模式”和“定时器”模式。

  在定时器模式下,它就相当于普通的定时器,达到定时间隔会产生中断(你可以在ioCC2430.h文件中找到其中断向量为WDT_VECTOR);在看门狗模式下,当达到定时间隔时,不会产生中断,取而代之的是向系统发送一个复位信号。

  本实验中,通过 WDCTL.MODE=0 来选择为看门口模式。

  (2)选择定时间隔:

  如上图所示,有四种可供选择的时钟周期,为了测试方便,我们选择时间间隔为1s(即令 WDCTL.INT=00 )。

  (3)放狗:

  令 WDCTL.EN=1 ,即可启动看门狗定时器。

  (4)喂狗:

定时器启动之后,就会从0开始计数。在其计数值达到32768之前(即<1s),若我们用以下代码喂狗:  

  WDCTL = 0xa0;
  WDCTL = 0x50;  

  则定时器的计数值会被清0,然后它会再次从0x0000开始计数,这样就防止了其发送复位信号,表现在开发板上就是:LED1会一直亮着,不会闪烁;

  若我们不喂狗(即把此代码注释掉),那么当定时器计数达到32768时,就会发出复位信号,程序将会从头开始运行,表现在开发板上就是:LED1不断闪烁,闪烁间隔为1s。(注:喂狗程序一定要严格与上述代码一致,顺序颠倒/写错/少写一句都将起不到清0的作用。)


CC2430 小贴士
做两点额外说明:
(1)在 看门狗模式 下,若看门狗定时器已经使能,则对WDCTL.EN置0是无效的(即此位不能起到停止定时器的作用);
(2)在 定时器模式 下,可以对WDCTL.CLR[0]写1来对定时器清零;写0到使能位WDCTL.EN将停止定时器,而写1到使能位将重新启动定时器从0x0000开始运行。


(4)实验结果:

  若加上FeedDog函数,运行代码,发现LED1一直亮着(系统不复位);

  若注释掉FeedDog函数,运行代码,发现LED1以1s的间隔闪烁(系统每隔1s复位一次)。

三、结语

  本节介绍了看门狗定时电路的原理和使用方法。在实际应用中,若需要较高的可靠性,则可将看门狗运用到系统中。当系统因某种原因出现停机状况(不能喂狗了)时,没人喂的狗就会狂吠起来:“主人,有异常,有异常!”

  对一个无线传感器网络来说,其运行时功耗的高低,是性能评价的至关重要的一方面。下一节,我们来讨论关于CC2430系统睡眠,以及其中断唤醒。



作者: xkdsy    时间: 2014-9-12 20:44
好!!!!!!!












茶冰纷www.shinytea.com
作者: ulbqh3    时间: 2014-9-19 13:11
头说道:怎么
时间
与对敌那么久这一幕甚至胡子拉碴












www.cp188.com  www.53auto.com黄江二手车
推把论坛http://bbs.tui8.com/forum.php tui8.com 推把自媒体 tui8.com 免费WordPress
郭德纲相声大全 tui8.com 环境保护门户网站 站长博客 www.chayedian.com   网上买放心茶叶,到茶叶店   www.guodegang.com     www.hjbh.com

作者: 点距量0904    时间: 2015-3-12 17:38
我在努力中
作者: 澳门生活网f    时间: 2015-3-21 03:44
好好看看,非常好的帖子













淘客机器人、淘客返利机器人、淘宝客机器人 联系客服QQ:1785400000

作者: 善旦景oebys    时间: 2015-5-24 04:37
确实不错,眼前一亮的好文











交友:我是个小女生,21岁,独生子女,还没谈过恋爱,长相较好,反正带出去不会给你丢脸,身高165cm,体重50kg,现在是一家公司的文员。希望找个比我大几岁的男生,不需要你有非常好的条件,但一定要有上进心,会体贴女生,不花心。因为我是第一次恋爱,所以希望找的就是那种能结婚的。如果你是我说的那个他,那就加我微信吧:pndrwx
作者: 柔柔弱弱sac    时间: 2015-6-30 18:01
【招.募.蒹.職.正.规.平.台】空.閑.时.间.在.家.赚.錢,祥请q、9•4•5•1•9•9•8•3•9,时.间.地.嚸.不.限,工.資.日/結,日.進.几.十.至.几.百.块,手.机.电.脑.皆.可,合.適.在.家宝.妈,上.學.学.生,上.班.族,宅家.无业.待业者,看.空.涧.了解,有.图.有.真.湘,既能打发时间又能在.家赚錢,都前来.看.看,不好咱就走,给.自.己.一个机.会
作者: qsikn    时间: 2015-8-10 20:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: kycup    时间: 2015-10-4 10:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: bssxk    时间: 2015-10-13 19:13
真的谢谢了!
作者: tswtj    时间: 2015-11-6 17:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: okz348    时间: 2015-11-14 07:46
哈哈,楼主不错











zuo3_com
作者: tswtj    时间: 2015-11-18 05:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: 飞珍非仓    时间: 2016-3-12 19:55
回帖是必须的,这个可以有!
作者: 飞珍非仓    时间: 2016-3-17 13:39
这么好的帖子不顶就太对不起楼主了
作者: 飞珍非仓    时间: 2016-3-28 09:55
谢谢分享!!
作者: rujgf    时间: 2016-4-8 23:38

作者: 胜殿强grq41w    时间: 2016-4-14 21:10
谢谢楼主,辛苦了,值得收藏,向楼主致敬。微信转发视频加我微信号:niux1688
作者: zmlxh168    时间: 2016-4-21 12:37
帖子非常好
作者: 浅若清风    时间: 2016-6-1 15:29
楼主、楼主、楼主。顶一下, file:///C:/Users/120/AppData/Local/Temp/SGPicFaceTpBq/4968/1009088C.gif

作者: butnl    时间: 2016-6-18 18:36
相信楼主的说,非常支持你
作者: 定根迟    时间: 2016-7-21 04:38
ding呀 支持












您懂得 您懂得 您懂得 百度网盘免费下载   hao.wpan123.com
作者: {五洲管道}    时间: 2016-8-16 06:08
提示: 作者被禁止或删除 内容自动屏蔽
作者: kwurw    时间: 2016-8-23 16:49
回复一下吧












实习生必备关注微信号:shsxjy
作者: 方重明    时间: 2016-10-1 02:55
牛牛牛牛呀












某宝购买 视频教程 素材 软件 xiao视频 等资源  百度网盘免费下载   hao.wpan123.com
作者: uudizhi482    时间: 2016-10-18 19:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: 改学常可    时间: 2016-10-28 12:50
就是喜欢你的帖子 没办法












专业代发帖子,网络推广,发帖宣传,产品推广,外链代发。
__________论坛发帖价格____________
联系QQ:188662616  微信号:q188662616
套餐一 80元500帖
套餐二 100元1000帖
套餐三 200元3000帖
套餐四 300元6000帖
套餐五 500元12000帖
当天发完,提供详细报表,保证数量。
包月:600元每天500帖共15000帖
包月:800元每天1000帖共30000帖
包月:1000元每天2000帖共60000帖
包月:1500元每天3000帖共90000帖
包月:2000元每天5000帖共150000帖
包月:3000元每天10000帖共300000帖
包月:5000元每天30000帖共900000帖
联系QQ:188662616  微信号:188662616
每天发完,提供详细报表。

作者: 南国一梦web    时间: 2016-11-2 12:57
鉴定完毕!













作者: 风已远去jr    时间: 2016-11-4 02:08
不错的~~! 感谢您提供













作者: h落燕飞    时间: 2016-11-8 04:23
很好!很强大!

















欢迎光临 智能创客,中国最大的极客空间,智能平台,免费教学,视频教程,手把手教你创造儿时梦想! (http://luntan.znck007.com/) Powered by Discuz! X3.2