SOC系统经典IP介绍以及使用方法说明之dw_wdt

系列文章目录

第二章 DW_wdt功能及使用流程介绍



前言

       WDT即我们常说的看门狗,一般带CPU的系统都会配上WDT,主要原因也是因为在实际软件运行过程中,无论是硬件存在缺陷还是软件存在bug,还是随着芯片运行环境变化导致timing问题、甚至说遇到了概率性的异步问题等原因,莫名导致CPU跑飞了,也就是说CPU无法正常取指执行,进而导致一些模块无法正常运行,而这些应用场景有时候无法人为干预,所以即使CPU跑飞了,我们也想通过某个技术手段,让CPU能够回归正常,也就是我们说的重启。

      WDT就是专门为这个而生的,他会定期的产生中断上报给CPU,CPU收到这个中断后要去及时处理,即喂狗。当CPU正常时,是可以识别出该中断并且喂狗的。一旦CPU异常,它可能无法正常识别该中断,也不能正常喂狗,就会导致这个中断一直无法被清除。当该中断一直不被清除,WDT模块就会认为CPU应该是忙或者出了问题了,因此,当下一轮计数周期到来时,CPU还一直无法处理中断,那么WDT就基本判断CPU挂了,因此WDT会直接输出全局复位信号,该信号会导致系统重启。


提示:以下是本篇文章正文内容,下面案例可供参考

一、使用步骤

1.定义WDT中断服务子程序

void wdt_int_handler()
{
   RESTART_WDT;  //重启wdt
   REG32(WDT_ROI); //或者读清中断
}

一般情况下,wdt发生中断后,软件可以通过重启wdt或者读清掉中断,也就是通常所说的喂狗,让wdt模块重启。

2.定义main函数

代码如下(示例):

CLK_WDT_EN;   //使能WDT模块时钟,根据RTL设计

REG32(WDT_CR) |= (0x1 <<1 );  //设置WDT模式为中断模式

REG32(WDT_CR) &= ~(0x1 << 1); //设置WDT模式为先中断后复位模式

REG32(WDT_CRR) = 0x76;  //重启WDT

首先,需要先打开模块时钟使能,这样才可以进行后续WDT模块内部寄存器配置

然后,根据需求配置wdt的模式是中断还是先中断后复位,软件选择其中一种进行配置。

最后,使能WDT。


总结

      如果WDT配置为先中断后复位模式,实际仿真可以发现一旦wdt的中断无法清除,那么wdt会自动load一个很大的counter值进行重新计数,当这个很大的counter值计数完成后,中断还没有得到清除,就会发起系统复位请求。

     WDT主要用于CPU跑飞后,可以重启系统。正常情况下,如果CPU没有跑飞,可以正常清中断,即喂狗说明系统正常。可是一旦CPU跑飞后,就无法正确清中断,那么可以通过WDT复位来重置系统。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

love混世_魔王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值