国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

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

發(fā)布時(shí)間:2010-4-12 11:36    發(fā)布者:李寬
關(guān)鍵詞: 機(jī)制 , 研究
引言

Cortex—M3是ARM公司第一款基于 ARMv7一M的微控制器內(nèi)核,在指令執(zhí)行、異常控制、時(shí)鐘管理、跟蹤調(diào)試和存儲(chǔ)保護(hù)等方面相對(duì)于ARM7有很大的區(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處理器的異常處理流程。



1 Cortex—M3異常類(lèi)型

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



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ù)腃PU寄存器中。向量表偏移控制寄存器將向量表定位在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。



2.2 異常的返回

Cortex- M3異常返回的操作如圖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īng)對(duì)異常返回階段可能遇到的新的更高優(yōu)先級(jí)異常,Cortex—M3支持完全基于硬件的尾鏈機(jī)制,簡(jiǎn)化了激活的和未決的異常之問(wèn)的移動(dòng),能夠在兩個(gè)異常之間沒(méi)有多余的狀態(tài)保存和恢復(fù)指令的情況下實(shí)現(xiàn)back—to—back處理。尾鏈發(fā)生的2個(gè)條件:異常返回時(shí)產(chǎn)生了新的異常;掛起的異常的優(yōu)先級(jí)比所有被壓棧的異常的優(yōu)先級(jí)都高。

尾鏈發(fā)生后,Cortex—M3處理過(guò)程如圖3中尾鏈分支所示。這時(shí),Cortex—M3處理器終止正在進(jìn)行的出棧操作并跳過(guò)新異常進(jìn)入時(shí)的壓棧操作,同時(shí)通過(guò)Ibus立即取出掛起異常的向量。在退出前一個(gè)ISR返回操作6個(gè)周期后,開(kāi)始執(zhí)行尾鏈的ISR。

3 Cortex—M3和ARM7中斷控制器比較

在過(guò)去的十年中,基于ARMv4的ARM7系列微控制器廣泛應(yīng)用在各個(gè)領(lǐng)域。在ARM7系列中,并沒(méi)有對(duì)中斷進(jìn)行獨(dú)立的服務(wù),而是通過(guò)犧牲處理器一定的性能來(lái)?yè)Q取有效的中斷響應(yīng)和中斷處理機(jī)制。Cortex—M3高度耦合的NVIC可以實(shí)現(xiàn)硬件中斷處理,同時(shí)支持遲到和尾鏈機(jī)制,加快了異常響應(yīng)的速度,充分發(fā)揮了處理器的性能。圖4為Corex—M3和ARM7在中斷控制器結(jié)構(gòu)方面的差異。



比較可知,NVIC是直接作為Cortex—M3處理器的一部分,集成在處理器核內(nèi)部;而VIC只是游離在ARM7內(nèi)核的外圍,這樣就必然占用內(nèi)核資源,影響了處理速度。Cortex—M3和ARM7中斷控制器在功能和實(shí)現(xiàn)方式上的差異如表2所列。

3.1 處理器響應(yīng)單個(gè)異常

Cortex一M3和ARM7異常處理過(guò)程如圖5所示。



ARM7處理器的異常開(kāi)銷(xiāo):



其中,TARM7為ARM7處理異常的時(shí)間開(kāi)銷(xiāo);TARM2_PUSH和TARM7_POP為ARM7進(jìn)行壓棧和出棧的操作時(shí)間;TCoretx-M3為 Cortex一M3處理異常的時(shí)間開(kāi)銷(xiāo);TM3_PUSH和TM3_POP為Cortex—M3進(jìn)行壓棧和出棧的操作時(shí)間。

可見(jiàn),由于采用處理器狀態(tài)硬件保存,Cortex—M3處理器少用了18周期,節(jié)省了42.8%的異常開(kāi)銷(xiāo)。

3.2 處理器響應(yīng)遲到異常

Cortex—M3和ARM7在處理遲到高優(yōu)先級(jí)異常時(shí)的差異如圖6所示。



當(dāng)IRQ2正在為執(zhí)行ISR2保存處理器狀態(tài)時(shí),遲到了一個(gè)優(yōu)先級(jí)更高的異常IRQl。這時(shí)ARM7繼續(xù)進(jìn)行壓棧操作。在壓棧操作完成后,ARM7繼續(xù)為執(zhí)行ISRl進(jìn)行壓棧操作,然后執(zhí)行ISRl。其實(shí),兩次壓棧操作所保存的內(nèi)容是一樣的。因此,Cortex—M3對(duì)這個(gè)階段的操作進(jìn)行了優(yōu)化,引進(jìn)了遲到異常技術(shù),只進(jìn)行一次的壓棧操作。并且在ISRl執(zhí)行完成之后,Cortex—M3沒(méi)有進(jìn)行出棧操作,而是通過(guò)一個(gè)6周期的尾鏈,直接進(jìn)入ISR2的執(zhí)行。

在上面的例子中,ARM7處理器的異常開(kāi)銷(xiāo):



其中,TARM7_later和TM3_later分別為ARM7和Cortex—M3處理遲到異常所用的時(shí)間開(kāi)銷(xiāo);Ttail-chaining為 Cortex—M3處理尾鏈所用的時(shí)間。

通過(guò)計(jì)算可以看出,Cortex—M3少用了44周期,節(jié)省65%的異常開(kāi)銷(xiāo)。

3.3 處理器處理back-to-back異常

若一個(gè)新的異常在上一個(gè)異常寄存器出棧時(shí)到來(lái),ARM7和Cortex—M3的處理方式也有很大不同。Cortex—M3和ARM7在處理back—to —back異常時(shí)的差異如圖7所示。ARM7繼續(xù)當(dāng)前的出棧操作,在出棧操作完成后,處理器為執(zhí)行ISR2進(jìn)行壓棧操作,然后執(zhí)行ISR2。其實(shí),這時(shí)候處理器出棧和壓棧的內(nèi)容是一致的。Cortex—M3同樣優(yōu)化了這個(gè)階段的操作,引進(jìn)了尾鏈機(jī)制。當(dāng)IRQ2到來(lái)時(shí),Cortex—M3立即中止已經(jīng)進(jìn)行了8個(gè)周期的出棧操作,轉(zhuǎn)而進(jìn)行尾鏈操作,然后執(zhí)行ISR2。



在處理back—to—back異常時(shí),ARM7處理器用在ISRl到ISR2轉(zhuǎn)換的異常開(kāi)銷(xiāo):

TARM_btb=TARM7_POP+TARM7_PUSH=16+26=42周期

Cortex-M3處理器用在ISRl到ISR2轉(zhuǎn)換的異常開(kāi)銷(xiāo):

TM3_btb=Tcancel+Ttail-chaining=8+6=14周期

其中,TARM_btb和TM3_btb分別為ARM7和Cortex—M3處理back—to—back異常轉(zhuǎn)換所用的時(shí)間開(kāi)銷(xiāo);Tcancel為發(fā)生尾鏈時(shí)Cortex—M3已用于狀態(tài)恢復(fù)的時(shí)間。

通過(guò)計(jì)算可以看出,Cortex—M3少用了28周期。其實(shí),Cortex—M3處理器用在ISRl到ISR2轉(zhuǎn)換的異常開(kāi)銷(xiāo)最低可以優(yōu)化到只用6個(gè)周期,這樣就極大地提高了back—to—back異常的響應(yīng)能力。

結(jié)語(yǔ)

本文闡述了Cortex—M3處理器的異常處理機(jī)制。通過(guò)和ARM7進(jìn)行比較,量化分析了Cortex一M3在異常處理方面的優(yōu)勢(shì),對(duì)工程師使用 Cortex—M3的異常處理會(huì)有一定參考和幫助。

參考文獻(xiàn)

   1. Shyam Sadasican An Introduction to the ARM Cortex-M3 Processor 2006
   2. ARM Limited Cortex-M3 Technical Reference Manual 2006
   3. ARM Limited ARMv7-M Architecture Reference Manual 2007
   4. 李寧 基于MDK的STM32處理器開(kāi)發(fā)應(yīng)用 2008

作者:武漢理工大學(xué) 方安平  蔡俊宇
來(lái)源:單片機(jī)嵌入式系統(tǒng)應(yīng)用  2009 (2)
本文地址:http://m.qingdxww.cn/thread-10332-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開(kāi)發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開(kāi)發(fā)培訓(xùn)教程
  • 集成高級(jí)模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产一级一片免费播放刺激 | 久久精品在这里 | 国内精品久久精品 | 思思久久q6热在精品国产 | 色婷婷综合久久久久中文一区二区 | 免费视频不卡 | 亚洲日本中文字幕天堂网 | 欧美成人在线免费观看 | 亚洲欧美日韩激情在线观看 | a一级特黄日本大片 s色 | 国产午夜视频 | 欧美精品久久久亚洲 | 亚洲国产欧美久久香综合 | 亚洲第一天堂网 | 免费国产不卡午夜福在线观看 | 91中文在线 | 在线看片免费人成视久网下载 | 成人高清视频免费观看 | 欧美三级不卡在线观线看高清 | 九色视频在线观看免费 | 日韩欧美在线观看视频一区二区 | www色日本 | 两个人的视频在线免费观看 | 向日葵视频app在线无限看免费 | 欧美激情精品久久久久久久 | 加勒比日本道 | 免费四虎永久在线精品 | 国产护士资源总站 | 国产午夜精品一区二区三区 | 国产精品久久久久免费 | 一级成人a毛片免费播放 | 六月婷婷色 | www.99| 青青热久免费精品视频网站 | 国产有码 | 男女啪啪抽搐一进一出免费看 | 在线精品国产一区二区 | 免费大片黄在线观看日本 | 性做久久久久久蜜桃花 | 国产精品国产三级国产专区不 | 亚洲乱码卡一卡二卡三 |