LPC1778使用库函数实现看门狗,并进行异常处理的代码
时间: 2024-02-23 16:00:41 浏览: 20
以下是LPC1778使用库函数实现看门狗,并进行异常处理的代码:
```c
#include "LPC177x_8x.h"
#include "lpc177x_8x_gpio.h"
#include "lpc177x_8x_clkpwr.h"
#include "lpc177x_8x_wdt.h"
void WDT_IRQHandler(void) {
WDT_Reset(WDT);
NVIC_SystemReset();
}
int main(void) {
SystemInit();
// 初始化GPIO
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Direction = GPIO_PinInput;
GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull;
GPIO_InitStructure.GPIO_IPInputConnected = GPIO_IPInputConnected_Enable;
GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt1;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 初始化看门狗
WDT_InitTypeDef WDT_InitStructure;
WDT_InitStructure.WDT_ClkDiv = 4;
WDT_InitStructure.WDT_ClkSrc = WDT_CLKSRC_IRC;
WDT_InitStructure.WDT_Mode = WDT_RESET_MODE;
WDT_InitStructure.WDT_TmrConst = 0x7FF;
WDT_Init(WDT, &WDT_InitStructure);
WDT_Cmd(WDT, ENABLE);
// 注册中断处理函数
NVIC_EnableIRQ(WDT_IRQn);
while (1) {
// 检测按钮是否被按下
if (GPIO_ReadValue(GPIOA) & GPIO_Pin_0) {
// 按钮未按下,喂狗
WDT_Feed(WDT);
} else {
// 按钮被按下,产生异常
int *p = (int*)0x0;
*p = 1;
}
}
}
```
此代码中,我们首先初始化了GPIO和看门狗,并注册了看门狗中断处理函数。在主循环中,我们检测按钮是否被按下,如果按钮未按下,则喂狗,否则产生一个指针异常,触发看门狗中断处理函数,并进行异常处理。在中断处理函数中,我们首先喂狗,然后进行系统复位。