【瑞萨RA_FSP】WDT——看门狗定时器

2023-10-22 15:30

本文主要是介绍【瑞萨RA_FSP】WDT——看门狗定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、WDT简介
    • 1. WDT特性
    • 2. WDT模块功能
  • 二、WDT功能框图剖析
    • 1. WDT 时钟源
      • (1) 计数器时钟
      • (2) 计算看门狗超时时间
      • (3) 窗口值
    • 2. WDT 模块核心电路
      • (1) WDT控制电路
      • (2) 14位递减计数器
      • (3) WDT 输出及中断请求
  • 三、看门狗启动模式详细介绍
    • 1. 自启动模式
    • 2. 寄存器启动模式
  • 四、 WDT实验
    • 1. 硬件设计
    • 2. 文件结构
    • 3. FSP配置
    • 4. NMI 和 复位
    • 5. WDT初始化函数
    • 6. 喂狗函数
    • 7. 主函数


一、WDT简介

一般来说,看门狗也叫看门狗定时器,从本质上面来看,其实它就是一个计数器,在使用的时候,需要给它一个数值, 随后看门狗的计数器根据计数方向开始累计,在看门狗的计数器达到预设的数值之前,可以进行重置看门狗计数器的操作,简称“喂狗”。 但当没有在计数器发生溢出之前进行及时喂狗的话,看门狗就会产生复位请求或者不可屏蔽中断请求(NMI-Non Maskable Interrupt)。

1. WDT特性

WDT 特性:
使用外设时钟 (PCLKB)

使用14位下行计数器进行计数

可以设置安全属性TrustZone

2. WDT模块功能

WDT 模块功能:
当WDT在允许的刷新窗口之外下溢或刷新时,可以产生以下两种事件之一:
重置设备

NMI 的生成

WDT 有两种受支持的的模式,分别为:
在自启动模式下,WDT 在复位时开始计数

在寄存器模式下,WDT 可以从应用程序中启动

二、WDT功能框图剖析

在这里插入图片描述

1. WDT 时钟源

(1) 计数器时钟

看门狗时钟来自外部时钟电路 PCLKB , PCLKB 最大的时钟频率是 50MHz , 可以使用 RA 配置编辑器的时钟选项卡或在运行时使用 CGC 接口设置 PCLKB 频率。设置 PCLKB 频率。 PCLKB 以 50MHz 运行时的最大超时周期约为2.6秒,下面进行看门狗超时时间的计算。

(2) 计算看门狗超时时间

首先,假设 PLCKB 为 50MHz

时钟分频比等于 PCLKB / 8192

将循环周期设为 16384 cycles

那么,可以得到看门狗的时钟频率 = 50 MHz / 8192 = 6.103 kHz

周期时间等于 1 / 6.103 kHz = 163.85 us

最终,最大超时时间等于 163.85 us * 16384 cycles = 2.68 秒

Tips: cycles :配置的循环周期次数,此数值越大,超时时间越长。

(3) 窗口值

在这里插入图片描述
可以设置在哪个区间进行喂狗,但是只能在窗口期内进行喂狗,如果超出总周期还没有进行喂狗操作, 或是在非允许刷新周期进行刷新,单片机都会自动复位或者是处理NMI中断。

2. WDT 模块核心电路

(1) WDT控制电路

WDT的控制寄存器位WDTCR,主要用于在寄存器启动模式下设置分频比、刷新窗口的开始以及结束位置以及向下计数器下溢的超时时间。 在自启动模式下,WDTCR寄存器中的设置将被禁用,而选项功能寄存器0(OFS0)中的设置会被启用,WDTCR寄存器的设置也可以在OFS0寄存器中进行。

(2) 14位递减计数器

看门狗的计数器是一个递减计数器,共有14位,其值存在于控制寄存器WDTCR中的TOPS[1:0]位。 从1024、4096、8192和16384个周期开始,将CKS[3:0]位中指定的分频时钟取为一个周期。 在程序中,当此递减计数器向下溢出之前还没有进行喂狗操作,则看门狗产生复位信号或不可屏蔽中断信号。

(3) WDT 输出及中断请求

看门狗计数溢出时单片机会有两种处理方式, 第一种处理方式是直接复位,第二种处理方式是机器停止运行然后执行一段不可屏蔽的中断服务函数。

直接复位的方式通常运用在当程序运行出错的时候或者程序跑飞的时候,直接将其复位使其重新开始。

执行中断服务函数的方式通常运用在单片机运行出错的时候, 如果需要保存一些重要的数据,或者需要改变某些模块状态来避免损失,此时增加一段中断代码是非常有用的。

① 输出到时钟控制电路
当复位中断选择位(WDTRCR.RSTIRQS)在寄存器启动模式下或WDT复位时设置为1时, 或当WDT复位选项功能选择寄存器0(OFS0)中的中断请求选择位(OFS0.WDTRSTIRQS)在自启动模式时设置为1时, 当看门狗向下计数器下溢或者发生刷新错误时,输出1个周期计数的复位信号到时钟控制电路。

② 事件信号输出
当复位中断选择位(WDTRCR.RSTIRQS)在寄存器启动模式下或WDT复位时设置为0时, 或当WDT复位选项功能选择寄存器0(OFS0)中的中断请求选择位(OFS0.WDTRSTIRQS)在自启动模式时设置为0时, 当看门狗向下计数器下溢或者发生刷新错误时,产生中断(WDT_NMIUNDF)信号,此信号产生的中断用于不可屏蔽中断,也就是事件输出信号。

三、看门狗启动模式详细介绍

在这里插入图片描述

1. 自启动模式

使用自启动模式时,堆栈选项卡上的配置将被忽略。使用 BSP 选项卡上的 OFS 设置配置监视器。 在自启动模式下,根据Flash中 Option Function Select register 0 (OFS0)的设置,在复位状态释放后自动开始计数。

当选项功能中WDT启动方式选择位(OFS0. wdtstrt)为0时,选择自动启动方式,关闭WDT控制寄存器(WDTCR)、WDT复位控制寄存器(WDTRCR)、WDT计数停止控制寄存器(WDTCSTPR),打开OFS0寄存器的设置。

在复位状态下,WDT寄存器中的选项功能选择寄存器0 (OFS0)的设置值如下:

  • 时钟分频比

  • 窗口起始和结束位置

  • 超时时间

  • 复位输出或中断请求

  • 在睡眠模式时计数器停止控制

2. 寄存器启动模式

当WDT的启动模式被选择时 OFS0.WDTSTRT 位被置1, 选择寄存器启动模式和WDT控制寄存器(WDTCR),WDT重置控制寄存器(WDTRCR), WDT计数停止控制寄存器(WDT)释放重置状态后,在WDTCSTPR寄存器中将以下内容设置为休眠模式:

  • 时钟分频比

  • 窗口的开始和结束位置

  • 在WDTCR寄存器中的超时时间

  • 在WDTRCR寄存器中重置输出或中断请求输出

  • 在WDTCSTPR寄存器转换到睡眠模式期间的计数器停止控制

此后,只要计数器在允许刷新的时间段内刷新,计数器的值就会在每次刷新时重置,并继续向下计数。 只要计数继续,WDT就不输出复位信号。 但是,如果由于程序失控而导致下计数器无法刷新,或者由于计数器在刷新允许的时间之外刷新而发生刷新错误, WDT将输出复位信号或不可屏蔽的中断请求(WDT_NMIUNDF)。 可以在WDT复位中断请求选择位(WDTRCR.RSTIRQS)中选择复位输出或中断请求输出。

四、 WDT实验

1. 硬件设计

  • WDT一个

  • LED两个

  • 按键一个

程序设计思路: WDT 属于单片机内部资源,不需要外部电路,我们需要两个LED和一个按键来测试看门狗功能。

2. 文件结构

WDT
├─ ......
└─ src├─ led│  ├─ bsp_led.c│  └─ bsp_led.h├─ wdt│  ├─ bsp_wdt.c│  └─ bsp_wdt.h└─ hal_entry.c

3. FSP配置

首先打开 “WDT” 项目的 FSP 配置界面,接下来要在这个界面里配置芯片的引脚及其相应的功能。

双击 configuration.xml 打开配置界面: 然后点开依次点击 Stacks -> New Stack -> Search… 里输入 WDT 选着 Watchdog。
在这里插入图片描述
随后点击 “Properties” 对刚刚加入的WDT模块进行配置。
在这里插入图片描述
配置完成之后可以按下快捷键“Ctrl + S”保存, 最后点右上角的 “Generate Project Content” 按钮,让软件自动生成配置代码即可。

4. NMI 和 复位

NMI就是会执行一个中断服务函数,这个中断函数是不能够被打断的,拥有最高的中断优先级。 一般是用在一些重要的数据上面,如果直接复位,这些数据将不被保存,这个时候可以写一个服务程序去保存重要数据, 这也是看门狗最重要的功能。 可以在NMI中断程序中通过软件复位或跳转到程序开头进行程序的重新运行。

复位就是在不断电的情况下,把当前 MCU 及运行数据清零后的启动。在本节中使用NMI,也就是不可屏蔽中断来进行试验。

5. WDT初始化函数

/*初始化看门狗并启动计数器*/
void WDT_Init(void)
{//如果使用J-Link调试器进行调试的话需要加上这一句话R_DEBUG->DBGSTOPCR_b.DBGSTOP_WDT = 0;//初始化看门狗(WDT)模块R_WDT_Open(&g_wdt0_ctrl, &g_wdt0_cfg);/*刷新看门狗计数器,在这里的作用是初次启动寄存模式下的看门狗计数器*要注意,除非是在刷新允许的范围内,否则自启动模式下不应该使用该函数*/R_WDT_Refresh(&g_wdt0_ctrl);
}

6. 喂狗函数

/* 当看门狗NMI发生时中断回调 */
void wdt_callback (wdt_callback_args_t * p_args)
{/*防止编译器产生关于函数中没有使用形参的警告*/(void) p_args;/*蓝色LED亮,请注意,在这里LED灯函数为代指,*实际应用中,这里应该放最重要的函数,比如保存重要数据等*/LED2_ON;R_BSP_SoftwareDelay(3, BSP_DELAY_UNITS_SECONDS);/* 通过软件复位MCU*/__NVIC_SystemReset();
}

7. 主函数

/*按键中断回调函数*/
void key1_callback(external_irq_callback_args_t *p_args)
{(void) p_args;/*按键按下触发中断,进行喂狗操作*/WDT_Feed();
}void hal_entry(void)
{/*红色LED亮3秒*/LED1_ON;R_BSP_SoftwareDelay(3,BSP_DELAY_UNITS_SECONDS);/*按键中断初始化*/g_external_irq_on_icu.open(&key1_ctrl, &key1_cfg);g_external_irq_on_icu.enable(&key1_ctrl);/*初始化看门狗并开启计数器*/WDT_Init();while(1){/*红色LED灯灭,在这里只是代指,*实际上这部分应该写需要被WDT监控的程序*/LED1_OFF;}#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();
#endif
}

这篇关于【瑞萨RA_FSP】WDT——看门狗定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/262292

相关文章

【Qt】定时器事件

定时器事件 在之前学习QTimer中实现了定时器的功能,而在QTimer背后是QTimerEvent定时器事件进行支撑的。在QObject中提供了一个timeEvent这个函数。 startTimer启动定时器killTimer关闭定时器 Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定 时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

【JavaScript】在循环体中了解定时器工作机制

for (var i = 0; i < 5; i++) {setTimeout(function() {console.log(i);}, 1000);}console.log(i);   如果我们约定,用箭头表示其前后的两次输出之间有 1 秒的时间间隔,而逗号表示其前后的两次输出之间的时间间隔可以忽略,代码实际运行的结果该如何描述?会有下面两种答案: A. :5 -> 5 -> 5 ->

WebAPI (一)DOM树、DOM对象,操作元素样式(style className,classList)。表单元素属性。自定义属性。间歇函数定时器

文章目录 Web API基本认知一、 变量声明二、 DOM1. DOM 树2. DOM对象3. 获取DOM对象(1)、选择匹配的第一个元素(2)、选择匹配多个元素 三、 操作元素1. 操作元素内容2. 操作元素属性(1)、常用属性(href之类的)(2)、通过style属性操作CSS(3)、通过类名(className)操作CSS(4)、通过classList操作控制CSS(5)、操作表单

深入理解C语言中的POSIX定时器

引言 在Unix和类Unix系统中,定时器是一种常见的机制,用于在特定时间间隔后执行某些操作。POSIX定时器因其灵活性和功能丰富而被广泛采用。本文将深入探讨POSIX定时器的工作原理、内部机制、使用方法及其在实际开发中的应用。 POSIX定时器基础 POSIX定时器是一种高级定时器接口,它允许用户创建定时器并指定定时器到期时的动作。POSIX定时器支持以下特性: 信号通知:定时器到

Android AnalogClock TextClock DigitalClock Chronometer 时钟 定时器

AnalogClock 相关属性:  android:dial="@drawable/img1" //表盘android:hand_hour="@drawable/alert_dialog_icon" //时针android:hand_minute="@drawable/alert_dialog_icon" //分针 TextClock 相关属性: android:f

STM32G474窗口看门狗中断

STM32G474窗口看门狗中断用来演示最后一次喂狗。注意:即使窗口看门狗被禁止,窗口看门狗的"递减计数器"也会继续递减计数。 1、窗口看门狗复位的条件 1)、将"控制寄存器WWDG_CR"中的WDGA=1,激活"窗口看门狗计数器等于0x3F"时,则产生复位 2)、装载"窗口看门狗的计数器值"大于"窗口看门狗window寄存器的值",则产生复位。 3)、窗口看门狗的"提前唤醒中断EWI=1",且

Qt 设置定时器,label自动隐藏

使用这一句话,label将会在3秒后自动隐藏。 QTimer::singleShot(3000,ui->lb_ok,SLOT(hide()));

STM32的窗口看门狗详解及案例(基于HAL库)

目录 一、引言 二、窗口看门狗的工作原理 1.基本概念 2.功能描述 3.窗口值和计数器初始值 三、STM32F429 HAL 库中窗口看门狗的配置步骤 1.开启时钟 2.初始化窗口看门狗  3.开启早期唤醒中断 4.喂狗操作  四、窗口看门狗的应用场景  1.防止软件死锁 2.检测外部干扰 3.提高系统可靠性 五、注意事项 1.时间窗口的设置 2.喂狗操作的