看门狗定时器的首要作用是在程序由于搅扰而跑飞后,可以使体系复位,不至于使体系永久的死下去。它的原理与一般的定时器没有多大差异,便是先要设置好一段时刻,当超越这段时刻后,就从当时运转的程序中跳出进入中止处理程序中。但两者的首要差别是,一般的定时器中止是咱们期望它产生的,因而咱们不会在定时器中止产生前的那个时刻段内干涉它;而看门狗定时器中止是咱们不期望它产生的,因而咱们要想方设法地防止其产生。首要的办法便是在中止产生前,从头对看门狗定时器的寄存器进行赋值,使它的定时器从头开始计时。
[cpp]view plaincopy
- #include”2440addr.h”
- #include”Option.h”
- #defineLED1_ON(rGPBDAT&=~(1<<5))
- #defineLED1_OFF(rGPBDAT|=(1<<5))
- #defineLED2_ON(rGPBDAT&=~(1<<6))
- #defineLED2_OFF(rGPBDAT|=(1<<6))
- #defineLED3_ON(rGPBDAT&=~(1<<7))
- #defineLED3_OFF(rGPBDAT|=(1<<7))
- #defineLED4_ON(rGPBDAT&=~(1<<8))
- #defineLED4_OFF(rGPBDAT|=(1<<8))
- void__irqWdt_Int(void);
- voidDelay(void)
- {
- inti;
- for(i=0;i<1000000;i++);
- }
- voidMain(void)
- {
- rGPBCON&=~((3<<10)|(3<<12)|(3<<14)|(3<<16));//对GPBCON[10:17]清零
- rGPBCON|=((1<<10)|(1<<12)|(1<<14)|(1<<16));//设置GPB5~8为输出
- rGPBUP&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));//设置GPB5~8的上拉功用
- rGPBDAT|=(1<<5)|(1<<6)|(1<<7)|(1<<8);//封闭LED
- rGPBCON|=1;//输出
- rGPBUP|=0;
- rGPBDAT|=0;//封闭蜂鸣器
- rWTDAT=50000;//设置看门狗定时器超时时刻为4秒(50÷12.5)
- rWTCNT=50000;
- rWTCON=(249<<8)|(1<<5)|(0<<3)|(1<<2);//预分频值为249,使能看门狗,分频系数为16,中止使能
- rSRCPND|=BIT_WDT_AC97;
- rINTPND|=BIT_WDT_AC97;
- rSUBSRCPND|=BIT_SUB_WDT;//铲除中止标志
- rINTMSK&=~(BIT_WDT_AC97);
- rINTSUBMSK&=~(BIT_SUB_WDT);//开中止
- pISR_WDT_AC97=(unsigned)Wdt_Int;//设置中止程序进口
- while(1)
- {
- LED1_ON;Delay();LED1_OFF;
- LED2_ON;Delay();LED2_OFF;
- LED3_ON;Delay();LED3_OFF;
- LED4_ON;Delay();LED4_OFF;
- rWTCNT=50000;//喂狗没喂狗蜂鸣器很响
- }
- }
- void__irqWdt_Int(void)
- {
- rSRCPND|=BIT_WDT_AC97;
- rINTPND|=BIT_WDT_AC97;
- rSUBSRCPND|=BIT_SUB_WDT;//铲除中止标志
- rGPBDAT=1;
- Delay();
- rGPBDAT=0;//蜂鸣器响一段时刻
- }