打印
[蓝牙]

CC2541蓝牙看门狗模式

[复制链接]
341|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2020-11-3 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看门狗是在软件跑飞的情况下CPU自恢复的一个方式,看门狗分为硬狗和软狗,硬狗就是由专门的看门狗硬件电路实现看门狗功能,看门狗芯片也比较多,比如DS1232,除了看门狗功能外还有电源电压监测功能。软狗就是由软件实现的看门狗功能,现在很多CPU都自带了软狗,很难说硬狗好还是软狗好,如果软狗够用,尽量使用软狗简化设计,看门狗说白了就是一个定时器!,当软件在选定的时间间隔内不能置位看门狗定时器(WDT),WDT就复位系统。看门狗可用于电噪声,电源故障或静电放电等恶劣工作环境或高可靠性要求的环境。如果系统不需要应用到看门狗,则WDT可配置成间隔定时器,当时间间隔到达产生中断。 WDT的特性如下:
4个可选择的时间间隔
看门狗模式
定时器模式
定时器模式下产生中断请求
CC2541的看门狗定时器(WDT)可以配置成看门狗模式或者普通的间隔定时器,WDT包括一个15位定时/计数器,它的频率由32.768KHz的晶振决定,用户不能查看计数器的值。
看门狗模式

示例程序:WDT为看门狗模式,时间间隔为1s,定时喂狗,如果没有喂狗,则系统不断复位,LED灯每隔1s亮灭一次,无需第87行延时程序,因为看门狗的时间间隔设定为1s,LED刚好亮1s。

复制代码
1 /******************************************************************************
2 *文 件 名:WDT.c
3 *作    者:陈照
4 *时    间:2015-06-01
5 *版    本:1.0
6 *描    述:看门狗程序
7 ******************************************************************************/
8 #include
9
10 #define LED1 P1_0
11
12 /******************************************************************************
13 *函 数 名:Delay1ms
14 *功    能:延时1ms
15 *入口参数:uiDelay,延时参数,值越大,延时越长
16 *出口参数:无
17 ******************************************************************************/
18 void Delay1ms(unsigned int uiDelay)
19 {
20   unsigned int i,j;
21   for(i = 0; i < uiDelay; i++)
22   {
23     for(j = 0;j < 1322; j++);
24   }
25 }
26
27 /****************************************************************
28 *函 数 名:InitClock
29 *功    能:系统时钟初始化
30 *入口参数:无
31 *出口参数:无
32 *****************************************************************/
33 void InitClock(void)
34 {
35   CLKCONCMD &= ~(1 << 6);       //选择32MHz晶振
36   while(CLKCONSTA & (1 << 6));  //等待时钟稳定
37   CLKCONCMD &= ~0x47;           //系统时钟和定时器时钟都是32M
38 }
39
40 /******************************************************************************
41 *函 数 名:InitLED
42 *功    能:LED灯初始化
43 *入口参数:无
44 *出口参数:无
45 ******************************************************************************/
46 void InitLED(void)
47 {
48   P1SEL &= ~0x01;      //P1.0设置为通用I/O口
49   P1DIR |=  0x01;      //P1.0设置为输出
50 }
51
52 /******************************************************************************
53 *函 数 名:Init_Watchdog
54 *功    能:看门狗初始化
55 *入口参数:无
56 *出口参数:无
57 ******************************************************************************/
58 void Init_Watchdog(void)
59 {
60   WDCTL = 0x00;  //打开IDLE 才能设置看门狗
61   WDCTL |= 0x08; //定时器间隔选择,间隔一秒,设定为看门狗模式
62 }
63
64 /******************************************************************************
65 *函 数 名:FeetDog
66 *功    能:喂狗,计数器清0
67 *入口参数:无
68 *出口参数:无
69 ******************************************************************************/
70 void FeetDog(void)
71 {
72   WDCTL = 0xa0;   //清除定时器。当0xA 跟随0x5 写到这些位,定时器被清除
73   WDCTL = 0x50;
74   LED1 = 1;      //系统不复位LED1 灯长亮
75 }
76
77 /******************************************************************************
78 *程序入口函数
79 ******************************************************************************/
80 int main(void)
81 {
82   InitClock();               //时钟初始化,32MHz
83   InitLED();                 //LED初始化
84   LED1 = 0;                  //熄灭LED1
85   Delay1ms(1000);
86   LED1 = 1;                  //点亮LED1
87   //Delay1ms(1000);
88   Init_Watchdog();           //看门狗初始化
89   
90   while(1)
91   {
92      FeetDog();              //喂狗程序
93                               //注释掉次子函数,系统不断复位,LED1闪烁
94   }
95 }

使用特权

评论回复

相关帖子

沙发
gwsan| | 2020-12-1 09:14 | 只看该作者
这是用的芯片自带的看门狗吧

使用特权

评论回复
板凳
kxsi| | 2020-12-1 09:14 | 只看该作者
喂狗也是很有讲究的

使用特权

评论回复
地板
nawu| | 2020-12-1 09:15 | 只看该作者
可以在定时器中喂狗吗

使用特权

评论回复
5
qcliu| | 2020-12-1 09:15 | 只看该作者
喂狗也不一定保证程序没有死掉 比如他在死循环啥的

使用特权

评论回复
6
tfqi| | 2020-12-1 09:16 | 只看该作者
代码非常详细 感谢楼主分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

980

主题

4028

帖子

10

粉丝