一文了解RH850F1KMS1系列MCU的看门狗
看门狗(Watchdog Timer, WDT),是基于单片机实现的微型计算机系统组件,主要用于防止因外界电磁场干扰引发的程序失控。其本质为定时器电路,包含喂狗输入端和复位输出端,通过周期性信号输入维持系统运行。另外,它也是 MCU(微控制器)里一个非常关键的安全机制,尤其在汽车、工业、医疗等对系统可靠性要求极高的场合中,是防止程序异常“卡死”的最后一道防线。对于瑞萨RH850F1KMS1而言,其
前言:最近使用了瑞萨F1KMS1系列调试的时候配置了一下看门狗驱动,发现这与经典款MCU STM32的配置区别还是比较大的,并且在网上相关的资料相对还是比较少的,即使有介绍的也不是特别全面,所以就在这里介绍一下看门狗的整个配置方法过程。文章中看门狗都简称WDG。
目录
2.2 Software trigger start mode
1,WDG概述
看门狗(Watchdog Timer, WDT),是基于单片机实现的微型计算机系统组件,主要用于防止因外界电磁场干扰引发的程序失控。其本质为定时器电路,包含喂狗输入端和复位输出端,通过周期性信号输入维持系统运行。
另外,它也是 MCU(微控制器)里一个非常关键的安全机制,尤其在汽车、工业、医疗等对系统可靠性要求极高的场合中,是防止程序异常“卡死”的最后一道防线。
对于瑞萨RH850F1KMS1而言,其有两个WDG,分别为WDTA0与WDTA1。前者WDTA0支持的是AWO(永远供电)域的时钟,后者WDTA1支持的是ISO域的时钟。两者都支持75%中断,也就是计时器达到所设置的时间的75%的时候就会产生一个中断以便于可以做对应的处理。



关于ISO域与AWO域
ISO 是 “Isolation” 的缩写,表示“隔离电源域”。
🔹 定义
ISO 域的电源在某些低功耗模式(如 DeepSleep / Standby)下会被关闭,
但与 AWO 域之间通过“隔离电路(Isolation Cell)”保持逻辑状态一致性。🔹 主要特点
当 MCU 进入低功耗模式时,ISO 域断电;
ISO 域与 AWO 域之间通过隔离电路(isolation cells)保持接口安全;
ISO 域恢复上电后,需要重新初始化寄存器、堆栈等内容;
通常包括:
CPU 内核;
SRAM;
大部分外设(如 ADC、UART、SPI、PWM 等)。
🔹 功能定位
ISO 域承担主要的“工作任务”,在正常运行模式下供电、运算;而进入待机、休眠时断电,以实现最大功耗降低。
AWO 是 “Always-On” 的缩写,表示“始终上电的电源域”。
🔹 定义
该电源域在 MCU 的任何功耗状态下始终保持供电,即使在 Deep Sleep 或 Standby 模式下也不会断电。
🔹 主要特点
永远上电(即使主域/ISO 域断电);
保留系统最关键的控制逻辑与唤醒功能;
通常包括:
RTC(实时时钟);
LVD(低电压检测);
WDT(独立看门狗);
唤醒控制器;
一部分电源管理单元(Power Management Unit, PMU)。
🔹 功能定位
AWO 域负责:
保持系统时间;
监测外部唤醒源;
监控电源电压;
响应外部中断;
在需要时重新唤醒 ISO 域。
2,如何配置WDG
瑞萨MCU的官方开发工具是 CS+,对于RH850F1X系列的MCU而言,可以使用SmartConfigurator工具来自动生成代码,所以配置看门狗也可以通过这个工具来生成,主要的配置的方式如下所示,

当时WDG的时钟源也需要提前配置一下

通过上面图中可以注意到有一个 “Watchdog timer operation setting”,这里有两个选项,一个是默认开启WDG的模式,一个是软件开启WDG的方式。下面就都介绍一下这种两种模式的WDG的配置方法。
2.1 Default start mode
选择默认开启的模式,就需要设置一下OptionByte,查看参考手册可以知道OPTB0的每一位代表的意思是什么,然后在使用CS+调试运行的时候将其设置一下即可。这里设置的是0xBA3FFFCF
其中的“3F”就是代表的打开看门狗并使用【2^16 / WDG时钟 = 2^16 / 24K】来作为看门狗计数器溢出时间的计算方式。

下面这张是使用OPTB设置的WDG的时钟分频计算方式


使用工具设置好参数之后就需要生成相关联的代码,程序中的喂狗操作也比较简单
void R_Config_WDT0_Restart(void)
{
WDTA0.WDTE = _WDT_START_CODE;
}
2.2 Software trigger start mode
选择软件开启看门狗的模式,也需要设置一下OPTB,不过主要的区别就是将看门狗使能关闭,设置的方式的上面的一个小章节,这里设置的是0xBA2FFFCF,至于设置看门狗计数器溢出时间就可以通过下面图中的 “Overflow interval time setting” 来进行设置,相比较只通过OPTB设置的方式省去了自己计算的步骤,显得比较直观。

同样的,生成了代码之后,需要将R_Config_WDT0_Restart接口初始化调用一下,然后才可以触发看门狗的开启,然后这个接口R_Config_WDT0_Restart才可以起到喂狗的作用。
3,MCAL中的WDG
对于汽车电子行业的软件开发者而言,若是使用RH850F1KM系列的MCU,免不了要使用MCAL作为硬件驱动层,这个时候就要使用的MCAL的驱动配置工具,一般常见的有EB与VECTOR工具,有兴趣的朋友可以自行查资料了解,这里对于这两个工具就不在赘述,直接介绍一下基于vector中Davinci工具的WDG的开发配置的方式,从参数的配置到应用API的调用在到最终功能的实现。
3.1 WDG的Davinci配置
具体的Davinci配置参数的情况如下所示使用的1875HZ的时钟源,由于第三张图中设置的计算参数,所以看门狗计时器的溢出时间设置的为 2^12 / 时钟频率 = 2^12 / 1875 = 2.18s



对于以上第二张图中的DriverA与DriverB两个看门狗,前者是基于AwoWdt是时钟源,属于是AWO 域(永电域),即在休眠状态下也会保持基本的运行;
对于DriverB而言,是基于IsoWdt的时钟源,不可以掉电保持,所以进入进入休眠模式之后会停止运行。
3.2 应用功能实现
通过以上Davinci工具生成对应的动态代码之后,将动态代码集成到自己的已经建好的工程当中,此过程略,当然还需要自定义对应的看门狗的初始化程序与喂狗程序,还有对应的75%计数器溢出中断注册。
void WdgIf_Init(void)
{
Wdg_59_DriverA_Init(WdgSettingsConfig0);
Wdg_59_DriverA_SetMode(WDGIF_SLOW_MODE);
// 对应的WDTA0的中断使能
R_Intc_SetEICReg_TB(40U);
}
void WdgIf_Refresh(void)
{
Wdg_59_DriverA_TriggerFunc(TRUE);
}
在MCAL中的静态代码库中是使用的下面中断名称。需要在对应的中断向量表中注册一下就可以了。

至于在最终的测试方法需要在任意的初始化的代码中打一个断点,然后运行程序,判断有没有复位。
更多推荐



所有评论(0)