S32K144学习笔记:23 看门狗

您所在的位置:网站首页 内部看门狗和外部看门狗区别 S32K144学习笔记:23 看门狗

S32K144学习笔记:23 看门狗

2024-06-23 06:42| 来源: 网络整理| 查看: 265

23.1 片上看门狗规格

23.1.1 看门狗时钟

看门狗模块有以下几个可选的时钟源

    •内部低功耗振荡器(LPO_CLK)

    •内部低速IRC时钟(SIRC)

    •系统振荡器时钟(SOSC)

    •总线时钟

    注意:对于安全应用,WDOG应该在不同于CMU的时钟上运行。WDOG_CNT重置读取值可以根据时间戳而变化,因为它是一个默认运行计数器。

23.1.2看门狗低功耗模式

此表显示wdog低功耗模式和相应的芯片低功耗模式。此设备不支持等待模式。有关可用电源模式的详细信息,请参阅可用低功耗模式中的模块操作。

23.1.3默认的看门狗超时

超时取决于看门狗时钟源计数器。在该看门狗上的初始电源被lpo128k_CLK时钟锁定后,将在1024个周期后发出超时。这将导致在大约8 ms之后生成看门狗超时,这将迫使MCU重新安装。为了避免这种情况,请确保在1024周期过去之前配置或刷新该看门狗。

 

23.2 介绍

         看门狗定时器模块是一个可供系统使用独立的定时器。它提供了一个安全特性,以确保软件按计划执行,并且CPU不会卡在无限循环中或执行意外的代码。如果在一定时间内没有执行(刷新)wdog模块,它会复位MCU。

23.2.1 特征

WDOG模块的功能包括:

•独立于总线时钟的可配置时钟源输入

        •总线时钟

        •LPO时钟

        •INTCLK(内部时钟)

        •ERCLK(外部参考时钟)

•可编程超时时间

        •可编程16位超时值

        •当需要更长的超时周期时,可选固定256时钟预分频器

•用于计数器刷新写入序列

        •刷新写入0xA602然后写入0xB480的顺序

•可选窗口模式选项

        •可编程16位窗口值总线

•提供可靠的检查,确保程序流程快于预期

        •提前刷新尝试会触发复位。

•可选的超时中断,允许进行后处理诊断

•具有中断向量的CPU对中断服务程序(ISR)的中断请求

         •中断向量提取后,强制复位发生128个总线时钟。

•配置位在复位后进行一次写入,以确保不会错误地更改看门狗配置。

•强大的写序列,用于解锁一次写入配置位

•解锁写入0xC520和0xD928的序列,以允许更新一次写入配置位

•软件必须在解锁后和WDOG关闭解锁窗口之前的128个总线时钟内进行更新。

 23.2.2 方框图

下图显示了WDOG模块的框图。

23.5应用

23.5.1 禁用看门狗

要看门狗,首先执行解锁序列,然后取消wdogcs[en]位。下面的代码片段显示了32位写入的示例。

DisableInterrupts; // disable global interrupt WDOG_CNT = 0xD928C520; //unlockwatchdog WDOG_CS &= ~WDOG_CS_EN_MASK; //disable watchdog EnableInterrupts; //enable globalinterrupt

23.5.2 复位后禁用看门狗

所有的看门狗寄存器都通过复位解除锁定。因此,解锁序列是不必要的,但它需要写所有的看门狗寄存器,使新的配置生效。下面的代码片段显示了复位后禁用看门狗的示例。

DisableInterrupts; //disable global interrupt WDOG_CS &= ~WDOG_CS_EN_MASK; // disable watchdog WDOG_TOVAL= 0xFFFF; while(WDOG_CS[ULK]); // waitingfor lock while(~WDOG_CS[RCS]); // waiting fornew configuration to take effect EnableInterrupts; // enable globalinterrupt

23.5.3 配置看门狗

通过设置wdogcs[UPDATE]=0可以对看门狗进行一次配置。在此之后,该看门狗在重新配置之前无法重新配置。如果在配置该看门狗时设置了wdogcs[update]=1,则可以在不强制重新配置的情况下重新配置该看门狗。下面的示例代码演示了如何在没有窗口模式的情况下配置该看门狗,时钟源为lpo、启用中断和超时值为256 clock。下面的代码段显示了32位写入的示例。

Configure once

DisableInterrupts; // disable global interrupt WDOG_CNT = 0xD928C520; //unlock watchdog while(WDOG_CS[ULK]==0); //wait untilregisters are unlocked WDOG_TOVAL = 256; //set timeout value WDOG_CS = WDOG_CS_EN(1) | WDOG_CS_CLK(1)| WDOG_CS_INT(1) | WDOG_CS_WIN(0) | WDOG_CS_UPDATE(0); while(WDOG_CS[RCS]==0); //wait until new configuration takes effect EnableInterrupts; //enable global interrupt

Configure forreconfigurable

DisableInterrupts; //disable global interrupt WDOG_CNT = 0xD928C520;                 //unlock watchdog while(WDOG_CS[ULK]==0);             //wait until registers are unlocked WDOG_TOVAL = 256;          //set timeout value WDOG_CS = WDOG_CS_EN(1) | WDOG_CS_CLK(1)| WDOG_CS_INT(1) | WDOG_CS_WIN(0) | WDOG_CS_UPDATE(1); while(WDOG_CS[RCS]==0);             //wait until new configuration takeseffect EnableInterrupts; //enable global interrupt

23.5.4 刷新看门狗

若要刷新看门狗并将看门狗计数器重置为零,则需要刷新序列。下面的代码片段显示了32位写入的示例。

DisableInterrupts; // disable globalinterrupt WDOG_CNT = 0xB480A602; // refresh watchdog EnableInterrupts; // enable global interrupt /**


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3