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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM9 S3C2440—中斷和定時器的初始化配置

          ARM9 S3C2440—中斷和定時器的初始化配置

          作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

          7、rPRIORITY(P390)設(shè)置,可選

          優(yōu)先級寄存器設(shè)置,設(shè)置中斷的優(yōu)先級,一般不設(shè)置,使用默認(rèn)的優(yōu)先級即可。

          8、設(shè)置中斷程序入口,如pISR_TIMER0=(U32)IRQ_Timer0_Handle;

          外部中斷pISR_EINT8_23=(U32)Key_ISR;

          Key_ISR為中斷程序程序函數(shù)名,也就是中斷服務(wù)函數(shù)的入口地址,這里強制轉(zhuǎn)換為無符號32位整型。

          pISR_EINT8_23在2440addr.h中的宏定義是

          #definepISR_EINT8_23(*(unsigned*)(_ISR_STARTADDRESS+0x34))

          pISR_EINT8_23就是向量表中的一個地址,當(dāng)發(fā)生外部中斷8-23時,程序轉(zhuǎn)入中斷向量表相應(yīng)地址處,而向量表中存放著中斷服務(wù)函數(shù)的入口地址,程序轉(zhuǎn)而執(zhí)行中斷服務(wù)程序。

          9、允許中斷,如EnableIrq(BIT_TIMER0);

          允許外部中斷EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);

          這個宏定義在2440addr.h中,原型為

          #defineEnableIrq(bit)rINTMSK&=~(bit)

          #defineEnableSubIrq(bit)rINTSUBMSK&=~(bit)

          到這里,所有的中斷和定時器初始化工作就算完成了!

          10、編寫中斷服務(wù)程序

          staticvoid__irqKey_ISR(void){}

          _irq是C關(guān)鍵字,它告訴編譯器,這段程序是中斷程序,以便做特殊的處理。在中斷程序里,要做的事情主要有:

          (1)、清中斷源掛起寄存器,如ClearPending(BIT_EINT8_23);

          (2)、對于外部中斷,還要給EINTPEND寄存器相關(guān)位清零,如

          rEINTPEND|=1<<11;這兩步的目的是為了防止反復(fù)進(jìn)入中斷,有多個中斷源時,要判斷是哪個中斷源,給相應(yīng)的位清零。

          (3)、完成中斷特點的功能。如按鍵中斷服務(wù)程序

          staticvoid__irqKey_ISR(void)

          {

          U8key;

          if(rINTPND==BIT_EINT8_23)

          {

          ClearPending(BIT_EINT8_23);

          if(rEINTPEND&(1<<11))

          {

          rEINTPEND|=1<<11;

          }

          if(rEINTPEND&(1<<19))

          {

          rEINTPEND|=1<<19;

          }

          }

          if(rINTPND==BIT_EINT0)

          {

          ClearPending(BIT_EINT0);

          }

          if(rINTPND==BIT_EINT2)

          {

          ClearPending(BIT_EINT2);

          }//以上都是對相關(guān)寄存器的相應(yīng)位清零,使用多個中斷時,要條件判斷清哪個位

          此處寫特定功能的中斷程序

          }

          定時器初始化

          voidTimer0_init(void)

          {

          //Timer0init

          rTCFG0=49;//pclk/(49+1)

          rTCFG1=0x03;//16分頻=62500HZ

          rTCNTB0=62500/2;//TCNTB0[15:0]=計數(shù)值

          rTCMPB0=0;

          rTCON=0x09;//啟動定時器,允許將計數(shù)值重載入TCNTB0、TCMPB0

          ClearPending(BIT_TIMER0);

          pISR_TIMER0=(U32)IRQ_Timer0_Handle;

          EnableIrq(BIT_TIMER0);

          }

          定時器中斷處理函數(shù)

          staticvoid__irqIRQ_Timer0_Handle(void)

          {

          ClearPending(BIT_TIMER0);

          此處寫特定功能的中斷程序

          }


          上一頁 1 2 下一頁

          評論


          技術(shù)專區(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); })();