版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第2章ARM技術(shù)與ARM體系結(jié)構(gòu)本章主要介紹ARM處理器的產(chǎn)生及版本發(fā)展歷史,以及各個版本的典型處理器及應(yīng)用情況和性能分析;ARM處理器的內(nèi)核調(diào)試結(jié)構(gòu),重點(diǎn)分析了ARM7TDMI-S、ARM9TDMI兩種結(jié)構(gòu);ARM處理器的工作模式及寄存器組織結(jié)構(gòu),分析了在什么情況下進(jìn)入到相應(yīng)的工作模式;ARM處理器支持的內(nèi)存數(shù)據(jù)存儲格式,分為大端格式和小端格式;最后介紹了ARM7的三級流水線運(yùn)行機(jī)制和ARM9的五級流水線運(yùn)行機(jī)制。
內(nèi)容提要2.1ARM體系結(jié)構(gòu)版本與內(nèi)核2.2ARM內(nèi)核模塊2.3ARM處理器的工作模式2.4ARM內(nèi)部寄存器2.5ARM異常處理2.6存儲方式與存儲器映射機(jī)制2.7ARM流水線技術(shù)分析2.1ARM體系結(jié)構(gòu)版本與內(nèi)核第一片ARM處理器是1983年10月到1985年4月間在位于英國劍橋的AcornComputer公司開發(fā)1990年,ARM公司成立20世紀(jì)90年代,ARM快速進(jìn)入世界市場1995年StrongARM問世XScale是下一代StrongARM芯片的發(fā)展基礎(chǔ)ARM10TDMI是ARM處理器核中的高端產(chǎn)品ARM11是ARM家族中性能最強(qiáng)的一個系列2.1.1ARM體系結(jié)構(gòu)版本ARM7TDMI4T1支持Halfword和signedhalfword/byte和Systemmode支持Thumb指令集24ARM9TDMIARM720TARM940T改良的ARM/Thumb交互作用以及CLZ指令5TESaturatedmathsDSPmultiply-accumulateinstructionsXScaleARM1020EARM9E-SARM966E-S3早期的ARMsARM9EJ-S5TEJARM7EJ-SARM926EJ-SJazelle支持Java字節(jié)碼
6ARM11SIMDSISIMDMDSSIMD7ARMCotex第一階段:版本V1、V2、V3這3個早期ARM版本功能單一,沒有大范圍占領(lǐng)市場,主要是處于開發(fā)和實(shí)驗(yàn)階段第二階段:從ARM4開始,ARM體系結(jié)構(gòu)處于完善和提高階段版本4與以前版本相比增加了下列指令:
有符號、無符號的半字和有符號字節(jié)的load和store指令。增加了T變種,處理器可以工作于Thumb狀態(tài),在該狀態(tài)下的指令集是16位的Thumb指令集。增加了處理器的特權(quán)模式。在該模式下,使用的是用戶模式下的寄存器。
版本5主要由兩個變型版本5T、5TE組成相比與版本4,版本5的指令集有了如下的變化:提高了T變種中ARM/Thumb混合使用的效率。增加前導(dǎo)零記數(shù)(CLZ)指令,該指令可使整數(shù)除法和中斷優(yōu)先級排隊操作更為有效;增加了BKPT(軟件斷點(diǎn))指令;為協(xié)處理器設(shè)計提供了更多的可供選擇的指令;更加嚴(yán)格地定義了乘法指令對條件碼標(biāo)志位的影響。
ARM體系版本6是2001年發(fā)布的。新架構(gòu)v6在降低耗電量的同時還強(qiáng)化了圖形處理性能。通過追加有效進(jìn)行多媒體處理的SIMD功能,將語音及圖像的處理功能提高到了原機(jī)型的4倍。ARM體系版本6首先在2002年春季發(fā)布的ARM11處理器中使用。2.1.2ARM體系結(jié)構(gòu)的基本版本命名規(guī)則ARM{x}{y}{z}{T}{D}{M}{I}{E}{J}{F}{-S}大括號內(nèi)的字母是可選的,各個字母的含義如下:
x ——系列號,例如ARM7中的“7”、ARM9中的“9”;
y ——內(nèi)部存儲管理/保護(hù)單元,例如ARM72中的“2”、ARM94中的“4”;
z ——內(nèi)含有高速緩存Cache;
T ——技持16位的Thumb指令集;
D ——支持JTAG片上調(diào)試;
M ——支持用于長乘法操作(64位結(jié)果)的ARM指令,包含快速乘法器;
I ——帶有嵌入式追蹤宏單元ETM(EmbeddedTraceMacro),用來設(shè)置斷點(diǎn)和觀察點(diǎn)的調(diào)試硬件;續(xù)
E ——增強(qiáng)型DSP指令(基于TDMI);
J ——含有Java加速器Jazelle,與Java虛擬機(jī)相比,Java加速器Jazelle使Java代碼運(yùn)行速度提高了8倍,功耗降低到原來的80%;
F ——向量浮點(diǎn)單元;S——可綜合版本,意味著處理器內(nèi)核是以源代碼形式提供的。這種源代碼形式又可以被編譯成一種易于EDA工具使用的形式。ARM體系結(jié)構(gòu)的基本版本版本版本變種系列號處理器核V1V1ARM1ARM1V2V2ARM2ARM2V2aARM2aSARM3ARM3V3V3ARM6ARM6、ARM600、ARM610ARM7ARM7、ARM700、ARM710V4V4TARM7TDMI、ARM710T、ARM720T、ARM740TV4ARM8StrongARM、ARM8、ARM810V4TARM9ARM9TDMI、ARM920T、ARM940TV5V5TEARM9E-SARM10ARM10TDMI、ARM1020EV6V6ARM11ARM11、ARM11562-S、ARM1156T2F-S、ARM11JZF-SV7V7ARMCotexARMCotex-A8、ARMCotex-R4、ARMCotex-M32.2ARM內(nèi)核模塊ARM處理器一般都帶有嵌入式追蹤宏單元ETM(EmbeddedTraceMacro),它是ARM公司自己推出的調(diào)試工具ARM調(diào)試結(jié)構(gòu)2.2.1 ARM7TDMI-S內(nèi)核結(jié)構(gòu)ARM7TDMI-S是一款32位嵌入式RISC處理器。它作為優(yōu)化的硬核是性能、功耗和面積特性的最佳組合。使用ARM7TDMI核使得系統(tǒng)設(shè)計師能夠設(shè)計出小尺寸、低功耗以及高性能的嵌入式設(shè)備。ARM7TDMIARM7TDMI是基于ARM7內(nèi)核3級流水線0.9MIPS/MHz馮.諾依曼架構(gòu)CPI(CyclePerInstruction)約為1.9T-Thumb架構(gòu)擴(kuò)展,提供兩個獨(dú)立的指令集:ARM指令,均為32位Thumb指令,均為16位兩種運(yùn)行狀態(tài),用來選擇哪個指令集被執(zhí)行D-內(nèi)核具有Debug擴(kuò)展結(jié)構(gòu)M-增強(qiáng)乘法器支持64位結(jié)果.I-EmbeddedICE-RT邏輯提供片上斷點(diǎn)和調(diào)試點(diǎn)支持ARM7TDMI內(nèi)核信號ARM7TDMI內(nèi)核MCLKnIRQnFIQnRESETBUSENBIGENDISYNCnWAITVDDVSSAPEDBE協(xié)處理器接口存儲器管理存儲器接口ABORTnOPCCPBCPAnCPInTRANSnM[4:0]MAS[1:0]nRWnMREQLOCKSEQnENOUTA[31:0]DOUT[31:0]DIN[31:0]D[31:0]電源總線控制時鐘配置中斷ARM7TDMI方框圖ARM7TDMI內(nèi)核TAP
控制器JTAG接口數(shù)據(jù)總線控制信號D[31:0]地址總線A[31:0]DIN[31:0]DOUT[31:0]BUSSplitterEmbeddedICE邏輯乘法器ARM7TDMI內(nèi)核指令解碼地址自增器nRESETnMREQSEQABORTnIRQnFIQnRWMAS[1:0]LOCKnCPICPACPBnWAITMCLKnOPCBIGENDISYNCnTRANSnM[4:0]D[31:0]桶形移位器32位ALUDBE寫數(shù)據(jù)寄存器讀數(shù)據(jù)寄存器地址寄存器寄存器A[31:0]ABE及控制邏輯PCUpdate解碼站指令解碼IncrementerPCABusBBusALUBus外部地址產(chǎn)生PC[31:2]ARMStatePC[31:1]ThumbStateALU[31:0]INC自增器A[31:0]向量0x1C0x00地址寄存器特點(diǎn):32/16位RISC架構(gòu)(ARMv4T)。具有最高性能和靈活性的32位ARM指令集。代碼緊湊的16位Thumb指令集。統(tǒng)一的總線接口,指令與數(shù)據(jù)都在32位總線上傳輸。3級流水線。32位算術(shù)邏輯單元(ALU)。極小的核心尺寸以及低功耗。完全的靜態(tài)操作。協(xié)處理器接口。擴(kuò)展的調(diào)試設(shè)備:T標(biāo)志位的作用161632-bitdata16A[1]MuxThumb指令解碼MuxMuxT標(biāo)志ARM指令解碼階段1階段2D[31:0]0110FetchDecodeExecute帶Cache的ARM7TDMIARM710T8K統(tǒng)一的cache完整的內(nèi)存管理單元(mmu),支持虛擬地址和存儲器保護(hù)寫緩沖ARM720T同ARM710T,但支持WinCEARM740T8K統(tǒng)一的cache內(nèi)存管理單元寫緩沖ARM7TDMI內(nèi)核地址地址數(shù)據(jù)讀AMBA
接口寫緩沖MMU數(shù)據(jù)寫數(shù)據(jù)ARM7xxT控制邏輯CacheAMBA總線接口JTAG和非AMBA信號CP15ARM7系列內(nèi)核采用了三條流水線的內(nèi)核結(jié)構(gòu),三級流水線分別為取指(Fetch)、譯碼(Decode)、執(zhí)行(Execute)
取指:將指令從存儲器中取出,放入指令Cache中。譯碼:由譯碼邏輯單元完成,是將在上一步指令Cache中的指令進(jìn)行解釋,告訴CPU將如何操作。執(zhí)行:這階段包括移位操作、讀通用寄存器內(nèi)容、輸出結(jié)果、寫通用寄存器等。需要注意的是,PC指向正被取指的指令而不是正在執(zhí)行的指令:詳細(xì)信息見教材《ARM嵌入式系統(tǒng)結(jié)構(gòu)與編程》第16頁2.2.2ARM9內(nèi)核結(jié)構(gòu)ARM920是一款32位嵌入式RISC處理器內(nèi)核。在指令操作上采用5級流水線.取指:從指令Cache中讀取指令。譯碼:對指令進(jìn)行譯碼,識別出是對哪個寄存器進(jìn)行操作并從通用寄存器中讀取操作數(shù)。執(zhí)行:進(jìn)行ALU運(yùn)算和移位操作,如果是對存儲器操作的指令,則在ALU中計算出要訪問的存儲器地址。存儲器訪問:如果是對存儲器訪問的指令,用來實(shí)現(xiàn)數(shù)據(jù)緩沖功能(通過數(shù)據(jù)Cache)。寄存器回寫:將指令運(yùn)算或操作結(jié)果寫回到目標(biāo)寄存器中。ARM920的5級流水線操作2.3ARM處理器的工作模式ARM技術(shù)的設(shè)計者將ARM處理器在應(yīng)用中可能產(chǎn)生的狀態(tài)進(jìn)行了分類,并針對同一類型的異常狀態(tài)設(shè)定了一個固定的入口點(diǎn),當(dāng)異常產(chǎn)生時,程序會自動跳轉(zhuǎn)到對應(yīng)異常入口處進(jìn)行異常服務(wù)。ARM處理器共有7種工作模式1.用戶模式:非特權(quán)模式,也就是正常程序執(zhí)行的模式,大部分任務(wù)在這種模式下執(zhí)行。在用戶模式下,如果沒異常發(fā)生,不允許應(yīng)用程序自行改變處理器的工作模式,如果有異常發(fā)生,處理器會自動切換工作模式2.FIQ模式:也稱為快速中斷模式,支持高速數(shù)據(jù)傳輸和通道處理,當(dāng)一個高優(yōu)先級(fast)中斷產(chǎn)生時將會進(jìn)入這種模式。3.IRQ模式:也稱為普通中斷模式,:當(dāng)一個低優(yōu)先級(normal)中斷產(chǎn)生時將會進(jìn)入這種模式。在這模式下按中斷的處理器方式又分為向量中斷和非向量中斷兩種。通常的中斷處理都在IRQ模式下進(jìn)行。4.SVC模式:稱之為管理模式,它是一種操作系統(tǒng)保護(hù)模式。當(dāng)復(fù)位或軟中斷指令執(zhí)行時處理器將進(jìn)入這種模式。5.中止模式:當(dāng)存取異常時將會進(jìn)入這種模式,用來處理存儲器故障、實(shí)現(xiàn)虛擬存儲或存儲保護(hù)。6.未定義指令異常模式:當(dāng)執(zhí)行未定義指令時會進(jìn)入這種模式,主要是用來處理未定義的指令陷阱,支持硬件協(xié)處理器的軟件仿真,因?yàn)槲炊x指令多發(fā)生在對協(xié)處理器的操作上。7.系統(tǒng)模式:使用和User模式相同寄存器組的特權(quán)模式,用來運(yùn)行特權(quán)級的操作系統(tǒng)任務(wù)。在這7種工作模式中,除了用戶模式以外,其他6種處理器模式可以稱為特權(quán)模式,在這些模式下,程序可以訪問所有的系統(tǒng)資源,也可以任意地進(jìn)行處理器模式的切換。在這6種特權(quán)模式中,除了系統(tǒng)模式外的其他5種特權(quán)模式又稱為異常模式,每種異常都對應(yīng)有自己的異常處理入口點(diǎn)。2.4內(nèi)部寄存器ARM處理器共有37個寄存器,這些寄存器包括以下兩類寄存器。(1)31個通用寄存器:包括程序計數(shù)器PC等,這些寄存器都是32位寄存器。(2)6個狀態(tài)寄存器:狀態(tài)寄存器也是32位的寄存器,但是目前只使用了其中的14位。r0r1r2r3r4r5r6r7r8r9r10r11r12r13(sp)r14(lr)r15(pc)cpsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr8r9r10r11r12r13(sp)r14(lr)spsrFIQIRQSVCUndefAbortUserModer0r1r2r3r4r5r6r7r8r9r10r11r12r13(sp)r14(lr)r15(pc)cpsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr8r9r10r11r12r13(sp)r14(lr)spsrCurrentVisibleRegistersBankedoutRegistersFIQIRQSVCUndefAbortr0r1r2r3r4r5r6r7r15(pc)cpsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr8r9r10r11r12r13(sp)r14(lr)spsrCurrentVisibleRegistersBankedoutRegistersUserIRQSVCUndefAbortr8r9r10r11r12r13(sp)r14(lr)FIQModeIRQModer0r1r2r3r4r5r6r7r8r9r10r11r12r15(pc)cpsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr8r9r10r11r12r13(sp)r14(lr)spsrCurrentVisibleRegistersBankedoutRegistersUserFIQSVCUndefAbortr13(sp)r14(lr)UndefModer0r1r2r3r4r5r6r7r8r9r10r11r12r15(pc)cpsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr8r9r10r11r12r13(sp)r14(lr)spsrCurrentVisibleRegistersBankedoutRegistersUserFIQIRQSVCAbortr13(sp)r14(lr)SVCModer0r1r2r3r4r5r6r7r8r9r10r11r12r15(pc)cpsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr8r9r10r11r12r13(sp)r14(lr)spsrCurrentVisibleRegistersBankedoutRegistersUserFIQIRQUndefAbortr13(sp)r14(lr)AbortModer0r1r2r3r4r5r6r7r8r9r10r11r12r15(pc)cpsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr8r9r10r11r12r13(sp)r14(lr)spsr當(dāng)前可見寄存器備用寄存器UserFIQIRQSVCUndefr13(sp)r14(lr)ARM寄存器寄存器組織概要User
mode
r0-r7,
r15,
and
cpsrr8r9r10r11r12r13(sp)r14(lr)spsrFIQr8r9r10r11r12r13(sp)r14(lr)r15(pc)cpsrr0r1r2r3r4r5r6r7Userr13(sp)r14(lr)spsrIRQUser
mode
r0-r12,
r15,
and
cpsrr13(sp)r14(lr)spsrUndefUser
mode
r0-r12,
r15,
and
cpsrr13(sp)r14(lr)spsrSVCUser
mode
r0-r12,
r15,
and
cpsrr13(sp)r14(lr)spsrAbortUser
mode
r0-r12,
r15,
and
cpsrThumbstateLowregistersThumbstateHighregistersNote:System模式使用user模式寄存器集ARM寄存器ARM有37個32-Bits長的寄存器.1個用作PC(programcounter)1個用作CPSR(currentprogramstatusregister)5個用作SPSR(savedprogramstatusregisters)30個通用寄存器當(dāng)前處理器的模式?jīng)Q定著哪組寄存器可操作.任何模式都可以存?。合鄳?yīng)的r0-r12子集相應(yīng)的r13(thestackpointer,sp)andr14(thelinkregister,lr)相應(yīng)的r15
(
theprogramcounter,pc)相應(yīng)的CPSR(currentprogramstatusregister,cpsr)特權(quán)模式(除system模式)還可以存??;相應(yīng)的spsr(savedprogramstatusregister)程序狀態(tài)寄存器
條件位:N=
1-結(jié)果為負(fù),0-結(jié)果為正或0Z=1-結(jié)果為0,0-結(jié)果不為0C=1-進(jìn)位,0-借位V=1-結(jié)果溢出,0結(jié)果沒溢出Q位:僅ARM5TE/J架構(gòu)支持指示增強(qiáng)型DSP指令是否溢出J位僅ARM5TE/J架構(gòu)支持J=1:處理器處于Jazelle狀態(tài)中斷禁止位:I=1:禁止IRQ.F=1:禁止FIQ.TBit僅ARMxT架構(gòu)支持T=0:處理器處于ARM狀態(tài)T=1:處理器處于Thumb狀態(tài)Mode位(處理器模式位):0b10000 User0b10001 FIQ0b10010 IRQ0b10011 Supervisor0b10111 Abort0b11011 Undefined0b11111 System2731NZCVQ2867IFTmode1623
815
54024
UndefinedJ當(dāng)處理器執(zhí)行在ARM狀態(tài):所有指令32bits寬所有指令必須word對齊所以pc值由bits[31:2]決定,bits[1:0]未定義(所以指令不能halfword/byte對齊).程序指針PC(r15)當(dāng)處理器執(zhí)行在Thumb狀態(tài):所有指令16bits寬所有指令必須halfword對齊所以pc值由bits[31:1]決定,bits[0]未定義(所以指令不能byte對齊).2.5ARM異常處理異常通常定義為:處理器需要中止指令正常執(zhí)行的任何情形并轉(zhuǎn)向相應(yīng)的處理,包括ARM內(nèi)核產(chǎn)生復(fù)位,取指或存儲器訪問失敗,遇到未定義指令,執(zhí)行軟件中斷指令,或者出現(xiàn)外部中斷等。大多數(shù)異常都對應(yīng)一個軟件的異常處理程序,也就是在異常發(fā)生時執(zhí)行的軟件程序。
2.5.1 異常入口ARM處理器的異常分為數(shù)據(jù)中止、快速中斷請求、普通中斷請求、預(yù)取指中止、軟件中斷、復(fù)位及未定義指令共7種。異常類型處理器模式優(yōu)先級向量表偏移復(fù)
位SVC10x00000000未定義指令UND60x00000004軟件中斷SWISVC60x00000008預(yù)取指中止ABT50x0000000c數(shù)據(jù)中止ABT20x00000010保留//0x00000014IRQ中斷IRQ40x00000018FIQ中斷FIQ30x0000001c1.復(fù)位具有最高的優(yōu)先級,是系統(tǒng)啟動(或芯片復(fù)位)時調(diào)用的程序。復(fù)位程序?qū)Ξ惓L幚沓绦蚝拖到y(tǒng)進(jìn)行初始化(包括配置儲存器和Cache)。同時要保證在IRQ和FIQ中斷允許之前初始化外部中斷源,避免在沒有設(shè)置好相應(yīng)的處理程序前產(chǎn)生中斷。還要設(shè)置好各種處理器模式的堆棧指針。2.引起未定義指令異常:ARM試圖執(zhí)行一條真正的未定義指令;ARM遇到一條協(xié)處理器指令,可是系統(tǒng)中的協(xié)處理器硬件并不存在;ARM遇到一條協(xié)處理器指令,系統(tǒng)中協(xié)處理器硬件也存在,可是ARM不是在超級用戶模式。解決方法:在處理程序中執(zhí)行軟協(xié)處理器仿真;禁止在非超級用戶模式下操作;報告錯誤并退出。3.?dāng)?shù)據(jù)中止異常指示訪問了無效的存儲器地址,或者當(dāng)前代碼沒有正確的數(shù)據(jù)訪問權(quán)限。4.預(yù)取指中止由于處理器預(yù)取的指令地址不存在,或者地址無法訪問,當(dāng)被預(yù)取的指令執(zhí)行時,發(fā)生預(yù)取指中止異常。5.FIQ中斷的優(yōu)先級比IRQ中斷的優(yōu)先級要高,且內(nèi)核進(jìn)入FIQ處理程序時,把FIQ和IRQ都禁止6.軟中斷(SWI)和未定義指令異常的優(yōu)先級最低,共享同一優(yōu)先級,兩者不可能同時出現(xiàn)。VectorTableFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset0x1C0x180x140x100x0C0x080x040x00異常處理當(dāng)異常產(chǎn)生時,ARMcore:拷貝CPSR到SPSR_<mode>設(shè)置適當(dāng)?shù)腃PSR位:
改變處理器狀態(tài)進(jìn)入ARM狀態(tài)改變處理器模式進(jìn)入相應(yīng)的異常模式設(shè)置中斷禁止位禁止相應(yīng)中斷(如果需要)保存返回地址到LR_<mode>設(shè)置PC位相應(yīng)的異常向量返回時,異常處理需要:從SPSR_<mode>恢復(fù)CPSR從LR_<mode>恢復(fù)PCNote:這些操作只能在ARM態(tài)執(zhí)行.向量表指令>32Mbytes<4KbytesLiteralpoolcontainingaddressofUndefHandlerIRQhandlerwithin32MBytesBranch
instructionrangeSWIExceptionhandlerplacedonapplicableaddressboundaryFIQhandlerfollowsvectortable
Undefhandleroutside32MBytes
branchinstructionrange0x00x10000x20000000xFFC0x80x180x300000000xFFFFFFFF0x1C0x4MOVPC,#0x30000000BIRQ_handler0x30008000IRQHandlerSWIHandlerFIQHandlerLDRPC,[PC,#+0xFF0]UndefHandler0x30008000ARMorThumb?Thumb/ARM混合應(yīng)用程序ARMCodeARMCodeThumb
CodeFIQIRQ(Reserved)DataAbortPrefetchAbortSoftwareInterruptUndefinedInstructionReset異常處理中的寄存器使用與異常發(fā)生相關(guān)的模式改變意味著所調(diào)用的異常處理程序至少要訪問:私有的SP_<mode>
(stackpointer).私有的LR_<mode>(linkregister).私有的SPSR_<mode>
(savedprogramstatusregister).在FIQ異常處理中,另有5個私有的通用寄存器(r8_fiqtor12_fiq).其它的寄存器是所有模式公用的.異常處理程序必須確保其他的寄存器在退出前恢復(fù)到原來的狀態(tài)這可以通過將任何正在使用的寄存器的內(nèi)容保存在堆棧中,并在返回前恢復(fù)來實(shí)現(xiàn)任何所需寄存器的初始化要有應(yīng)用程序的起始代碼來完成2.5.2異常產(chǎn)生過程與返回外中斷處理FIQvsIRQ中斷重新使能的問題軟中斷未定義指令預(yù)取異常數(shù)據(jù)異常異常返回地址外中斷處理ARM有兩級外部中斷FIQ,IRQ.可是大多數(shù)的基于ARM的系統(tǒng)有>2個的中斷源!因此需要一個中斷控制器(通常是地址映射的)來控制中斷是怎樣傳遞給ARM的。在許多系統(tǒng)中,一些中斷的優(yōu)先級比其它中斷的優(yōu)先級高,他們要搶先任何正在處理的低優(yōu)先級中斷。Note:通常中斷處理程序總是應(yīng)該包含清除中斷源的代碼。地址映射中斷控制器nIRQnFIQARMMultiple
Peripheral
interrupt
sourcesARM讀控制器寄存器并找到IRQ/FIQ中斷源ARM寫外設(shè)寄存器清相應(yīng)中斷源FIQvsIRQFIQ和IRQ提供了非?;镜膬?yōu)先級級別。在下邊兩種情況下,F(xiàn)IQs有高于IRQs的優(yōu)先級:當(dāng)多個中斷產(chǎn)生時,F(xiàn)IQ高于IRQ.處理FIQ時禁止IRQs.IRQs將不會被響應(yīng)直到FIQ處理完成.FIQs的設(shè)計使中斷處理盡可能的快.FIQ向量位于中斷向量表的最末.為了使中斷處理程序可從中斷向量處連續(xù)執(zhí)行FIQ模式有5個額外的私有寄存器(r8-r12)中斷處理必須保護(hù)其使用的非私有寄存器可以有多個FIQ中斷源,但是考慮到系統(tǒng)性能應(yīng)避免嵌套。中斷重新使能的問題當(dāng)另外一個中斷搶先當(dāng)前中斷時,如果程序員使用下邊特殊的步驟來防止系統(tǒng)狀態(tài)丟失,中斷是可以嵌套:保存IRQ狀態(tài)下的LR(LR_irq)保存IRQ狀態(tài)下的SPSR(SPSR_IRQ)當(dāng)中斷可重入時,在中斷處理程序中使用“BL…”必須特別小心:如果第二個中斷產(chǎn)生,BL調(diào)用的返回地址(LR_irq)可能被沖掉,子程序?qū)㈠e誤的返回–導(dǎo)致無限循環(huán)!解決方法是在使用“BL…”之前改變模式來避免LR_irq被沖掉通常使用“System”模式(
這時BL使用LR_usr)在處理程序結(jié)束,必須:切換回IRQ模式禁止中斷(來避免在恢復(fù)SPSR_irq到一個臨時的寄存器中后它被沖掉).軟中斷SWI0x01向量表用戶程序(C/ASM)SWI處理程序(ASM)(可選)SWI處理程序(C)用戶程序調(diào)用SWISWI中斷處理程序包含匯編部分和可選用的C部分SWI調(diào)用匯編中,SWI調(diào)用使用“SWI中斷號”實(shí)現(xiàn):
SWI0x24小心在匯編中如果SWI調(diào)用時處于Supervisor模式將會沖掉LR_svc.例如:在SWI處理程序中的二級調(diào)用解決方法:在SWI調(diào)用之前對LR_svc壓棧保護(hù)
ForExamplecompilesto:SWI調(diào)用C中,使用關(guān)鍵詞“__swi”來定義一個軟中斷函數(shù).
ForExamplecompilesto:__swi(0x24)voidmy_swi(void);
voidfoo(void){my_swi();} fooSTMFD sp!,{lr}SWI 0x24LDMFD sp!,{pc}ARM內(nèi)核不提供直接傳遞軟中斷(SWI)號到處理程序的機(jī)制:SWI處理程序必須定位SWI指令,并提取SWI指令中的常數(shù)域?yàn)榇?SWI處理程序必須確定SWI調(diào)用是在哪一種狀態(tài)(ARM/Thumb).檢查SPSR的T-bitSWI指令在ARM狀態(tài)下在LR-4位置,Thumb狀態(tài)下在LR-2位置SWI指令按相應(yīng)的格式譯碼:ARM態(tài)格式:Thumb態(tài)格式:存取SWI號283124270
Cond1111SWInumber231587011011111SWInumber存取SWI參數(shù)匯編中,存取調(diào)用者設(shè)置的寄存器即可.在返回之前,修改寄存器的值,傳回參數(shù)給調(diào)用者.傳參數(shù)給C,通常采用壓棧的方法.將參數(shù)壓棧給調(diào)用的函數(shù)傳遞一個指向這些參數(shù)的指針也可以通過將參數(shù)值寫回到適當(dāng)?shù)亩褩N恢?,將參?shù)傳回復(fù)位(reset)Reset處理程序執(zhí)行的動作取決于不同的系統(tǒng).例如它可以:設(shè)置異常向量初始化存儲器系統(tǒng)(MMU/PU)初始化所有需要的模式的堆棧和寄存器
初始化所有C所需的變量初始化所有I/O設(shè)備使能中斷改變處理器模式或/和狀態(tài)調(diào)用主應(yīng)用程序未定義指令下列情況將引起未定義指令異常:ARM試圖執(zhí)行一真正的未定義指令A(yù)RM遇到一協(xié)處理器指令,可是系統(tǒng)中的協(xié)處理器硬件并不存在ARM遇到一協(xié)處理器指令,系統(tǒng)中協(xié)處理器硬件也存在,可是ARM不是在超級用戶模式(privilegedmode)例如:操作協(xié)處理器15(cp15)-ARMcache控制器解決方法:在處理程序中執(zhí)行軟協(xié)處理器仿真禁止在非超級用戶模式下操作報告錯誤并退出預(yù)取異常不論異常是發(fā)生在ARM還是Thumb狀態(tài)下,導(dǎo)致預(yù)取異常的指令地址在lr-4處.處理方法取決于存儲器管理策略有存儲器管理的系統(tǒng)(e.g.demandpagedvirtualmemory)修正問題(e.g.enablecorrectmemorypage)返回并重新執(zhí)行預(yù)取異常的指令(SUBSpc,lr,#4)沒有存儲器管理的系統(tǒng)通常表示一個致命的錯誤報告錯誤(如果可能)然后退出數(shù)據(jù)異常導(dǎo)致異常的指令的地址在lr-8處.處理方法取決于存儲器管理策略有存儲器管理的系統(tǒng)(demanddvirtualmemory)如果使用了MMU,數(shù)據(jù)異常的地址在MMU的“FaultAddress”寄存器中修正問題(enablecorrectpageofmemory)返回并重新執(zhí)行數(shù)據(jù)異常的指令
SUBSpc,lr,#8沒有存儲器管理的系統(tǒng)通常表示一個致命的錯誤報告錯誤(如果可能)然后退出TheAbortModel許多ARM存儲器存取指令將更新基址寄存器:LDR r0,[r1,#8]! ;“!”將更新R1如果異常是數(shù)據(jù)異常,對基址寄存器的影響取決于使用的是哪種ARMcore.“BaseRestoredAbortModel”StrongARM,ARM9andARM10系列支持基址寄存器由ARMcore自動恢復(fù).“BaseUpdatedAbortModel”ARM7TDMI系列支持在異常指令重新執(zhí)行之前基址寄存器必須由處理程序進(jìn)行恢復(fù)異常返回地址ARM狀態(tài):在異常產(chǎn)生的時候內(nèi)核設(shè)置LR_mode=PC-4.處理程序需要調(diào)整LR_mode(取決于是哪一個異常發(fā)生了),以便返回到正確的地址Thumb狀態(tài):處理器根據(jù)發(fā)生的異常自動修改存在LR_mode中的地址不論異常產(chǎn)生時的狀態(tài)如何,處理器確保處理程序的ARM返回指令能返回到正確的地址(和正確的狀態(tài))從SWIs和未定義指令返回異常是由指令本身引起的,因此內(nèi)核在計算LR時的PC值并沒有被更新. ARMThumbSWI pc-8pc-4 ;Exceptiontakenherexxx pc-4pc-2 ;lr=nextinstructionyyy pcpc因此返回指令為: MOVSPC,LRNote:
表示異常返回后將執(zhí)行的那條指令從FIQs和IRQs和預(yù)取異常返回異常在當(dāng)前指令執(zhí)行完成后才被響應(yīng).因此內(nèi)核在計算LR時的PC值已被更新.
ARM
Thumbwww pc-12
pc–6Interruptoccurredduringexecutionxxx
pc-8
pc-4yyypc-4
pc-2
ARMlr=nextinstructionzzzpc
pc
Thumblr=twoinstructionsahead因此返回指令為:SUBSPC,LR,#4Note:表示異常返回后將執(zhí)行的那條指令從數(shù)據(jù)異常返回異常發(fā)生(和計算LR)在PC被更新之后.需要重新執(zhí)行導(dǎo)致異常的指令 ARM
Thumb
www
pc-12
pc-6
Dataabortoccurredherexxxpc-8
pc-4yyypc-4
pc-2
ARMlr=twoinstructionsaheadzzzpc
pcaaapc+4
pc+2Thumblr=fourinstructionsahead因此返回指令為:
SUBSpc,lr,#8Note:
表示異常返回后將執(zhí)行的那條指令從SWI和Undef異常返回 MOVS
pc,lr從FIQ,IRQ和預(yù)取異常(PrefectAbort)返回
SUBS
pc,lr,#4
從數(shù)據(jù)異常(DataAbort)返回
SUBS
pc,lr,#8
如果LR之前被壓棧的話使用LDM“^” LDMFDsp!,{pc}^異常返回:使用一數(shù)據(jù)處理指令:相應(yīng)的指令取決于什么樣的異常在特權(quán)模式不僅僅更新PC,而且拷貝SPSR到CPSR設(shè)置CPSR,“S”bitPC做為目的寄存器異常返回指令2.6存儲方式與存儲器映射機(jī)制ARM處理器地址空間大小為4G字節(jié),這些字節(jié)的單元地址是一個無符號的32位數(shù)值,其取值范圍為0~232-1。各存儲單元地址作為32位無符號數(shù),可以進(jìn)行常規(guī)的整數(shù)運(yùn)算。當(dāng)程序正常執(zhí)行時,每執(zhí)行一條ARM指令,當(dāng)前指令計數(shù)器加4個字節(jié);每執(zhí)行一條Thumb指令,當(dāng)前指令計數(shù)器加2個字節(jié)。2.6.1 數(shù)據(jù)存儲格式小端存儲格式(Little-Endian)大端存儲格式(Big-Endian)TheARM可以用little/bigendian格式存取數(shù)據(jù).r0=0x11223344STRr0,[r1]LDRBr2,[r1]r1=0x100Memory32100123ByteLane312423161587011223344312423161587011223344312423161587011223344312423161587000000044312423161587000000011LittleendianBigendianR2=0x44R2=0x11Formoreinformation,see:“ApplicationNote:BigandLittleEndianByteAddressing”字節(jié)順序2.6.2 非對齊存儲器地址訪問問題分析1.非對齊的指令預(yù)取操作如果是在ARM狀態(tài)下將一個非對齊地址寫入PC,則數(shù)據(jù)在寫入PC時數(shù)據(jù)的第0位和第1位被忽略,最終PC的bit[1:0]為0;如果是在Thumb狀態(tài)下將一個非對齊地址寫入PC,則數(shù)據(jù)在寫入PC時數(shù)據(jù)的第0位被忽略,最終PC的bit[0]為0。2.非對齊地址內(nèi)存的訪問操作
對于LOAD/STORE操作,系統(tǒng)定義了下面3種可能的結(jié)果:
*執(zhí)行結(jié)果不可預(yù)知
*忽略字單元地址低兩位的值,即訪問地址為字單元;忽略半字單元最低位的值,即訪問地址為半字單元。這種忽略是由存儲系統(tǒng)自動實(shí)現(xiàn)的。2.7ARM流水線技術(shù)分析ARM7流水線技術(shù)與三級流水線運(yùn)行情況分析ARM9流水線技術(shù)與五級流水線互鎖分析ARM10E系列概述ARM7流水線技術(shù)為增加處理器指令流的速度,ARM7系列使用3級流水線.允許多個操作同時處理,比逐條指令執(zhí)行要快。PC指向正被取指的指令,而非正在執(zhí)行的指令FetchDecodeExecute從存儲器中讀取指令解碼指令寄存器讀(從寄存器Bank)移位及ALU操作寄存器寫(到寄存器Bank)PC PCPC-4 PC-2PC-8 PC-4ARM Thumb最佳流水線該例中用6個機(jī)器周期執(zhí)行了6條指令所有的操作都在寄存器中(單周期執(zhí)行)指令周期數(shù)(CPI)=1機(jī)器周期
操作周期 1 2 3 4 56
ADD
SUB
MOV
AND
ORR
EOR
CMP
RSBFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDecodeExecuteFetchDecodeFetchFetch
LDR流水線舉例該例中,用6機(jī)器周期執(zhí)行了4條指令指令周期數(shù)(CPI)=1.5機(jī)器周期周期
操作 1 2 3 4 5 6
ADD
SUB
LDR
MOV
AND
ORRFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDataWritebackFetchDecodeExecuteFetchDecodeFetch分支流水線舉例流水線被阻斷注意:內(nèi)核運(yùn)行在ARM狀態(tài)周期
12345
0x8000BL0x8004X0x8008XX0x8FECADD0x8FF0SUB0x8FF4MOV地址
操作FetchDecodeExecuteFetchDecodeExecuteFetchDecodeFetchFetchDecodeExecuteLinkretAdjustFetchDecodeFetch中斷流水線舉例周期
12345678IRQ
IRQ中斷的反應(yīng)時間最小=7機(jī)器周期地址
操作FDELinkretAdjustFFDecodeIRQLinkretExecuteIRQAdjustFDEFDFFDEFDFF0x8000ADD0x8008MOV0x0018B(to0xAF00)0x8004SUB0x001CXX0x0020XXX0xAF00STMFD0xAF04MOV0xAF08LDR0x800CXDARM9TDMI流水線的變化InstructionFetch
Shift+ALUMemoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARMorThumb
InstDecodeRegSelectRegReadShiftALURegWriteThumb?ARM
decompressARMdecodeInstructionFetchFETCHDECODEEXECUTEARM7TDMI周期操作ADD R1,R1,R2SUB R3,R4,R1ORR R8,R3,R4AND R6,R3,R1EOR R3,R1,R212345678LDR R4,[R7]9FDEFDEWFDEWFDEWFDWEFDEWF–取指(Fetch)D
–解碼(Decode) E–執(zhí)行(Execute)I–互鎖(Interlock)M–存儲器(Memory)W–寫回(Writeback)ILDR互鎖本例中,用了7個機(jī)器周期執(zhí)行6條指令,CPI=1.2機(jī)器周期。LDR指令之后立即跟一條數(shù)據(jù)操作指令,由于使用了相同的寄存器,將會導(dǎo)致互鎖。WIM周期操作
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 內(nèi)分泌科常用護(hù)理技術(shù)
- 生產(chǎn)車間紀(jì)律管理制度公告(3篇)
- 職業(yè)中學(xué)后勤管理制度(3篇)
- 餐飲收銀臺管理制度(3篇)
- 獸藥廠培訓(xùn)課件
- 《GA 730-2007警服材料 四件褲鉤》專題研究報告
- 中學(xué)教師職稱評定制度
- 養(yǎng)老院入住老人心理咨詢服務(wù)制度
- 企業(yè)員工培訓(xùn)與素質(zhì)發(fā)展制度
- 企業(yè)內(nèi)部控制規(guī)范制度
- 下腔靜脈濾器置入術(shù)的護(hù)理查房
- 部編版小學(xué)語文六年級下冊課后習(xí)題參考答案
- 礦山救援器材管理制度
- 冬季心腦血管疾病預(yù)防
- 精神科暗示治療技術(shù)解析
- 中醫(yī)治療黃褐斑課件
- 2025西南民族大學(xué)輔導(dǎo)員考試試題及答案
- 2025年《三級物業(yè)管理師》考試復(fù)習(xí)題(含答案)
- 四川省融媒體中心歷年招聘考試真題庫
- 股東代為出資協(xié)議書
- 消防管道拆除合同協(xié)議
評論
0/150
提交評論