<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ARM 學(xué)習(xí)筆記六 (看門(mén)狗中斷試驗(yàn))

          ARM 學(xué)習(xí)筆記六 (看門(mén)狗中斷試驗(yàn))

          作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò) 收藏
          什么是看門(mén)狗呢?我也不是很清楚,網(wǎng)上資料說(shuō)看門(mén)狗的作用就是防止程序發(fā)生死循環(huán),或者說(shuō)程序跑飛。工作原理:在系統(tǒng)運(yùn)行以后也就啟動(dòng)了看門(mén)狗的計(jì)數(shù)器,看門(mén)狗就開(kāi)始自動(dòng)計(jì)數(shù),如果到了一定時(shí)間,不給把看門(mén)狗的計(jì)數(shù)清0,就會(huì)引起計(jì)數(shù)益處中斷,產(chǎn)生系統(tǒng)復(fù)位。

          但是我知道S3c2440啟動(dòng)代碼里一開(kāi)始就禁止看門(mén)狗了。所以,一般都用不上吧。除非你的應(yīng)用程序?qū)崟r(shí)性比較高,那就得考慮用看門(mén)狗來(lái)看門(mén)了。

          本文引用地址:http://www.ex-cimer.com/article/201611/318884.htm

          #define GLOBAL_CLK 1

          #include "def.h"
          #include "2440addr.h"
          #include "mmu.h"
          #include "option.h"

          #define LED1 (1<<5) // rGPB[5] =1 ;
          #define LED2 (1<<6) // rGPB[6] =1 ;
          #define LED3 (1<<7) // rGPB[7] =1 ;
          #define LED4 (1<<8) // rGPB[8] =1 ;

          static int index=0;

          void Delay1(int time)
          {
          unsigned int i,j;
          for(i=1;i<100;i++)
          for(j=1;j ;
          }

          void LightLED(void){

          rGPBDAT = 0xfff;

          if ( index==1 )
          rGPBDAT=rGPBDAT & ~LED1;

          if ( index==2 )
          rGPBDAT=rGPBDAT & ~LED2;

          if ( index==3)
          rGPBDAT=rGPBDAT & ~LED3;

          if ( index==4 )
          rGPBDAT=rGPBDAT & ~LED4;

          Delay1( 20000 ) ;


          }
          void __irq WatchDog_ISR(void){

          rSUBSRCPND = BIT_SUB_WDT; //注意用到子中斷源寄存器
          rSRCPND = BIT_WDT_AC97;
          rINTPND = BIT_WDT_AC97;


          if (index >4 ){
          index=1;
          }
          else{
          index++;
          }
          LightLED();


          }

          void EINT_Init(void){

          ClearPending(BIT_WDT_AC97);

          pISR_WDT_AC97=(unsigned int)WatchDog_ISR;
          //Prescaler value=100; lock dividion factor=128;PCLK=67.5MHz
          //t_watchdog=1/[PCLK/(Prescaler value+1)/Division_factor]=0.0002
          //disable watchdog
          rWTCON=0x6418; //01100100 00 0 11 0 0 0
          //周期T=WTCNT*t_watchdog=3S
          rWTDAT=15000;
          rWTCNT=15000;

          rINTMSK &= (~BIT_WDT_AC97);
          rINTSUBMSK &= (~BIT_SUB_WDT); //這個(gè)要用子中斷屏蔽寄存器

          rWTCON=0x643c; //01100100 00 1 11 1 0 0

          }

          void Main(void){
          rGPBCON = 0x015550;
          rGPBUP = 0x7ff;

          ChangeClockDivider(3,1);
          ChangeMPllValue(127,2,1);

          MMU_Init();


          EINT_Init();
          while (1);

          }

          上面的程序每隔3秒會(huì)自動(dòng)點(diǎn)亮一個(gè)LED.實(shí)現(xiàn)定時(shí)跑馬燈的效果。

          這個(gè)例子我本想?yún)⒖及存I的例子來(lái)寫(xiě)代碼,但是中途發(fā)現(xiàn)按鍵的例子不適用于看門(mén)狗。

          因?yàn)榭撮T(mén)狗是內(nèi)部中斷,按鍵是外部中斷。另外最讓我不明白的是,書(shū)上或是網(wǎng)上很多例子都用


          pISR_WDT_AC97作為看門(mén)狗中斷服務(wù)的向量地址。嘗試用TIME0,TIME1都不行。奇怪啊



          關(guān)鍵詞: ARM看門(mén)狗中斷試

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();