S3C2440看门狗定时器

看门狗定时器的主要作用是在程序因为干扰而跑飞后,能够使系统复位,不至于使系统永远的死下去。它的原理与一般的定时器没有多大区别,就是先要设置好一段时间,当超过这段时间后,就从当前运行的程序中跳出进入中断处理程序中。但两者的主要差别是,一般的定时器中断是我们希望它发生的,因此我们不会在定时器中断发生前的那个时间段内干预它;而看门狗定时器中断是我们不希望它发生的,因此我们要想方设法地避免其发生。主要的方法就是在中断发生前,重新对看门狗定时器的寄存器进行赋值,使它的定时器重新开始计时。

[cpp]  view plain copy
  1. #include "2440addr.h"  
  2. #include "Option.h"  
  3.   
  4.   
  5. #define  LED1_ON    (rGPBDAT &=~(1<<5))  
  6. #define  LED1_OFF   (rGPBDAT |=(1<<5) )  
  7. #define  LED2_ON    (rGPBDAT &=~(1<<6))  
  8. #define  LED2_OFF   (rGPBDAT |=(1<<6))  
  9. #define  LED3_ON    (rGPBDAT &=~(1<<7))  
  10. #define  LED3_OFF   (rGPBDAT |=(1<<7))  
  11. #define  LED4_ON    (rGPBDAT &=~(1<<8))  
  12. #define  LED4_OFF   (rGPBDAT |=(1<<8))  
  13.   
  14. void __irq Wdt_Int(void);  
  15.   
  16. void Delay(void)  
  17. {  
  18.     int i;  
  19.     for(i=0;i<1000000;i++);  
  20. }  
  21.   
  22. void Main(void)  
  23. {  
  24.     rGPBCON &=~((3<<10)|(3<<12)|(3<<14)|(3<<16));   //对GPBCON[10:17]清零  
  25.     rGPBCON |=((1<<10)|(1<<12)|(1<<14)|(1<<16));    //设置GPB5~8为输出  
  26.     rGPBUP &=~((1<<5)|(1<<6)|(1<<7)|(1<<8));        //设置GPB5~8的上拉功能  
  27.     rGPBDAT |=(1<<5)|(1<<6)|(1<<7)|(1<<8);          //关闭LED  
  28.       
  29.     rGPBCON |=1;    //输出  
  30.     rGPBUP |=0;  
  31.     rGPBDAT|=0; //关闭蜂鸣器  
  32.       
  33.     rWTDAT=50000;   //设置看门狗定时器超时时间为4秒(50÷12.5)  
  34.     rWTCNT=50000;  
  35.     rWTCON=(249<<8)|(1<<5)|(0<<3)|(1<<2);//预分频值为249,使能看门狗,分频系数为16,中断使能  
  36.       
  37.     rSRCPND |=BIT_WDT_AC97;  
  38.     rINTPND |=BIT_WDT_AC97;  
  39.     rSUBSRCPND |= BIT_SUB_WDT; //清除中断标志  
  40.       
  41.     rINTMSK &= ~(BIT_WDT_AC97);   
  42.     rINTSUBMSK &= ~(BIT_SUB_WDT);//开中断  
  43.       
  44.     pISR_WDT_AC97=(unsigned)Wdt_Int;//设置中断程序入口  
  45.     while(1)  
  46.     {  
  47.         LED1_ON;Delay();LED1_OFF;  
  48.         LED2_ON;Delay();LED2_OFF;  
  49.         LED3_ON;Delay();LED3_OFF;  
  50.         LED4_ON;Delay();LED4_OFF;  
  51.         rWTCNT=50000;   //喂狗    没喂狗蜂鸣器很响  
  52.     }  
  53. }  
  54.   
  55. void __irq Wdt_Int(void)  
  56. {  
  57.     rSRCPND |=BIT_WDT_AC97;  
  58.     rINTPND |=BIT_WDT_AC97;  
  59.     rSUBSRCPND |= BIT_SUB_WDT; //清除中断标志  
  60.     rGPBDAT =1;  
  61.     Delay();  
  62.     rGPBDAT =0; //蜂鸣器响一段时间  
  63. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值