Cortex-M3 (NXP LPC1788)之WDT窗口看门狗定时器

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

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

看门狗的时钟有一个专用的振荡器,提供了500KHZ的时钟,该时钟通过4分频,提供DWTV计数。因此在下面的程序中给WDTC赋值1000000,则看门狗计数的周期为 (1/500KHZ)10000004 = 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 -> OUTPUT
	Init_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两句代码,由于有喂狗,所以程序不会进入超时中断,串口也就不会有打印信息。

本文章转载自 Cortex-M3 (NXP LPC1788)之WDT窗口看门狗定时器

关于使用看门狗调试过程中出现的有趣的错误: Cortex-M3 (NXP LPC1788)之看门狗定时器对Flash编程的影响

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值