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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > ARM裸機開發(fā)222440中斷原理

          ARM裸機開發(fā)222440中斷原理

          作者: 時間:2016-11-19 來源:網(wǎng)絡(luò) 收藏
          1CPU與外設(shè)之間的數(shù)據(jù)傳送控制方式(I/O控制方式)

          通常有以下三種方式

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

          1.查詢方式

          2.中斷方式

          3.DMA方式(在獨立開辟的一個空間不由CPU控制,有DMA自己進行管理。實現(xiàn)存儲器與外設(shè)的高速的數(shù)據(jù)傳輸方式)

          主要講中斷:

          中斷請求---->中斷仲裁---->中斷響應(yīng)---->中斷處理---->中斷返回(要保存現(xiàn)場)

          中斷處理流程:

          1.中斷控制器捕獲當前外設(shè)發(fā)出的中斷信號,通知SOC(中央處理芯片:片上系統(tǒng))

          2.SOC保存當前程序的運行環(huán)境,調(diào)用中斷服務(wù)程序(ISR:一小段代碼)進行處理中斷

          3.在ISR中通過讀取中斷控制寄存器、外設(shè)的相關(guān)寄存器來識別那一個中斷觸發(fā),獲取硬件中斷號IRQ,跳轉(zhuǎn)到相應(yīng)的處理程序(詳細完整的處理程序)來完成中斷處理

          4.清除中斷:通過讀寫相關(guān)寄存器

          5.恢復(fù)被中斷的環(huán)境,繼續(xù)執(zhí)行(現(xiàn)場)

          2440有60個中斷源

          一級中斷源,二級中斷源等的概念


          圖片中的所指示的單元為相應(yīng)的寄存器

          懸掛寄存器source pending(SUBSRCPND、SRCPND)清零方式為向相應(yīng)的位寫1.與 常規(guī)的清零方式不同。INTPND也是通過寫1進行清0操作

          INTOFFSET:這個寄存器用來表示INTPND寄存器中哪位被置1了,即INTPND寄存器中位為1時,INTOFFSET寄存器的值為x(x為0~31)

          在清除SRCPND、INTPND寄存器時,INTOFFSET寄存器被自動清除。

          具體內(nèi)容詳見芯片手冊S3C2440

          外部中斷:

          外部中斷也有相關(guān)的寄存器EXTINTx,EINTMASK,EINTPEND三個寄存器

          EXTINTx設(shè)置中斷的觸發(fā)方式低電平,高電平,上升沿,下降沿,邊沿觸發(fā)


          EINTMASK


          EINTPEND中斷懸掛寄存器(相應(yīng)中斷觸發(fā),相應(yīng)的位置1)讀取此寄存器可以知道是那一個寄存器被觸發(fā)了




          評論


          技術(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); })();