看门狗中断

前几天写了看门狗的定时中断,刚刚开始学习。从头讲一下我对看门狗的理解吧。

看门狗就像一个定时器一样。

应用:一个应用会是一个死循环则一直在运行,然后要在程序运行的某个时刻“喂狗”,也就是给看门狗的计数值赋一个初始值,防止计数值减到0。如果一个应用程序“跑飞”了,那么它就会脱离这个应用的死循环,然后就不会再继续“喂狗”了,这样计数值会见到0.触发中断或者重启。

下面这个图是看门狗的工作流程图:

这个是用来计算看门狗的周期:

其实看门狗的周期是 T=WTDAT*t_watchdog.

一般我计算周期是先选择第二次分频来算,然后再求第一次分频,因为第一次分频可以定义的范围很广。有时,t_watchdog的值不能有那么大,所以一般让WTDAT大一点,来控制循环的周期。

我们来看一下看门狗的寄存器。

WTCON         (0xE2700000)    控制寄存器

WTDAT          (0xE2700004)    数据寄存器

WTCNT          (0xE2700008)    计数寄存器

WTCLRINT    (0xE270000C)    清中断寄存器



寄存器类型不多,也容易理解,要注意的几点就是:

1、WTCON的第5位是开关寄存器,先给WTDAT和WTCNT赋值,等到要用的时候再打开。

2、WTCNT一开始需要赋初始值。

3、WTCNT减到0的时候,WTDAT会自动把值赋给WTCNT。

4、每次使用完之后要用WTCLRINT清除中断。

其实看门狗中断已经说的差不多了。但是现在还不能实现。

因为看门狗要实现中断到CPU处理之前,要经过一个VIC的中断控制。

VIC也是有几个寄存器需要控制。说起来就有点长了。后面有时间我把这个VIC和外部中断都一起写一下。

后面我也把看门狗的复位功能也写一下。


最近学习到LCD控制器,感觉好复杂好难~~~


PS:写寄存器地址的时候,要多检查几遍,写错了后面执行调试的时候很头疼。

你可能感兴趣的:(看门狗中断)