前言:最近使用了瑞萨F1KMS1系列调试的时候配置了一下看门狗驱动,发现这与经典款MCU STM32的配置区别还是比较大的,并且在网上相关的资料相对还是比较少的,即使有介绍的也不是特别全面,所以就在这里介绍一下看门狗的整个配置方法过程。文章中看门狗都简称WDG。


目录

1,WDG概述

2,如何配置WDG

2.1 Default start mode

2.2 Software trigger start mode

3,MCAL中的WDG

3.1 WDG的Davinci配置

3.2 应用功能实现


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中的静态代码库中是使用的下面中断名称。需要在对应的中断向量表中注册一下就可以了。

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

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐