版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1第4章ARM體系結(jié)構(gòu)本章主要介紹以下內(nèi)容:ARM存儲器組織ARM的異常中斷1第4章ARM體系結(jié)構(gòu)本章主要介紹以下內(nèi)容:24.6ARM存儲器組織介紹以下內(nèi)容:數(shù)據(jù)類型和存儲格式ARM的存儲體系片上存儲器的用法 協(xié)處理器CP15存儲器管理單元MMU保護(hù)單元快速上下文切換擴展寫緩存器(WriteBuffer)ARM的異常中斷向量表和異常中斷處理與返回24.6ARM存儲器組織介紹以下內(nèi)容:34.6.1數(shù)據(jù)類型和存儲格式ARM存儲器中的數(shù)據(jù)類型有6種有符號數(shù)8位(字節(jié))、16位(半字)、32位(字)無符號數(shù)8位(字節(jié))、16位(半字)、32位(字)缺省端序設(shè)置為小端序34.6.1數(shù)據(jù)類型和存儲格式ARM存儲器中的數(shù)據(jù)類型有2008年6月21日44.6.2ARM的存儲體系參看下圖,抽象成一個呈金字塔型的存儲結(jié)構(gòu)注重研究第2層2008年6月21日44.6.2ARM的存儲體系參看下圖2008年6月21日54.6.3片上存儲器的用法多數(shù)ARM處理器芯片內(nèi)部集成了存儲器它們統(tǒng)稱為片上存儲器用途有:片上Cache、片上SRAM、緊耦合存儲器(TCM)、寫緩存片上存儲器的存儲空間可以通過指令進(jìn)行配置,定義成片上Cache,或者片上SRAM,或者一部分片上Cache加一部分片上SRAM。緊耦合存儲器和寫緩存均需要編程使能或者硬件接線使能按照具體應(yīng)用情況決定片上存儲器配置方法2008年6月21日54.6.3片上存儲器的用法多數(shù)ARM2008年6月21日6片上存儲器用作緊耦合存儲器緊耦合存儲器的英文原文如下:TightlyCoupledMemory,TCM彌補Cache訪問的不確定性而增加的片上存儲器。除了片上緊耦合存儲器外,還有緊耦合存儲器接口,它能夠提供低延時的外存儲器訪問。有的處理器含有分立的指令TCM和數(shù)據(jù)TCM。TCM包含在存儲器地址映射空間中,可以作為快速存儲器來訪問。除了不得包含讀敏感地址之外,對TCM接口上連接的存儲器類型沒有其他限制。TCM使用物理地址,對TCM的寫訪問受到MMU內(nèi)部保護(hù)信息的控制。2008年6月21日6片上存儲器用作緊耦合存儲器緊耦合存儲器2008年6月21日7TCM在ARMv6處理器核的位置ARMv6處理器包括:ARM1136J-S、ARM1156T22008年6月21日7TCM在ARMv6處理器核的位置ARM2008年6月21日8片內(nèi)TCM存儲器舉例ARM926EJ-S核心內(nèi)置32KB指令緩存、16KB數(shù)字緩存和8KB數(shù)據(jù)-TCM和8KB指令-TCM;2008年6月21日8片內(nèi)TCM存儲器舉例ARM926EJ-2008年6月21日9Cortex-R4F方框圖—含TCM接口注意圖的右側(cè)含有一個TCM仲裁和接口模塊2008年6月21日9Cortex-R4F方框圖—含TCM接2008年6月21日10ARM1136的TCM支持DMA傳輸參看ARM1136的方框圖2008年6月21日10ARM1136的TCM支持DMA傳輸2008年6月21日11ARM966E-S核的TCM地址映射2008年6月21日11ARM966E-S核的TCM地址映射2008年6月21日12ARM966E-S的TCM別名地址空間物理存儲塊可以通過TCM接口映射在片內(nèi)的TCM存儲區(qū)2008年6月21日12ARM966E-S的TCM別名地址空2008年6月21日13ARM966E-S的TCM特點TheARM966E-SprocessorsupportsbothinstructionanddataTCMs.YoucanusetheDTCMandITCMtostorereal-timeandperformance-criticalcode.TheTCMsareinstantiatedexternallytotheARM966E-Smacrocellprovidingforflexibilityinthedesignofthememorysubsystem.Thesystemdesignercanselectmemorytypeandoptimizethememorysubsystemforpowerorspeed.2008年6月21日13ARM966E-S的TCM特點The2008年6月21日14ARM966E-S的TCM接口特點(續(xù)1)ThefeaturesoftheTCMinterfaceinclude:
independentITCMandDTCMsizesof0KBor1KB-64MBinpower-of-twoincrements
softwarevisibilityandprogrammabilityofTCMsizeandenable
bootcontrolforITCM
dataaccesstotheITCMforliteralpoolaccessesincode
simpleSRAM-styleinterfacesupportingbothreadsandwrites
variableTCMwaitstatecontrolforITCMandDTCM
abilitytoindicatesequentialandnonsequentialaccesses.2008年6月21日14ARM966E-S的TCM接口特點(2008年6月21日15ARM966E-S的TCM特點接口(續(xù)2)TheARM966E-SprocessorcontainsaTCMcontrollerthat:
schedulesrequeststotheTCMinterface
handshakeswiththeARM966E-Smemorysystemcontrollertoacknowledgewhenrequestshavebeenserviced
returnsTCMreaddatabacktotheARM9E-Score.TheTCMsarelocatedintheTCMaddressspace.
2008年6月21日15ARM966E-S的TCM特點接口(2008年6月21日16AT91SAM9261處理器的TCMAT91SAM9261的獨立指令和數(shù)據(jù)緩存能支持WinCE和Linux操作系統(tǒng)。而其基于TCM構(gòu)架的SRAM區(qū)塊則是“確定過程式”實時操作系統(tǒng)的理想安排。另一方面,160K字節(jié)的片上SRAM可劃分成多個16K字節(jié)的區(qū)塊,作為“指令TCM”、“數(shù)據(jù)TCM”或片上外設(shè)的緩沖,從而讓編程人員靈活地優(yōu)化系統(tǒng)的性能和功耗。2008年6月21日16AT91SAM9261處理器的TCM2008年6月21日17TCM的使能操作通過二種方式進(jìn)行TCM的使能操作使用處理器芯片的INITRAM引腳使用CP15的c1控制寄存器2008年6月21日17TCM的使能操作通過二種方式進(jìn)行TC2008年6月21日18S3C44B0X和S3C4510B的三種片上存儲器的配置用法S3C44B0X和S3C4510B都有8KB的片上存儲器它們有三種配置用法8KB的SRAM8KB的Cache4KB的SRAM加上4KB的Cache較多采用片內(nèi)RAM配置而非片內(nèi)Cache配置。2008年6月21日18S3C44B0X和S3C4510B的2008年6月21日19ARM920T的片內(nèi)存儲器注意:ARM920T核的內(nèi)部沒有TCM2008年6月21日19ARM920T的片內(nèi)存儲器注意:AR2008年6月21日20ARM720T的片內(nèi)存儲器8KByteunifiedcacheMemoryManagementUnit(MMU)writebufferUnified32-bitAHBbusinterfacecarriesbothinstructionsanddataEmbeddedTraceMacrocell(ETM)interface2008年6月21日20ARM720T的片內(nèi)存儲器8KBy2008年6月21日214.6.4協(xié)處理器CP15CP15即所謂的系統(tǒng)控制協(xié)處理器SystemControlCoprocessor在基于ARM的嵌入式系統(tǒng)中,諸如MMU、Cache配置、緊耦合處理器、寫緩存配置之類的存儲系統(tǒng)管理工作由協(xié)處理器CP15完成。CP15可以包含16個32位寄存器編號為CP0~CP15。實際運用中寫為C0~C15。2008年6月21日214.6.4協(xié)處理器CP15CP12008年6月21日22CP15寄存器的訪問用戶只能夠在特權(quán)模式下使用MRC和MCR指令來訪問CP15寄存器。2008年6月21日22CP15寄存器的訪問用戶只能夠在特權(quán)2008年6月21日234.6.5存儲器管理單元MMUARM的MMU部件的用途:
完成虛擬存儲空間到物理存儲空間的映射。
管理方式:頁式虛擬存儲器。
頁的大小有兩種:粗粒度和細(xì)粒度。
存儲器訪問權(quán)限的控制。
設(shè)置虛擬存儲空間的緩沖特性。2008年6月21日234.6.5存儲器管理單元MMUAR2008年6月21日244.6.6保護(hù)單元保護(hù)單元PU,ProtectionUnit也稱為:MPU,MemoryProtectionUnit為了消除術(shù)語的二義性,我們統(tǒng)一使用術(shù)語PU保護(hù)單元提供了一個相當(dāng)簡單的替代MMU的方法來管理存儲器。對于不需要PU的嵌入式系統(tǒng)而言,PU簡化了硬件和軟件,主要表現(xiàn)在不使用轉(zhuǎn)換表,這樣免去了硬件遍歷轉(zhuǎn)換表和軟件建立與維護(hù)轉(zhuǎn)換表。2008年6月21日244.6.6保護(hù)單元保護(hù)單元2008年6月21日25保護(hù)單元的工作原理和作用ARM核的PU使用區(qū)域(region)來管理系統(tǒng)保護(hù)。區(qū)域是一個存儲空間相關(guān)聯(lián)的一組屬性,處理器核將這些屬性保存在協(xié)處理器CP15的一些寄存器里,并用0-7的號碼標(biāo)識每一個區(qū)域(它也是一個具有特定屬性的邏輯存儲空間)。區(qū)域的存儲邊界通過兩個屬性進(jìn)行配置:起始地址和大小。區(qū)域的大小可以是4KB~4MB的任何2的乘冪。2008年6月21日25保護(hù)單元的工作原理和作用ARM核的P2008年6月21日26受保護(hù)區(qū)域的屬性操作系統(tǒng)可以為受保護(hù)區(qū)域分配更多的屬性,包括:訪問權(quán)限、Cache和寫緩存器策略訪問權(quán)限可以是:讀/寫、只讀和不可訪問基于處理器模式的權(quán)限管理模式、用戶模式等Cache寫策略寫直達(dá)Cache操作、無Cache操作、無寫緩存器操作。2008年6月21日26受保護(hù)區(qū)域的屬性操作系統(tǒng)可以為受保護(hù)2008年6月21日27含PU的ARM處理器主存訪問過程當(dāng)處理器訪問主存的一個區(qū)域時,PU比較該區(qū)域的訪問權(quán)限屬性和當(dāng)時的處理器模式。如果請求符合區(qū)域訪問標(biāo)準(zhǔn),則PU允許內(nèi)核讀/寫主存;如果存儲器請求導(dǎo)致存儲器訪問違例,則PU產(chǎn)生一個異常信號。異常信號被傳到處理器核,處理器核判斷是出異常是預(yù)取指令中止還是數(shù)據(jù)中止,然后跳轉(zhuǎn)到對應(yīng)的異常處理例程。2008年6月21日27含PU的ARM處理器主存訪問過程當(dāng)處2008年6月21日28區(qū)域?qū)傩杂嘘P(guān)區(qū)域的屬性如下:區(qū)域可以相互重疊每一個區(qū)域有一個優(yōu)先級,該優(yōu)先級與分配給區(qū)域的權(quán)限無關(guān)當(dāng)區(qū)域重疊時,具有最高優(yōu)先權(quán)的區(qū)域的屬性可以覆蓋其他區(qū)域的屬性,優(yōu)先權(quán)僅作用于重疊部分的地址。區(qū)域的起始地址必須是其大小的倍數(shù)。區(qū)域的大小是2的乘冪,2的12次方到32次方。2008年6月21日28區(qū)域?qū)傩杂嘘P(guān)區(qū)域的屬性如下:2008年6月21日29訪問受保護(hù)區(qū)域時產(chǎn)生的異常訪問所定義區(qū)域外的存儲器將產(chǎn)生異常。如果是內(nèi)核預(yù)取指令,則PU產(chǎn)生一個預(yù)取指令中止異常。如果是存儲器數(shù)據(jù)請求,則PU產(chǎn)生數(shù)據(jù)中止異常。2008年6月21日29訪問受保護(hù)區(qū)域時產(chǎn)生的異常訪問所定義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日30帶PU的ARM核概要以下給出了四種帶2008年6月21日31在帶PU的ARM系統(tǒng)中創(chuàng)建區(qū)域要實現(xiàn)一個受PU控制主存的嵌入式系統(tǒng),需要對主存中的不同塊定義若干區(qū)域。一個區(qū)域可以被創(chuàng)建一次,然后一直用到嵌入式系統(tǒng)運行結(jié)束;也可以臨時創(chuàng)建一個區(qū)域來滿足一個特殊操作的需要,用完之后就加以刪除。2008年6月21日31在帶PU的ARM系統(tǒng)中創(chuàng)建區(qū)域要實現(xiàn)2008年6月21日32含有PU的ARM核含有8個受保護(hù)區(qū)域的ARM核ARM740TARM946E-SARM1026EJ-S含有16個受保護(hù)區(qū)域的ARM核ARM940T2008年6月21日32含有PU的ARM核含有8個受保護(hù)區(qū)域2008年6月21日33初始化PU、Cache和寫緩沖器為了初始化PU、Cache和寫緩沖器,控制系統(tǒng)必須定義在操作目標(biāo)平臺時所需要的保護(hù)區(qū)域。功能主存儲器次存儲器系統(tǒng)控制C1C0區(qū)域的cache屬性C2C0區(qū)域的寫緩沖器屬性C3C0區(qū)域的訪問權(quán)限屬性C5C0區(qū)域的大小和位置C6C0~C72008年6月21日33初始化PU、Cache和寫緩沖器為了2008年6月21日34帶保護(hù)單元和MMU的系統(tǒng)框圖2008年6月21日34帶保護(hù)單元和MMU的系統(tǒng)框圖2008年6月21日354.6.7ARM處理器的CacheARM處理器均帶有Cache或者可以將片上存儲器配置成Cache。當(dāng)然,在不需要時也可以通過配置操作關(guān)閉Cache。ARM處理器的Cache地址映射均采用組相聯(lián)映射。2008年6月21日354.6.7ARM處理器的Cache2008年6月21日364.6.8快速上下文切換擴展快速上下文切換擴展FCSE,F(xiàn)astContextSwitchExtensionFCSE是ARM存儲系統(tǒng)的修正機構(gòu)。它修改系統(tǒng)中不同進(jìn)程的虛擬地址,避免在進(jìn)行進(jìn)程間切換時造成的虛擬地址到物理地址的重映射,從而提高系統(tǒng)的性能。為了理解ARM處理器的FCSE功能,我們首先考察當(dāng)虛擬存儲器中任務(wù)切換時,主存中頁表和物理存儲器的隨動切換。2008年6月21日364.6.8快速上下文切換擴展快速上2008年6月21日37ARM虛擬存儲器
用戶任務(wù)上下文切換示例-1任務(wù)1正在執(zhí)行2008年6月21日37ARM虛擬存儲器
用戶任務(wù)上下文切換2008年6月21日38ARM虛擬存儲器
用戶任務(wù)上下文切換示例-2任務(wù)2正在執(zhí)行2008年6月21日38ARM虛擬存儲器
用戶任務(wù)上下文切換2008年6月21日39ARM虛擬存儲器
用戶任務(wù)上下文切換示例-3任務(wù)3正在執(zhí)行2008年6月21日39ARM虛擬存儲器
用戶任務(wù)上下文切換2008年6月21日403個任務(wù)的多任務(wù)環(huán)境中
快速上下文切換擴展的舉例:切換前任務(wù)1正在運行2008年6月21日403個任務(wù)的多任務(wù)環(huán)境中
快速上下文切2008年6月21日413個任務(wù)的多任務(wù)環(huán)境中
快速上下文切換擴展的舉例:(續(xù))切換后任務(wù)2正在運行2008年6月21日413個任務(wù)的多任務(wù)環(huán)境中
快速上下文切2008年6月21日424.6.9寫緩存器(WriteBuffer)寫緩存器是一個容量很小的片內(nèi)的先進(jìn)先出(FIFO)存儲器,位于處理器核與主存之間。寫緩存器的主要用途是:當(dāng)CPU輸出數(shù)據(jù)時,總線恰好被占用而無法輸出,此時,CPU可以把輸出數(shù)據(jù)寫入到寫緩存器。當(dāng)總線上沒有比寫緩存區(qū)優(yōu)先級更高的掌控者時,寫緩存區(qū)可以通過總線將數(shù)據(jù)寫入內(nèi)存。
CPU由于不需要等待寫操作的完成而增強了性能。寫緩存區(qū)中的FIFO存儲器在存儲層次中與L1Cache處于相同的層次。2008年6月21日424.6.9寫緩存器(WriteB2008年6月21日43S3C44B0X處理器的寫緩存區(qū)由4個寫緩存寄存器構(gòu)成。每一個寫緩存寄存器包括一個32位數(shù)據(jù)字段,一個28位地址字段和一個2位狀態(tài)字段??梢酝ㄟ^指令對控制寄存器SYSCFG的WE位置1或者置0來使能或者禁能寫緩存器。參看下圖。2008年6月21日43S3C44B0X處理器的寫緩存區(qū)由42008年6月21日444.7ARM的異常中斷ARM異常與中斷不做嚴(yán)格意義上的區(qū)別ARM的中斷向量表內(nèi)存放的是響應(yīng)異常和中斷的轉(zhuǎn)移指令而不是中斷向量地址。在ARM處理器中,當(dāng)異常發(fā)生時,完成當(dāng)前指令后跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序入口執(zhí)行異常中斷處理。異常處理完畢后返回原來的程序斷點繼續(xù)執(zhí)行原來的程序。2008年6月21日444.7ARM的異常中斷ARM異常ARM異常和中斷處理ARM異常和中斷處理課程安排ARM體系結(jié)構(gòu)知識回顧ARM異常的響應(yīng)ARM異常的處理ARM異常的返回ARM中斷的產(chǎn)生、初始化和響應(yīng)處理流程課程安排ARM體系結(jié)構(gòu)知識回顧異常簡介
只要正常的程序流被暫時中止,處理器就進(jìn)入異常模式。例如響應(yīng)一個來自外設(shè)的中斷。在處理異常之前,ARM內(nèi)核保存當(dāng)前的處理器狀態(tài),這樣當(dāng)處理程序結(jié)束時可以恢復(fù)執(zhí)行原來的程序。如果同時發(fā)生兩個或更多異常,那么將按照固定的順序來處理異常,詳見“異常優(yōu)先級”部分。異常簡介只要正常的程序流被暫時中止,處理異常入口/出口匯總異?;蛉肟诜祷刂噶钪暗臓顟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占先而沒有被執(zhí)行的指令的地址中斷SUBSPC,R14_irq,#4PC+4PC+4數(shù)據(jù)中止SUBSPC,R14_abt,#8PC+8PC+8此處PC為產(chǎn)生數(shù)據(jù)中止的裝載或保存指令的地址。
復(fù)位無——復(fù)位時保存在R14_svc中的值不可預(yù)知。
異常入口/出口匯總異?;蛉肟诜祷刂噶钪暗臓顟B(tài)備注ARMR異常異常的入口和出口處理
如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實現(xiàn)返回。SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回中斷處理代碼的開始部分和退出部分異常異常的入口和出口處理如果異常處理程序已經(jīng)把
如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實現(xiàn)返回。中斷處理代碼的開始部分和退出部分異常異常的入口和出口處理SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“^”符號表示這是一條特殊形式的指令。這條指令在從存儲器中裝載PC的同時(PC是最后恢復(fù)的),CPSR也得到恢復(fù)。這里使用的堆棧指針SP(R13)是屬于異常模式的寄存器,每個異常模式有自己的堆棧指針。這個堆棧指針應(yīng)必須在系統(tǒng)啟動時初始化。如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會作以下工作:1.在適當(dāng)?shù)腖R中保存下一條指令的地址,當(dāng)異常入口來自:ARM狀態(tài),那么ARM將當(dāng)前指令地址加4或加8復(fù)制(取決于異常的類型)到LR中;為Thumb狀態(tài),那么ARM將當(dāng)前指令地址加4或加8(取決于異常的類型)復(fù)制到LR中;異常處理器程序不必確定狀態(tài)。異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會作以下工作:1.在異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會作以下工作:2.將CPSR復(fù)制到適當(dāng)?shù)腟PSR中;3.將CPSR模式位強制設(shè)置為與異常類型相對應(yīng)的值;4.強制PC從相關(guān)的異常向量處取指。異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會作以下工作:2.將ARM內(nèi)核在中斷異常時置位中斷禁止標(biāo)志,這樣可以防止不受控制的異常嵌套。注:異??偸窃贏RM狀態(tài)中進(jìn)行處理。當(dāng)處理器處于Thumb狀態(tài)時發(fā)生了異常,在異常向量地址裝入PC時,會自動切換到ARM狀態(tài)。異常進(jìn)入異常ARM內(nèi)核在中斷異常時置位中斷禁止標(biāo)志,這樣當(dāng)異常結(jié)束時,異常處理程序必須:1.將LR中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;2.將SPSR的值復(fù)制回CPSR;3.清零在入口置位的中斷禁止標(biāo)志。注:恢復(fù)CPSR的動作會將T、F和I位自動恢復(fù)為異常發(fā)生前的值。異常退出異常當(dāng)異常結(jié)束時,異常處理程序必須:異常退出異常程序AIRQ服務(wù)程序用戶模式IRQ模式程序寄存器組圖示進(jìn)入異常過程1.程序在系統(tǒng)模式下運行用戶程序,假定當(dāng)前處理器狀態(tài)為Thumb狀態(tài)、允許IRQ中斷;2.用戶程序運行時發(fā)生IRQ中斷,硬件完成以下動作: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,實現(xiàn)跳轉(zhuǎn)IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示對該位不關(guān)心程序AIRQ服務(wù)程序用戶模式IRQ模式程序寄存器組圖示進(jìn)入異在異常處理結(jié)束后,異常處理程序完成以下動作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組圖示退出異常過程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV將SPSR寄存器的值復(fù)制回CPSR寄存器;將LR寄存的值減去一個常量后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示對該位不關(guān)心在異常處理結(jié)束后,異常處理程序完成以下動作:程序AIRQ服務(wù)
快速中斷請求(FIQ)適用于對一個突發(fā)事件的快速響應(yīng),這得益于在ARM狀態(tài)中,快中斷模式有8個專用的寄存器可用來滿足寄存器保護(hù)的需要(這可以加速上下文切換的速度)。不管異常入口是來自ARM狀態(tài)還是Thumb狀態(tài),F(xiàn)IQ處理程序都會通過執(zhí)行下面的指令從中斷返回:SUBSPC,R14_fiq,#4
在一個特權(quán)模式中,可以通過置位CPSR中的F位來禁止FIQ異常。異??焖僦袛嗾埱罂焖僦袛嗾埱?FIQ)適用于對一個突發(fā)事件的
中斷請求(IRQ)異常是一個由nIRQ輸入端的低電平所產(chǎn)生的正常中斷(在具體的芯片中,nIRQ由片內(nèi)外設(shè)拉低,nIRQ是內(nèi)核的一個信號,對用戶不可見)。IRQ的優(yōu)先級低于FIQ。對于FIQ序列它是被屏蔽的。任何時候在一個特權(quán)模式下,都可通過置位CPSR中的I位來禁止IRQ。不管異常入口是來自ARM狀態(tài)還是Thumb狀態(tài),F(xiàn)IQ處理程序都會通過執(zhí)行下面的指令從中斷返回:SUBSPC,R14_fiq,#4異常中斷請求中斷請求(IRQ)異常是一個由nIRQ輸入端
中止發(fā)生在對存儲器的訪問不能完成時,中止包含兩種類型:預(yù)取中止發(fā)生在指令預(yù)取過程中數(shù)據(jù)中止發(fā)生在對數(shù)據(jù)訪問時異常中止中止發(fā)生在對存儲器的訪問不能完成時,中止包含
當(dāng)發(fā)生預(yù)取中止時,ARM內(nèi)核將預(yù)取的指令標(biāo)記為無效,但在指令到達(dá)流水線的執(zhí)行階段時才進(jìn)入異常。如果指令在流水線中因為發(fā)生分支而沒有被執(zhí)行,中止將不會發(fā)生。在處理中止的原因之后,不管處于哪種處理器操作狀態(tài),處理程序都會執(zhí)行下面的指令恢復(fù)PC和CPSR并重試被中止的指令:
SUBSPC,R14_abt,#4異常中止——預(yù)取指中止當(dāng)發(fā)生預(yù)取中止時,ARM內(nèi)核將預(yù)取的指令標(biāo)記
當(dāng)發(fā)生數(shù)據(jù)中止后,根據(jù)產(chǎn)生數(shù)據(jù)中止的指令類型作出不同的處理:異常中止——數(shù)據(jù)中止數(shù)據(jù)轉(zhuǎn)移指令(LDR、STR)回寫到被修改的基址寄存器。中止處理程序必須注意這一點;交換指令(SWP)中止好像沒有被執(zhí)行過一樣(中止必須發(fā)生在SWP指令進(jìn)行讀訪問時);當(dāng)發(fā)生數(shù)據(jù)中止后,根據(jù)產(chǎn)生數(shù)據(jù)中止的指令類型塊數(shù)據(jù)轉(zhuǎn)移指令(LDM,STM)完成。當(dāng)回寫被設(shè)置時,基址寄存器被更新。在指示出現(xiàn)中止后,ARM內(nèi)核防止所有寄存器被覆蓋。這意味著ARM內(nèi)核總是會保護(hù)被中止的LDM指令中的R15(總是最后一個被轉(zhuǎn)移的寄存器)。異常中止——數(shù)據(jù)中止
當(dāng)發(fā)生數(shù)據(jù)中止后,根據(jù)產(chǎn)生數(shù)據(jù)中止的指令類型作出不同的處理:塊數(shù)據(jù)轉(zhuǎn)移指令(LDM,STM)完成。當(dāng)回寫被設(shè)置時,基址
在修復(fù)產(chǎn)生中止的原因后,不管處于哪種處理器操作狀態(tài),處理程序都必須執(zhí)行下面的返回指令:
SUBSPC,R14_abt,#8異常中止——數(shù)據(jù)中止在修復(fù)產(chǎn)生中止的原因后,不管處于哪種處理器操
使用軟件中斷(SWI)指令可以進(jìn)入管理模式,通常用于請求一個特定的管理函數(shù)。SWI處理程序通過執(zhí)行下面的指令返回:MOVSPC,R14_svc
這個動作恢復(fù)了PC和CPSR并返回到SWI之后的指令。SWI處理程序讀取操作碼以提取SWI函數(shù)編號。異常軟件中斷指令使用軟件中斷(SWI)指令可以進(jìn)入管理模
當(dāng)ARM處理器遇到一條自己和系統(tǒng)內(nèi)任何協(xié)處理器都無法處理的指令時,ARM內(nèi)核執(zhí)行未定義指令陷阱。軟件可使用這一機制通過模擬未定義的協(xié)處理器指令來擴展ARM指令集。注:ARM處理器完全遵循ARM結(jié)構(gòu)v4T,可以捕獲所有分類未被定義的指令位格式。異常未定義的指令當(dāng)ARM處理器遇到一條自己和系統(tǒng)內(nèi)任何協(xié)
在模擬處理了失敗的指令后,陷阱程序執(zhí)行下面的指令:MOVSPC,R14_svc
這個動作恢復(fù)了PC和CPSR并返回到未定義指令之后的指令。異常未定義的指令在模擬處理了失敗的指令后,陷阱程序執(zhí)行下面的指令:異常向量地址異常類型進(jìn)入時的模式進(jìn)入時I的狀態(tài)進(jìn)入時F的狀態(tài)0x00000000復(fù)位管理禁止禁止0x00000004未定義指令未定義IF0x00000008軟件中斷管理禁止F0x0000000C中止(預(yù)?。┲兄笽F0x00000010中止(數(shù)據(jù))中止IF0x00000014保留保留——0x00000018IRQ中斷禁止F0x0000001CFIQ快中斷禁止禁止注:表中的I和F表示不對該位有影響,保留原來的值。異常向量地址異常類型進(jìn)入時的模式進(jìn)入時I的狀態(tài)進(jìn)入時F的狀態(tài)
當(dāng)多個異常同時發(fā)生時,一個固定的優(yōu)先級系統(tǒng)決定它們被處理的順序:異常異常優(yōu)先級異常類型優(yōu)先級復(fù)位1(最高優(yōu)先級)數(shù)據(jù)中止2FIQ3IRQ4預(yù)取中止5未定義指令6SWI7(最低優(yōu)先級)優(yōu)先級降低當(dāng)多個異常同時發(fā)生時,一個固定的優(yōu)先級系注意:未定義的指令和SWI異?;コ?。因為同一條指令不能既是未定義的,又能產(chǎn)生有效的軟件中斷;當(dāng)FIQ使能,并且FIQ和數(shù)據(jù)中止異常同時發(fā)生時,ARM內(nèi)核首先進(jìn)入數(shù)據(jù)中止處理程序,然后立即跳轉(zhuǎn)到FIQ向量。在FIQ處理結(jié)束后返回到數(shù)據(jù)中止處理程序。數(shù)據(jù)中止的優(yōu)先級必須高于FIQ以確保數(shù)據(jù)轉(zhuǎn)移錯誤不會被漏過。異常異常優(yōu)先級注意:異常異常優(yōu)先級復(fù)位復(fù)位
當(dāng)nRESET信號被拉低時(一般外部復(fù)位引腳電平的變化和芯片的其它復(fù)位源會改變這個內(nèi)核信號),ARM處理器放棄正在執(zhí)行的指令。
在復(fù)位后,除PC和CPSR之外的所有寄存器的值都不確定。復(fù)位復(fù)位當(dāng)nRESET信號被拉低時(一般復(fù)位復(fù)位
當(dāng)nRESET信號再次變?yōu)楦唠娖綍r,ARM處理器執(zhí)行下列操作:1.強制M[4:0]變?yōu)閎10011(管理模式);2.置位CPSR中的I和F位;3.清零CPSR中的T位;4.強制PC從地址0x00開始對下一條指令進(jìn)行取指;5.返回到ARM狀態(tài)并恢復(fù)執(zhí)行。復(fù)位復(fù)位當(dāng)nRESET信號再次變?yōu)楦唠娖綍r什么是異常?當(dāng)正常的程序執(zhí)行流程發(fā)生暫時的停止時,稱之為異常,例如一個外部的中斷請求。在處理異常之前,當(dāng)前處理器的狀態(tài)必須保存,這樣當(dāng)異常處理完成后,恢復(fù)之前保存的處理器現(xiàn)場,當(dāng)前程序可以繼續(xù)執(zhí)行。處理器的狀態(tài)保存和恢復(fù)通常是和體系結(jié)構(gòu)密切相關(guān)的,特別是處理器內(nèi)部的寄存器。什么是異常?當(dāng)正常的程序執(zhí)行流程發(fā)生暫時的停止時,稱之為異常哪些處理器的狀態(tài)需要保存?發(fā)生異常前的模式下的通用寄存器R0–R12需要保存如果是FIQ異常,則可以只保存R0–R7CPSR和PC由硬件自動存入SPSR_irq和lr_irq中,保存與否取決于在中斷處理程序中是否會改變。R13(sp)和R14(lr)不需要保存從異常模式返回所需要的寄存器返回的地址保存在lr_irq中返回的模式保存在spsr_irq中這些寄存器保存到哪里?保存在異常模式下的堆棧中,sp_irq作為堆棧指針哪些處理器的狀態(tài)需要保存?發(fā)生異常前的模式下的通用寄存器異常處理時內(nèi)存映像圖示主程序(通常是無限循環(huán))異常處理程序保存處理器現(xiàn)場程序恢復(fù)處理器現(xiàn)場程序主程序內(nèi)存C語言編寫通常是無限循環(huán)異常處理程序C語言編寫通常是設(shè)置標(biāo)志位,快速處理保存和恢復(fù)處理器現(xiàn)場程序匯編語言編寫通常是將寄存器壓棧和彈棧異常處理時內(nèi)存映像圖示主程序異常處理程序保存處理器現(xiàn)場程序恢異常向量表分析異常向量表從0地址開始,共有8個表項其中7個表項用作異常發(fā)生后入口,1個保留不用一般每個表項內(nèi)的指令都是一條跳轉(zhuǎn)指令Bxxxx相對跳轉(zhuǎn)指令跳轉(zhuǎn)地址范圍有限LDRpc,[pc,#xx]直接對PC賦值可以實現(xiàn)到任意地址的跳轉(zhuǎn)異常向量表分析異常向量表從0地址開始,共有8個表項
幾個異常如果同時發(fā)生,它們的優(yōu)先級如下1、復(fù)位2、數(shù)據(jù)異常中止3、FIQ4、IRQ5、預(yù)取指令6、SWI和未定義指令異常的優(yōu)先級 幾個異常如果同時發(fā)生,它們的優(yōu)先級如下異常的優(yōu)先級引入異常向量表后的內(nèi)存映像內(nèi)存主程序(通常是無限循環(huán))異常處理程序保存處理器現(xiàn)場程序恢復(fù)處理器現(xiàn)場程序主程序異常處理程序保存和恢復(fù)處理器現(xiàn)場程序異常向量表通常是放置一條跳轉(zhuǎn)語句從主程序到異常向量表的跳轉(zhuǎn)是硬件自動完成的異常向量表入口引入異常向量表后的內(nèi)存映像內(nèi)存主程序異常處理程序保存處理器現(xiàn)2異常響應(yīng)當(dāng)一個異常出現(xiàn)以后,ARM微處理器硬件會自動完成以下幾步操作:1、將下一條指令的地址存入該異常對應(yīng)的工作模式下的連接寄存器LR(r14_irq),以便程序在處理異常返回時能從正確的位置重新開始執(zhí)行。討論:為什么是r14_irq而不是r14_svc?2異常響應(yīng)當(dāng)一個異常出現(xiàn)以后,ARM微處理器硬件會自動完成2、將CPSR復(fù)制到相應(yīng)的SPSR_irq中。
3、根據(jù)異常類型,強制設(shè)置CPSR的運行模式位。
4、禁止IRQ中斷;進(jìn)入FIQ模式時禁止FIQ中斷。
5、映射相應(yīng)模式的寄存器
6、強制PC從相關(guān)的異常向量地址取下一條指令執(zhí)行,從而跳轉(zhuǎn)到相應(yīng)的異常處理程序處。異常響應(yīng)(續(xù))2、將CPSR復(fù)制到相應(yīng)的SPSR_irq中。異常響應(yīng)3異常處理異常處理包括兩部分保存處理器現(xiàn)場
STMFD sp!,{r0-r12,lr};執(zhí)行中斷服務(wù)子程序
BL do_irq;3異常處理異常處理包括兩部分4異常返回異常處理完畢之后,軟件需要執(zhí)行以下幾步操作從異常返回:1、將鏈接寄存器LR的值減去相應(yīng)的偏移量后送到PC中。2、同時將SPSR復(fù)制回CPSR中。可以認(rèn)為應(yīng)用程序總是從復(fù)位異常處理程序開始執(zhí)行的,因此復(fù)位異常處理程序不需要返回。4異常返回異常處理完畢之后,軟件需要執(zhí)行以下幾步操作從異常未定義指令異常返回未定義指令異常是由當(dāng)前執(zhí)行的指令自身產(chǎn)生的,程序計數(shù)器PC的值還未更新,指向當(dāng)前指令后面第2條指令。處理器將PC-4保存到寄存器LR_und中。返回操作可通過如下指令實現(xiàn)MOVS PC, LRSTMFD SP!, {R0-R12,LR} ;… LDMFD SP!, {R0-R12,PC}^未定義指令異常返回未定義指令異常是由當(dāng)前執(zhí)行的指令自身產(chǎn)生的SWIimmSWI異常返回SWI異常通常是提供程序員使用,程序員可以讓處理器進(jìn)入SVC模式下執(zhí)行特定函數(shù)來完成某種功能。我們可以用如下一條指令進(jìn)入SWI異常:SWI異常也是由當(dāng)前執(zhí)行的指令自身產(chǎn)生的,返回操作同未定義指令異常。SWIimmSWI異常返回SWI異常通常是提供程序員使用IRQ中斷返回IRQ異常屬于正常的中斷請求,可通過對處理器的nIRQ引腳輸入低電平產(chǎn)生。若將CPSR的I位置為1,則會禁止IRQ中斷(注意只有在特權(quán)模式下才能改變I位的狀態(tài))。若將CPSR的I位清零,處理器會在指令執(zhí)行完之后檢查IRQ的輸入。因此,IRQ中斷產(chǎn)生時程序計數(shù)器PC的值已經(jīng)更新,指向當(dāng)前指令后面第3條指令。IRQ中斷返回IRQ異常屬于正常的中斷請求,可通過對處理器的IRQ中斷返回(續(xù))IRQ中斷返回操作可通過如下指令實現(xiàn)SUBS PC, R14_irq,#4SUBS LR, LR,#4 STMFD SP!, {R0-R12,LR} ;… LDMFD SP!, {R0-R12,PC}^IRQ中斷返回(續(xù))IRQ中斷返回操作可通過如下指令實現(xiàn)FIQ中斷返回快速中斷異常是為了支持一些快速的中斷處理的一種異常模式。FIQ有r8-12作為私有寄存器,在模式切換的時候不用進(jìn)行太多的寄存器保存和恢復(fù),從而節(jié)省了模式切換的時間。FIQ在異常向量表中的入口是最后一項。FIQ的響應(yīng)優(yōu)先級要高于IRQFIQ中斷產(chǎn)生時,程序計數(shù)器PC的值也已經(jīng)更新,返回操作同IRQ中斷(R8-R12寄存器不用保存)。FIQ中斷返回快速中斷異常是為了支持一些快速的中斷處理的一種指令預(yù)取中止異常返回發(fā)生指令預(yù)取中止異常時,程序要返回到該標(biāo)記為有問題的指令處重新讀取并執(zhí)行,而不是返回到異常發(fā)生時的下一條指令。指令預(yù)取中止異常是由當(dāng)前執(zhí)行的指令自身產(chǎn)生的,程序計數(shù)器PC的值還未更新,指向當(dāng)前指令后面第2條指令。指令預(yù)取中止異常返回操作可由如下指令實現(xiàn)SUBS PC, LR,#4SUBS LR,LR,#4 STMFD SP!, {R0-R12,LR} ;… LDMFD SP!, {R0-R12,PC}^指令預(yù)取中止異常返回發(fā)生指令預(yù)取中止異常時,程序要返回到該標(biāo)數(shù)據(jù)訪問中止異常返回發(fā)生數(shù)據(jù)訪問中止異常時,程序也要返回到該有問題的數(shù)據(jù)訪問處,重新訪問該數(shù)據(jù),而不是返回到異常發(fā)生時的下一條指令。當(dāng)數(shù)據(jù)訪問中止異常發(fā)生時,程序計數(shù)器PC的值已經(jīng)更新,它指向當(dāng)前指令后面第3條指令。數(shù)據(jù)訪問中止異常返回操作由如下指令實現(xiàn)SUBS PC, LR,#8SUBS LR, LR,#8 STMFD SP!, {R0-R12,LR} ;… LDMFD SP!, {R0-R12,PC}^數(shù)據(jù)訪問中止異常返回發(fā)生數(shù)據(jù)訪問中止異常時,程序也要返回到該異常返回總結(jié)各種異常返回時,對返回地址的調(diào)整不同:SWI/UND: movspc,r14_swi/undFIQ/IRQ/Prefetch: subspc,r14_fiq/irq/prefetch,#4DataABT: subspc,r14_dataabr,#8異常返回總結(jié)各種異常返回時,對返回地址的調(diào)整不同:學(xué)習(xí)總結(jié)異常的響應(yīng)硬件自動完成模式切換硬件自動完成跳轉(zhuǎn)異常的處理保存處理器現(xiàn)場執(zhí)行中斷服務(wù)子程序異常的返回恢復(fù)處理器現(xiàn)場軟件執(zhí)行指令返回學(xué)習(xí)總結(jié)異常的響應(yīng)5中斷的產(chǎn)生中斷的產(chǎn)生源處理器內(nèi)部(Timer)處理器外部(GPIO、UART、MAC、USB...)中斷產(chǎn)生的條件中斷源的使能(設(shè)置觸發(fā)方式+使能中斷)中斷控制器的屏蔽位打開處理器中斷允許位的打開5中斷的產(chǎn)生中斷的產(chǎn)生源5中斷的初始化工作
中斷初始化流程1、設(shè)置CPUCPSR中斷允許位I位2、設(shè)置中斷模式(IRQ)下的SP棧空間指針3、清除中斷懸掛寄存器的所有Pending位4、打開中斷屏蔽寄存器的相應(yīng)Mask位5、設(shè)置中斷源的工作方式(上升沿觸發(fā)/下降沿觸發(fā))6、設(shè)置中斷源的使能EnableIRQ7、在0x18位置處,安裝好總的中斷處理函數(shù)irq_handler8、對應(yīng)中斷源設(shè)置好相應(yīng)的中斷服務(wù)函數(shù)device_irq_handler5中斷的初始化工作 中斷初始化流程5中斷的響應(yīng)和處理流程中斷的響應(yīng)0x18是中斷異常發(fā)生后的跳轉(zhuǎn)入口中斷響應(yīng)時,應(yīng)該明確具體的中斷源,以便針對處理中斷響應(yīng)的處理流程根據(jù)中斷Pending寄存器的標(biāo)志,確定中斷源及時清除中斷Pending寄存器的標(biāo)志位,否則會發(fā)生中斷返回后立即又被中斷,重復(fù)不斷的響應(yīng)會丟失中斷處理過程中發(fā)生的中斷,返回后不響應(yīng)進(jìn)行相應(yīng)中斷處理,一般是讀寫數(shù)據(jù)5中斷的響應(yīng)和處理流程中斷的響應(yīng)ThankYou!ThankYou!95第4章ARM體系結(jié)構(gòu)本章主要介紹以下內(nèi)容:ARM存儲器組織ARM的異常中斷1第4章ARM體系結(jié)構(gòu)本章主要介紹以下內(nèi)容:964.6ARM存儲器組織介紹以下內(nèi)容:數(shù)據(jù)類型和存儲格式ARM的存儲體系片上存儲器的用法 協(xié)處理器CP15存儲器管理單元MMU保護(hù)單元快速上下文切換擴展寫緩存器(WriteBuffer)ARM的異常中斷向量表和異常中斷處理與返回24.6ARM存儲器組織介紹以下內(nèi)容:974.6.1數(shù)據(jù)類型和存儲格式ARM存儲器中的數(shù)據(jù)類型有6種有符號數(shù)8位(字節(jié))、16位(半字)、32位(字)無符號數(shù)8位(字節(jié))、16位(半字)、32位(字)缺省端序設(shè)置為小端序34.6.1數(shù)據(jù)類型和存儲格式ARM存儲器中的數(shù)據(jù)類型有2008年6月21日984.6.2ARM的存儲體系參看下圖,抽象成一個呈金字塔型的存儲結(jié)構(gòu)注重研究第2層2008年6月21日44.6.2ARM的存儲體系參看下圖2008年6月21日994.6.3片上存儲器的用法多數(shù)ARM處理器芯片內(nèi)部集成了存儲器它們統(tǒng)稱為片上存儲器用途有:片上Cache、片上SRAM、緊耦合存儲器(TCM)、寫緩存片上存儲器的存儲空間可以通過指令進(jìn)行配置,定義成片上Cache,或者片上SRAM,或者一部分片上Cache加一部分片上SRAM。緊耦合存儲器和寫緩存均需要編程使能或者硬件接線使能按照具體應(yīng)用情況決定片上存儲器配置方法2008年6月21日54.6.3片上存儲器的用法多數(shù)ARM2008年6月21日100片上存儲器用作緊耦合存儲器緊耦合存儲器的英文原文如下:TightlyCoupledMemory,TCM彌補Cache訪問的不確定性而增加的片上存儲器。除了片上緊耦合存儲器外,還有緊耦合存儲器接口,它能夠提供低延時的外存儲器訪問。有的處理器含有分立的指令TCM和數(shù)據(jù)TCM。TCM包含在存儲器地址映射空間中,可以作為快速存儲器來訪問。除了不得包含讀敏感地址之外,對TCM接口上連接的存儲器類型沒有其他限制。TCM使用物理地址,對TCM的寫訪問受到MMU內(nèi)部保護(hù)信息的控制。2008年6月21日6片上存儲器用作緊耦合存儲器緊耦合存儲器2008年6月21日101TCM在ARMv6處理器核的位置ARMv6處理器包括:ARM1136J-S、ARM1156T22008年6月21日7TCM在ARMv6處理器核的位置ARM2008年6月21日102片內(nèi)TCM存儲器舉例ARM926EJ-S核心內(nèi)置32KB指令緩存、16KB數(shù)字緩存和8KB數(shù)據(jù)-TCM和8KB指令-TCM;2008年6月21日8片內(nèi)TCM存儲器舉例ARM926EJ-2008年6月21日103Cortex-R4F方框圖—含TCM接口注意圖的右側(cè)含有一個TCM仲裁和接口模塊2008年6月21日9Cortex-R4F方框圖—含TCM接2008年6月21日104ARM1136的TCM支持DMA傳輸參看ARM1136的方框圖2008年6月21日10ARM1136的TCM支持DMA傳輸2008年6月21日105ARM966E-S核的TCM地址映射2008年6月21日11ARM966E-S核的TCM地址映射2008年6月21日106ARM966E-S的TCM別名地址空間物理存儲塊可以通過TCM接口映射在片內(nèi)的TCM存儲區(qū)2008年6月21日12ARM966E-S的TCM別名地址空2008年6月21日107ARM966E-S的TCM特點TheARM966E-SprocessorsupportsbothinstructionanddataTCMs.YoucanusetheDTCMandITCMtostorereal-timeandperformance-criticalcode.TheTCMsareinstantiatedexternallytotheARM966E-Smacrocellprovidingforflexibilityinthedesignofthememorysubsystem.Thesystemdesignercanselectmemorytypeandoptimizethememorysubsystemforpowerorspeed.2008年6月21日13ARM966E-S的TCM特點The2008年6月21日108ARM966E-S的TCM接口特點(續(xù)1)ThefeaturesoftheTCMinterfaceinclude:
independentITCMandDTCMsizesof0KBor1KB-64MBinpower-of-twoincrements
softwarevisibilityandprogrammabilityofTCMsizeandenable
bootcontrolforITCM
dataaccesstotheITCMforliteralpoolaccessesincode
simpleSRAM-styleinterfacesupportingbothreadsandwrites
variableTCMwaitstatecontrolforITCMandDTCM
abilitytoindicatesequentialandnonsequentialaccesses.2008年6月21日14ARM966E-S的TCM接口特點(2008年6月21日109ARM966E-S的TCM特點接口(續(xù)2)TheARM966E-SprocessorcontainsaTCMcontrollerthat:
schedulesrequeststotheTCMinterface
handshakeswiththeARM966E-Smemorysystemcontrollertoacknowledgewhenrequestshavebeenserviced
returnsTCMreaddatabacktotheARM9E-Score.TheTCMsarelocatedintheTCMaddressspace.
2008年6月21日15ARM966E-S的TCM特點接口(2008年6月21日110AT91SAM9261處理器的TCMAT91SAM9261的獨立指令和數(shù)據(jù)緩存能支持WinCE和Linux操作系統(tǒng)。而其基于TCM構(gòu)架的SRAM區(qū)塊則是“確定過程式”實時操作系統(tǒng)的理想安排。另一方面,160K字節(jié)的片上SRAM可劃分成多個16K字節(jié)的區(qū)塊,作為“指令TCM”、“數(shù)據(jù)TCM”或片上外設(shè)的緩沖,從而讓編程人員靈活地優(yōu)化系統(tǒng)的性能和功耗。2008年6月21日16AT91SAM9261處理器的TCM2008年6月21日111TCM的使能操作通過二種方式進(jìn)行TCM的使能操作使用處理器芯片的INITRAM引腳使用CP15的c1控制寄存器2008年6月21日17TCM的使能操作通過二種方式進(jìn)行TC2008年6月21日112S3C44B0X和S3C4510B的三種片上存儲器的配置用法S3C44B0X和S3C4510B都有8KB的片上存儲器它們有三種配置用法8KB的SRAM8KB的Cache4KB的SRAM加上4KB的Cache較多采用片內(nèi)RAM配置而非片內(nèi)Cache配置。2008年6月21日18S3C44B0X和S3C4510B的2008年6月21日113ARM920T的片內(nèi)存儲器注意:ARM920T核的內(nèi)部沒有TCM2008年6月21日19ARM920T的片內(nèi)存儲器注意:AR2008年6月21日114ARM720T的片內(nèi)存儲器8KByteunifiedcacheMemoryManagementUnit(MMU)writebufferUnified32-bitAHBbusinterfacecarriesbothinstructionsanddataEmbeddedTraceMacrocell(ETM)interface2008年6月21日20ARM720T的片內(nèi)存儲器8KBy2008年6月21日1154.6.4協(xié)處理器CP15CP15即所謂的系統(tǒng)控制協(xié)處理器SystemControlCoprocessor在基于ARM的嵌入式系統(tǒng)中,諸如MMU、Cache配置、緊耦合處理器、寫緩存配置之類的存儲系統(tǒng)管理工作由協(xié)處理器CP15完成。CP15可以包含16個32位寄存器編號為CP0~CP15。實際運用中寫為C0~C15。2008年6月21日214.6.4協(xié)處理器CP15CP12008年6月21日116CP15寄存器的訪問用戶只能夠在特權(quán)模式下使用MRC和MCR指令來訪問CP15寄存器。2008年6月21日22CP15寄存器的訪問用戶只能夠在特權(quán)2008年6月21日1174.6.5存儲器管理單元MMUARM的MMU部件的用途:
完成虛擬存儲空間到物理存儲空間的映射。
管理方式:頁式虛擬存儲器。
頁的大小有兩種:粗粒度和細(xì)粒度。
存儲器訪問權(quán)限的控制。
設(shè)置虛擬存儲空間的緩沖特性。2008年6月21日234.6.5存儲器管理單元MMUAR2008年6月21日1184.6.6保護(hù)單元保護(hù)單元PU,ProtectionUnit也稱為:MPU,MemoryProtectionUnit為了消除術(shù)語的二義性,我們統(tǒng)一使用術(shù)語PU保護(hù)單元提供了一個相當(dāng)簡單的替代MMU的方法來管理存儲器。對于不需要PU的嵌入式系統(tǒng)而言,PU簡化了硬件和軟件,主要表現(xiàn)在不使用轉(zhuǎn)換表,這樣免去了硬件遍歷轉(zhuǎn)換表和軟件建立與維護(hù)轉(zhuǎn)換表。2008年6月21日244.6.6保護(hù)單元保護(hù)單元2008年6月21日119保護(hù)單元的工作原理和作用ARM核的PU使用區(qū)域(region)來管理系統(tǒng)保護(hù)。區(qū)域是一個存儲空間相關(guān)聯(lián)的一組屬性,處理器核將這些屬性保存在協(xié)處理器CP15的一些寄存器里,并用0-7的號碼標(biāo)識每一個區(qū)域(它也是一個具有特定屬性的邏輯存儲空間)。區(qū)域的存儲邊界通過兩個屬性進(jìn)行配置:起始地址和大小。區(qū)域的大小可以是4KB~4MB的任何2的乘冪。2008年6月21日25保護(hù)單元的工作原理和作用ARM核的P2008年6月21日120受保護(hù)區(qū)域的屬性操作系統(tǒng)可以為受保護(hù)區(qū)域分配更多的屬性,包括:訪問權(quán)限、Cache和寫緩存器策略訪問權(quán)限可以是:讀/寫、只讀和不可訪問基于處理器模式的權(quán)限管理模式、用戶模式等Cache寫策略寫直達(dá)Cache操作、無Cache操作、無寫緩存器操作。2008年6月21日26受保護(hù)區(qū)域的屬性操作系統(tǒng)可以為受保護(hù)2008年6月21日121含PU的ARM處理器主存訪問過程當(dāng)處理器訪問主存的一個區(qū)域時,PU比較該區(qū)域的訪問權(quán)限屬性和當(dāng)時的處理器模式。如果請求符合區(qū)域訪問標(biāo)準(zhǔn),則PU允許內(nèi)核讀/寫主存;如果存儲器請求導(dǎo)致存儲器訪問違例,則PU產(chǎn)生一個異常信號。異常信號被傳到處理器核,處理器核判斷是出異常是預(yù)取指令中止還是數(shù)據(jù)中止,然后跳轉(zhuǎn)到對應(yīng)的異常處理例程。2008年6月21日27含PU的ARM處理器主存訪問過程當(dāng)處2008年6月21日122區(qū)域?qū)傩杂嘘P(guān)區(qū)域的屬性如下:區(qū)域可以相互重疊每一個區(qū)域有一個優(yōu)先級,該優(yōu)先級與分配給區(qū)域的權(quán)限無關(guān)當(dāng)區(qū)域重疊時,具有最高優(yōu)先權(quán)的區(qū)域的屬性可以覆蓋其他區(qū)域的屬性,優(yōu)先權(quán)僅作用于重疊部分的地址。區(qū)域的起始地址必須是其大小的倍數(shù)。區(qū)域的大小是2的乘冪,2的12次方到32次方。2008年6月21日28區(qū)域?qū)傩杂嘘P(guān)區(qū)域的屬性如下:2008年6月21日123訪問受保護(hù)區(qū)域時產(chǎn)生的異常訪問所定義區(qū)域外的存儲器將產(chǎn)生異常。如果是內(nèi)核預(yù)取指令,則PU產(chǎn)生一個預(yù)取指令中止異常。如果是存儲器數(shù)據(jù)請求,則PU產(chǎn)生數(shù)據(jù)中止異常。2008年6月21日29訪問受保護(hù)區(qū)域時產(chǎn)生的異常訪問所定義2008年6月21日124帶PU的ARM核概要以下給出了四種帶PU的ARM核概要屬性ARM核區(qū)域數(shù)目指令區(qū)域和數(shù)據(jù)區(qū)域是否分離指令和數(shù)據(jù)區(qū)域配置是否分離ARM740T8否否ARM940T16是是ARM946E-S8否是ARM1026EJ-S8否是2008年6月21日30帶PU的ARM核概要以下給出了四種帶2008年6月21日125在帶PU的ARM系統(tǒng)中創(chuàng)建區(qū)域要實現(xiàn)一個受PU控制主存的嵌入式系統(tǒng),需要對主存中的不同塊定義若干區(qū)域。一個區(qū)域可以被創(chuàng)建一次,然后一直用到嵌入式系統(tǒng)運行結(jié)束;也可以臨時創(chuàng)建一個區(qū)域來滿足一個特殊操作的需要,用完之后就加以刪除。2008年6月21日31在帶PU的ARM系統(tǒng)中創(chuàng)建區(qū)域要實現(xiàn)2008年6月21日126含有PU的ARM核含有8個受保護(hù)區(qū)域的ARM核ARM740TARM946E-SARM1026EJ-S含有16個受保護(hù)區(qū)域的ARM核ARM940T2008年6月21日32含有PU的ARM核含有8個受保護(hù)區(qū)域2008年6月21日127初始化PU、Cache和寫緩沖器為了初始化PU、Cache和寫緩沖器,控制系統(tǒng)必須定義在操作目標(biāo)平臺時所需要的保護(hù)區(qū)域。功能主存儲器次存儲器系統(tǒng)控制C1C0區(qū)域的cache屬性C2C0區(qū)域的寫緩沖器屬性C3C0區(qū)域的訪問權(quán)限屬性C5C0區(qū)域的大小和位置C6C0~C72008年6月21日33初始化PU、Cache和寫緩沖器為了2008年6月21日128帶保護(hù)單元和MMU的系統(tǒng)框圖2008年6月21日34帶保護(hù)單元和MMU的系統(tǒng)框圖2008年6月21日1294.6.7ARM處理器的CacheARM處理器均帶有Cache或者可以將片上存儲器配置成Cache。當(dāng)然,在不需要時也可以通過配置操作關(guān)閉Cache。ARM處理器的Cache地址映射均采用組相聯(lián)映射。2008年6月21日354.6.7ARM處理器的Cache2008年6月21日1304.6.8快速上下文切換擴展快速上下文切換擴展FCSE,F(xiàn)astContextSwitchExtensionFCSE是ARM存儲系統(tǒng)的修正機構(gòu)。它修改系統(tǒng)中不同進(jìn)程的虛擬地址,避免在進(jìn)行進(jìn)程間切換時造成的虛擬地址到物理地址的重映射,從而提高系統(tǒng)的性能。為了理解ARM處理器的FCSE功能,我們首先考察當(dāng)虛擬存儲器中任務(wù)切換時,主存中頁表和物理存儲器的隨動切換。2008年6月21日364.6.8快速上下文切換擴展快速上2008年6月21日131ARM虛擬存儲器
用戶任務(wù)上下文切換示例-1任務(wù)1正在執(zhí)行2008年6月21日37ARM虛擬存儲器
用戶任務(wù)上下文切換2008年6月21日132ARM虛擬存儲器
用戶任務(wù)上下文切換示例-2任務(wù)2正在執(zhí)行2008年6月21日38ARM虛擬存儲器
用戶任務(wù)上下文切換2008年6月21日133ARM虛擬存儲器
用戶任務(wù)上下文切換示例-3任務(wù)3正在執(zhí)行2008年6月21日39ARM虛擬存儲器
用戶任務(wù)上下文切換2008年6月21日1343個任務(wù)的多任務(wù)環(huán)境中
快速上下文切換擴展的舉例:切換前任務(wù)1正在運行2008年6月21日403個任務(wù)的多任務(wù)環(huán)境中
快速上下文切2008年6月21日1353個任務(wù)的多任務(wù)環(huán)境中
快速上下文切換擴展的舉例:(續(xù))切換后任務(wù)2正在運行2008年6月21日413個任務(wù)的多任務(wù)環(huán)境中
快速上下文切2008年6月21日1364.6.9寫緩存器(WriteBuffer)寫緩存器是一個容量很小的片內(nèi)的先進(jìn)先出(FIFO)存儲器,位于處理器核與主存之間。寫緩存器的主要用途是:當(dāng)CPU輸出數(shù)據(jù)時,總線恰好被占用而無法輸出,此時,CPU可以把輸出數(shù)據(jù)寫入到寫緩存器。當(dāng)總線上沒有比寫緩存區(qū)優(yōu)先級更高的掌控者時,寫緩存區(qū)可以通過總線將數(shù)據(jù)寫入內(nèi)存。
CPU由于不需要等待寫操作的完成而增強了性能。寫緩存區(qū)中的FIFO存儲器在存儲層次中與L1Cache處于相同的層次。2008年6月21日424.6.9寫緩存器(WriteB2008年6月21日137S3C44B0X處理器的寫緩存區(qū)由4個寫緩存寄存器構(gòu)成。每一個寫緩存寄存器包括一個32位數(shù)據(jù)字段,一個28位地址字段和一個2位狀態(tài)字段??梢酝ㄟ^指令對控制寄存器SYSCFG的WE位置1或者置0來使能或者禁能寫緩存器。參看下圖。2008年6月21日43S3C44B0X處理器的寫緩存區(qū)由42008年6月21日1384.7ARM的異常中斷ARM異常與中斷不做嚴(yán)格意義上的區(qū)別ARM的中斷向量表內(nèi)存放的是響應(yīng)異常和中斷的轉(zhuǎn)移指令而不是中斷向量地址。在ARM處理器中,當(dāng)異常發(fā)生時,完成當(dāng)前指令后跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序入口執(zhí)行異常中斷處理。異常處理完畢后返回原來的程序斷點繼續(xù)執(zhí)行原來的程序。2008年6月21日444.7ARM的異常中斷ARM異常ARM異常和中斷處理ARM異常和中斷處理課程安排ARM體系結(jié)構(gòu)知識回顧ARM異常的響應(yīng)ARM異常的處理ARM異常的返回ARM中斷的產(chǎn)生、初始化和響應(yīng)處理流程課程安排ARM體系結(jié)構(gòu)知識回顧異常簡介
只要正常的程序流被暫時中止,處理器就進(jìn)入異常模式。例如響應(yīng)一個來自外設(shè)的中斷。在處理異常之前,ARM內(nèi)核保存當(dāng)前的處理器狀態(tài),這樣當(dāng)處理程序結(jié)束時可以恢復(fù)執(zhí)行原來的程序。如果同時發(fā)生兩個或更多異常,那么將按照固定的順序來處理異常,詳見“異常優(yōu)先級”部分。異常簡介只要正常的程序流被暫時中止,處理異常入口/出口匯總異?;蛉肟诜祷刂噶钪暗臓顟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占先而沒有被執(zhí)行的指令的地址中斷SUBSPC,R14_irq,#4PC+4PC+4數(shù)據(jù)中止SUBSPC,R14_abt,#8PC+8PC+8此處PC為產(chǎn)生數(shù)據(jù)中止的裝載或保存指令的地址。
復(fù)位無——復(fù)位時保存在R14_svc中的值不可預(yù)知。
異常入口/出口匯總異常或入口返回指令之前的狀態(tài)備注ARMR異常異常的入口和出口處理
如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實現(xiàn)返回。SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回中斷處理代碼的開始部分和退出部分異常異常的入口和出口處理如果異常處理程序已經(jīng)把
如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以使用一條多寄存器傳送指令來恢復(fù)用戶寄存器并實現(xiàn)返回。中斷處理代碼的開始部分和退出部分異常異常的入口和出口處理SUBLR,LR,#4 ;計算返回地址STMFDSP!,{R0-R3,LR} ;保存使用到的寄存器...LDMFDSP!,{R0-R3,PC}^ ;中斷返回注意:中斷返回指令的寄存器列表(其中必須包括PC)后的“^”符號表示這是一條特殊形式的指令。這條指令在從存儲器中裝載PC的同時(PC是最后恢復(fù)的),CPSR也得到恢復(fù)。這里使用的堆棧指針SP(R13)是屬于異常模式的寄存器,每個異常模式有自己的堆棧指針。這個堆棧指針應(yīng)必須在系統(tǒng)啟動時初始化。如果異常處理程序已經(jīng)把返回地址拷貝到堆棧,那么可以異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會作以下工作:1.在適當(dāng)?shù)腖R中保存下一條指令的地址,當(dāng)異常入口來自:ARM狀態(tài),那么ARM將當(dāng)前指令地址加4或加8復(fù)制(取決于異常的類型)到LR中;為Thumb狀態(tài),那么ARM將當(dāng)前指令地址加4或加8(取決于異常的類型)復(fù)制到LR中;異常處理器程序不必確定狀態(tài)。異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會作以下工作:1.在異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會作以下工作:2.將CPSR復(fù)制到適當(dāng)?shù)腟PSR中;3.將CPSR模式位強制設(shè)置為與異常類型相對應(yīng)的值;4.強制PC從相關(guān)的異常向量處取指。異常進(jìn)入異常在異常發(fā)生后,ARM內(nèi)核會作以下工作:2.將ARM內(nèi)核在
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版建筑工程施工監(jiān)理單位招標(biāo)投標(biāo)合同書3篇
- 二零二五版古籍文獻(xiàn)儲藏室修復(fù)合同3篇
- 二零二五年度高品質(zhì)膩子施工服務(wù)供應(yīng)合同2篇
- 二零二五版導(dǎo)游人員旅游安全責(zé)任合同3篇
- 小區(qū)車子棚施工合同(2篇)
- 2025年度新能源項目財務(wù)監(jiān)督出納人員擔(dān)保合同2篇
- 二零二五版車位購置及租賃合同樣本12篇
- 2025年度欠條收藏:古董字畫修復(fù)與交易合同3篇
- 二零二五年度高新技術(shù)項目研發(fā)團(tuán)隊聘用合同范本3篇
- 二零二五年餐飲服務(wù)人員勞動合同樣本12篇
- HG∕T 2058.1-2016 搪玻璃溫度計套
- 九宮數(shù)獨200題(附答案全)
- 泌尿科一科一品匯報課件
- 人員密集場所消防安全管理培訓(xùn)
- 白銅錫電鍍工藝
- 拜耳法氧化鋁生產(chǎn)工藝
- 2024年南京信息職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 部編版二年級下冊道德與法治第二單元《我們好好玩》全部教案
- 幼兒園利劍護(hù)蕾專項行動工作方案總結(jié)與展望
- 合同信息管理方案模板范文
- 2024年大唐云南發(fā)電有限公司招聘筆試參考題庫含答案解析
評論
0/150
提交評論