来认识一下狗狗的寄存器,WDTCLKUEN-看门狗时钟源使能寄存器。因为狗狗的时钟是可选的。在对狗进行时钟源选择前是要关闭狗狗的时钟连接!该寄存器的有效位只有一位。WDTCLKUEN=0X01;//第0位为1连接看门狗时钟源
WDTCLKSEL-看门狗时钟源选择寄存器。用于选择看门狗的时钟源。狗的时钟源可以由LPC1114内部时钟源IRC提供,还可以由系统主时钟和内部看门狗时钟提供。默认是选择IRC。这里我们选择系统主时钟。WDTCLKSEL=0X01;//选择系统主时钟
WDTCLKDIV-看门狗时钟分频寄存器。看门狗的时钟源设置好了以后就可以对狗进行分频设置了。一般选择1分频。WDTCLKDIV=0X01;//选择1分频
设置完看门狗的时钟后,就可以对狗狗的计数时间进行设置了。LPC1114的看门狗计数器采用的减法计数。不像一般的计数器是往上下而是往下减。减到0还没喂狗。系统就复位了。
WDTTC-看门狗计数寄存器。设置的是看门狗的计数时间。这个是一个32位的寄存器。有点特殊。最小值要求为0XFF,给它赋小于0XFF的值时系统自动会为其设置成0XFF。WDTTC=0XFFFF;//设置看门狗的计数时间(既溢出时间)
WDTMOD-看门狗模式寄存器。设置完这些看门狗并不会工作。因为还没有对看门狗模块设置成使能。需要启动看门狗模块.该寄存器第0位是看门狗的使能位。要设置其为1.第2位是看门狗复位使能。M0的看门狗在未正常的喂狗的情况下是可以执行2个步骤的。一个是产生系统复位,一个是产生中断。这里我们选择产生复位。WDTMOD=0X03;//设置开启看门狗使能和狗溢出后系统复位。完成上面的设置现在看门狗还是没有启动的。那是因为在启动前必须要先喂一次狗(哈哈。。类似于先吃了才能工作)。
WDTFEED-看门狗馈送序列寄存器。该寄存器用来为喂狗。要分2次写入0XAA,0X55。写的时候要注意!两次写入要接连着完成。如果只写了一句会引起系统复位。所以说喂狗时最好先关掉中断以免引起系统不正常复位!
WDTFEED=0XAA;WDTFEED=0X55;//以上完成后看门狗就彻彻底底的开始工作了
以下是程序源代码及工程文件(基于TKStduio环境)attachment download
#include "..\config.h"
/*********************************************************************************************************
** Function name: myDelay
** Descriptions: 软件延时
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void myDelay (INT32U ulTime)
{
INT32U i;
i = 0;
while (ulTime--) {
for (i = 0; i < 5000; i++);
}
}
/*
函数名:WDT_Init
功能:看门狗的初始化函数
参数:time-喂狗时间
返回值:无
*/
void WDT_Init(INT32U time)
{
if(time<0xff)
time=0xff;
WDTCLKUEN=0X00;//关闭看门狗的时钟源
WDTCLKSEL=0X01;//选择主时钟作为看门狗的时钟
WDTCLKUEN=0X01;//开启看门狗的时钟源,现在看门狗还不是工作的。需要喂一次狗
WDTCLKDIV=0X01;//进行1分频
SYSAHBCLKCTRL|=1<<15;//使能看门狗模块。这一点非常重要否则造成狗不工作
WDTTC=time;//设置看门狗的计数时间
WDTMOD=0X03;//设置看门狗使能
WDTFEED=0XAA;//启动看门狗喂狗序列。如果在看门狗正常工作后喂狗序列不完整会造成看门狗复位
WDTFEED=0X55;//完成看门狗喂狗操作
}
/*
函数名:WDT_FEED
功能:看门狗喂狗函数
参数:无
返回值:无
*/
void WDT_FEED(void)
{
zyIrqDisable();//喂狗的时候停止中断
WDTFEED=0XAA;
WDTFEED=0X55;//完成喂狗
zyIrqEnable();//开启系统的中断
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 当硬件基于EasyCortexM3-1300开发板时,进行LED测试需要短接P2.8与LED1、P2.9与LED2、
** P2.10与LED3、P2.11与LED4。
** 用户也可以根据自己的底板的设计自行连接
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
int main (void)
{
targetInit(); /* 初始化目标板,切勿删除 */
pinInit(); /* 引脚初始化 */
myDelay(1000);
SYSAHBCLKCTRL |= (1ul << 6); /* 使能GPIO模块时钟 */
GPIO0DIR=0X02;//设置P0.02为IO输出
WDT_Init(0xffff);
GPIO0DATA=0XFD;//led持续闪烁表明系统在不停的复位
myDelay(1000);//加延时使LED闪烁跟明显
while (1)
{
myDelay(1000);//不喂狗LED会闪烁
}
}
/*********************************************************************************************************
End Of File
*********************************************************************************************************/
用户444868 2013-7-18 16:49