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

一、看门狗基础

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


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

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

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

相关文章

kafka系列之消费后不提交offset情况的分析总结

概述 每当我们调用Kafka的poll()方法或者使用KafkaListener(其实底层也是poll()方法)时&#xff0c;它都会返回之前被写入Kafka的记录&#xff0c;即我们组中的消费者还没有读过的记录。 这意味着我们有一种方法可以跟踪该组消费者读取过的记录。 如前所述&#xff0c;Kafka的一…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(十)-git(2)

下面是一些git的常用命令和基本操作&#xff0c;可以当做平常的笔记查询&#xff0c;用于学习&#xff01;&#xff01;&#xff01; 文章目录 前言 一、git 二、git常用命令 总结 前言 下面是一些git的常用命令和基本操作&#xff0c;可以当做平常的笔记查询&#xff0c;用于…

解决前后端同一个端口跨域问题

前端起了一个代理 如果url是api开头的自动代理访问8080端口&#xff08;解决前后端端口不一致要么是前端代理&#xff0c;要么是后端加过滤器&#xff09; proxy:{/api:{target:http://localhost:8080,changeOrigin : true,// 替换去掉路径上的api// rewrite:(path)>path.r…

配置基于不同端口的虚拟主机

更改配置文件&#xff0c;添加三个不同端口的虚拟主机 <directory /www> allowoverride none require all granted </directory><virtualhost 192.168.209.136:80> documentroot /www servername 192.168.209.136 </virtualhost><virtualhost 192.…

【python基础】—如何理解安装程序时要配置Widows和DOS操作系统中的path环境变量?

文章目录 前言一、环境变量是什么&#xff1f;二、为什么需要设置环境变量&#xff1f;三、配置anaconda的环境变量 前言 在安装一些程序的时候&#xff0c; 我们总是需要将安装路径配置到正在使用电脑的环境变量里。为什么要进行这一步呢&#xff1f;本文主要解释Widows和DOS…

【后端面试题】【中间件】【NoSQL】MongoDB查询优化2(优化排序、mongos优化)

优化排序 在MongoDB里面&#xff0c;如果能够利用索引来排序的话&#xff0c;直接按照索引顺序加载数据就可以了。如果不能利用索引来排序的话&#xff0c;就必须在加载了数据之后&#xff0c;再次进行排序&#xff0c;也就是进行内存排序。 可想而知&#xff0c;如果内存排序…

可视化大屏的强势在于预警和感知的科学依据可靠性强

**可视化大屏的强势&#xff1a;预警与感知的科学依据可靠性探究** 数据可视化已成为信息传递的重要手段。其中&#xff0c;可视化大屏作为一种直观、高效的展示方式&#xff0c;广泛应用于各个领域&#xff0c;如智慧城市、智慧交通、智慧医疗等。可视化大屏的强势不仅体现在…

mysql 9 新特新

mysql9新特性 新特性Audit Log NotesC API NotesCharacter Set SupportCompilation NotesComponent NotesConfiguration NotesData Dictionary NotesData Type NotesDeprecation and Removal NotesEvent Scheduler NotesJavaScript ProgramsOptimizer NotesPerformance Schema …

单机多网卡互通——问题跟踪+工具分析

一、背景 想搭建soft ROCE(RXE)与实体ROCE设备互联的测试环境&#xff0c;为了节省机器以及使用方便&#xff0c;预想在配备ROCE卡的主机上&#xff0c;用另一个网卡绑定soft ROCE&#xff0c;然后互通。 [ETH1 ROCE] <--------------------> [ETH2 RXE] 二、问题跟…

实验三 图像增强—灰度变换

一、实验目的&#xff1a; 1、了解图像增强的目的及意义&#xff0c;加深对图像增强的感性认识&#xff0c;巩固所学理论知识。 2、学会对图像直方图的分析。 3、掌握直接灰度变换的图像增强方法。 二、实验原理及知识点 术语‘空间域’指的是图像平面本身&#xff0c;在空…

昇思25天学习打卡营第17天|ChatGLM-6B聊天demo

一、简介&#xff1a; 本次实验&#xff0c;基于MindNLP和ChatGLM6B模型搭建一个小的聊天应用&#xff0c;ChatGLM6B 是基于 GLM-4 模型开发的开源对话机器人&#xff0c;拥有 62 亿个参数&#xff0c;能够进行自然流畅的语言交流。在对话中&#xff0c;ChatGLM6B 可以胜任文案…

js函数扩展内容---多参数,函数属性,字符串生成函数

1.多参数 在js中&#xff0c;Math.max()方法可以接受任意数量的参数&#xff0c; Math.max(1,2,3,4);//4 Math.max(1,2,3,4,5,6,7,8,9,10)//10 在max方法里面有一个rest参数&#xff0c;它接受了所有参数全部合成到了一个number数组里面&#xff0c; function rest(a,b,...a…

管理才是最根本的核心竞争力

相信大家对于华为提出的“管理是核心竞争力”“管理才是企业的核心竞争力”等言论并不陌生&#xff0c;而华为的确也一直践行这样的理念。比如&#xff0c;在华为发展历史上很艰难的2002年&#xff0c;华为仍然坚持重点抓管理。总裁任正非后来提到&#xff1a;“2002年华为快崩…

matplotlib下载安装

matplotlib下载安装过程同之前写的pygame很类似。 Pygame下载安装 python官网 1.搜索matplotlib 直接点进去 查看历史版本&#xff0c;因为新版本可能出现与python不匹配问题。 我选择3.6.3版本&#xff0c;因为我安装的python是3.8&#xff0c;可以匹配版本。同时window操…

价值499的从Emlog主题模板PandaPRO移植到wordpress的主题

Panda PRO 主题&#xff0c;一款精致wordpress博客主题&#xff0c;令人惊叹的昼夜双版设计&#xff0c;精心打磨的一处处细节&#xff0c;一切从心出发&#xff0c;从零开始&#xff0c;只为让您的站点拥有速度与优雅兼具的极致体验。 从Emlog主题模板PandaPRO移植到wordpres…

信创-系统架构师认证

随着国家对信息技术自主创新的战略重视程度不断提升&#xff0c;信创产业迎来前所未有的发展机遇。未来几年内&#xff0c;信创产业将呈现市场规模扩大、技术创新加速、产业链完善和国产化替代加速的趋势。信创人才培养对于推动产业发展具有重要意义。应加强高校教育、建立人才…

Infinitar链游新发展新机遇

区块链游戏市场在近年来经历了显著增长&#xff0c;吸引了大量的投资和关注。随着加密货币和NFT&#xff08;非同质化代币&#xff09;概念的普及&#xff0c;越来越多的投资者、游戏开发者和看到了区块链技术在游戏领域的应用潜力&#xff0c;纷纷涌入市场。区块链游戏的用户量…

CUDA编程基础

文章目录 1、GPU介绍2、CUDA程序进行编译3、CUDA线程模型3.1、一维网格一维线程块3.2、二维网格二维线程块3.3、三维网格三维线程块3.3、不同组合形式 4、nvcc编译流程5、CUDA程序基本架构6、错误检测函数6.1、运行时API错误代码6.2、检查核函数 7、CUDA记时7.1、记时代码7.2、…

知名品牌因商标痛失市场:114家直营店山寨店7000多家!

奶茶知名品牌“鹿角巷”当年红遍大江南北&#xff0c;是最早的新茶饮品牌&#xff0c;但是当年商标注册存在问题&#xff0c;被同行奶茶品牌抢占了先机&#xff0c;发声明“对大陆商标注册细则不详&#xff0c;在商标注册过程中让假店钻了法律空档”&#xff0c;最夸张的时候全…

python实践-实现TTS项目的应用

#coqui-ai TTS 项目地址# 版本&#xff1a; V0.22.0 博主使用的python版本&#xff1a;3.10.6 一、项目下载安装 下载&#xff1a; git或者直接下载都可 git clone https://github.com/coqui-ai/TTS.git 建议选择压缩包下载&#xff0c;选好对应版本。方便github会卡的小…