基本信息
文件名称:NXP 系列:LPC17xx 系列_18. LPC17xx看门狗与RTC.docx
文件大小:34.7 KB
总页数:58 页
更新时间:2025-06-12
总字数:约2.86万字
文档摘要

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