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_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.mfbz.cn/a/776462.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

芯片的PPA-笔记

写在前面&#xff1a;这个仅记录自己对芯片PPA的一些思考&#xff0c;不一定正确&#xff0c;还请各位网友思辨的看待&#xff0c;欢迎大家谈谈自己的想法。 1 此次笔记的起因 记录的原因&#xff1a;自己在整理这段时间的功耗总结&#xff0c;又看到工艺对功耗的影响&#x…

12.SQL注入-盲注基于时间(base on time)

SQL注入-盲注基于时间(base on time) boolian的盲注类型还有返回信息的状态&#xff0c;但是基于时间的盲注就什么都没有返回信息。 输入payload语句进行睡5秒中&#xff0c;通过开发这工具查看时间&#xff0c;如图所示&#xff0c;会在5秒钟后在执行&#xff0c;因此存在基于…

面试篇-系统设计题总结

文章目录 1、设计一个抢红包系统1.1 高可用的解决方案&#xff1a;1.2 抢红包系统的设计1.3 其他 2、秒杀系统设计 这里记录一些有趣的系统设计类的题目&#xff0c;一般大家比较喜欢出的设计类面试题目会和高可用系统相关比如秒杀和抢红包等。欢迎大家在评论中评论自己遇到的题…

磁钢生产领域上下料解决方案

随着智能制造技术的不断革新&#xff0c;磁钢生产领域正逐步引入自动化生产线。然而&#xff0c;传统的人工上下料方式存在诸多问题&#xff0c;难以满足现代生产需求。富唯智能提出了一款复合机器人磁钢上下料解决方案&#xff0c;通过先进的自动化技术&#xff0c;提高生产效…

填报高考志愿,怎样正确地选择大学专业?

大学专业的选择&#xff0c;会关系到未来几年甚至一辈子的发展方向。这也是为什么很多人结束高考之后就开始愁眉苦脸&#xff0c;因为他们不知道应该如何选择大学专业&#xff0c;生怕一个错误的决定会影响自己一生。 毋庸置疑&#xff0c;在面对这种选择的时候&#xff0c;我…

Keycloak SSO 如何验证已添加的 SPN 是否生效

使用 Kerberos Ticket 验证&#xff1a; 在客户端计算机上&#xff0c;运行以下命令以获取 Kerberos Ticket&#xff1a; klist检查是否存在与 HTTP/yourdomain.com 相关的票证。如果存在&#xff0c;说明 SPN 已生效。 测试应用程序&#xff1a; 使用具有 HTTP/yourdomain.com…

windows USB 设备驱动开发-控制传输的数据包

每次在主机控制器和 USB 设备之间移动数据时&#xff0c;都会发生传输。 通常&#xff0c;USB 传输可大致分为控制传输和数据传输。 所有 USB 设备都必须支持控制传输&#xff0c;并且可以支持用于数据传输的端点。 每种类型的传输都与设备缓冲区USB 端点 的类型相关联。 控制传…

Linux 查看磁盘是不是 ssd 的方法

lsblk 命令检查 $ lsblk -d -o name,rota如果 ROTA 值为 1&#xff0c;则磁盘类型为 HDD&#xff0c;如果 ROTA 值为 0&#xff0c;则磁盘类型为 SSD。可以在上面的屏幕截图中看到 sda 的 ROTA 值是 1&#xff0c;表示它是 HDD。 2. 检查磁盘是否旋转 $ cat /sys/block/sda/q…

北京十大拆迁律师事务所排名

历史时刻在重演&#xff0c;土地征地拆迁作为城市发展中不可或缺的环节备受地方政府重视。然而&#xff0c;在土地征收过程中&#xff0c;往往因为拆迁补偿引发各种纠纷案件&#xff0c;给拆迁方和被拆迁方带来重大损失&#xff0c;侵害双方利益&#xff0c;尤其是被征收人。因…

CentOS修复OpenSSH漏洞升级到openssh 9.7 RPM更新包

在做政府和学校单位网站时&#xff0c;经常需要服务器扫描检测&#xff0c;经常被OpenSSH Server远程代码执行漏洞&#xff08;CVE-2024-6387&#xff09;安全风险通告&#xff0c;出了报告需要升级OpenSSH。 使用yum update openssh是无法更新到最新的&#xff0c;因为系统里的…

YOLOX算法实现血细胞检测

原文:YOLOX算法实现血细胞检测 - 知乎 (zhihu.com) 目标检测一直是计算机视觉中比较热门的研究领域。本文将使用一个非常酷且有用的数据集来实现YOLOX算法,这些数据集具有潜在的真实应用场景。 问题陈述 数据来源于医疗相关数据集,目的是解决血细胞检测问题。任务是通过显微…

谷粒商城学习-09-配置Docker阿里云镜像加速及各种docker问题记录

文章目录 一&#xff0c;配置Docker阿里云镜像加速二&#xff0c;Docker安装过程中的几个问题1&#xff0c;安装报错&#xff1a;Could not resolve host: mirrorlist.centos.org; Unknown error1.1 检测虚拟机网络1.2 重设yum源 2&#xff0c;报错&#xff1a;Could not fetch…

给我的 IM 系统加上监控两件套:【Prometheus + Grafana】

监控是一个系统必不可少的组成部分&#xff0c;实时&#xff0c;准确的监控&#xff0c;将会大大有助于我们排查问题。而当今微服务系统的话有一个监控组合很火那就是 Prometheus Grafana&#xff0c;嘿你别说 这俩兄弟配合的相当完美&#xff0c;Prometheus负责数据采集&…

MyBatis入门程序详解

目录 一、MyBatis概述 二、编写MyBatis入门程序 三、配置SQL提示 四、传统jdbc的劣势 一、MyBatis概述 MyBatis是一个基于Java的持久层框架&#xff0c;它内部封装了JDBC操作&#xff0c;使得开发人员可以更专注于SQL语句本身而非繁琐的JDBC操作细节。在MyBatis中&#xff0…

LLM - 词向量 Word2vec

1. 词向量是一个词的低维表示&#xff0c;词向量可以反应语言的一些规律&#xff0c;词意相近的词向量之间近乎于平行。 2. 词向量的实现&#xff1a; &#xff08;1&#xff09;首先使用滑动窗口来构造数据&#xff0c;一个滑动窗口是指在一段文本中连续出现的几个单词&#x…

逻辑这回事(八)---- 时钟与复位

时钟设计总结 时钟和复位是FPGA设计的基础&#xff0c;本章总结了一些逻辑时钟复位设计、使用中出现的问题&#xff0c;给出了设计要点&#xff0c;避免后续问题重犯。时钟和复位&#xff0c;本文都先从板级谈起&#xff0c;再到FPGA芯片级&#xff0c;最后到模块级别。仅在此…

Java需要英语基础吗?

Java编程语言本身并不要求必须有很强的英语基础&#xff0c;因为Java的语法和逻辑是独立于任何特定语言的。我收集归类了一份嵌入式学习包&#xff0c;对于新手而言简直不要太棒&#xff0c;里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学&am…

Nginx的安装与配置 —— Linux系统

一、Nginx 简介 1.1 什么是 Nginx Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;在BSD-like 协议下发行。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务…

部署AI平台-Ollama

介绍 llama&#xff1a;LLaMA(Large Language Model Meta AI)是由 Meta(原Facebook公司)发布的一系列大型语言模型。这些模型旨在处理和生成自然语言文本&#xff0c;能够执行多种任务&#xff0c;如文本摘要、翻译、问答、文本生成等。LLaMA 模型因其高效的性能和较小的模型尺…

网络安全设备——蜜罐

网络安全设备蜜罐&#xff08;Honeypot&#xff09;是一种主动防御技术&#xff0c;它通过模拟真实网络环境中的易受攻击的目标&#xff0c;以吸引和监测攻击者的活动。具体来说&#xff0c;蜜罐是一种虚拟或实体的计算机系统&#xff0c;它模拟了一个真实的网络系统或应用程序…