🙌秋名山码民的主页
😂一个打过一年半的oier,写过一年多的Java,现在致力于学习iot应用的普通本科生
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
🙏作者水平有限,如发现错误,还请私信或者评论区留言!
目录
- 前言
- 看门狗
- 瑞萨R2E1
- 具体实现
- 最后
前言
🚀🚀开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯和 瑞萨MCU 联合发起的「 致敬未来的攻城狮计划 」的第 2 篇,点击查看活动计划详情
👍首先作为一个穷学生来说,很感谢有这次的机会能带我领略除C51和STM32板子以外开发板的机会,让我在空闲的时间内不仅能吸取很多知识,更能听取李老师作为企业级架构师的手把手敲代码的教学。
看门狗
看门狗的含义:当一切正常时,看门狗不会有什么反应,但是出现异常情况时,看门狗就会叫,并把异常情况阻挡在门外。
一般来说,看门狗我们也叫他看门狗定时器,从本质上面来看,其实它就是一个计数器,在使用的时候,我们需要给它一个数值,随后看门狗的计数器根据计数方向开始累计,在看门狗的计数器达到预设的数值之前,我们可以进行重置看门狗计数器的操作,简称“喂狗”。但当我们没有在计数器发生溢出之前进行及时喂狗的话,看门狗就会产生复位请求或者不可屏蔽中断请求(NMI-Non Maskable Interrupt)。
瑞萨R2E1
瑞萨R2E1的看门狗模块包括2个32位计数器, CNT 和 RST。CNT 计数器用于记录内部时钟计数, RST 计数器用于记录看门狗超时时间。当CNT 计数器的计数值达到 RST 计数器的值时,看门狗硬件将自动产生复位信号,重置系统。这个复位可以参考:单片机——复位操作详述
瑞萨R2E1看门狗模块的主要特点如下:
精度高:R2E1 的看门狗模块精度高,超时时间可设置为 0.16 秒到 8192 秒,同时还支持极精准的微秒级超时时间。
配置灵活:R2E1 看门狗模块具有多种配置模式,支持溢出、时间窗口等模式选择,并且在不同模式下还可设置不同的超时时间。
系统保护:看门狗模块可以保护系统在异常情况下的稳定运行,当系统出现死循环、死机等情况时,看门狗硬件可以及时地产生复位信号,重启系统。
低功耗:R2E1 看门狗模块具有低功耗特性,可以有效地提高系统电量使用效率。
值得注意的是,看门狗模块虽然可以保护系统运行,防止死机现象,但也可能带来一定的安全风险。如果看门狗定时器设置过短,容易误判系统出现问题,直接重启系统。因此,在设计系统时,需要认真选取看门狗超时时间,并采用恰当的检测机制,确保其能够正确地监控系统状态,而不会对系统的正常运行产生负面影响。
具体实现
硬件方面,看门狗模块一般由一个计数器和一个输出/复位电路组成,计数器每隔一定时间加1,如果系统正常运行,软件会在计数器加1的过程中定时清除计数器的值,这样可以保证计数器一直处于计数中,当系统出现故障导致软件不能正常清除计数器时,当计数器的计数值达到预先设定的阈值时,输出/复位电路会将系统复位,重启系统,从而达到保护系统的效果。
软件方面,看门狗模块需要由程序员编写相应的代码实现,具体过程如下:
- 初始化看门狗模块,包括设置看门狗定时器的超时时间和模式等参数。
- 在主程序中定时清除看门狗定时器计数器的值,以免定时器超时导致系统复位。
- 若代码进入死循环等非正常状态,导致主程序无法正常执行,程序无法清除看门狗计数器的值,看门狗定时器会在特定时间后超时,产生复位信号,重启系统。
- 在软件中加入容错机制,保证程序正常运行,如加入异常处理代码,避免程序出错导致系统复位。
代码实现
#include "r2e1.h"
WDT.WTCNT = WDT_CNT_VALUE; //设置看门狗计数值
WDT.WTCSR.BIT.OVFINT = 0; //禁止溢出中断
WDT.WTCSR.BIT.WTIT = 0; //禁止计数器超时中断
WDT.WTCSR.BIT.WOVWE = 0; //禁止写入看门狗计数器
WDT.WTCSR.BIT.WTIS = 2; //设置看门狗计数器时钟源
WDT.WTCSR.BIT.CNTCLR = 1; //定时清除计数器的值
#pragma interrupt INTWDTI(vect=VECT_WDTI)
void INTWDTI(void)
{
WDT.WTCSR.BIT.CNTCLR = 1; //定时清除计数器的值
}
WDT.WTCSR.BIT.WDTE = 0; //关闭看门狗模块
当看门狗定时器达到预设的超时时间时,会产生看门狗中断,并自动复位系统。同时也可以通过设置看门狗模块的 RSTEN 位实现看门狗产生复位信号直接重启系统。
最后
如果本文对你有所帮助,还请三连支持一下博主!