您的位置 首页 数字

CortexM3 (NXP LPC1788)之WDT窗口看门狗定时器

看门狗定时器的用途是在微控制器进入错误状态后的一段合理时间内将其复位。看门狗被是能后,如果用户没有在预先设定的时间内喂狗,…

看门狗守时器的用处是在微操控器进入过错状况后的一段合理时间内将其复位。看门狗被是能后,假如用户没有在预先设定的时间内喂狗,那么会发生一个看门狗事情。

看门狗守时器的寄存器有看门狗守时器常数计数器WDTC,每当在喂狗寄存器WDFEED中写入喂狗序列,WDTC中的值就会被写入看门狗守时计数器WDTV,WDTV中的值在看门狗时钟的驱动下递减。咱们能够经过设置看门狗守时器报警中止寄存器WDWARNINT寄存器,当WDWARNINT中的值和WDTV中的值匹配时,能够构成中止。最重要的还有看门狗形式寄存器WDMOD,它操控着看门狗的使能,复位,更新形式以及超时标识和中止标志。此外还有一个看门狗守时器窗口寄存器WDWINDOW,它决议了喂狗过程中答应的最大的WDTV。

看门狗的时钟有一个专用的振荡器,供给了500KHZ的时钟,该时钟经过4分频,供给DWTV计数。因而鄙人面的程序中给WDTC赋值1000000,则看门狗计数的周期为 (1/500KHZ)*1000000*4 = 8S .所以看门狗中止每8秒发生一次。程序装备看门狗超时不复位,进入超时中止今后软件铲除中止标志和超时标识。

留意:为了程序的简练,省去了之前介绍了的体系时钟装备和串口的装备。详细的信息可查询之前的文章。

#include "LPC1788_REG.h"#include "uart.h"#define rWDMOD	(*(volatile unsigned*)0x40000000)#define rWDTC	(*(volatile unsigned*)0x40000004)#define rWDFEED	(*(volatile unsigned*)0x40000008)#define rWDTV	(*(volatile unsigned*)0x4000000C)#define rWDWARNINT	(*(volatile unsigned*)0x40000014)#define rWDWINDOW	(*(volatile unsigned*)0x40000018)char str[]={"WDT_IRQ occur.\r\n"};void WDT_IRQHandler(void){rICER0 |= 0x1;Uart2SendS(str);rWDMOD &= ~(0x1<<3|0x1<<2); rWDTC = 1000000;rWDMOD |= 0x1;rWDFEED = 0xAA;rWDFEED = 0x55;rISER0 |= 0x1;}int main(void){unsigned int i,j;rFIO1DIR |= (1<<18); //GPIO1.18 -> OUTPUTInit_Uart2();rWDTC = 1000000;rWDMOD |= 0x1;rWDFEED = 0xAA;rWDFEED = 0x55;rISER0 |= 0x1;while(1){rFIO1PIN |= 0x1<<18;for(i=0; i<10000; i++)for(j=0; j<1000; j++);//      rWDFEED = 0xAA;//      rWDFEED = 0x55;rFIO1PIN &= ~(0x1<<18);for(i=0; i<10000; i++)for(j=0; j<1000; j++);}}

假如将程序中赤色的两句喂狗屏蔽,则程序每8S发生一次看门狗超时中止,而且LED灯业绩。串口打印信息如下。

假如翻开rWDFEED = 0xAA;rWDFEED = 0x55两句代码,我们有喂狗,所以程序不会进入超时中止,串口也就不会有打印信息。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/265105.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部