第四章ARM存儲(chǔ)與異常中斷處理_第1頁(yè)
第四章ARM存儲(chǔ)與異常中斷處理_第2頁(yè)
第四章ARM存儲(chǔ)與異常中斷處理_第3頁(yè)
第四章ARM存儲(chǔ)與異常中斷處理_第4頁(yè)
第四章ARM存儲(chǔ)與異常中斷處理_第5頁(yè)
已閱讀5頁(yè),還剩89頁(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體系構(gòu)造本章主要引見(jiàn)以下內(nèi)容:ARM存儲(chǔ)器組織ARM的異常中斷24.6ARM存儲(chǔ)器組織引見(jiàn)以下內(nèi)容:數(shù)據(jù)類型和存儲(chǔ)格式ARM的存儲(chǔ)體系片上存儲(chǔ)器的用法 協(xié)處置器CP15存儲(chǔ)器管理單元MMU維護(hù)單元快速上下文切換擴(kuò)展寫(xiě)緩存器〔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è)置為小端序4.6.2ARM的存儲(chǔ)體系參看以下圖,籠統(tǒng)成一個(gè)呈金字塔型的存儲(chǔ)構(gòu)造注重研討第2層2021年6月21日44.6.3片上存儲(chǔ)器的用法多數(shù)ARM處置器芯片內(nèi)部集成了存儲(chǔ)器它們統(tǒng)稱為片上存儲(chǔ)器用途有:片上Cache、片上SRAM、緊耦合存儲(chǔ)器〔TCM〕、寫(xiě)緩存片上存儲(chǔ)器的存儲(chǔ)空間可以經(jīng)過(guò)指令進(jìn)展配置,定義成片上Cache,或者片上SRAM,或者一部分片上Cache加一部分片上SRAM。緊耦合存儲(chǔ)器和寫(xiě)緩存均需求編程使能或者硬件接線使能按照詳細(xì)運(yùn)用情況決議片上存儲(chǔ)器配置方法2021年6月21日5片上存儲(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運(yùn)用物理地址,對(duì)TCM的寫(xiě)訪問(wèn)遭到MMU內(nèi)部維護(hù)信息的控制。2021年6月21日62021年6月21日7TCM在ARMv6處置器核的位置ARMv6處置器包括:ARM1J-S、ARM1156T2片內(nèi)TCM存儲(chǔ)器舉例ARM926EJ-S中心內(nèi)置32KB指令緩存、16KB數(shù)字緩存和8KB數(shù)據(jù)-TCM和8KB指令-TCM;2021年6月21日8Cortex-R4F方框圖—含TCM接口留意圖的右側(cè)含有一個(gè)TCM仲裁和接口模塊2021年6月21日92021年6月21日10ARM1的TCM支持DMA傳輸參看ARM1的方框圖ARM966E-S核的TCM地址映射2021年6月21日11ARM966E-S的TCM別名地址空間物理存儲(chǔ)塊可以經(jīng)過(guò)TCM接口映射在片內(nèi)的TCM存儲(chǔ)區(qū)2021年6月21日12ARM966E-S的TCM特點(diǎn)TheARM966E-SprocessorsupportsbothinstructionanddataTCMs.YoucanusetheDTCMandITCMtostorereal-timeandperformance-criticalcode.TheTCMsareinstantiatedexternallytotheARM966E-Smacrocellprovidingforflexibilityinthedesignofthememorysubsystem.Thesystemdesignercanselectmemorytypeandoptimizethememorysubsystemforpowerorspeed.2021年6月21日13ARM966E-S的TCM接口特點(diǎn)〔續(xù)1〕ThefeaturesoftheTCMinterfaceinclude:

independentITCMandDTCMsizesof0KBor1KB-64MBinpower-of-twoincrements

softwarevisibilityandprogrammabilityofTCMsizeandenable

bootcontrolforITCM

dataaccesstotheITCMforliteralpoolaccessesincode

simpleSRAM-styleinterfacesupportingbothreadsandwrites

variableTCMwaitstatecontrolforITCMandDTCM

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

schedulesrequeststotheTCMinterface

handshakeswiththeARM966E-Smemorysystemcontrollertoacknowledgewhenrequestshavebeenserviced

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

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

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

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

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

設(shè)置虛擬存儲(chǔ)空間的緩沖特性。2021年6月21日234.6.6維護(hù)單元維護(hù)單元PU,ProtectionUnit也稱為:MPU,MemoryProtectionUnit為了消除術(shù)語(yǔ)的二義性,我們一致運(yùn)用術(shù)語(yǔ)PU維護(hù)單元提供了一個(gè)相當(dāng)簡(jiǎn)單的替代MMU的方法來(lái)管理存儲(chǔ)器。對(duì)于不需求PU的嵌入式系統(tǒng)而言,PU簡(jiǎn)化了硬件和軟件,主要表如今不運(yùn)用轉(zhuǎn)換表,這樣免去了硬件遍歷轉(zhuǎn)換表和軟件建立與維護(hù)轉(zhuǎn)換表。2021年6月21日24維護(hù)單元的任務(wù)原理和作用ARM核的PU運(yùn)用區(qū)域〔region〕來(lái)管理系統(tǒng)維護(hù)。區(qū)域是一個(gè)存儲(chǔ)空間相關(guān)聯(lián)的一組屬性,處置器核將這些屬性保管在協(xié)處置器CP15的一些存放器里,并用0-7的號(hào)碼標(biāo)識(shí)每一個(gè)區(qū)域〔它也是一個(gè)具有特定屬性的邏輯存儲(chǔ)空間〕。區(qū)域的存儲(chǔ)邊境經(jīng)過(guò)兩個(gè)屬性進(jìn)展配置:起始地址和大小。區(qū)域的大小可以是4KB~4MB的任何2的乘冪。2021年6月21日25受維護(hù)區(qū)域的屬性操作系統(tǒng)可以為受維護(hù)區(qū)域分配更多的屬性,包括:訪問(wèn)權(quán)限、Cache和寫(xiě)緩存器戰(zhàn)略訪問(wèn)權(quán)限可以是:讀/寫(xiě)、只讀和不可訪問(wèn)基于處置器方式的權(quán)限管理方式、用戶方式等Cache寫(xiě)戰(zhàn)略寫(xiě)直達(dá)Cache操作、無(wú)Cache操作、無(wú)寫(xiě)緩存器操作。2021年6月21日26含PU的ARM處置器主存訪問(wèn)過(guò)程當(dāng)處置器訪問(wèn)主存的一個(gè)區(qū)域時(shí),PU比較該區(qū)域的訪問(wèn)權(quán)限屬性和當(dāng)時(shí)的處置器方式。假設(shè)懇求符合區(qū)域訪問(wèn)規(guī)范,那么PU允許內(nèi)核讀/寫(xiě)主存;假設(shè)存儲(chǔ)器懇求導(dǎo)致存儲(chǔ)器訪問(wèn)違例,那么PU產(chǎn)生一個(gè)異常信號(hào)。異常信號(hào)被傳四處置器核,處置器核判別是出異常是預(yù)取指令中止還是數(shù)據(jù)中止,然后跳轉(zhuǎn)到對(duì)應(yīng)的異常處置例程。2021年6月21日27區(qū)域?qū)傩杂嘘P(guān)區(qū)域的屬性如下:區(qū)域可以相互重疊每一個(gè)區(qū)域有一個(gè)優(yōu)先級(jí),該優(yōu)先級(jí)與分配給區(qū)域的權(quán)限無(wú)關(guān)當(dāng)區(qū)域重疊時(shí),具有最高優(yōu)先權(quán)的區(qū)域的屬性可以覆蓋其他區(qū)域的屬性,優(yōu)先權(quán)僅作用于重疊部分的地址。區(qū)域的起始地址必需是其大小的倍數(shù)。區(qū)域的大小是2的乘冪,2的12次方到32次方。2021年6月21日28訪問(wèn)受維護(hù)區(qū)域時(shí)產(chǎn)生的異常訪問(wèn)所定義區(qū)域外的存儲(chǔ)器將產(chǎn)生異常。假設(shè)是內(nèi)核預(yù)取指令,那么PU產(chǎn)生一個(gè)預(yù)取指令中止異常。假設(shè)是存儲(chǔ)器數(shù)據(jù)懇求,那么PU產(chǎn)生數(shù)據(jù)中止異常。2021年6月21日292021年6月21日30帶PU的ARM核概要以下給出了四種帶PU的ARM核概要屬性ARM核區(qū)域數(shù)目指令區(qū)域和數(shù)據(jù)區(qū)域是否分離指令和數(shù)據(jù)區(qū)域配置是否分離ARM740T8否否ARM940T16是是ARM946E-S8否是ARM1026EJ-S8否是在帶PU的ARM系統(tǒng)中創(chuàng)建區(qū)域要實(shí)現(xiàn)一個(gè)受PU控制主存的嵌入式系統(tǒng),需求對(duì)主存中的不同塊定義假設(shè)干區(qū)域。一個(gè)區(qū)域可以被創(chuàng)建一次,然后不斷用到嵌入式系統(tǒng)運(yùn)轉(zhuǎn)終了;也可以暫時(shí)創(chuàng)建一個(gè)區(qū)域來(lái)滿足一個(gè)特殊操作的需求,用完之后就加以刪除。2021年6月21日31含有PU的ARM核含有8個(gè)受維護(hù)區(qū)域的ARM核ARM740TARM946E-SARM1026EJ-S含有16個(gè)受維護(hù)區(qū)域的ARM核ARM940T2021年6月21日322021年6月21日33初始化PU、Cache和寫(xiě)緩沖器為了初始化PU、Cache和寫(xiě)緩沖器,控制系統(tǒng)必需定義在操作目的平臺(tái)時(shí)所需求的維護(hù)區(qū)域。功能主存儲(chǔ)器次存儲(chǔ)器系統(tǒng)控制C1C0區(qū)域的cache屬性C2C0區(qū)域的寫(xiě)緩沖器屬性C3C0區(qū)域的訪問(wèn)權(quán)限屬性C5C0區(qū)域的大小和位置C6C0~C7帶維護(hù)單元和MMU的系統(tǒng)框圖2021年6月21日344.6.7ARM處置器的CacheARM處置器均帶有Cache或者可以將片上存儲(chǔ)器配置成Cache。當(dāng)然,在不需求時(shí)也可以經(jīng)過(guò)配置操作封鎖Cache。ARM處置器的Cache地址映射均采用組相聯(lián)映射。2021年6月21日354.6.8快速上下文切換擴(kuò)展快速上下文切換擴(kuò)展FCSE,F(xiàn)astContextSwitchExtensionFCSE是ARM存儲(chǔ)系統(tǒng)的修正機(jī)構(gòu)。它修正系統(tǒng)中不同進(jìn)程的虛擬地址,防止在進(jìn)展進(jìn)程間切換時(shí)呵斥的虛擬地址到物理地址的重映射,從而提高系統(tǒng)的性能。為了了解ARM處置器的FCSE功能,我們首先調(diào)查當(dāng)虛擬存儲(chǔ)器中義務(wù)切換時(shí),主存中頁(yè)表和物理存儲(chǔ)器的隨動(dòng)切換。2021年6月21日36ARM虛擬存儲(chǔ)器

用戶義務(wù)上下文切換例如-1義務(wù)1正在執(zhí)行2021年6月21日372021年6月21日38ARM虛擬存儲(chǔ)器

用戶義務(wù)上下文切換例如-2義務(wù)2正在執(zhí)行2021年6月21日39ARM虛擬存儲(chǔ)器

用戶義務(wù)上下文切換例如-3義務(wù)3正在執(zhí)行2021年6月21日403個(gè)義務(wù)的多義務(wù)環(huán)境中

快速上下文切換擴(kuò)展的舉例:切換前義務(wù)1正在運(yùn)轉(zhuǎn)2021年6月21日413個(gè)義務(wù)的多義務(wù)環(huán)境中

快速上下文切換擴(kuò)展的舉例:〔續(xù)〕切換后義務(wù)2正在運(yùn)轉(zhuǎn)4.6.9寫(xiě)緩存器(WriteBuffer)寫(xiě)緩存器是一個(gè)容量很小的片內(nèi)的先進(jìn)先出〔FIFO〕存儲(chǔ)器,位于處置器核與主存之間。寫(xiě)緩存器的主要用途是:當(dāng)CPU輸出數(shù)據(jù)時(shí),總線恰好被占用而無(wú)法輸出,此時(shí),CPU可以把輸出數(shù)據(jù)寫(xiě)入到寫(xiě)緩存器。當(dāng)總線上沒(méi)有比寫(xiě)緩存區(qū)優(yōu)先級(jí)更高的掌控者時(shí),寫(xiě)緩存區(qū)可以經(jīng)過(guò)總線將數(shù)據(jù)寫(xiě)入內(nèi)存。CPU由于不需求等待寫(xiě)操作的完成而加強(qiáng)了性能。寫(xiě)緩存區(qū)中的FIFO存儲(chǔ)器在存儲(chǔ)層次中與L1Cache處于一樣的層次。2021年6月21日42S3C44B0X處置器的寫(xiě)緩存區(qū)由4個(gè)寫(xiě)緩存存放器構(gòu)成。每一個(gè)寫(xiě)緩存存放器包括一個(gè)32位數(shù)據(jù)字段,一個(gè)28位地址字段和一個(gè)2位形狀字段??梢越?jīng)過(guò)指令對(duì)控制存放器SYSCFG的WE位置1或者置0來(lái)使能或者禁能寫(xiě)緩存器。參看以下圖。2021年6月21日434.7ARM的異常中斷ARM異常與中斷不做嚴(yán)厲意義上的區(qū)別ARM的中斷向量表內(nèi)存放的是呼應(yīng)異常和中斷的轉(zhuǎn)移指令而不是中斷向量地址。在ARM處置器中,當(dāng)異常發(fā)生時(shí),完成當(dāng)前指令后跳轉(zhuǎn)到相應(yīng)的異常中斷處置程序入口執(zhí)行異常中斷處置。異常處置終了后前往原來(lái)的程序斷點(diǎn)繼續(xù)執(zhí)行原來(lái)的程序。2021年6月21日44ARM異常和中斷處置課程安排ARM體系構(gòu)造知識(shí)回想ARM異常的呼應(yīng)ARM異常的處置ARM異常的前往ARM中斷的產(chǎn)生、初始化和呼應(yīng)處置流程異常簡(jiǎn)介只需正常的程序流被暫時(shí)中止,處置器就進(jìn)入異常方式。例如呼應(yīng)一個(gè)來(lái)自外設(shè)的中斷。在處置異常之前,ARM內(nèi)核保管當(dāng)前的處置器形狀,這樣當(dāng)處置程序終了時(shí)可以恢復(fù)執(zhí)行原來(lái)的程序。假好像時(shí)發(fā)生兩個(gè)或更多異常,那么將按照固定的順序來(lái)處置異常,詳見(jiàn)“異常優(yōu)先級(jí)〞部分。異常入口/出口匯總異常或入口返回指令之前的狀態(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ù)知。

異常異常的入口和出口處置假設(shè)異常處置程序曾經(jīng)把前往地址拷貝到堆棧,那么可以運(yùn)用一條多存放器傳送指令來(lái)恢復(fù)用戶存放器并實(shí)現(xiàn)前往。SUBLR,LR,#4 ;計(jì)算前往地址STMFDSP!,{R0-R3,LR} ;保管運(yùn)用到的存放器...LDMFDSP!,{R0-R3,PC}^ ;中斷前往中斷處置代碼的開(kāi)場(chǎng)部分和退出部分假設(shè)異常處置程序曾經(jīng)把前往地址拷貝到堆棧,那么可以運(yùn)用一條多存放器傳送指令來(lái)恢復(fù)用戶存放器并實(shí)現(xiàn)前往。中斷處置代碼的開(kāi)場(chǎng)部分和退出部分異常異常的入口和出口處置SUBLR,LR,#4 ;計(jì)算前往地址STMFDSP!,{R0-R3,LR} ;保管運(yùn)用到的存放器...LDMFDSP!,{R0-R3,PC}^ ;中斷前往留意:中斷前往指令的存放器列表〔其中必需包括PC〕后的“^〞符號(hào)表示這是一條特殊方式的指令。這條指令在從存儲(chǔ)器中裝載PC的同時(shí)〔PC是最后恢復(fù)的〕,CPSR也得到恢復(fù)。這里運(yùn)用的堆棧指針SP〔R13〕是屬于異常方式的存放器,每個(gè)異常方式有本人的堆棧指針。這個(gè)堆棧指針應(yīng)必需在系統(tǒng)啟動(dòng)時(shí)初始化。異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會(huì)作以下任務(wù):1.在適當(dāng)?shù)腖R中保管下一條指令的地址,當(dāng)異常入口來(lái)自:ARM形狀,那么ARM將當(dāng)前指令地址加4或加8復(fù)制〔取決于異常的類型〕到LR中;為T(mén)humb形狀,那么ARM將當(dāng)前指令地址加4或加8〔取決于異常的類型〕復(fù)制到LR中;異常處置器程序不用確定形狀。異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會(huì)作以下任務(wù):2.將CPSR復(fù)制到適當(dāng)?shù)腟PSR中;3.將CPSR方式位強(qiáng)迫設(shè)置為與異常類型相對(duì)應(yīng)的值;4.強(qiáng)迫PC從相關(guān)的異常向量處取指。ARM內(nèi)核在中斷異常時(shí)置位中斷制止標(biāo)志,這樣可以防止不受控制的異常嵌套。注:異??偸窃贏RM形狀中進(jìn)展處置。當(dāng)處置器處于Thumb形狀時(shí)發(fā)生了異常,在異常向量地址裝入PC時(shí),會(huì)自動(dòng)切換到ARM形狀。異常進(jìn)入異常當(dāng)異常終了時(shí),異常處置程序必需:1.將LR中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;2.將SPSR的值復(fù)制回CPSR;3.清零在入口置位的中斷制止標(biāo)志。注:恢復(fù)CPSR的動(dòng)作會(huì)將T、F和I位自動(dòng)恢復(fù)為異常發(fā)生前的值。異常退出異常程序AIRQ效力程序用戶方式IRQ方式程序存放器組圖示進(jìn)入異常過(guò)程1.程序在系統(tǒng)方式下運(yùn)轉(zhuǎn)用戶程序,假定當(dāng)前處置器形狀為T(mén)humb形狀、允許IRQ中斷;2.用戶程序運(yùn)轉(zhuǎn)時(shí)發(fā)生IRQ中斷,硬件完成以下動(dòng)作:LR_usrSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位〔制止IRQ中斷〕清零T位〔進(jìn)入ARM形狀〕設(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)懷在異常處置終了后,異常處置程序完成以下動(dòng)作:程序AIRQ效力程序系統(tǒng)方式IRQ方式程序存放器組圖示退出異常過(guò)程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV將SPSR存放器的值復(fù)制回CPSR存放器;將LR存放的值減去一個(gè)常量后復(fù)制到PC存放器,跳轉(zhuǎn)到被中斷的用戶程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?〞表示對(duì)該位不關(guān)懷快速中斷懇求(FIQ)適用于對(duì)一個(gè)突發(fā)事件的快速呼應(yīng),這得益于在ARM形狀中,快中斷方式有8個(gè)公用的存放器可用來(lái)滿足存放器維護(hù)的需求〔這可以加速上下文切換的速度〕。不論異常入口是來(lái)自ARM形狀還是Thumb形狀,F(xiàn)IQ處置程序都會(huì)經(jīng)過(guò)執(zhí)行下面的指令從中斷前往:SUBSPC,R14_fiq,#4在一個(gè)特權(quán)方式中,可以經(jīng)過(guò)置位CPSR中的F位來(lái)制止FIQ異常。異??焖僦袛鄳┣笾袛鄳┣蟆睮RQ〕異常是一個(gè)由nIRQ輸入端的低電平所產(chǎn)生的正常中斷〔在詳細(xì)的芯片中,nIRQ由片內(nèi)外設(shè)拉低,nIRQ是內(nèi)核的一個(gè)信號(hào),對(duì)用戶不可見(jiàn)〕。IRQ的優(yōu)先級(jí)低于FIQ。對(duì)于FIQ序列它是被屏蔽的。任何時(shí)候在一個(gè)特權(quán)方式下,都可經(jīng)過(guò)置位CPSR中的I位來(lái)制止IRQ。不論異常入口是來(lái)自ARM形狀還是Thumb形狀,F(xiàn)IQ處置程序都會(huì)經(jīng)過(guò)執(zhí)行下面的指令從中斷前往:SUBSPC,R14_fiq,#4異常中斷懇求中止發(fā)生在對(duì)存儲(chǔ)器的訪問(wèn)不能完成時(shí),中止包含兩種類型:預(yù)取中止發(fā)生在指令預(yù)取過(guò)程中數(shù)據(jù)中止發(fā)生在對(duì)數(shù)據(jù)訪問(wèn)時(shí)異常中止當(dāng)發(fā)生預(yù)取中止時(shí),ARM內(nèi)核將預(yù)取的指令標(biāo)志為無(wú)效,但在指令到達(dá)流水線的執(zhí)行階段時(shí)才進(jìn)入異常。假設(shè)指令在流水線中由于發(fā)生分支而沒(méi)有被執(zhí)行,中止將不會(huì)發(fā)生。在處置中止的緣由之后,不論處于哪種處置器操作形狀,處置程序都會(huì)執(zhí)行下面的指令恢復(fù)PC和CPSR并重試被中止的指令:SUBSPC,R14_abt,#4異常中止——預(yù)取指中止當(dāng)發(fā)生數(shù)據(jù)中止后,根據(jù)產(chǎn)生數(shù)據(jù)中止的指令類型作出不同的處置:異常中止——數(shù)據(jù)中止數(shù)據(jù)轉(zhuǎn)移指令〔LDR、STR〕回寫(xiě)到被修正的基址存放器。中止處置程序必需留意這一點(diǎn);交換指令〔SWP〕中止好似沒(méi)有被執(zhí)行過(guò)一樣〔中止必需發(fā)生在SWP指令進(jìn)展讀訪問(wèn)時(shí)〕;塊數(shù)據(jù)轉(zhuǎn)移指令〔LDM,STM〕完成。當(dāng)回寫(xiě)被設(shè)置時(shí),基址存放器被更新。在指示出現(xiàn)中止后,ARM內(nèi)核防止一切存放器被覆蓋。這意味著ARM內(nèi)核總是會(huì)維護(hù)被中止的LDM指令中的R15〔總是最后一個(gè)被轉(zhuǎn)移的存放器〕。異常中止——數(shù)據(jù)中止當(dāng)發(fā)生數(shù)據(jù)中止后,根據(jù)產(chǎn)生數(shù)據(jù)中止的指令類型作出不同的處置:在修復(fù)產(chǎn)生中止的緣由后,不論處于哪種處置器操作形狀,處置程序都必需執(zhí)行下面的前往指令:SUBSPC,R14_abt,#8異常中止——數(shù)據(jù)中止運(yùn)用軟件中斷(SWI)指令可以進(jìn)入管理方式,通常用于懇求一個(gè)特定的管理函數(shù)。SWI處置程序經(jīng)過(guò)執(zhí)行下面的指令前往:MOVSPC,R14_svc這個(gè)動(dòng)作恢復(fù)了PC和CPSR并前往到SWI之后的指令。SWI處置程序讀取操作碼以提取SWI函數(shù)編號(hào)。異常軟件中斷指令當(dāng)ARM處置器遇到一條本人和系統(tǒng)內(nèi)任何協(xié)處置器都無(wú)法處置的指令時(shí),ARM內(nèi)核執(zhí)行未定義指令圈套。軟件可運(yùn)用這一機(jī)制經(jīng)過(guò)模擬未定義的協(xié)處置器指令來(lái)擴(kuò)展ARM指令集。注:ARM處置器完全遵照ARM構(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è)固定的優(yōu)先級(jí)系統(tǒng)決議它們被處置的順序:異常異常優(yōu)先級(jí)異常類型優(yōu)先級(jí)復(fù)位1(最高優(yōu)先級(jí))數(shù)據(jù)中止2FIQ3IRQ4預(yù)取中止5未定義指令6SWI7(最低優(yōu)先級(jí))優(yōu)先級(jí)降低留意:未定義的指令和SWI異?;コ?。由于同一條指令不能既是未定義的,又能產(chǎn)生有效的軟件中斷;當(dāng)FIQ使能,并且FIQ和數(shù)據(jù)中止異常同時(shí)發(fā)生時(shí),ARM內(nèi)核首先進(jìn)入數(shù)據(jù)中止處置程序,然后立刻跳轉(zhuǎn)到FIQ向量。在FIQ處置終了后前往到數(shù)據(jù)中止處置程序。數(shù)據(jù)中止的優(yōu)先級(jí)必需高于FIQ以確保數(shù)據(jù)轉(zhuǎn)移錯(cuò)誤不會(huì)被漏過(guò)。異常異常優(yōu)先級(jí)復(fù)位復(fù)位當(dāng)nRESET信號(hào)被拉低時(shí)〔普通外部復(fù)位引腳電平的變化和芯片的其它復(fù)位源會(huì)改動(dòng)這個(gè)內(nèi)核信號(hào)〕,ARM處置器放棄正在執(zhí)行的指令。在復(fù)位后,除PC和CPSR之外的一切存放器的值都不確定。復(fù)位復(fù)位當(dāng)nRESET信號(hào)再次變?yōu)楦唠娖匠?,ARM處置器執(zhí)行以下操作:1.強(qiáng)迫M[4:0]變?yōu)閎10011〔管理方式〕;2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.強(qiáng)迫PC從地址0x00開(kāi)場(chǎng)對(duì)下一條指令進(jìn)展取指;5.前往到ARM形狀并恢復(fù)執(zhí)行。什么是異常?當(dāng)正常的程序執(zhí)行流程發(fā)生暫時(shí)的停頓時(shí),稱之為異常,例如一個(gè)外部的中斷懇求。在處置異常之前,當(dāng)前處置器的形狀必需保管,這樣當(dāng)異常處置完成后,恢復(fù)之前保管的處置器現(xiàn)場(chǎng),當(dāng)前程序可以繼續(xù)執(zhí)行。處置器的形狀保管和恢復(fù)通常是和體系構(gòu)造親密相關(guān)的,特別是處置器內(nèi)部的存放器。哪些處置器的形狀需求保管?發(fā)生異常前的方式下的通用存放器R0–R12需求保管假設(shè)是FIQ異常,那么可以只保管R0–R7CPSR和PC由硬件自動(dòng)存入SPSR_irq和lr_irq中,保管與否取決于在中斷處置程序中能否會(huì)改動(dòng)。R13(sp)和R14(lr)不需求保管從異常方式前往所需求的存放器前往的地址保管在lr_irq中前往的方式保管在spsr_irq中這些存放器保管到哪里?保管在異常方式下的堆棧中,sp_irq作為堆棧指針異常處置時(shí)內(nèi)存映像圖示主程序〔通常是無(wú)限循環(huán)〕異常處置程序保管處置器現(xiàn)場(chǎng)程序恢復(fù)處置器現(xiàn)場(chǎng)程序主程序內(nèi)存C言語(yǔ)編寫(xiě)通常是無(wú)限循環(huán)異常處置程序C言語(yǔ)編寫(xiě)通常是設(shè)置標(biāo)志位,快速處置保管和恢復(fù)處置器現(xiàn)場(chǎng)程序匯編言語(yǔ)編寫(xiě)通常是將存放器壓棧和彈棧異常向量表分析異常向量表從0地址開(kāi)場(chǎng),共有8個(gè)表項(xiàng)其中7個(gè)表項(xiàng)用作異常發(fā)生后入口,1個(gè)保管不用普通每個(gè)表項(xiàng)內(nèi)的指令都是一條跳轉(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í)引入異常向量表后的內(nèi)存映像內(nèi)存主程序〔通常是無(wú)限循環(huán)〕異常處置程序保管處置器現(xiàn)場(chǎng)程序恢復(fù)處置器現(xiàn)場(chǎng)程序主程序異常處置程序保管和恢復(fù)處置器現(xiàn)場(chǎng)程序異常向量表通常是放置一條跳轉(zhuǎn)語(yǔ)句從主程序到異常向量表的跳轉(zhuǎn)是硬件自動(dòng)完成的異常向量表入口2異常呼應(yīng)當(dāng)一個(gè)異常出現(xiàn)以后,ARM微處置器硬件會(huì)自動(dòng)完成以下幾步操作:1、將下一條指令的地址存入該異常對(duì)應(yīng)的任務(wù)方式下的銜接存放器LR(r14_irq),以便程序在處置異常前往時(shí)能從正確的位置重新開(kāi)場(chǎng)執(zhí)行。討論:為什么是r14_irq而不是r14_svc?2、將CPSR復(fù)制到相應(yīng)的SPSR_irq中。3、根據(jù)異常類型,強(qiáng)迫設(shè)置CPSR的運(yùn)轉(zhuǎn)方式位。4、制止IRQ中斷;進(jìn)入FIQ方式時(shí)制止FIQ中斷。5、映射相應(yīng)方式的存放器6、強(qiáng)迫PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處置程序處。異常呼應(yīng)(續(xù))3異常處置異常處置包括兩部分保管處置器現(xiàn)場(chǎng) STMFD sp!,{r0-r12,lr};執(zhí)行中斷效力子程序 BL do_irq;4異常前往異常處置終了之后,軟件需求執(zhí)行以下幾步操作從異常前往:1、將鏈接存放器LR的值減去相應(yīng)的偏移量后送到PC中。2、同時(shí)將SPSR復(fù)制回CPSR中??梢砸詾檫\(yùn)用程序總是從復(fù)位異常處置程序開(kāi)場(chǎng)執(zhí)行的,因此復(fù)位異常處置程序不需求前往。未定義指令異常前往未定義指令異常是由當(dāng)前執(zhí)行的指令本身產(chǎn)生的,程序計(jì)數(shù)器PC的值還未更新,指向當(dāng)前指令后面第2條指令。處置器將PC-4保管到存放器LR_und中。前往操作可經(jīng)過(guò)如下指令實(shí)現(xiàn)MOVS PC, LRSTMFD SP!, {R0-R12,LR} ;… LDMFD SP!, {R0-R12,PC}^SWIimmSWI異常前往SWI異常通常是提供程序員運(yùn)用,程序員可以讓處置器進(jìn)入SVC方式下執(zhí)行特定函數(shù)來(lái)完成某種功能。我們可以用如下一條指令進(jìn)入SWI異常:SWI異常也是由當(dāng)前執(zhí)行的指令本身產(chǎn)生的,返回操作同未定義指令異常。IRQ中斷前往IRQ異常屬于正常的中斷懇求,可經(jīng)過(guò)對(duì)處置器的nIRQ引腳輸入低電平產(chǎn)生。假設(shè)將CPSR的I位置為1,那么會(huì)制止IRQ中斷〔留意只需在特權(quán)方式下才干改動(dòng)I位的形狀〕。假設(shè)將CPSR的I位清零,處置器會(huì)在指令執(zhí)行完之后檢查IRQ的輸入。因此,IRQ中斷產(chǎn)生時(shí)程序計(jì)數(shù)器PC的值曾經(jīng)更新,指向當(dāng)前指令后面第3條指令。IRQ中斷前往〔續(xù)〕IRQ中斷前往操作可經(jīng)過(guò)如下指令實(shí)現(xiàn)SUBS PC, R14_irq,#4SUBS LR, LR,#4 STMFD SP!, {R0-R12,LR} ;… LDMFD SP!, {R0-R12,PC}

溫馨提示

  • 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)論