历史上的今天
返回首页

历史上的今天

今天是:2025年04月09日(星期三)

正在发生

2019年04月09日 | ZigBee基础实验(十)--看门狗

2019-04-09 来源:eefocus

引言:硬件中的看门狗,不是门卫的意思,而是一只很凶的狗!如果你不按时喂它,它就会让系统重启!这反而是我们想要的功能~

 

1、看门狗概述

  看门狗定时器(WDT,Watch Dog Timer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。因此可以用看门狗防止程序在跑飞的时候回不到正常模式。


  看门狗可用于受到电气噪音、电源故障、静电放电等影响的应用,或需要高可靠性的环境。如果一个应用不需要看门狗功能,可以配置看门狗定时器为一个间隔定时器,这样可以用于在选定的时间间隔产生中断。


  The features of the Watchdog Timer are as follows:

● 四个可选的定时器间隔
● 看门狗模式
● 定时器模式
● 在定时器模式下产生中断请求

 

  WDT 可以配置为一个看门狗定时器或一个通用的定时器。WDT 模块的运行由WDCTL 寄存器控制。看门狗定时器包括一个15 位计数器,它的频率由32kHz 时钟源规定。注意用户不能获得15 位计数器的内容。在all power modes下,15 位计数器的内容保留,且当重新进入active mode,看门狗定时器继续计数。

 

2、看门狗模式

  当系统重启后看门狗定时器失能。To start the WDT in watchdog mode, the WDCTL.MODE[1:0] bits must be set to 10. The Watchdog Timer counter then starts incrementing from 0. When the timer is enabled in watchdog mode, it is not possible to disable the timer. Therefore, writing 00 or 01 to WDCTL.MODE[1:0] has no effect if the WDT is already operating in Watchdog mode.


  WDT 运行在一个频率为32.768 kHz(当使用32 kHz XOSC时)的看门狗定时器时钟上。这个时钟频率的超时期限等于1.9ms,15.625 ms,0.25 s 和1s,分别对应64,512,8192 和32768 的计数值设置。


  当计数器达到设定的计数值时,看门狗会对系统产生一个reset信号,如果在计数器到达设定值之前执行了看门狗clear序列,counter的值会被重置为0,并会继续递增。看们狗的clear序列包含:writing 0xA to WDCTL.CLR[3:0], followed by writing 0x5 to the same register bits within one watchdog clock period. 如果这个完整序列不能在watch dog时期结束前完成,看门狗就会产生一个系统reset信号。


  When the WDT has been enabled in watchdog mode, it is not possible to change the mode by writing to the WDCTL.MODE[1:0] bits and the timer interval value can not be changed.

 

3、定时器模式

  To start the WDT in timer mode, the WDCTL.MODE[1:0] bits must be set to 11. The timer is started and the counter starts incrementing from 0. When the counter reaches the selected interval value, the timer produces an interrupt request  (IRCON2.WDTIF/IEN2.WDTIE).


  In timer mode, it is possible to clear the timer contents by writing a 1 to WDCTL.CLR[0]. When the timer is cleared, the content of the counter is set to 0. Writing 00 or 01 to WDCTL.MODE[1:0] stops the timer and clears it to 0.


  The timer interval is set by the WDCTL.INT[1:0] bits. The interval cannot be changed during timer operation, and should be set when the timer is started. In timer mode, a reset is not produced when the timer interval has been reached.

  注意:如果看门狗模式被选择,那只能等到芯片reset之后定时器模式才能被选择。

 

4、工程DEMO

main code:

 1 /****************************************************************************

 2 * 文 件 名: main.c

 3 * 描    述: 打开看门狗后,得记得喂狗,不然系统就会不停地复位了

 4 ****************************************************************************/

 5 #include

 6 

 7 typedef unsigned char uchar;

 8 typedef unsigned int  uint;

 9 

10 #define LED1 P1_0       // P1.0口控制LED1

11 #define LED2 P1_1       // P1.1口控制LED2

12 

13 

14 /****************************************************************************

15 * 名    称: DelayMS()

16 * 功    能: 以毫秒为单位延时 16M时约为535,系统时钟不修改默认为16M

17 * 入口参数: msec 延时参数,值越大,延时越久

18 * 出口参数: 无

19 ****************************************************************************/

20 void DelayMS(uint msec)

21 { 

22     uint i,j;

23     

24     for (i=0; i

25         for (j=0; j<535; j++);

26 }

27 

28 /****************************************************************************

29 * 名    称: InitLed()

30 * 功    能: 设置LED灯相应的IO口

31 * 入口参数: 无

32 * 出口参数: 无

33 ****************************************************************************/

34 void InitLed(void)

35 {

36     P1DIR |= 0x03;      //P1.0、P1.1定义为输出

37     LED1 = 1;           //默认LED灯为熄灭状态

38     LED2 = 1;

39 }

40 

41 

42 void Init_Watchdog(void) 

43 { 

44     WDCTL = 0x00;       //打开IDLE才能设置看门狗

45     WDCTL |= 0x08;      //定时器间隔选择,间隔一秒

46 }

47 

48 void FeetDog(void) //喂狗

49 { 

50     WDCTL = 0xa0;       //清除定时器。当0xA跟随0x5写到这些位,定时器被清除

51     WDCTL = 0x50; 

52     LED2 = 0;           //系统不复位LED2灯长亮

53 }

54 

55 /****************************************************************************

56 * 程序入口函数

57 ****************************************************************************/

58 void main(void)

59 {

60     InitLed();        //调用初始化函数

61     Init_Watchdog();

62 

63     while(1)

64     {         

65         //LED1 = ~LED1;   //仅指示作用。

66         DelayMS(300);

67         LED2=0;

68                

69         //FeetDog();     //喂狗系统将不再主动复位,LED2长亮

70                        //注释FeetDog函数时系统不断复位,LED2灯闪烁

71     }

72 }


其中42~46行用于看门狗初始化:


42 void Init_Watchdog(void) 

43 { 

44     WDCTL = 0x00;       //打开IDLE才能设置看门狗

45     WDCTL |= 0x08;      //定时器间隔选择,间隔一秒

46 }


第44行令WDCTL为0是因为下表WDCTL中关于MODE介绍——MODE[1:0]是用来模式选择,这两位用来在Watchdog模式或Timer模式启动看门狗定时器。其中有个主意说明“如果在timer模式想切换到看门狗模式,第一步需要停止WDT,然后才能在看门狗模式启动WDT。当处在看门狗模式,向这些位写数据是无效的”。因此向MODE中写00是使让看门狗处于IDLE模式(停止timer),接着才能启动WDT。

第45行是设置INT,选择超期时限为1s(即设置INT[1:0]=00)

 

 

第48~53行是喂狗的函数,其中第50、51行设置设置WDCTL为0xa0,紧接着设置为0x50,使一个clear序列,用于清除定时器(第2节红色字体部分由介绍)

48 void FeetDog(void) 
49 { 
50     WDCTL = 0xa0;       //清除定时器。当0xA跟随0x5写到这些位,定时器被清除
51     WDCTL = 0x50; 
52     LED2 = 0;           //系统不复位LED2灯长亮
53 }

 

因此,整个工程的意思是:初始化看门狗并设置1s种的喂狗期限,如果整个工程执行过程中超过1s不喂狗,看门狗timer就会产生一个系统reset信号让系统重置。因此代码中69行如果注释掉喂狗,带来的结果就是系统不断重启LED2不断闪烁;如果喂狗则LED2常亮。


推荐阅读

史海拾趣

CIPS公司的发展小趣事

随着CIPS系统的不断发展壮大,其在行业内的地位和影响力也逐渐提升。多家银行和金融机构因积极运用CIPS标准收发器推动跨境人民币业务发展而荣获奖项,这是对CIPS系统及其运营机构的高度认可。这些荣誉和奖项不仅彰显了CIPS在行业内的领先地位,也为其未来的发展奠定了坚实基础。

ECS公司的发展小趣事

面对云计算技术的不断发展和市场竞争的加剧,ECS公司制定了面向未来的战略布局。他们将继续加大在研发方面的投入,推动ECS服务的不断升级和创新;同时,他们还将积极探索新的业务领域和市场机会,为客户提供更加全面、丰富的服务。此外,ECS公司还注重可持续发展和社会责任。他们致力于降低能耗和排放、推动绿色计算等方面的工作;同时,他们还积极参与社会公益事业和慈善活动,回馈社会。这些举措使得ECS公司不仅成为了一家领先的云服务提供商,还成为了一家具有社会责任感的企业。

HEC Inc公司的发展小趣事

ECS公司始终坚持以客户为中心的服务理念。他们深入了解客户的需求和痛点,为客户量身定制解决方案。例如,针对某些行业对数据安全性的特殊要求,ECS公司推出了专用的安全加密方案;针对一些大型企业对于大规模计算资源的需求,ECS公司提供了定制化的高性能计算服务。这些定制化服务不仅满足了客户的特殊需求,还增强了客户对ECS公司的信任和忠诚度。

CIRCUITCO公司的发展小趣事

随着技术的不断进步,CIRCUITCO公司开始寻求市场拓展的机会。公司积极与国内外知名电子产品制造商建立合作关系,为其提供优质的电路板解决方案。通过与这些企业的合作,CIRCUITCO的产品逐渐渗透到各个领域,如通信、计算机、消费电子等。同时,公司也通过参加国际电子展会等方式,提升品牌知名度,进一步拓展市场份额。

FOX [Fox Electronics]公司的发展小趣事

随着全球对环保和可持续发展的重视,Fox Electronics积极响应行业趋势,将绿色生产理念融入企业运营中。公司投资引进先进的环保设备和生产工艺,减少生产过程中的废弃物排放和能源消耗。同时,Fox Electronics还推出了一系列符合RoHS(限制有害物质)指令的产品,满足市场对环保产品的需求。这些举措不仅提升了公司的社会责任感,也为其在绿色电子市场赢得了良好的声誉。

Bud Industries公司的发展小趣事

进入21世纪后,Fox Electronics意识到全球化对于企业发展的重要性。为了更好地服务全球客户,公司开始在全球范围内布局生产基地和销售网络。通过在亚洲、欧洲和北美等地设立分厂和办事处,Fox Electronics不仅缩短了交货周期,还降低了生产成本,提高了市场竞争力。同时,公司还加强了与全球供应链伙伴的合作,通过优化供应链管理,确保产品质量和交货期的稳定性。

问答坊 | AI 解惑

*****ARM程序在RAM中执行跳转出错,恳请指教*****

各位前辈,小弟在用友善的supervivi下程序到SDRAM中执行的时候,发现如下问题: 我写了一个测试程序:         B         SYSINIT         B         Handler ...…

查看全部问答>

非一体机屏蔽GPS后外放没声音?

我的目的是把屏蔽GPS,当做PDA来用。 最近到手一个GPS,开机后没有能直接wince桌面的按键和设置。要解决的问题是进入电脑桌面。 1,在SD卡上CO入explorer.exe这个文件,把导航路径设为\\sd\\explorer.exe. 这样就可以进入wince桌面了。 2,运行 ...…

查看全部问答>

Flash Programmer下提示arm2410开发板连不PC

电脑连不上开发板,Flash Programmer提示如下: Target Communications Error:PC to Target Cable disconneted 我是一个新手,自学嵌入式,放弃原来的java开发,学了4个月的C和linux, 第一次用Realarm2410开发板, 系统windowsxpsp2克隆版 ...…

查看全部问答>

TVS二极管特性及其在电路设计中的应用

TVS二极管特性及其在电路设计中的应用电路保护器件。需要TVS相关型号的资料可以找我,加我Q:281426466。…

查看全部问答>

非常不错的亚稳态分析

1,简介这篇文章是我对电子设计中,亚稳态问题的一种分析和总结。文章通过对数字电路中器件的工作机制的介绍,引出亚稳态问题的发生机制。并通过对亚稳态问题发生机制的探讨,用以得到一种能够清楚地,有的放矢地解决亚稳态问题的能力。而这种能力 ...…

查看全部问答>

[转载]FPGA经验总结

看到这篇文章写得比较好,就转载过来了。   时序是设计出来的  我的boss有在华为及峻龙工作的背景,自然就给我们讲了一些华为及altera做逻辑的一些东西,而我们的项目规范,也基本上是按华为的那一套去做。在工作这几个月中,给我感触最深的是 ...…

查看全部问答>

OTL功放电路

  首先,我是 学生党。   以下是我在实训中设计的一个  OTL音频功放电路 请问一下,为什么我按照下面的电路图接好实验板后,要么就是没有输出信号,要么就是得到一些奇怪的信号(见第二张图)?   思考了很久,试了多次 ...…

查看全部问答>

程序移植

本人正在学习UCOS II下的LM3S6911程序移植,哪位大虾能提供LM3S6911的UCOS的移植说明,谢谢!…

查看全部问答>

【招聘】新加坡电子领域人才热招!

经过几年在国内工作的经验积累,有没有想过要到国外最先进的市场一试身手?各位工程师小伙伴,新加坡可以为你提供诸多充满诱惑的新机会!另外,新加坡作为全球首选的宜居之地,更可以为你实现工作生活的长期合理规划。 目前,几大世界级电子领军 ...…

查看全部问答>