PAGE1
PAGE1
18.看门狗与RTC
18.1看门狗定时器(WDT)
18.1.1看门狗定时器概述
看门狗定时器(WDT)是一种硬件定时器,用于检测和防止系统软件故障。当系统出现死机或运行异常时,WDT会在设定的时间内复位系统,从而确保系统的正常运行。LPC17xx系列单片机中的WDT是一个12位的定时器,可以通过编程配置其时钟源、定时周期和复位行为。
18.1.2WDT寄存器
LPC17xx系列单片机中的WDT寄存器如下:
WDMOD:看门狗模式寄存器
WDEN:看门狗使能位
WDRESET:看门狗复位位
WDTOF:看门狗超时标志位
WDINT:看门狗中断使能位
WDTC:看门狗计数器寄存器
WDTC:看门狗定时周期值
WDTFEED:看门狗喂狗寄存器
FEED:喂狗值
WDTCLKSEL:看门狗时钟选择寄存器
CLKSEL:时钟源选择位
18.1.3WDT配置与使用
18.1.3.1配置看门狗定时器
配置WDT的步骤如下:
选择时钟源
设置定时周期
使能WDT
配置复位行为和中断使能
#includeLPC17xx.h
//选择时钟源
voidWDT_SelectClockSource(uint8_tclockSource){
LPC_WDT-WDTCLKSEL=(clockSource0);
}
//设置定时周期
voidWDT_SetPeriod(uint32_tperiod){
LPC_WDT-WDTC=(period0);
}
//使能WDT
voidWDT_Enable(void){
LPC_WDT-WDMOD=(10);//使能看门狗
}
//配置复位行为
voidWDT_ConfigReset(boolenableReset){
if(enableReset){
LPC_WDT-WDMOD|=(11);//使能复位
}else{
LPC_WDT-WDMOD=~(11);//禁用复位
}
}
//配置中断使能
voidWDT_ConfigInterrupt(boolenableInterrupt){
if(enableInterrupt){
LPC_WDT-WDMOD|=(13);//使能中断
}else{
LPC_WDT-WDMOD=~(13);//禁用中断
}
}
//喂狗
voidWDT_Feed(void){
LPC_WDT-WDTFEED=0xAA;//写入0xAA
LPC_WDT-WDTFEED=0x55;//写入0x55
}
18.1.3.2示例:配置和使用看门狗定时器
假设我们需要配置WDT为1秒超时,并且在超时后复位系统。
#includeLPC17xx.h
#includeboard.h
voidWDT_Init(void){
//选择时钟源为PCLK/4
WDT_SelectClockSource(0);
//设置定时周期为1秒
WDT_SetPeriod(32768);//32768*128us=4.194304ms*32768=1s
//使能WDT
WDT_Enable();
//配置复位行为
WDT_ConfigReset(true);
//禁用中断
WDT_ConfigInterrupt(false);
}
intmain(void){
//初始化板子
Board_Init();
//初始化WDT
WDT_Init();
while(1){
//正常工作代码
//...
//喂狗
WDT_Feed();
}
}
18.1.4WDT中断处理
如果需要使用WDT中断而不是复位,可以配置WDT中断使能,并编写相应的中断处理函数。
#includeLPC17xx.h
#includeboard.h
#includeirq_handler.h
v