zigbee笔记:六、看门狗定时器(Watch Dog)

news2024/12/23 14:50:31

一、看门狗基础

1、看门狗功能:

        由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误等,程序运行可能会陷入死循环。程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统的陷入停滞状态。此时往往需要重启,使得程序回归正常的运行状态。看门狗就是为了预防程序运行混乱和陷入死循环的情况, 当发生情况时,能够重启统。

2、看门狗本质:

        看门狗本质是一个定时器。看门狗定时器正常工作时自动计数,程序正常运行时定期将其复位清零(称为“喂狗”),如果系统在某处卡死或跑飞,该定时器将溢出(未及时“喂狗”),看门狗定时器就为系统产生一个复位信号,使系统复位,然后重新恢复正常的工作状态。

二、cc2530 看门狗

        1、cc2530看门狗资源

        cc2530的看门狗定时器包括一个 15 位计数器,它的频率由 32kHz 时钟源提供。看门狗(WDT)可以配置为一个看门狗定时器或一个通用的定时器,但用户不能获得 15 位计数器的内容。具有四个特性:

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

        (1)看门狗模式:WDT运行在一个频率为32.768KHz(当使用32KHz XOSC)的看门狗定时器时钟上,当软件在选定时间间隔内不能清除WDT时,计数器达到选定定时器的间隔值后,看门狗定时器就为系统产生一个复位信号,系统复位。

        (2)定时器模式:WDT运行在一个频率为32.768KHz(当使用32KHz XOSC)的看门狗定时器时钟上,可以被配置为一个间隔定时器,有四个超时期限可以配置1.9ms,15.625ms,0.25s,1s。这样可以用于在选定的时间间隔产生中断。

        2、寄存器

        WDT可以配置为一个看门狗定时器或一个通用的定时器,运行模式由WDCTL寄存器控制。

        (1)WDCTL.MOED[1:0]该位用于启动WDT处于看门狗模式还是定时器模式。

        (2)WDCTL.INT[1:0]该位选择定时器间隔定义为32 kHz振荡器周期的规定数,有4个时间间隔供选择。

        (3)WDCTL.CLR[3:0]当运行在定时器模式,定时器可以通过写1到CLR[0](不管其他3位)被清除为0x0000(但是不停止);当运行在看门狗模式,写入 0xA 到 WDCTL.CLR[3:0],然后在一个看门狗周期写入 0x5 到同一个寄存器位,定时器计数就可以被清除(计数归零)。

        3、看门狗模式

        在系统复位之后,看门狗定时器就默认被禁用。要设置 WDT 在看门狗模式,必须设置 WDCTL.MODE[1:0]位为 10 。然后看门狗定时器的计数器从 0 开始递增。

        在看门狗模式下,计数器达到选定定时器的间隔值,看门狗定时器就为系统产生一个复位信号。如果在计数器达到选定 定时器的间隔值之前,执行了一个看门狗清除序列,计数器就复位到 0,重新计数。
        看门狗清除:在一个看门狗时钟周期内,写入 0xA 到 WDCTL.CLR[3:0],然后写入 0x5 到同一个寄存器位。如果这个序列没 有在看门狗周期结束之前执行完毕,看门狗定时器就为系统产生一个复位信号。

   使用代码如下所示:


#include <ioCC2530.h>
 
#define uint unsigned int
#define uchar unsigned char
 
//定义控制LED灯的端口
#define LED1 P1_0
#define LED2 P1_1    //定义LED2为P11口控制
 
 
//函数声明
void Delayms(uint xms);        //延时函数
void InitLed(void);        //初始化P1口
 
/****************************
//延时函数
*****************************/
void Delayms(uint xms)   //i=xms 即延时i毫秒
{
 uint i,j;
 for(i=xms;i>0;i--)
   for(j=587;j>0;j--);
} 
 

//初始化LED灯
void InitLed(void)
{
  P1DIR |= 0x03;    //P1_0、P1_1定义为输出
  P1INP |= 0X03;    //打开下拉 
  LED1 = 0;         //LED1灯熄灭
  LED2 = 0;        //LED2灯熄灭
}
 //初始化看门狗
void Init_Watchdog(void) 
{ 
  WDCTL = 0x00; //这是必须的,打开IDLE才能设置看门狗
  WDCTL |= 0x08; //00001000设置看门狗模式,选择时间间隔一秒
}

//喂狗函数,即看门狗清除
void FeetDog(void) 
{ 
//在一个看门狗时钟周期内,写入 0xA 到 WDCTL.CLR[3:0],然后写入 0x5 到同一个寄存器位。
  WDCTL = 0xa0; 
  WDCTL = 0x50; 
}
 

void main(void)
{
  InitLed();        //调用初始化函数
  Init_Watchdog();
  LED1=1;
  while(1)
  {         
    LED2=~LED2;           //仅指示作用。
    Delayms(300);
    LED1=0;
  
    //通过注释测试,观察LED1,系统在不停复位。
    FeetDog();//防止程序跑飞
  }
}

        注意:在看门狗模式下,一旦定时器使能,就不可以禁用定时器,因此,如果 WDT 位已经运行在看门狗模式下 ,再往 WDCTL.MODE[1:0]写入 00 或 10 就不起作用了。

        4、普通定时器模式

        当我们的程序不需要看门狗时,WDT可以被设置为一般的定时器使用,把 WDCTL.MODE[1:0]位设置为 11,WDT被设置为一般定时器模式,定时器间隔由 WDCTL.INT[1:0]位设置。定时器就开始后从 0开始计数,当计数器达到选定间隔值,定时器将产生一个中断请求(IRCON2.WDTIF/IEN2.WDTIE)。
        在定时器模式下,可以通过写入 1 到 WDCTL.CLR[0]来清除定时器内容。当定时器被清除,计数器的内容就置为 0。写入 00 或 01 到 WDCTL.MODE[1:0]来停止定时器,并清除它为 0。

        使用代码如下所示:通过看门狗定时器实现LED灯1s周期性闪烁

#include<iocc2530.h>
 
#define LED P1_1
 
void initLED()
{
  P1SEL &=~0X1B;
  P1DIR |=0x1B; 
  P1 &=~0X1B;
}
 
void initWDT()
{
  WDCTL =0X0C; //00001100   配置看门狗模式以及间隔时间
  IEN2 |=0X20;  //看门狗的中断控制为5   0010 0000
  EA=1;         //打开总中断
}
 
#pragma vector = WDT_VECTOR 	//WDT中断服务函数
__interrupt void WDT_more()
{
  WDTIF=0;            //清除标志位
  LED=~LED;
}
 
void main()
{
  initLED();
  initWDT();
  while(1)
  {}
}


        注意:在定时器操作期间,定时器间隔不能改变,且当定时器开始时必须设置。在定时器模式下,当达到定时器间隔时,不会产生复位。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1898873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java springboot校园管理系统源码

Java springboot校园管理系统源码-014 下载地址&#xff1a;https://download.csdn.net/download/xiaohua1992/89364089 技术栈 运行环境&#xff1a;jdk8 tomcat9 mysql5.7 windows10 服务端技术&#xff1a;Spring Boot Mybatis VUE 使用说明 1.使用Navicati或者其它工…

相关技术 检测离型纸

网盘 https://pan.baidu.com/s/1W-k4hl9uhjAG98hqJG11ug?pwdcrpn 离型无纺布.pdf 离型纸剥离机构.pdf 离型纸处理装置及贴胶设备.pdf 离型纸收集机构.pdf 离型纸涂布装置.pdf 防伪印刷离型纸的制造工艺.pdf

14.【C语言】初识操作符 上

1.分类 01算术操作符 - * / % 即四则运算和% 注意&#xff1a; /介绍 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() {float a 9 / 2;printf("%f\n", a);printf("%f\n", 9 / 2.0); } 结果不同 9/24……1 9/2.04.5&…

servlet职称评审系统-计算机毕业设计源码00122

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1系统开发流程 2.2.2 用户登录流程 2.2.3 系统操作流程 2.2.4 添加信息流程 2.2.5 修改信息流程 2.2.6 删除信息流程 2.3 系统功能…

智能光伏开发都能用到什么软件和工具?

随着全球对可再生能源的日益重视和光伏技术的快速发展&#xff0c;智能光伏开发已成为推动能源转型的重要力量。在光伏项目的全生命周期中&#xff0c;从设计、建设到运营管理&#xff0c;各种软件和工具的应用发挥着至关重要的作用。 一、光伏系统设计软件 1、PVsyst PVsyst…

【数据库了解与学习】

1.下载所需版本安装包 1.1将所需文件压缩包以及安装包放在你选择的任意一盘&#xff0c;新建一个没有文字和空格的文件夹 1.2双击打开安装包&#xff0c;选择Custom自定义模式然后点击右下方的Next 1.4三连点击1&#xff0c;再点击箭头出现3&#xff0c;选中3出现4&#xff0c;…

景区智慧公厕,剩余厕位显示,公厕环境监测。

在当今科技飞速发展的时代&#xff0c;景区的服务设施也在不断升级和创新。其中&#xff0c;景区智慧公厕的出现无疑为游客带来了极大的便利。特别是剩余厕位显示和公厕环境监测这两大功能&#xff0c;更是显著提升了景区公厕的管理水平和游客的使用体验。 剩余厕位显示功能是景…

C盘扩容/扩大C盘的12个有效操作方法

对于许多计算机用户来说&#xff0c;C盘空间可能会成为一个问题&#xff0c;尤其是那些将计算机广泛用于工作、游戏和多媒体目的的用户。如果您发现C驱动器上的空间不足&#xff0c;则需要对其进行扩展以提高系统的整体性能。在这篇文章中&#xff0c;我们将探讨C盘扩展的12种操…

Java接口和类

package chapter04;public class Java22_Object_接口 {public static void main(String[] args) {// TODO 面向对象 - 接口// 所谓的接口&#xff0c;可以简单理解为规则、规范// 基本语法&#xff1a;interface 接口名称 { 规则属性&#xff0c;规则的行为 }// 接口其实是抽象…

【SpringBoot3】结合 gRpc 通过 proto文件生成Java代码

一、什么是protobuf Protobuf&#xff08;Protocol Buffers&#xff09;是由Google开发的一种灵活、高效、自动化的结构化数据序列化方法&#xff0c;类似于XML、JSON等&#xff0c;但更小、更快、更简单。它主要用于网络通信和数据存储等场景&#xff0c;广泛应用于各种编程语…

Android - 模拟器

Android SDK 包括一个在您的计算机上运行的虚拟移动设备模拟器。 该模拟器可让您在不使用物理设备的情况下对 Android 应用程序进行原型设计、开发和测试。 在本章中&#xff0c;我们将探索真实安卓设备中存在的模拟器中的不同功能。 创建 AVD 如果您想模拟真实设备&#xff0c…

vue3使用echarts和Pixi.js打造一个令人惊叹的3D图在线展示

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Pixi.js 的动态图形渲染技术 应用场景介绍 Pixi.js 是一款功能强大的 2D 渲染引擎&#xff0c;可用于创建交互式图形、游戏和动画。它因其高性能、可扩展性和跨平台兼容性而受到开发者的欢迎。本代码示例…

博奥龙/2024年部分高分文献及引用试剂展示

01IF&#xff1a;50.5标题7-Dehydrocholesterol dictates ferroptosis sensitivityDOI10.1038/s41586-023-06983-9期刊Nature引用试剂BF03008HRP-山羊抗兔IgG(HL)02IF&#xff1a;14.7标题Aggresome formation promotes ASK1/JNK signaling activation and stemness maintenanc…

海南云亿商务咨询有限公司专业电商团队值得信赖

在当今数字化浪潮下&#xff0c;电商行业蓬勃发展&#xff0c;抖音作为短视频领域的佼佼者&#xff0c;更是为电商行业带来了全新的机遇。海南云亿商务咨询有限公司凭借对市场的敏锐洞察和丰富的经验积累&#xff0c;专注于抖音电商服务&#xff0c;致力于为广大企业和个人提供…

【24年一博研讨会总结】BJ0705

1.工艺边据PCB边缘 >5mm. 2.IPC-A-600G Pitch < 1.25mm H<0.025mm,小于0.4mm,取消丝印框&#xff0c;防止锡膏不匀虚焊&#xff1b; 3.表面镀金与镍厚度 金厚度 um镍厚度 um0.0192.7830.0213.3610.0453.6640.0314.378 4.多层板&#xff0c;层间距>20mil 可以认…

国内外AI大模型价格一览

海外AI大模型&#xff0c;以OpenAI、Google等大厂商为主。 国内AI大模型的价格 海外较国内还是一个量级的价格差&#xff0c;相信年底还会有一波降价&#xff0c;至到达到普惠的条件。

多特征线性回归

目录 一、多特征符号意义说明&#xff1a;二、多特征模型表示&#xff1a;三、Numpy向量表示、内积计算&#xff1a;1.向量表示&#xff1a;2.内积计算&#xff1a; 四、多元线性回归梯度下降算法&#xff1a; 一、多特征符号意义说明&#xff1a; x下标j&#xff1a;表示第j个…

c++ 构造,析构,拷贝,移动构造函数

文章目录 概述1.构造函数2. 拷贝构造函数3.移动构造函数4.析构函数 例子QTUE4/5 c 小结 概述 对于c来说&#xff0c;最基础的是类。对于一个类来说&#xff0c;主要由以下函数构成。如下&#xff1a; 构造函数拷贝构造函数移动构造函数析构函数 当然&#xff0c;还有一个操作…

API字符串

API&字符串 文章目录 API&字符串API&#xff08;Application Programming Interface&#xff09;&#xff1a;简单理解&#xff1a;已经学习过的APIAPI帮助文档 字符串String&#xff0c;StringBuilder&#xff0c;StringJonierString概述注意点创建String对象的两种方…

项目一 nfs 共享服务器 Haproxy 代理 Keepalive 高可用集群

深入理解程序的数据存储 配置NFS服务器 配置ansible环境