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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Cortex—M3的異常處理機(jī)制研究

          Cortex—M3的異常處理機(jī)制研究

          作者: 時(shí)間:2012-09-07 來(lái)源:網(wǎng)絡(luò) 收藏
            引 言

            Cortex—M3是公司第一款基于v7一M的微控制器內(nèi)核,在指令執(zhí)行、異??刂?、時(shí)鐘管理、跟蹤調(diào)試和存儲(chǔ)保護(hù)等方面相對(duì)于7有很大的區(qū)別。尤其在異常處理機(jī)制方面有很大的改進(jìn),其異常響應(yīng)只需要12個(gè)時(shí)鐘周期。NVIC(Nested Vectored Inteirupt Contmller,嵌套向量中斷控制器)是Cortex—M3處理器的一個(gè)緊耦合部件,可以配置1~240個(gè)帶有256個(gè)優(yōu)先級(jí)、8級(jí)搶占優(yōu)先權(quán)的物理中斷,為處理器提供出色的異常處理能力。同時(shí),搶占(pre-emption)、尾鏈(tail—chaining)、遲到(1ate—arriving)技術(shù)的使用,大大縮短了異常事件的響應(yīng)時(shí)間。

            異?;蛘咧袛嗍翘幚砥黜憫?yīng)系統(tǒng)中突發(fā)事件的一種機(jī)制。當(dāng)異常發(fā)生時(shí),Cortex—M3通過(guò)硬件自動(dòng)將編程計(jì)數(shù)器(PC)、編程狀態(tài)寄存器(XPSR)、鏈接寄存器(LR)和R0~R3、R12等寄存器壓進(jìn)堆棧。在Dbus(數(shù)據(jù)總線)保存處理器狀態(tài)的同時(shí),處理器通過(guò)Ibus(指令總線)從一個(gè)可以重新定位的向量表中識(shí)別出異常向量,并獲取ISR函數(shù)的地址,也就是保護(hù)現(xiàn)場(chǎng)與取異常向量是并行處理的。一旦壓棧和取指令完成,中斷服務(wù)程序或故障處理程序就開(kāi)始執(zhí)行。執(zhí)行完ISR,硬件進(jìn)行出棧操作,中斷前的程序恢復(fù)正常執(zhí)行。圖1為Cortex—M3處理器的異常處理流程。

          Cortex

            1 Cortex—M3異常類型

            同ARM7相比,Cortex—M3在異常的分類和優(yōu)先級(jí)上有很大的差異,如表1所列。

          Cortex

            Cortex—M3將異常分為復(fù)位、不可屏蔽中斷、硬故障、存儲(chǔ)管理、總線故障和應(yīng)用故障、SVcall、調(diào)試監(jiān)視異常、PendSV、SysTick以及外部中斷等。Cortex—M3采用向量表來(lái)確定異常的入口地址。與大多數(shù)其他ARM內(nèi)核不同,Cortex—M3向量表中包含異常處理程序和ISR的地址,而不是指令。復(fù)位處理程序的初始堆棧指針和地址必須分別位于0xO和Ox4。這些值在隨后的復(fù)位中被加載到適當(dāng)?shù)?SPAN onmouseover="javascript:setVal('CPU'); companyAdEvent.show(this,'companyAdDiv',[5,18])" onmouseout="companyAdEvent.out('companyAdDiv')">CPU寄存器中。向量表偏移控制寄存器將向量表定位在CODE(Flash)或SRAM中。復(fù)位時(shí),默認(rèn)情況下為CODE模式,但可以重新定位。異常被接受后,處理器通過(guò)Ibus查表獲取地址,執(zhí)行異常處理程序。

            在Cortex—M3的優(yōu)先級(jí)分配中,較低的優(yōu)先級(jí)值具有較高的優(yōu)先級(jí)。NVIC將異常的優(yōu)先級(jí)分成兩部分:搶占優(yōu)先級(jí)(pre—emption priority)部分和子優(yōu)先級(jí)(sub—priority)部分,可以通過(guò)中斷申請(qǐng)/復(fù)位控制寄存器來(lái)確定兩個(gè)部分所占的比例。搶占優(yōu)先級(jí)和子優(yōu)先級(jí)共同作用確定了異常的優(yōu)先級(jí)。搶占優(yōu)先級(jí)用于決定是否發(fā)生搶占,一個(gè)異常只有在搶占優(yōu)先級(jí)高于另一個(gè)異常的搶占優(yōu)先級(jí)時(shí)才能發(fā)生搶占。當(dāng)多個(gè)掛起異常具有相同的搶占優(yōu)先級(jí)時(shí),子優(yōu)先級(jí)起作用。通過(guò)NVIC設(shè)置的優(yōu)先級(jí)權(quán)限高于硬件默認(rèn)優(yōu)先級(jí)。當(dāng)有多個(gè)異常具有相同的優(yōu)先級(jí)時(shí),則比較異常號(hào)的大小,異常號(hào)小的被優(yōu)先激活。

            2 Cortex—M3異常處理

            2.1 異常的進(jìn)入

            當(dāng)一個(gè)異常出現(xiàn)以后,Cortex一M3處理器由硬件通過(guò)Dbus保存處理器狀態(tài),同時(shí)通過(guò)Ibus讀取向量表中的SP,更新PC和LR,執(zhí)行中斷服務(wù)子程序。

            為了應(yīng)對(duì)堆棧操作階段到來(lái)后的更高優(yōu)先級(jí)異常,Cortex—M3支持遲到和搶占機(jī)制,以便對(duì)各種可能事件做出確定性的響應(yīng)。

            搶占是一種對(duì)更高優(yōu)先級(jí)異常的響應(yīng)機(jī)制。Cortex—M3異常搶占的處理過(guò)程如圖2所示。當(dāng)新的更高優(yōu)先級(jí)異常到來(lái)時(shí),處理器打斷當(dāng)前的流程,執(zhí)行更高優(yōu)先級(jí)的異常操作,這樣就發(fā)生了異常嵌套。遲到是處理器用來(lái)加速搶占的一種機(jī)制。如果一個(gè)具有更高優(yōu)先級(jí)的異常在上一個(gè)異常執(zhí)行壓棧期間到達(dá),則處理器保存狀態(tài)的操作繼續(xù)執(zhí)行,因?yàn)楸槐4娴臓顟B(tài)對(duì)于兩個(gè)異常都是一樣的。但是,NVIC馬上獲取的是更高優(yōu)先級(jí)的異常向量地址。這樣在處理器狀態(tài)保存完成后,開(kāi)始執(zhí)行高優(yōu)先級(jí)異常的ISR。

          Cortex

            2.2 異常的返回

            異常返回的操作如圖3所示。當(dāng)從異常中返回時(shí),處理器可能會(huì)處于以下情況之一:

            ◆尾鏈到一個(gè)已掛起的異常,該異常比棧中所有異常的優(yōu)先級(jí)都高;

            ◆如果沒(méi)有掛起的異常,或是棧中最高優(yōu)先級(jí)的異常比掛起的最高優(yōu)先級(jí)異常具有更高的優(yōu)先級(jí),則返回到最近一個(gè)已壓棧的ISR;

            ◆如果沒(méi)有異常已經(jīng)掛起或位于棧中,則返回到Tread模式。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

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