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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 外部中斷處理和內(nèi)部中斷處理的差異性

          外部中斷處理和內(nèi)部中斷處理的差異性

          作者: 時間:2013-08-29 來源:網(wǎng)絡(luò) 收藏

          在現(xiàn)今SOC設(shè)計中,當(dāng)周邊裝置(Peripheral IP)想要和中央處理器(CPU)溝通時,最常使用的機制是透過中斷(Interrupt)。周邊裝置可觸發(fā)中斷給中央處理器,當(dāng)中央處理器接收到中斷后,則可判斷是由那個周邊裝置觸發(fā)些中斷,接著處理相對應(yīng)的中斷處理程序(ISR,Interrupt Service Routine),藉此達到彼此溝通的目的。

          而AndesCore?在中斷處理方面,共支持兩種模式:器(IVIC Mode,Internal Vector Interrupt Controller)和器(EVIC Mode,External Vector Interrupt Controller)。其中最大的,即是中斷控制器所存在的位置。在模式下,AndesCore?本身即設(shè)置了一個中斷控制器存在于CPU內(nèi)部,經(jīng)由此中斷控制器來處理相關(guān)中斷的工作。而在模式下,用戶必須在CPU外部實做一個中斷控制器來處理相關(guān)中斷工作。

          除了上述的之外,在硬件方面的整合和軟件方面的應(yīng)用,也存在些許。本文之目的除了介紹這些差異性外,也提供一個簡單的設(shè)計平臺供使用者參考。期望能對使用者有所幫助,也希望讀者不吝指教提供您寶貴的意見。

          1. 中斷處理模式介紹

          AndesCore?共支持兩種中斷處理模式:器(IVIC Mode,Internal Vector Interrupt Controller)和器(EVIC Mode,External Vector Interrupt Controller)。以下的介紹將架構(gòu)于AndesCore? N968A-S這顆中央處理器。帶領(lǐng)使用者循序漸進地,了解這兩種中斷處理模式的差異。

          1.1 Definition

          AndesCore? N968A-S支持兩種中斷處理模式,首先,我們先介紹關(guān)于這兩種模式的定義。

          1.1.1 IVIC Mode

          AndesCore? N968A-S內(nèi)部設(shè)計了一個中斷控制器,所支持的中斷來源數(shù)目可透過配置來決定。目前最大可支持16個中斷來源,但可擴充至32個。請參考圖表 1。若使用這存在于CPU內(nèi)部的中斷控制器來處理相關(guān)中斷工作時,則為IVIC模式。假若SOC的中斷來源大于32個時,使用者還是可以使用IVIC模式,但是需要將多個中斷來源合為一個中斷訊號線(ex: OR function),且中斷處理程序(ISR)在該中斷訊號線觸發(fā)時,需要去判斷是由那個中斷來源所觸發(fā)。在N968A-S的IVIC mode之下,每個中斷來源可以選定值為0~3的優(yōu)先權(quán) (priority). 優(yōu)先權(quán)高的中斷來源可以打斷優(yōu)先權(quán)低的中斷來源。

          1.1.2 EVIC Mode

          假若IVIC模式不符合用戶所設(shè)計的系統(tǒng),用戶就需要選用EVIC模式。在此模式下,用戶需要額外設(shè)計一個中斷控制器,用來處理周邊裝置和中央處理器之間相關(guān)中斷的工作,作為兩者間溝通的橋梁。

          外部中斷處理和內(nèi)部中斷處理的差異性

          圖表 1. AndesCore? N968A-S 所支持中斷來源數(shù)目

          1.1.1 Interruption Vector Entry Points

          為了加速中斷處理的時間,AndesCore? N968A-S內(nèi)部實做了一個Interruption Vector Table。將不同的中斷事件分別對應(yīng)到不同的Vector Entry,當(dāng)中斷發(fā)生時,CPU即可判斷中斷是由那個周邊裝置所觸發(fā),并跳到該中斷所對應(yīng)的Vector Entry,進而執(zhí)行相關(guān)的中斷處理程序(ISR)。

          在前面章節(jié)有介紹AndesCore? N968A-S支持兩種不同的中斷處理模式。因此,在不同的中斷處理模式下,也對應(yīng)了不同的Interruption Vector Table。

          1.1.1.1 Interruption Vector Table of IVIC Mode

          在IVIC模式下,所支持的中斷來源可由用戶來配置,支持的數(shù)目由2個到32個。Interruption Vector Table相關(guān)信息如下:

          l 41 entry points (9 exceptions + 32 interrupts)

          l Address = IVB.IVBASE + (entry number) * IVB.ESZ

          (VEP: Vector Entry Point)

          外部中斷處理和內(nèi)部中斷處理的差異性

          圖表2. Interruption Vector Table of IVIC Mode

          1.1.1.1 Interruption Vector Table of EVIC Mode

          在EVIC模式下,所支持的中斷來源數(shù)目可達到64個中斷。Interruption Vector Table相關(guān)信息如下:

          l 73 entry points (9 exceptions + 64 interrupts)

          l Address = IVB.IVBASE + (entry number) * IVB.ESZ

          外部中斷處理和內(nèi)部中斷處理的差異性

          圖表3. Interruption Vector Table of EVIC Mode

          1.2 Signal Descriptions

          AndesCore? N968A-S 提供相關(guān)中斷訊號線,使得CPU可與周邊裝置或是外部中斷控制器溝通。在EVIC模式下,除了中斷來源訊號線之外,還包含了和外部中斷控制器相互溝通的訊號線,詳細訊號線敘述如下:

          外部中斷處理和內(nèi)部中斷處理的差異性

          其中,evic_ireqval和evic_ireqack這兩個訊號線用來和外部中斷控制器溝通。在IVIC模式下,周邊裝置的中斷訊號可和int_req[N:0]直接整合。當(dāng)周邊裝置觸發(fā)中斷時,相對應(yīng)的int_req訊號會拉起,告知CPU該周邊裝置觸發(fā)了中斷,CPU即會跳到所對應(yīng)的Vector Entry來執(zhí)行相關(guān)的中斷處理程序。

          而在EVIC模式下,外部中斷控制器會負(fù)責(zé)處理周邊裝置的中斷訊號。當(dāng)周邊裝置觸發(fā)中斷時,外部中斷處理器會負(fù)責(zé)和周邊裝置溝通,并將相對應(yīng)的中斷訊號(int_req)和中斷需求訊號(evic_ireqval)發(fā)給CPU,當(dāng)CPU接收到中斷時,會將中斷接收訊號(evic_ireqack)拉起,告知外部中斷處理器收到中斷,并去處理相關(guān)中斷處理程序。


          上一頁 1 2 3 下一頁

          評論


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