博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
S3C2440看门狗定时器
阅读量:4156 次
发布时间:2019-05-26

本文共 1568 字,大约阅读时间需要 5 分钟。

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

[cpp] 
  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. }  

转载地址:http://glfxi.baihongyu.com/

你可能感兴趣的文章
日志框架学习
查看>>
日志框架学习2
查看>>
SVN-无法查看log,提示Want to go offline,时间显示1970问题,error主要是 url中 有一层的中文进行了2次encode
查看>>
NGINX
查看>>
Qt文件夹选择对话框
查看>>
DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
查看>>
第三方SDK:JPush SDK Eclipse
查看>>
第三方开源库:imageLoader的使用
查看>>
Android studio_迁移Eclipse项目到Android studio
查看>>
转载知乎-前端汇总资源
查看>>
JavaScript substr() 方法
查看>>
JavaScript slice() 方法
查看>>
JavaScript substring() 方法
查看>>
HTML 5 新的表单元素 datalist keygen output
查看>>
(转载)正确理解cookie和session机制原理
查看>>
jQuery ajax - ajax() 方法
查看>>
将有序数组转换为平衡二叉搜索树
查看>>
最长递增子序列
查看>>
从一列数中筛除尽可能少的数,使得从左往右看这些数是从小到大再从大到小...
查看>>
判断一个整数是否是回文数
查看>>