一、基本概念
网上很多就不赘述了。
简单理一下这里的运行逻辑:WDG进行加计数,当wdg cnt加到超时时间就会发生复位。为了防止它复位就要进行喂狗操作--即回复wdg cnt到初值。这里使用GPT定时产生中断去喂狗,nxp的mcal将喂狗时间定义为超时时间的一半。但是这样就有个问题:若程序发生了一些异常情况,e.g.死循环,但是中断仍能正常响应,喂狗照常进行,就没办法达到wdg纠正程序状态(复位)的目的。于是需要用户在周期task中去给GPT反馈(调用Wdg_SetTriggerCondition()函数去更新当前喂狗超时时间Wdg_au16Timeout),让GPT保持喂狗。当当前喂狗超时时间为0后,关闭gpt喂狗定时器,发生复位。
二、配置以及mcal代码逻辑
1.WDG
①WdgSettingsConfig
②三种wdg模式(fast、slow需要的话可以配置不同的时钟源以及超时时间,但是这里我直接用的一样的,暂时不需要这么多模式)
③WdgGeneral
2.gpt
在wdg_init中会start gpt、使能notification。所以gpt的初始化应该在wdg之前。
其中Gpt_StartTimer会设置定时器的时间即喂狗时间。( 周期等于看门狗超时时间/2)
mcal代码会根据gpt、wdg的频率计算gpt中断时间,但是gpt存在一个tick最大值,所以,这就要求wdg和gpt的频率不能差值过大。
记得使能一下中断以及硬件通道
在OS中添加相应的中断配置