第四章ARM存儲(chǔ)與異常中斷處理_第1頁(yè)
第四章ARM存儲(chǔ)與異常中斷處理_第2頁(yè)
第四章ARM存儲(chǔ)與異常中斷處理_第3頁(yè)
第四章ARM存儲(chǔ)與異常中斷處理_第4頁(yè)
第四章ARM存儲(chǔ)與異常中斷處理_第5頁(yè)
已閱讀5頁(yè),還剩90頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1第4章ARM體系結(jié)構(gòu)本章主要介紹以下內(nèi)容:ARM存儲(chǔ)器組織ARM的異常中斷24.6ARM存儲(chǔ)器組織介紹以下內(nèi)容:數(shù)據(jù)類型和存儲(chǔ)格式ARM的存儲(chǔ)體系片上存儲(chǔ)器的用法 協(xié)處理器CP15存儲(chǔ)器管理單元MMU保護(hù)單元快速上下文切換擴(kuò)展寫緩存器(WriteBuffer)ARM的異常中斷向量表和異常中斷處理與返回34.6.1數(shù)據(jù)類型和存儲(chǔ)格式ARM存儲(chǔ)器中的數(shù)據(jù)類型有6種有符號(hào)數(shù)8位(字節(jié))、16位(半字)、32位(字)無(wú)符號(hào)數(shù)8位(字節(jié))、16位(半字)、32位(字)缺省端序設(shè)置為小端序2008年6月21日44.6.2ARM的存儲(chǔ)體系參看下圖,抽象成一個(gè)呈金字塔型的存儲(chǔ)結(jié)構(gòu)注重研究第2層2008年6月21日54.6.3片上存儲(chǔ)器的用法多數(shù)ARM處理器芯片內(nèi)部集成了存儲(chǔ)器它們統(tǒng)稱為片上存儲(chǔ)器用途有:片上Cache、片上SRAM、緊耦合存儲(chǔ)器(TCM)、寫緩存片上存儲(chǔ)器的存儲(chǔ)空間可以通過(guò)指令進(jìn)行配置,定義成片上Cache,或者片上SRAM,或者一部分片上Cache加一部分片上SRAM。緊耦合存儲(chǔ)器和寫緩存均需要編程使能或者硬件接線使能按照具體應(yīng)用情況決定片上存儲(chǔ)器配置方法2008年6月21日6片上存儲(chǔ)器用作緊耦合存儲(chǔ)器緊耦合存儲(chǔ)器的英文原文如下:TightlyCoupledMemory,TCM彌補(bǔ)Cache訪問(wèn)的不確定性而增加的片上存儲(chǔ)器。除了片上緊耦合存儲(chǔ)器外,還有緊耦合存儲(chǔ)器接口,它能夠提供低延時(shí)的外存儲(chǔ)器訪問(wèn)。有的處理器含有分立的指令TCM和數(shù)據(jù)TCM。TCM包含在存儲(chǔ)器地址映射空間中,可以作為快速存儲(chǔ)器來(lái)訪問(wèn)。除了不得包含讀敏感地址之外,對(duì)TCM接口上連接的存儲(chǔ)器類型沒(méi)有其他限制。TCM使用物理地址,對(duì)TCM的寫訪問(wèn)受到MMU內(nèi)部保護(hù)信息的控制。2008年6月21日7TCM在ARMv6處理器核的位置ARMv6處理器包括:ARM1136J-S、ARM1156T22008年6月21日8片內(nèi)TCM存儲(chǔ)器舉例ARM926EJ-S核心內(nèi)置32KB指令緩存、16KB數(shù)字緩存和8KB數(shù)據(jù)-TCM和8KB指令-TCM;2008年6月21日9Cortex-R4F方框圖—含TCM接口注意圖的右側(cè)含有一個(gè)TCM仲裁和接口模塊2008年6月21日10ARM1136的TCM支持DMA傳輸參看ARM1136的方框圖2008年年6月21日11ARM966E-S核的TCM地址映映射2008年年6月21日12ARM966E-S的TCM別名地址址空間物理存儲(chǔ)塊塊可以通過(guò)過(guò)TCM接接口映射在在片內(nèi)的TCM存儲(chǔ)儲(chǔ)區(qū)2008年6月21日13ARM966E-S的TCM特點(diǎn)TheARM966E-SprocessorsupportsbothinstructionanddataTCMs.YoucanusetheDTCMandITCMtostorereal-timeandperformance-criticalcode.TheTCMsareinstantiatedexternallytotheARM966E-Smacrocellprovidingforflexibilityinthedesignofthememorysubsystem.Thesystemdesignercanselectmemorytypeandoptimizethememorysubsystemforpowerorspeed.2008年6月21日14ARM966E-S的TCM接口特特點(diǎn)(續(xù)1))ThefeaturesoftheTCMinterfaceinclude:

independentITCMandDTCMsizesof0KBor1KB-64MBinpower-of-twoincrements

softwarevisibilityandprogrammabilityofTCMsizeandenable

bootcontrolforITCM

dataaccesstotheITCMforliteralpoolaccessesincode

simpleSRAM-styleinterfacesupportingbothreadsandwrites

variableTCMwaitstatecontrolforITCMandDTCM

abilitytoindicatesequentialandnonsequentialaccesses.2008年6月21日15ARM966E-S的TCM特點(diǎn)接接口(續(xù)2))TheARM966E-SprocessorcontainsaTCMcontrollerthat:

schedulesrequeststotheTCMinterface

handshakeswiththeARM966E-Smemorysystemcontrollertoacknowledgewhenrequestshavebeenserviced

returnsTCMreaddatabacktotheARM9E-Score.TheTCMsarelocatedintheTCMaddressspace.2008年6月21日16AT91SAM9261處理器的TCMAT91SAM9261的獨(dú)立指令令和數(shù)據(jù)緩存存能支持WinCE和和Linux操作系統(tǒng)統(tǒng)。而其基于TCM構(gòu)架的的SRAM區(qū)區(qū)塊則是“確確定過(guò)程式””實(shí)時(shí)操作系系統(tǒng)的理想安安排。另一方面,160K字節(jié)節(jié)的片上SRAM可劃分分成多個(gè)16K字節(jié)的區(qū)區(qū)塊,作為““指令TCM”、“數(shù)據(jù)據(jù)TCM”或或片上外設(shè)的的緩沖,從而而讓編程人員員靈活地優(yōu)化化系統(tǒng)的性能能和功耗。2008年年6月月21日17TCM的使使能操操作通過(guò)二二種方方式進(jìn)進(jìn)行TCM的使能能操作作使用處處理器器芯片片的INITRAM引腳使用CP15的c1控制寄寄存器器2008年年6月月21日18S3C44B0X和和S3C4510B的三三種片片上存存儲(chǔ)器器的配配置用用法S3C44B0X和S3C4510B都有8KB的片上上存儲(chǔ)儲(chǔ)器它們有有三種種配置置用法法8KB的SRAM8KB的Cache4KB的SRAM加上4KB的Cache較多采采用片片內(nèi)RAM配置而而非片片內(nèi)Cache配置。。2008年年6月月21日19ARM920T的片片內(nèi)存存儲(chǔ)器器注意::ARM920T核核的內(nèi)內(nèi)部沒(méi)沒(méi)有TCM2008年年6月月21日20ARM720T的片片內(nèi)存存儲(chǔ)器器8KByteunifiedcacheMemoryManagementUnit(MMU)writebufferUnified32-bitAHBbusinterfacecarriesbothinstructionsanddataEmbeddedTraceMacrocell(ETM)interface2008年年6月月21日21協(xié)協(xié)處處理器器CP15CP15即所謂謂的系統(tǒng)控控制協(xié)協(xié)處理理器SystemControlCoprocessor在基于于ARM的嵌入入式系系統(tǒng)中中,諸諸如MMU、Cache配置、、緊耦耦合處處理器器、寫寫緩存存配置置之類類的存存儲(chǔ)系系統(tǒng)管管理工工作由由協(xié)處處理器器CP15完成。。CP15可以包包含16個(gè)32位寄存存器編號(hào)為為CP0~CP15。實(shí)際運(yùn)運(yùn)用中中寫為為C0~C15。2008年年6月月21日22CP15寄寄存器器的訪訪問(wèn)用戶只只能夠夠在特特權(quán)模模式下下使用用MRC和MCR指令來(lái)來(lái)訪問(wèn)問(wèn)CP15寄存器器。2008年年6月月21日23存存儲(chǔ)器器管理理單元元MMUARM的MMU部件的的用途途:

完成成虛擬擬存儲(chǔ)儲(chǔ)空間間到物物理存存儲(chǔ)空空間的的映射射。

管理理方式式:頁(yè)頁(yè)式虛虛擬存存儲(chǔ)器器。

頁(yè)的的大小小有兩兩種::粗粒粒度和和細(xì)粒粒度。。

存儲(chǔ)儲(chǔ)器訪訪問(wèn)權(quán)權(quán)限的的控制制。

設(shè)置置虛擬擬存儲(chǔ)儲(chǔ)空間間的緩緩沖特特性。。2008年年6月月21日24保保護(hù)單單元保護(hù)單單元PU,ProtectionUnit也稱為為:MPU,MemoryProtectionUnit為了了消消除除術(shù)術(shù)語(yǔ)語(yǔ)的的二二義義性性,,我我們們統(tǒng)統(tǒng)一一使使用用術(shù)術(shù)語(yǔ)語(yǔ)PU保護(hù)護(hù)單單元元提提供供了了一一個(gè)個(gè)相相當(dāng)當(dāng)簡(jiǎn)簡(jiǎn)單單的的替替代代MMU的方方法法來(lái)來(lái)管管理理存存儲(chǔ)儲(chǔ)器器。。對(duì)于于不不需需要要PU的嵌嵌入入式式系系統(tǒng)統(tǒng)而而言言,,PU簡(jiǎn)化化了了硬硬件件和和軟軟件件,,主主要要表表現(xiàn)現(xiàn)在在不不使使用用轉(zhuǎn)轉(zhuǎn)換換表表,,這這樣樣免免去去了了硬硬件件遍遍歷歷轉(zhuǎn)轉(zhuǎn)換換表表和和軟軟件件建建立立與與維維護(hù)護(hù)轉(zhuǎn)轉(zhuǎn)換換表表。。2008年6月月21日日25保護(hù)單元元的工作作原理和和作用ARM核核的PU使用區(qū)區(qū)域(region))來(lái)管理理系統(tǒng)保保護(hù)。區(qū)區(qū)域是一一個(gè)存儲(chǔ)儲(chǔ)空間相相關(guān)聯(lián)的的一組屬屬性,處處理器核核將這些些屬性保保存在協(xié)協(xié)處理器器CP15的一一些寄存存器里,,并用0-7的的號(hào)碼標(biāo)標(biāo)識(shí)每一一個(gè)區(qū)域域(它也也是一個(gè)個(gè)具有特特定屬性性的邏輯輯存儲(chǔ)空空間)。。區(qū)域的存存儲(chǔ)邊界界通過(guò)兩兩個(gè)屬性性進(jìn)行配配置:起起始地址址和大小小。區(qū)域的大大小可以以是4KB~4MB的的任何2的乘冪冪。2008年6月月21日日26受保護(hù)區(qū)區(qū)域的屬屬性操作系統(tǒng)統(tǒng)可以為為受保護(hù)護(hù)區(qū)域分分配更多多的屬性性,包括括:訪問(wèn)權(quán)限限、Cache和寫緩存存器策略略訪問(wèn)權(quán)限限可以是是:讀/寫、只讀讀和不可可訪問(wèn)基于處理理器模式式的權(quán)限限管理模式式、用戶戶模式等等Cache寫策略寫直達(dá)Cache操作、無(wú)無(wú)Cache操作、無(wú)無(wú)寫緩存存器操作作。2008年6月月21日日27含PU的的ARM處理器器主存訪訪問(wèn)過(guò)程程當(dāng)處理器器訪問(wèn)主主存的一一個(gè)區(qū)域域時(shí),PU比較較該區(qū)域域的訪問(wèn)問(wèn)權(quán)限屬屬性和當(dāng)當(dāng)時(shí)的處處理器模模式。如果請(qǐng)求求符合區(qū)區(qū)域訪問(wèn)問(wèn)標(biāo)準(zhǔn),,則PU允許內(nèi)內(nèi)核讀/寫主存存;如果果存儲(chǔ)器器請(qǐng)求導(dǎo)導(dǎo)致存儲(chǔ)儲(chǔ)器訪問(wèn)問(wèn)違例,,則PU產(chǎn)生一一個(gè)異常常信號(hào)。。異常信號(hào)號(hào)被傳到到處理器器核,處處理器核核判斷是是出異常常是預(yù)取取指令中中止還是是數(shù)據(jù)中中止,然然后跳轉(zhuǎn)轉(zhuǎn)到對(duì)應(yīng)應(yīng)的異常常處理例例程。2008年6月月21日日28區(qū)域?qū)傩孕杂嘘P(guān)區(qū)域域的屬性性如下::區(qū)域可以以相互重重疊每一個(gè)區(qū)區(qū)域有一一個(gè)優(yōu)先先級(jí),該該優(yōu)先級(jí)級(jí)與分配配給區(qū)域域的權(quán)限限無(wú)關(guān)當(dāng)區(qū)域重重疊時(shí),,具有最最高優(yōu)先先權(quán)的區(qū)區(qū)域的屬屬性可以以覆蓋其其他區(qū)域域的屬性性,優(yōu)先先權(quán)僅作作用于重重疊部分分的地址址。區(qū)域的起起始地址址必須是是其大小小的倍數(shù)數(shù)。區(qū)域的大大小是2的乘冪,,2的12次方到32次方。2008年6月月21日日29訪問(wèn)受保保護(hù)區(qū)域域時(shí)產(chǎn)生生的異常常訪問(wèn)所定定義區(qū)域域外的存存儲(chǔ)器將將產(chǎn)生異異常。如果是內(nèi)內(nèi)核預(yù)取取指令,,則PU產(chǎn)生一一個(gè)預(yù)取取指令中中止異常常。如果是存存儲(chǔ)器數(shù)數(shù)據(jù)請(qǐng)求求,則PU產(chǎn)生生數(shù)據(jù)中中止異常常。2008年6月月21日日30帶PU的ARM核概概要以下給給出了了四種種帶PU的ARM核概要屬性性ARM核區(qū)域數(shù)目指令區(qū)域和數(shù)據(jù)區(qū)域是否分離指令和數(shù)據(jù)區(qū)域配置是否分離ARM740T8否否ARM940T16是是ARM946E-S8否是ARM1026EJ-S8否是2008年年6月21日31在帶PU的的ARM系系統(tǒng)中創(chuàng)建建區(qū)域要實(shí)現(xiàn)一個(gè)個(gè)受PU控控制主存的的嵌入式系系統(tǒng),需要要對(duì)主存中中的不同塊塊定義若干干區(qū)域。一個(gè)區(qū)域可可以被創(chuàng)建建一次,然然后一直用用到嵌入式式系統(tǒng)運(yùn)行行結(jié)束;也可以臨時(shí)時(shí)創(chuàng)建一個(gè)個(gè)區(qū)域來(lái)滿滿足一個(gè)特特殊操作的的需要,用用完之后就就加以刪除除。2008年年6月21日32含有PU的的ARM核核含有8個(gè)受保護(hù)區(qū)區(qū)域的ARM核ARM740TARM946E-SARM1026EJ-S含有16個(gè)受保護(hù)區(qū)區(qū)域的ARM核ARM940T2008年年6月21日33初始化PU、Cache和寫寫緩沖器為了初始化化PU、Cache和寫緩沖沖器,控制制系統(tǒng)必須須定義在操操作目標(biāo)平平臺(tái)時(shí)所需需要的保護(hù)護(hù)區(qū)域。功能主存儲(chǔ)器次存儲(chǔ)器系統(tǒng)控制C1C0區(qū)域的cache屬性C2C0區(qū)域的寫緩沖器屬性C3C0區(qū)域的訪問(wèn)權(quán)限屬性C5C0區(qū)域的大小和位置C6C0~C72008年年6月21日34帶保護(hù)單元元和MMU的系統(tǒng)框框圖2008年年6月21日354.6.7ARM處理器的的CacheARM處理器均帶帶有Cache或者可以將將片上存儲(chǔ)儲(chǔ)器配置成成Cache。當(dāng)然,在在不需要時(shí)時(shí)也可以通通過(guò)配置操操作關(guān)閉Cache。ARM處理器的Cache地址映射均均采用組相相聯(lián)映射。。2008年年6月21日364.6.8快速上上下文切換換擴(kuò)展快速上下文文切換擴(kuò)展展FCSE,F(xiàn)astContextSwitchExtensionFCSE是ARM存儲(chǔ)儲(chǔ)系系統(tǒng)統(tǒng)的的修修正正機(jī)機(jī)構(gòu)構(gòu)。。它它修修改改系系統(tǒng)統(tǒng)中中不不同同進(jìn)進(jìn)程程的的虛虛擬擬地地址址,,避避免免在在進(jìn)進(jìn)行行進(jìn)進(jìn)程程間間切切換換時(shí)時(shí)造造成成的的虛虛擬擬地地址址到到物物理理地地址址的的重重映映射射,,從從而而提提高高系系統(tǒng)統(tǒng)的的性性能能。。為了了理理解解ARM處理理器器的的FCSE功能能,,我我們們首首先先考考察察當(dāng)當(dāng)虛虛擬擬存存儲(chǔ)儲(chǔ)器器中中任任務(wù)務(wù)切切換換時(shí)時(shí),,主主存存中中頁(yè)頁(yè)表表和和物物理理存存儲(chǔ)儲(chǔ)器器的的隨隨動(dòng)動(dòng)切切換換。。2008年年6月月21日日37ARM虛虛擬擬存存儲(chǔ)儲(chǔ)器器用用戶戶任任務(wù)務(wù)上上下下文文切切換換示示例例-1任務(wù)務(wù)1正在在執(zhí)執(zhí)行行2008年年6月月21日日38ARM虛虛擬擬存存儲(chǔ)儲(chǔ)器器用用戶戶任任務(wù)務(wù)上上下下文文切切換換示示例例-2任務(wù)2正在執(zhí)行行2008年6月月21日日39ARM虛虛擬存儲(chǔ)儲(chǔ)器用用戶任務(wù)務(wù)上下文文切換示示例-3任務(wù)3正在執(zhí)行行2008年6月月21日日403個(gè)任務(wù)務(wù)的多任任務(wù)環(huán)境境中快快速上下下文切換換擴(kuò)展的的舉例::切換前任任務(wù)1正在運(yùn)行行2008年6月月21日日413個(gè)任務(wù)務(wù)的多任任務(wù)環(huán)境境中快快速上下下文切換換擴(kuò)展的的舉例::(續(xù)))切換后任任務(wù)2正在運(yùn)行行2008年6月月21日日42寫寫緩存器器(WriteBuffer)寫緩存器器是一個(gè)個(gè)容量很很小的片片內(nèi)的先先進(jìn)先出出(FIFO)存儲(chǔ)器器,位于于處理器器核與主主存之間間。寫緩存器器的主要要用途是是:當(dāng)CPU輸出數(shù)據(jù)據(jù)時(shí),總線恰好被占占用而無(wú)無(wú)法輸出出,此時(shí)時(shí),CPU可以把輸輸出數(shù)據(jù)據(jù)寫入到到寫緩存存器。當(dāng)當(dāng)總線上上沒(méi)有比比寫緩存存區(qū)優(yōu)先先級(jí)更高高的掌控控者時(shí),,寫緩存存區(qū)可以以通過(guò)總總線將數(shù)數(shù)據(jù)寫入入內(nèi)存。。CPU由于不需需要等待待寫操作作的完成成而增強(qiáng)強(qiáng)了性能能。寫緩存區(qū)區(qū)中的FIFO存儲(chǔ)器在在存儲(chǔ)層層次中與與L1Cache處于相同同的層次次。2008年6月月21日日43S3C44B0X處理理器的寫寫緩存區(qū)區(qū)由4個(gè)寫緩存存寄存器器構(gòu)成。。每一個(gè)個(gè)寫緩存存寄存器器包括一一個(gè)32位數(shù)據(jù)字字段,一一個(gè)28位地址字字段和一一個(gè)2位狀態(tài)字字段??梢酝ㄟ^(guò)過(guò)指令對(duì)對(duì)控制寄寄存器SYSCFG的WE位置1或者置0來(lái)使能或或者禁能能寫緩存存器。參參看下圖圖。2008年6月月21日日444.7ARM的異異常中斷斷ARM異異常與中中斷不做做嚴(yán)格意意義上的的區(qū)別ARM的的中斷向向量表內(nèi)內(nèi)存放的的是響應(yīng)應(yīng)異常和和中斷的的轉(zhuǎn)移指指令而不不是中斷斷向量地地址。在ARM處理器器中,當(dāng)當(dāng)異常發(fā)發(fā)生時(shí),,完成當(dāng)當(dāng)前指令令后跳轉(zhuǎn)轉(zhuǎn)到相應(yīng)應(yīng)的異常常中斷處處理程序序入口執(zhí)執(zhí)行異常常中斷處處理。異異常處理理完畢后后返回原原來(lái)的程程序斷點(diǎn)點(diǎn)繼續(xù)執(zhí)執(zhí)行原來(lái)來(lái)的程序序。ARM異常和中中斷處理理課程安排排ARM體系結(jié)構(gòu)構(gòu)知識(shí)回回顧ARM異常的響響應(yīng)ARM異常的處處理ARM異常的返返回ARM中斷的產(chǎn)產(chǎn)生、初初始化和和響應(yīng)處處理流程程異常簡(jiǎn)介只要正常常的程序序流被暫暫時(shí)中止止,處理理器就進(jìn)進(jìn)入異常常模式。。例如響響應(yīng)一個(gè)個(gè)來(lái)自外外設(shè)的中中斷。在在處理異異常之前前,ARM內(nèi)核保存存當(dāng)前的的處理器器狀態(tài),,這樣當(dāng)當(dāng)處理程程序結(jié)束束時(shí)可以以恢復(fù)執(zhí)執(zhí)行原來(lái)來(lái)的程序序。如果同時(shí)時(shí)發(fā)生兩兩個(gè)或更更多異常常,那么么將按照照固定的的順序來(lái)來(lái)處理異異常,詳詳見(jiàn)“異常優(yōu)優(yōu)先級(jí)級(jí)”部分。。異常入入口/出口匯匯總異?;蛉肟诜祷刂噶钪暗臓顟B(tài)備注ARMR14_xThumbR14_xBLMOVPC,R14PC+4PC+2

此處PC為BL,SWI,為定義的指令取指或預(yù)取指中止指令的地址SWIMOVSPC,R14_svcPC+4PC+2未定義的指令MOVSPC,R14_undPC+4PC+2預(yù)取指中止SUBSPC,R14_abt,#4PC+4PC+4快中斷SUBSPC,R14_fiq,#4PC+4PC+4此處PC為由于FIQ或IRQ占先而沒(méi)有被執(zhí)行的指令的地址中斷SUBSPC,R14_irq,#4PC+4PC+4數(shù)據(jù)中止SUBSPC,R14_abt,#8PC+8PC+8此處PC為產(chǎn)生數(shù)據(jù)中止的裝載或保存指令的地址。

復(fù)位無(wú)——復(fù)位時(shí)保存在R14_svc中的值不可預(yù)知。

異常異常的的入口口和出出口處處理如果異異常處處理程程序已已經(jīng)把把返回回地址址拷貝貝到堆堆棧,,那么么可以以使用用一條條多寄寄存器器傳送送指令令來(lái)恢恢復(fù)用用戶寄寄存器器并實(shí)實(shí)現(xiàn)返返回。。SUBLR,LR,#4;計(jì)算返返回地地址STMFDSP!,{R0-R3,LR};保存使使用到到的寄寄存器器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回中斷處理代代碼的開始始部分和退退出部分如果異常處處理程序已已經(jīng)把返回回地址拷貝貝到堆棧,,那么可以以使用一條條多寄存器器傳送指令令來(lái)恢復(fù)用用戶寄存器器并實(shí)現(xiàn)返返回。中斷處理代代碼的開始始部分和退退出部分異常異常的入口口和出口處處理SUBLR,LR,#4;計(jì)算返回地地址STMFDSP!,{R0-R3,LR} ;保存使用到到的寄存器器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回注意:中斷返回指指令的寄存器器列表(其中中必須包括PC)后的“^”符號(hào)表示這是是一條特殊形形式的指令。。這條指令在在從存儲(chǔ)器中中裝載PC的同時(shí)(PC是最后恢復(fù)的的),CPSR也得到恢復(fù)。。這里使用的的堆棧指針SP(R13)是屬于異常常模式的寄存存器,每個(gè)異異常模式有自自己的堆棧指指針。這個(gè)堆堆棧指針應(yīng)必必須在系統(tǒng)啟啟動(dòng)時(shí)初始化化。異常進(jìn)入異常在異常發(fā)生后后,ARM內(nèi)核會(huì)作以下下工作:1.在適當(dāng)?shù)腖R中保存下一條條指令的地址址,當(dāng)異常入入口來(lái)自:ARM狀態(tài),那么ARM將當(dāng)前指令地地址加4或加8復(fù)制(取決于于異常的類型型)到LR中;為Thumb狀態(tài),那么ARM將當(dāng)前指令地地址加4或加8(取決于異常常的類型)復(fù)復(fù)制到LR中;異常處理理器程序不必必確定狀態(tài)。。異常進(jìn)入異常在異常發(fā)生后后,ARM內(nèi)核會(huì)作以下下工作:2.將CPSR復(fù)制到適當(dāng)?shù)牡腟PSR中;3.將CPSR模式位強(qiáng)制設(shè)設(shè)置為與異常常類型相對(duì)應(yīng)應(yīng)的值;4.強(qiáng)制PC從相關(guān)的異常常向量處取指指。ARM內(nèi)核在中斷異異常時(shí)置位中中斷禁止標(biāo)志志,這樣可以以防止不受控控制的異常嵌嵌套。注:異??偸窃谠贏RM狀態(tài)中進(jìn)行處處理。當(dāng)處理理器處于Thumb狀態(tài)時(shí)發(fā)生了了異常,在異異常向量地址址裝入PC時(shí),會(huì)自動(dòng)切切換到ARM狀態(tài)。異常進(jìn)入異常當(dāng)異常結(jié)束時(shí)時(shí),異常處理理程序必須::1.將LR中的值減去偏偏移量后存入入PC,偏移量根據(jù)據(jù)異常的類型型而有所不同同;2.將SPSR的值復(fù)制回CPSR;3.清零在入口置置位的中斷禁禁止標(biāo)志。注:恢復(fù)CPSR的動(dòng)作會(huì)將T、F和I位自動(dòng)恢復(fù)為為異常發(fā)生前前的值。異常退出異常程序AIRQ服務(wù)程序用戶模式IRQ模式程序寄存器組圖示進(jìn)入異常常過(guò)程1.程序在系統(tǒng)模模式下運(yùn)行用用戶程序,假假定當(dāng)前處理理器狀態(tài)為Thumb狀態(tài)、允許IRQ中斷;2.用戶程序運(yùn)行行時(shí)發(fā)生IRQ中斷,硬件完完成以下動(dòng)作作:LR_usrSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中斷)清零T位(進(jìn)入ARM狀態(tài))設(shè)置MOD位,切換處理理器模式至IRQ模式將下一條指令令的地址存入入IRQ模式的LR寄存器將CPSR寄存器內(nèi)容存存入IRQ模式的SPSR寄存器將跳轉(zhuǎn)地址存存入PC,實(shí)現(xiàn)跳轉(zhuǎn)IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示對(duì)該位不不關(guān)心在異常處理結(jié)結(jié)束后,異常常處理程序完完成以下動(dòng)作作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示退出異常常過(guò)程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV將SPSR寄存器的值復(fù)復(fù)制回CPSR寄存器;將LR寄存的值減去去一個(gè)常量后后復(fù)制到PC寄存器,跳轉(zhuǎn)轉(zhuǎn)到被中斷的的用戶程序。。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示對(duì)該位不不關(guān)心快速中斷請(qǐng)求求(FIQ)適用于對(duì)一個(gè)個(gè)突發(fā)事件的的快速響應(yīng),,這得益于在在ARM狀態(tài)中,快中中斷模式有8個(gè)專用的寄存存器可用來(lái)滿滿足寄存器保保護(hù)的需要((這可以加速速上下文切換換的速度)。。不管異常入口口是來(lái)自ARM狀態(tài)還是Thumb狀態(tài)態(tài),,F(xiàn)IQ處理理程程序序都都會(huì)會(huì)通通過(guò)過(guò)執(zhí)執(zhí)行行下下面面的的指指令令從從中中斷斷返返回回::SUBSPC,R14_fiq,#4在一一個(gè)個(gè)特特權(quán)權(quán)模模式式中中,,可可以以通通過(guò)過(guò)置置位位CPSR中的的F位來(lái)來(lái)禁禁止止FIQ異常常。。異常??焖偎僦兄袛鄶嗾?qǐng)請(qǐng)求求中斷斷請(qǐng)請(qǐng)求求((IRQ)異異常常是是一一個(gè)個(gè)由由nIRQ輸入入端端的的低低電電平平所所產(chǎn)產(chǎn)生生的的正正常常中中斷斷((在在具具體體的的芯芯片片中中,,nIRQ由片片內(nèi)內(nèi)外外設(shè)設(shè)拉拉低低,,nIRQ是內(nèi)內(nèi)核核的的一一個(gè)個(gè)信信號(hào)號(hào),,對(duì)對(duì)用用戶戶不不可可見(jiàn)見(jiàn)))。。IRQ的優(yōu)優(yōu)先先級(jí)級(jí)低低于于FIQ。對(duì)對(duì)于于FIQ序列列它它是是被被屏屏蔽蔽的的。。任任何何時(shí)時(shí)候候在在一一個(gè)個(gè)特特權(quán)權(quán)模模式式下下,,都都可可通通過(guò)過(guò)置置位位CPSR中的的I位來(lái)來(lái)禁禁止止IRQ。不管管異異常常入入口口是是來(lái)來(lái)自自ARM狀態(tài)還還是Thumb狀態(tài),,F(xiàn)IQ處理程程序都都會(huì)通通過(guò)執(zhí)執(zhí)行下下面的的指令令從中中斷返返回::SUBSPC,R14_fiq,#4異常中斷請(qǐng)請(qǐng)求中止發(fā)發(fā)生在在對(duì)存存儲(chǔ)器器的訪訪問(wèn)不不能完完成時(shí)時(shí),中中止包包含兩兩種類類型::預(yù)取中中止發(fā)發(fā)生在在指令令預(yù)取取過(guò)程程中數(shù)據(jù)中中止發(fā)發(fā)生在在對(duì)數(shù)數(shù)據(jù)訪訪問(wèn)時(shí)時(shí)異常中止當(dāng)發(fā)生生預(yù)取取中止止時(shí),,ARM內(nèi)核將將預(yù)取取的指指令標(biāo)標(biāo)記為為無(wú)效效,但但在指指令到到達(dá)流流水線線的執(zhí)執(zhí)行階階段時(shí)時(shí)才進(jìn)進(jìn)入異異常。。如果果指令令在流流水線線中因因?yàn)榘l(fā)發(fā)生分在處理中止的原因之后,不管處于哪種處理器操作狀態(tài),處理程序都會(huì)執(zhí)行下面的指令恢復(fù)PC和CPSR并重試被中止的指令:

SUBSPC,R14_abt,#4異常中止——預(yù)取指指中止止當(dāng)發(fā)生生數(shù)據(jù)據(jù)中止止后,,根據(jù)據(jù)產(chǎn)生生數(shù)據(jù)據(jù)中止止的指指令類類型作作出不不同的的處理理:異常中止——數(shù)據(jù)中中止數(shù)據(jù)轉(zhuǎn)轉(zhuǎn)移指指令((LDR、STR)回寫寫到被被修改改的基基址寄寄存器器。中中止處處理程程序必必須注注意這這一點(diǎn)點(diǎn);交換指指令((SWP)中止止好像像沒(méi)有有被執(zhí)執(zhí)行過(guò)過(guò)一樣樣(中中止必必須發(fā)發(fā)生在在SWP指令進(jìn)進(jìn)行讀讀訪問(wèn)問(wèn)時(shí)));;塊數(shù)據(jù)據(jù)轉(zhuǎn)移移指令令(LDM,STM)完成成。當(dāng)當(dāng)回回寫被被設(shè)置置時(shí),,基址址寄存存器被被更新新。在在指示示出現(xiàn)現(xiàn)中止止后,,ARM內(nèi)核防防止所所有寄寄存器器被覆覆蓋。。這意意味著著ARM內(nèi)核總總是會(huì)會(huì)保護(hù)護(hù)被中中止的的LDM指令中中的R15(總是是最后后一個(gè)個(gè)被轉(zhuǎn)轉(zhuǎn)移的的寄存存器))。異常中止——數(shù)據(jù)中中止當(dāng)發(fā)生生數(shù)據(jù)據(jù)中止止后,,根據(jù)據(jù)產(chǎn)生生數(shù)據(jù)據(jù)中止止的指指令類類型作作出不不同的的處理理:在修復(fù)復(fù)產(chǎn)生生中止止的原原因后后,不不管處處于哪哪種處處理器器操作作狀態(tài)態(tài),處處理程程序都都必須須執(zhí)行行下面面的返返回指指令::SUBSPC,R14_abt,#8異常中止——數(shù)據(jù)中中止使用軟軟件中中斷(SWI)指令可可以進(jìn)進(jìn)入管管理模模式,,通常常用于于請(qǐng)求求一個(gè)個(gè)特定定的管管理函函數(shù)。。SWI處理程程序通通過(guò)執(zhí)執(zhí)行下下面的的指令令返回回:MOVSPC,R14_svc這個(gè)動(dòng)動(dòng)作恢恢復(fù)了了PC和CPSR并返回回到SWI之后的的指令令。SWI處理程程序讀讀取操操作碼碼以提提取SWI函數(shù)編編號(hào)。。異常軟件中中斷指指令當(dāng)ARM處理器器遇到到一條條自己己和系系統(tǒng)內(nèi)內(nèi)任何何協(xié)處處理器器都無(wú)無(wú)法處處理的的指令令時(shí),,ARM內(nèi)核執(zhí)執(zhí)行未未定義義指令令陷阱阱。軟軟件可可使用用這一一機(jī)制制通過(guò)過(guò)模擬擬未定定義的的協(xié)處處理器器指令令來(lái)擴(kuò)擴(kuò)展ARM指令集。注:ARM處理器完全全遵循ARM結(jié)構(gòu)v4T,可以捕獲獲所有分類類未被定義義的指令位位格式。異常未定義的指指令在模擬處理理了失敗的的指令后,,陷阱程序序執(zhí)行下面面的指令::MOVSPC,R14_svc這個(gè)動(dòng)作恢恢復(fù)了PC和CPSR并返回到未未定義指令令之后的指指令。異常未定義的指指令異常向量地址異常類型進(jìn)入時(shí)的模式進(jìn)入時(shí)I的狀態(tài)進(jìn)入時(shí)F的狀態(tài)0x00000000復(fù)位管理禁止禁止0x00000004未定義指令未定義IF0x00000008軟件中斷管理禁止F0x0000000C中止(預(yù)?。┲兄笽F0x00000010中止(數(shù)據(jù))中止IF0x00000014保留保留——0x00000018IRQ中斷禁止F0x0000001CFIQ快中斷禁止禁止注:表中的I和F表示不對(duì)該該位有影響響,保留原原來(lái)的值。。當(dāng)多個(gè)異常常同時(shí)發(fā)生生時(shí),一個(gè)個(gè)固定的優(yōu)優(yōu)先級(jí)系統(tǒng)統(tǒng)決定它們們被處理的的順序:異常異常優(yōu)先級(jí)級(jí)異常類型優(yōu)先級(jí)復(fù)位1(最高優(yōu)先級(jí))數(shù)據(jù)中止2FIQ3IRQ4預(yù)取中止5未定義指令6SWI7(最低優(yōu)先級(jí))優(yōu)先級(jí)降低注意:未定義的指指令和SWI異?;コ?。。因?yàn)橥灰粭l指令不不能既是未未定義的,,又能產(chǎn)生生有效的軟軟件中斷;;當(dāng)FIQ使能,并且且FIQ和數(shù)據(jù)中止止異常同時(shí)時(shí)發(fā)生時(shí),,ARM內(nèi)核首先進(jìn)進(jìn)入數(shù)據(jù)中中止處理程程序,然后后立即跳轉(zhuǎn)轉(zhuǎn)到FIQ向量。在FIQ處理結(jié)束后后返回到數(shù)數(shù)據(jù)中止處處理程序。。數(shù)據(jù)中止止的優(yōu)先級(jí)級(jí)必須高于于FIQ以確保數(shù)據(jù)據(jù)轉(zhuǎn)移錯(cuò)誤誤不會(huì)被漏漏過(guò)。異常異常優(yōu)先級(jí)級(jí)復(fù)位復(fù)位當(dāng)nRESET信號(hào)被拉低低時(shí)(一般般外部復(fù)位位引腳電平平的變化和和芯片的其其它復(fù)位源源會(huì)改變這這個(gè)內(nèi)核信信號(hào)),ARM處理器放棄棄正在執(zhí)行行的指令。在復(fù)位后,,除PC和CPSR之外的所所有寄存存器的值值都不確確定。復(fù)位復(fù)位當(dāng)nRESET信號(hào)再次次變?yōu)楦吒唠娖綍r(shí)時(shí),ARM處理器執(zhí)執(zhí)行下列列操作::1.強(qiáng)制M[4:0]變?yōu)閎10011(管理模模式);;2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.強(qiáng)制PC從地址0x00開始對(duì)下下一條指指令進(jìn)行行取指;;5.返回到ARM狀態(tài)并恢恢復(fù)執(zhí)行行。什么是異異常?當(dāng)正常的的程序執(zhí)執(zhí)行流程程發(fā)生暫暫時(shí)的停停止時(shí),,稱之為為異常,,例如一一個(gè)外部部的中斷斷請(qǐng)求。。在處理異異常之前前,當(dāng)前前處理器器的狀態(tài)態(tài)必須保保存,這這樣當(dāng)異異常處理理完成后后,恢復(fù)復(fù)之前保保存的處處理器現(xiàn)現(xiàn)場(chǎng),當(dāng)當(dāng)前程序序可以繼繼續(xù)執(zhí)行行。處理器的的狀態(tài)保保存和恢恢復(fù)通常常是和體體系結(jié)構(gòu)構(gòu)密切相相關(guān)的,,特別是是處理器器內(nèi)部的的寄存器器。哪些處理理器的狀狀態(tài)需要要保存??發(fā)生異常常前的模模式下的的通用寄寄存器R0––R12需要保存存如果是FIQ異常,則則可以只只保存R0––R7CPSR和PC由硬件自自動(dòng)存入入SPSR_irq和lr_irq中,保存存與否取取決于在在中斷處處理程序序中是否否會(huì)改變變。R13(sp)和R14(lr)不需要保保存從異常模模式返回回所需要要的寄存存器返回的地地址保存存在lr_irq中返回的模模式保存存在spsr_irq中這些寄存存器保存存到哪里里?保存在異異常模式式下的堆堆棧中,,sp_irq作為堆棧棧指針異常處理理時(shí)內(nèi)存存映像圖圖示主程序(通常是無(wú)限限循環(huán))異常處理程序序保存處理器現(xiàn)現(xiàn)場(chǎng)程序恢復(fù)處理器現(xiàn)現(xiàn)場(chǎng)程序主程序內(nèi)內(nèi)存C語(yǔ)言編寫通常是無(wú)限循循環(huán)異常處理程序序C語(yǔ)言編寫通常是設(shè)置標(biāo)標(biāo)志位,快速速處理保存和恢復(fù)處處理器現(xiàn)場(chǎng)程程序匯編語(yǔ)言編寫寫通常是將寄存存器壓棧和彈彈棧異常向量表分分析異常向量表從從0地址開始,共共有8個(gè)表項(xiàng)其中7個(gè)表項(xiàng)用作異異常發(fā)生后入入口,1個(gè)保留不用一般每個(gè)表項(xiàng)項(xiàng)內(nèi)的指令都都是一條跳轉(zhuǎn)轉(zhuǎn)指令Bxxxx相對(duì)跳轉(zhuǎn)指令令跳轉(zhuǎn)地址范圍圍有限LDRpc,[pc,#xx]直接對(duì)PC賦值可以實(shí)現(xiàn)到任任意地址的跳跳轉(zhuǎn)幾個(gè)異常如果果同時(shí)發(fā)生,,它們的優(yōu)先先級(jí)如下1、復(fù)位2、數(shù)據(jù)異常中中止3、FIQ4、IRQ5、預(yù)取指令6、SWI和未定義指令令異常的優(yōu)先級(jí)級(jí)引入異常向量量表后的內(nèi)存存映像內(nèi)存主程序(通常是無(wú)限限循環(huán))異常處理程序序保存處理器現(xiàn)現(xiàn)場(chǎng)程序恢復(fù)處理器現(xiàn)現(xiàn)場(chǎng)程序主程序異常處理程序序保存和恢復(fù)處處理器現(xiàn)場(chǎng)程程序異常向量表通常是放置一一條跳轉(zhuǎn)語(yǔ)句句從主程序到異異常向量表的的跳轉(zhuǎn)是硬件自動(dòng)完完成的異常向量表入入口2異常響應(yīng)應(yīng)當(dāng)一個(gè)異常出出現(xiàn)以后,ARM微處理器硬件會(huì)自動(dòng)完成以下幾步步操作:1、將下一條指指令的地址存存入該異常對(duì)對(duì)應(yīng)的工作模模式下的連接寄存器LR(r14_irq),以便程序在在處理異常返返回時(shí)能從正正確的位置重重新開始執(zhí)行行。討論:為什什么是r14_irq而不是r14_svc?2、將CPSR復(fù)制到相應(yīng)的的SPSR_irq中。3、根據(jù)異常類類型,強(qiáng)制設(shè)設(shè)置CPSR的運(yùn)行模式位位。4、禁止IRQ中斷;進(jìn)入FIQ模式時(shí)禁止FIQ中斷。5、映射相應(yīng)模模式的寄存器器6、強(qiáng)制PC從相關(guān)的異常常向量地址取取下一條指令令執(zhí)行,從而而跳轉(zhuǎn)到相應(yīng)應(yīng)的異常處理理程序處。異常響應(yīng)(續(xù)續(xù))3異常處理理異常處理包括括兩部分保存處理器現(xiàn)現(xiàn)場(chǎng)STMFDsp!,{r0-r12,lr};執(zhí)行中斷服務(wù)務(wù)子程序BL do_irq;4異常返回回異常處理完畢畢之后,軟件需要執(zhí)行以下幾步操作作從異常返回回:1、將鏈接寄存存器LR的值減去相應(yīng)應(yīng)的偏移量后后送到PC中。2、同時(shí)將SPSR復(fù)制回CPSR中。可以認(rèn)為應(yīng)用用程序總是從從復(fù)位異常處處理程序開始始執(zhí)行的,因因此復(fù)位異常常處理程序不不需要返回。。未定義指令異異常返回未定義指令異異常是由當(dāng)前前執(zhí)行的指令令自身產(chǎn)生的的,程序計(jì)數(shù)數(shù)器PC的值還未更新新,指向當(dāng)前前指令后面第第2條指令。處理器將PC-4保存到寄存器器LR_und中。返回操作可通通過(guò)如下指令令實(shí)現(xiàn)MOVSPC, LRSTMFDSP!,{R0-R12,LR};…LDMFDSP!,{R0-R12,PC}^SWIimmSWI異常返返回SWI異常通常是提提供程序員使使用,程序員員可以讓處理理器進(jìn)入SVC模式下執(zhí)行特特定函數(shù)來(lái)完完成某種功能能。我們可以用如如下一條指令令進(jìn)入SWI異常:SWI異常也是由當(dāng)當(dāng)前執(zhí)行的指指令自身產(chǎn)生生的,返回操作同未定定義指令異常常。IRQ中斷返返回IRQ異常屬于正常常的中斷請(qǐng)求求,可通過(guò)對(duì)對(duì)處理器的nIRQ引腳輸入低電電平產(chǎn)生。若將CPSR的I位置為1,則會(huì)禁止IRQ中斷(注意只只有在特權(quán)模模式下才能改改變I位的狀態(tài))。。若將CPSR的I位清零,處理理器會(huì)在指令令執(zhí)行完之后檢查IRQ的輸入。因此此,IRQ中斷產(chǎn)生時(shí)程程序計(jì)數(shù)器PC的值已經(jīng)更新新,指向當(dāng)前前指令后面第第3條指令。IRQ中斷返返回(續(xù))IRQ中斷返回操作作可通過(guò)如下下指令實(shí)現(xiàn)SUBSPC, R14_irq,#4SUBSLR,LR,#4STMFDSP!,{R0-R12,LR};…LDMFDSP!,{R0-R12,PC}^FIQ中斷返返回快速中斷異常常是為了支持持一些快速的的中斷處理的的一種異常模模式。FIQ有r8-12作為私有寄存存器,在模式式切換的時(shí)候候不用進(jìn)行太太多的寄存器器保存和恢復(fù)復(fù),從而節(jié)省省了模式切換換的時(shí)間。FIQ在異常常向量量表中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論