新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > S3C2440看門(mén)狗定時(shí)器

S3C2440看門(mén)狗定時(shí)器

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò) 收藏
看門(mén)狗定時(shí)器的主要作用是在程序因?yàn)楦蓴_而跑飛后,能夠使系統(tǒng)復(fù)位,不至于使系統(tǒng)永遠(yuǎn)的死下去。它的原理與一般的定時(shí)器沒(méi)有多大區(qū)別,就是先要設(shè)置好一段時(shí)間,當(dāng)超過(guò)這段時(shí)間后,就從當(dāng)前運(yùn)行的程序中跳出進(jìn)入中斷處理程序中。但兩者的主要差別是,一般的定時(shí)器中斷是我們希望它發(fā)生的,因此我們不會(huì)在定時(shí)器中斷發(fā)生前的那個(gè)時(shí)間段內(nèi)干預(yù)它;而看門(mén)狗定時(shí)器中斷是我們不希望它發(fā)生的,因此我們要想方設(shè)法地避免其發(fā)生。主要的方法就是在中斷發(fā)生前,重新對(duì)看門(mén)狗定時(shí)器的寄存器進(jìn)行賦值,使它的定時(shí)器重新開(kāi)始計(jì)時(shí)。

[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));//對(duì)GPBCON[10:17]清零
  20. rGPBCON|=((1<<10)|(1<<12)|(1<<14)|(1<<16));//設(shè)置GPB5~8為輸出
  21. rGPBUP&=~((1<<5)|(1<<6)|(1<<7)|(1<<8));//設(shè)置GPB5~8的上拉功能
  22. rGPBDAT|=(1<<5)|(1<<6)|(1<<7)|(1<<8);//關(guān)閉LED
  23. rGPBCON|=1;//輸出
  24. rGPBUP|=0;
  25. rGPBDAT|=0;//關(guān)閉蜂鳴器
  26. rWTDAT=50000;//設(shè)置看門(mén)狗定時(shí)器超時(shí)時(shí)間為4秒(50÷12.5)
  27. rWTCNT=50000;
  28. rWTCON=(249<<8)|(1<<5)|(0<<3)|(1<<2);//預(yù)分頻值為249,使能看門(mén)狗,分頻系數(shù)為16,中斷使能
  29. rSRCPND|=BIT_WDT_AC97;
  30. rINTPND|=BIT_WDT_AC97;
  31. rSUBSRCPND|=BIT_SUB_WDT;//清除中斷標(biāo)志
  32. rINTMSK&=~(BIT_WDT_AC97);
  33. rINTSUBMSK&=~(BIT_SUB_WDT);//開(kāi)中斷
  34. pISR_WDT_AC97=(unsigned)Wdt_Int;//設(shè)置中斷程序入口
  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;//喂狗沒(méi)喂狗蜂鳴器很響
  42. }
  43. }
  44. void__irqWdt_Int(void)
  45. {
  46. rSRCPND|=BIT_WDT_AC97;
  47. rINTPND|=BIT_WDT_AC97;
  48. rSUBSRCPND|=BIT_SUB_WDT;//清除中斷標(biāo)志
  49. rGPBDAT=1;
  50. Delay();
  51. rGPBDAT=0;//蜂鳴器響一段時(shí)間
  52. }




評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉