微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440看门狗定时器

S3C2440看门狗定时器

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

[cpp]view plaincopy

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



Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top