第2章ARM7體系結(jié)構(gòu)_第1頁(yè)
第2章ARM7體系結(jié)構(gòu)_第2頁(yè)
第2章ARM7體系結(jié)構(gòu)_第3頁(yè)
第2章ARM7體系結(jié)構(gòu)_第4頁(yè)
第2章ARM7體系結(jié)構(gòu)_第5頁(yè)
已閱讀5頁(yè),還剩49頁(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、 1.ARM簡(jiǎn)介 2.ARM7TDMI 3.ARM的模塊、內(nèi)核和功能框圖 4.ARM處理器狀態(tài) 5.ARM處理器模式第2章 ARM7體系結(jié)構(gòu) 6.ARM內(nèi)部寄存器 7.當(dāng)前程序狀態(tài)寄存器 8.ARM體系的異常、中斷及其向量表 9.ARM體系的存儲(chǔ)系統(tǒng)2.1 ARM簡(jiǎn)介 ARM公司簡(jiǎn)介 ARM是一家微處理器行業(yè)的知名企業(yè),該企業(yè)設(shè)計(jì)了大量高性能、廉價(jià)、耗能低的RISC (精簡(jiǎn)指令集)處理器。 ARM公司的特點(diǎn)是只設(shè)計(jì)芯片,而不生產(chǎn)。它將技術(shù)授權(quán)給世界上許多著名的半導(dǎo)體、軟件和OEM廠商,并提供服務(wù)。將技術(shù)授權(quán)給其它芯片廠商形成各具特色的ARM芯片. . . RISC結(jié)構(gòu)特性 RISC是精簡(jiǎn)指令集

2、計(jì)算機(jī)的縮寫(xiě),其目標(biāo)是設(shè)計(jì)出在高時(shí)鐘頻率下單周期執(zhí)行,簡(jiǎn)單而有效的指令集。ARM內(nèi)核采用RISC體系結(jié)構(gòu),因此具有RISC的結(jié)構(gòu)特點(diǎn):具有大量的通用寄存器;獨(dú)特的裝載/保存(load-store)結(jié)構(gòu);簡(jiǎn)單的尋址模式;統(tǒng)一和固定長(zhǎng)度的指令格式。每條數(shù)據(jù)處理指令可同時(shí)包含算術(shù)邏輯單元(ALU)的運(yùn)算和移位處理,實(shí)現(xiàn)ALU和移位器的最大利用;使用地址自增和自減的尋址方式優(yōu)化程序循環(huán);裝載/保存指令對(duì)數(shù)據(jù)的批量傳輸,實(shí)現(xiàn)最大數(shù)據(jù)吞吐量;大多數(shù)指令的條件執(zhí)行,實(shí)現(xiàn)最快速的代碼執(zhí)行。 ARM體系結(jié)構(gòu) 常用ARM處理器系列 ARM公司開(kāi)發(fā)了很多系列的ARM處理器核,目前最新的系列是Cortex,而ARM6

3、核以及更早的系列已經(jīng)很罕見(jiàn)了。當(dāng)前應(yīng)用比較多的ARM處理器核系列有:ARM7ARM9ARM10EXscaleARM11CortexARM9EARM7TDMI-S2.2 ARM7TDMI ARM7TDMI是基于ARM體系結(jié)構(gòu)V4版本的低端ARM核。 其彌補(bǔ)了ARM6很難在低于5V電壓下穩(wěn)定工作的不足,還增加了后綴所對(duì)應(yīng)的功能:支持高密度16位的Thumb指令集;支持片上調(diào)試;支持64位乘法;支持EmbededICE觀察硬件;ARM7TDMI 的可綜合(synthesizable)版本(軟核),對(duì)應(yīng)用工程師來(lái)說(shuō)其編程模型與ARM7TDMI 一致; 注意:“ARM核”并非芯片,ARM核與其它部件如R

4、AM、ROM、片內(nèi)外設(shè)組合在一起才能構(gòu)成現(xiàn)實(shí)的芯片。 存儲(chǔ)器的字與半字 從偶數(shù)地址開(kāi)始的連續(xù)2個(gè)字節(jié)構(gòu)成一個(gè)半字; 以能被4整除的地址開(kāi)始的連續(xù)4個(gè)字節(jié)構(gòu)成一個(gè)字; ARM指令的長(zhǎng)度剛好是一個(gè)字,Thumb指令的長(zhǎng)度剛好是一個(gè)半字。 如果一個(gè)數(shù)據(jù)是從偶地址開(kāi)始的連續(xù)存儲(chǔ),那么它就是半字對(duì)齊,否則就是非半字對(duì)齊; 如果一個(gè)數(shù)據(jù)是以能被4整除的地址開(kāi)始的連續(xù)存儲(chǔ),那么它就是字對(duì)齊,否則就是非字對(duì)齊。 存儲(chǔ)器的存儲(chǔ)方式方式半字對(duì)齊字對(duì)齊地址0 x40020 x40040 x40040 x4008特征Bit0=0其他位為任意值Bit1=0,Bit0=0其他位為任意值 三級(jí)流水線 ARM處理器使用流水線

5、來(lái)增加處理器指令流的速度,這樣可使幾個(gè)操作同時(shí)進(jìn)行,并使處理和存儲(chǔ)器系統(tǒng)連續(xù)操作,能提供0.9MIPS/MHz的指令執(zhí)行速度。 ARM7TDMI的流水線分3級(jí),分別為:取指譯碼執(zhí)行取指譯碼執(zhí)行處理指令并將結(jié)果寫(xiě)回寄存器識(shí)別將要被執(zhí)行的指令從寄存器裝載一條指令 正常操作過(guò)程中,在執(zhí)行一條指令的同時(shí)對(duì)下一條(第二條)指令進(jìn)行譯碼,并將第三條指令從存儲(chǔ)器中取出。 在ARM狀態(tài)下,流水線上各指令的地址為: 在Thumb狀態(tài)下,流水線上各指令的地址為:PCPC-4PC-8PCPC-2PC-4 三級(jí)流水線結(jié)構(gòu)的指令執(zhí)行順序PC指令1指令2指令3指令4程序存儲(chǔ)器PC-4PC-8PC+4周期1周期2周期3周期

6、4周期5周期6取指 譯碼 執(zhí)行取指 譯碼 執(zhí)行取指 譯碼 執(zhí)行取指 譯碼 執(zhí)行周期周期2周期周期1周期周期3周期周期4 在第1個(gè)周期,PC指向指令1,此時(shí)指令1進(jìn)入三級(jí)流水線的取指階段。1 在第2個(gè)周期,PC指向指令2,此時(shí)指令1進(jìn)入三級(jí)流水線的譯碼階段,同時(shí)取出指令2。2 在第3個(gè)周期,PC指向指令3,此時(shí)指令1進(jìn)入三級(jí)流水線的執(zhí)行階段,指令2進(jìn)入譯碼階段,取出指令3。3 在第4個(gè)周期,指令1執(zhí)行完成,指令2和指令3流水線推進(jìn)一級(jí),同時(shí)開(kāi)始指令4的取指處理。4處理器執(zhí)行一條指令的三個(gè)階段 執(zhí)行ADD PC,PC,#4指令后,PC的值為多少?思考題ADD PC,PC,#40 x40000 x4

7、0040 x40080 x400C地址指令PC取指譯碼執(zhí)行PCPC-4PC-8ARM7的3級(jí)流水線ADD 程序計(jì)數(shù)器R15(PC)總是指向“正在取指”的指令,而不是指向“正在執(zhí)行”的指令或“正在譯碼”的指令。 一般來(lái)說(shuō),人們習(xí)慣性約定將“正在執(zhí)行”的指令作為參考點(diǎn),則:PC值當(dāng)前程序執(zhí)行位置8 注:ARM狀態(tài)時(shí),每條指令為4字節(jié)長(zhǎng)。 PC指向0 x4000地址,取指ADD指令。 PC指向0 x4004地址,譯碼ADD指令。 PC指向0 x4008地址,執(zhí)行ADD指令,所以指令執(zhí)行的結(jié)果為: PC=PC+40 x400840 x400C。CPU掃描鏈1掃描鏈1數(shù)據(jù)總線數(shù)據(jù)總線掃描鏈1掃描鏈2協(xié)處

8、理器信號(hào)接口EmbeddedICE-RTTAP 控制器EmbeddedICE-RT宏單元DBGTCKENDBGTMSDBGnTRSTDBGTDIDBGTDORDATA31:0WDATA31:0ADDR31:0TRANS1:0PROT1:0SIZE1:0WRITELOCKDBGRNG(0)DBGRNG(1)DBGEXT(1)DBGEXT(0)2.3 ARM模塊框圖CPU協(xié)處理接口信號(hào)EmbedICE硬件仿真功能模塊片上調(diào)試系統(tǒng)讀寫(xiě)總線2.3 ARM內(nèi)核框圖地址寄存器寄存器組31*32位寄存器(6個(gè)狀態(tài)寄存器)地址增加器乘法器桶形移位器32位ALU寫(xiě)數(shù)據(jù)寄存器指令管線讀數(shù)據(jù)寄存器Thumb指令譯碼

9、器指令譯碼和控制邏輯ADDR31:0CLKCLENCFGBIGENDnIRQnFIQnRESETABORTLOCKWRITESIZE1:0PROT1:0TRANS1:0DBG輸出DBG輸入CP控制CP握手WDATA31:0RDATA31:0掃描調(diào)試控制2.3 ARM功能框圖ARM7TDMI-S處理器LOCKCLKCLKENnIRQnFIQnRESETCFGBIGENDDBGRQDMOREDBGINSTRVAILDDBGBREAKDBGACKDBGnEXECDBGEXT1DBGEXT0DBGENDBGCOMMTXDBGCOMMRXDBGRNG0DBGRNG1DBGTCKENDBGTMSDBGTD

10、IDBGnTRSTDBGTDODBGnTDOENADDR31:0WDATA31:0RDATA31:0ABORTWRITESIZE1:0PROT1:0TRANS1:0CPnTRANSCPnOPCCPnMREQCPSEQCPTBITCPnICPACPB同步的掃描調(diào)試訪問(wèn)接口存儲(chǔ)器接口存儲(chǔ)器管理接口協(xié)處理器接口時(shí)鐘中斷總線控制仲裁調(diào)試2.4 ARM處理器狀態(tài) 處理器狀態(tài) ARM7TDMI處理器內(nèi)核包含2套指令系統(tǒng),分別為ARM指令集和Thumb指令,并且各自對(duì)應(yīng)1種處理器的狀態(tài):ARM狀態(tài):32位,處理器執(zhí)行字方式的ARM指令,處理器默認(rèn)為此狀態(tài);Thumb狀態(tài):16位,處理器執(zhí)行半字方式的Thum

11、b指令。注意:兩個(gè)狀態(tài)之間的切換并不影響處理器模式或寄存器內(nèi)容。 處理器正在操作的狀態(tài)由“當(dāng)前程序狀態(tài)寄存器CPSR”中的控制位T決定。 T=0 ARM狀態(tài); T=1 Thumb狀態(tài)。 狀態(tài)切換的一個(gè)例子地址最低位為0,表示切換到ARM狀態(tài)BX指令是ARM指令系統(tǒng)中的帶狀態(tài)切換跳轉(zhuǎn)指令。BX指令跳轉(zhuǎn)到指令中所指定的目標(biāo)地址,若目標(biāo)地址的bit0為0,則跳轉(zhuǎn)時(shí)自動(dòng)將CPSR中的標(biāo)志位T復(fù)位;若目標(biāo)地址的bit0為1,則跳轉(zhuǎn)時(shí)自動(dòng)將CPSR中的標(biāo)志位T置位ARM指令集Thumb指令集CODE32LDRR0, =Lable+1BX R0CODE16Lable MOV R1, #12CODE16LDR

12、 R0, =LableBX R0CODE32LableMOV R1, #10地址最低位為1,表示切換到Thumb狀態(tài)跳轉(zhuǎn)地址標(biāo)號(hào)執(zhí)行完BX指令,處理器切換到Thumb狀態(tài),開(kāi)始執(zhí)行Thumb指令程序代碼指令集關(guān)系 從ARM狀態(tài)切換到Thumb狀態(tài)的程序代碼如下: 從Thumb狀態(tài)切換到ARM狀態(tài)的程序代碼如下:執(zhí)行完BX指令,處理器切換到ARM狀態(tài),開(kāi)始執(zhí)行ARM指令2.5 ARM處理器模式 ARM體系結(jié)構(gòu)支持7種處理器模式,分別為:用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統(tǒng)模式。這樣的好處是可以更好的支持操作系統(tǒng)并提高工作效率。ARM7TDMI完全支持這七種模式。處

13、理器模式處理器模式說(shuō)明說(shuō)明備注備注 用戶(usr)正常程序運(yùn)行的工作模式不能直接從用戶模式切換到其它模式特權(quán)模式系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)異常模式快中斷(fiq)快速中斷請(qǐng)求處理只有在FIQ異常響應(yīng)時(shí),才進(jìn)入此模式中斷(irq)中斷請(qǐng)求處理只有在IRQ異常響應(yīng)時(shí),才進(jìn)入此模式管理(svc)供操作系統(tǒng)使用的一種保護(hù)模式只有在系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí),才進(jìn)入此模式中止(abt)用于虛擬內(nèi)存和/或存儲(chǔ)器保護(hù)在ARM7內(nèi)核中沒(méi)有多大用處未定義(und)支持軟件仿真的硬件協(xié)處理器只有在未定義指令異常響應(yīng)時(shí),才進(jìn)入此模式 除用戶模式外,其它

14、模式均為特權(quán)模式。ARM內(nèi)部寄存器和一些片內(nèi)外設(shè)在硬件設(shè)計(jì)上只允許(或者可選為只允許)特權(quán)模式下訪問(wèn)。此外,特權(quán)模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。處理器模式處理器模式說(shuō)明說(shuō)明備注備注 用戶(usr)正常程序運(yùn)行的工作模式不能直接從用戶模式切換到其它模式特權(quán)模式系統(tǒng)(sys)用于支持操作系統(tǒng)的特權(quán)任務(wù)等與用戶模式類似,但具有可以直接切換到其它模式等特權(quán)異常模式快中斷(fiq)快速中斷請(qǐng)求處理只有在FIQ異常響應(yīng)時(shí),才進(jìn)入此模式中斷(irq)中斷請(qǐng)求處理只有在IRQ異常響應(yīng)時(shí),才進(jìn)入此模式管理(svc)供操作系統(tǒng)使用的一種保護(hù)模式只有在系統(tǒng)復(fù)位和軟件中斷響應(yīng)時(shí),才進(jìn)入

15、此模式中止(abt)用于虛擬內(nèi)存和/或存儲(chǔ)器保護(hù)在ARM7內(nèi)核中沒(méi)有多大用處未定義(und)支持軟件仿真的硬件協(xié)處理器只有在未定義指令異常響應(yīng)時(shí),才進(jìn)入此模式 處理器模式 這兩種模式都不能由異常進(jìn)入,想要進(jìn)入必須修改CPSR,而且它們使用完全相同的寄存器組。系統(tǒng)模式是特權(quán)模式,不受用戶模式的限制。操作系統(tǒng)在該模式下訪問(wèn)用戶模式的寄存器就比較方便,而且操作系統(tǒng)的一些特權(quán)任務(wù)可以使用這個(gè)模式訪問(wèn)一些受控的資源。 這五種模式稱為異常模式。它們除了可以通過(guò)程序切換進(jìn)入外,也可以由特定的異常進(jìn)入。當(dāng)特定的異常出現(xiàn)時(shí),處理器進(jìn)入相應(yīng)的模式。每種異常模式都有一些獨(dú)立的寄存器,以避免異常退出時(shí)用戶模式的狀態(tài)不

16、可靠。何時(shí)進(jìn)入異常模式,具體規(guī)定如下:處理器復(fù)位之后進(jìn)入管理模式,操作系統(tǒng)內(nèi)核通常處于管理模式;當(dāng)處理器訪問(wèn)存儲(chǔ)器失敗時(shí),進(jìn)入數(shù)據(jù)訪問(wèn)中止模式;當(dāng)處理器遇到?jīng)]有定義或不支持的指令時(shí),進(jìn)入未定義模式;中斷模式與快速中斷模式分別對(duì)ARM處理器2種不同級(jí)別的中斷作出響應(yīng)。2.6 ARM內(nèi)部寄存器 在ARM處理器內(nèi)部共有37個(gè)用戶可訪問(wèn)的寄存器,分別為31個(gè)通用32位寄存器和6個(gè)狀態(tài)寄存器。 ARM處理器共有7種不同的處理器模式,每種模式都有一組相應(yīng)的寄存器組,最多的可以18個(gè)活動(dòng)的寄存器。注意:這些寄存器不能在同一時(shí)間同時(shí)被訪問(wèn),究竟何時(shí)才能訪問(wèn)上述寄存器完全取決于處理器的狀態(tài)和處理器的模式。ARM

17、狀態(tài)各模式下的寄存器寄存器寄存器類別類別寄存器在匯寄存器在匯編中的名稱編中的名稱各模式下實(shí)際訪問(wèn)的寄存器各模式下實(shí)際訪問(wèn)的寄存器用戶用戶系統(tǒng)系統(tǒng)管理管理中止中止未定義未定義中斷中斷快中斷快中斷通通用用寄寄存存器器和和程程序序計(jì)計(jì)數(shù)數(shù)器器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_un

18、dR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR13_irqR14_fiqR15(PC)R15狀態(tài)狀態(tài)寄存器寄存器CPSRCPSRSPSRSPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq 所有的37個(gè)寄存器,分成兩大類:31個(gè)通用32位寄存器;6個(gè)狀態(tài)寄存器。ARM狀態(tài)各模式下可以訪問(wèn)的寄存器寄存器寄存器類別類別寄存器在匯寄存器在匯編中的名稱編中的名稱各模式下實(shí)際訪問(wèn)的寄存器各模式下實(shí)際訪問(wèn)的寄存器用戶用戶系統(tǒng)系統(tǒng)管理管理中止中止未定義未定義中斷中斷快中斷快中斷通通用用寄寄存存器器和和程程序序計(jì)計(jì)數(shù)數(shù)器器R0(a1)

19、R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)狀態(tài)寄存器寄存器CPSRCPSRSPSRSPSR_svcSPSR_abtSPSR_undSPSR_irq

20、SPSR_fiq未分組的通用寄存器寄存器寄存器類別類別寄存器在匯寄存器在匯編中的名稱編中的名稱各模式下實(shí)際訪問(wèn)的寄存器各模式下實(shí)際訪問(wèn)的寄存器用戶用戶系統(tǒng)系統(tǒng)管理管理中止中止未定義未定義中斷中斷快中斷快中斷通通用用寄寄存存器器和和程程序序計(jì)計(jì)數(shù)數(shù)器器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_ab

21、tR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR13_irqR14_fiqR15(PC)R15狀態(tài)狀態(tài)寄存器寄存器CPSRCPSRSPSRSPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq寄存器R0R7為未分組的通用寄存器,它們?cè)谌魏翁幚砥髂J蕉紝?duì)應(yīng)于相同的32位物理寄存器。第一類分組的通用寄存器寄存器R8R12有兩個(gè)分組的物理寄存器。一個(gè)用于除FIQ模式之外的所有寄存器模式,另一個(gè)用于FIQ模式。在發(fā)生FIQ中斷后,處理器不必為保護(hù)寄存器而浪費(fèi)時(shí)間,從而加速了FIQ的處理速度。第二類分組的通用寄存器寄存

22、器R13、R14分別有6個(gè)分組的物理寄存器。1個(gè)用于用戶和系統(tǒng)模式,其余5個(gè)分別用于5種異常模式。寄存器R13通常作為堆棧指針(SP),用于保存待使用的寄存器的內(nèi)容。寄存器R14稱為鏈接寄存器(LR),在結(jié)構(gòu)上有兩個(gè)特殊功能:當(dāng)使用BL指令調(diào)用子程序時(shí),返回地址將自動(dòng)存入R14中;當(dāng)發(fā)生異常時(shí),將R14對(duì)應(yīng)的異常模式版本設(shè)置為異常返回地址(有些異常有一個(gè)小的固定偏移量)。程序計(jì)數(shù)器寄存器R15稱為程序計(jì)數(shù)器(PC),它指向正在“取指”的指令。狀態(tài)寄存器寄存器CPSR為當(dāng)前程序狀態(tài)寄存器,在異常模式中,另外一個(gè)寄存器“程序狀態(tài)保存寄存器(SPSR)”可以被訪問(wèn)。每種異常都有自己的SPSR,在進(jìn)入

23、異常時(shí)它保存CPSR的當(dāng)前值,異常退出時(shí)可通過(guò)它恢復(fù)CPSR。 在Thumb狀態(tài)各模式下實(shí)際訪問(wèn)的寄存器 Thumb狀態(tài)寄存器集是ARM狀態(tài)集的子集,程序員可以直接訪問(wèn)的寄存器為:8個(gè)通用寄存器R0R7;程序計(jì)數(shù)器(PC);堆棧指針(SP);鏈接寄存器(LR);當(dāng)前程序狀態(tài)寄存器( CPSR)。在Thumb狀態(tài)各模式下的寄存器寄存器寄存器類別類別寄存器在匯寄存器在匯編中的名稱編中的名稱各模式下實(shí)際訪問(wèn)的寄存器各模式下實(shí)際訪問(wèn)的寄存器用戶用戶系統(tǒng)系統(tǒng)管理管理中止中止未定義未定義中斷中斷快中斷快中斷通通用用寄寄存存器器和和程程序序計(jì)計(jì)數(shù)數(shù)器器R0(a1)R0R1(a2)R1R2(a3)R2R3(a

24、4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4,WR)R7SPR13R13_svcR13_abtR13_undR13_irqR13_fiqLRR14R14_svcR14_abtR14_undR13_irqR14_fiqPCR15狀態(tài)狀態(tài)寄存器寄存器CPSRCPSR 未分組的通用寄存器 第二類分組的通用寄存器在匯編語(yǔ)言中寄存器R0R7為通用寄存器,對(duì)于任何處理器模式,它們中的每一個(gè)都對(duì)應(yīng)于相同的32為物理寄存器。堆棧指針SP對(duì)應(yīng)ARM狀態(tài)的寄存器R13。每個(gè)異常模式都有其自身的SP分組版本,SP通常指向各異常模式所專用的堆棧。注意:在發(fā)生異常時(shí),處理器自動(dòng)進(jìn)入ARM狀態(tài)。鏈接

25、寄存器LR對(duì)應(yīng)ARM狀態(tài)寄存器R14。注意:在發(fā)生異常時(shí),處理器自動(dòng)進(jìn)入ARM狀態(tài)。ARM狀態(tài)Thumb寄存器在ARM寄存器上的映射R0R1R2R3R4R5R6R7R8R9R10R11R12堆棧指針(R13)連接寄存器(R14)程序計(jì)數(shù)器(R15)CPSRSPSRR0R1R2R3R4R5R6R7堆棧指針(SP)連接寄存器(LR)程序計(jì)數(shù)器(PC)CPSRThumb狀態(tài) Thumb狀態(tài)R0R7與ARM狀態(tài)R0R7相同;1 Thumb狀態(tài)CPSR(無(wú)SPSR)與ARM狀態(tài)CPSR相同。5 Thumb狀態(tài)SP映射到ARM狀態(tài)R13;2 Thumb狀態(tài)LR映射到ARM狀態(tài)R14; 3 Thumb狀態(tài)P

26、C映射到ARM狀態(tài)R15(PC);4低端寄存器高端寄存器 在Thumb狀態(tài)中,高端寄存器的訪問(wèn)是受到限制的,只有MOV、CMP和ADD指令可以對(duì)其訪問(wèn),可以用于數(shù)據(jù)的快速暫存。ARMThumbARMResetBXBXARM中斷服務(wù)程序正常程序事件ARMARMISR1ISR2ISRn 狀態(tài)切換過(guò)程異常發(fā)生進(jìn)入退出 系統(tǒng)復(fù)位,自動(dòng)切換到ARM狀態(tài)。1 通過(guò)BX和BLX指令改變當(dāng)前處理器模式,使之從ARM狀態(tài)切換到Thumb狀態(tài)。2 在Thumb狀態(tài)下,正常程序執(zhí)行時(shí)產(chǎn)生中斷異常。3 處理器進(jìn)入中斷異常,自動(dòng)的將模式切換到ARM狀態(tài)。4 異常處理完畢,返回正常程序,此時(shí)處理器自動(dòng)的將模式切換到Thu

27、mb狀態(tài)。5 再次通過(guò)BX和BLX指令改變當(dāng)前處理器模式,使之從Thumb狀態(tài)切換到ARM狀態(tài)。6 程序在正常運(yùn)行的過(guò)程中,復(fù)位事件產(chǎn)生,導(dǎo)致系統(tǒng)復(fù)位。2.7 當(dāng)前程序狀態(tài)寄存器 簡(jiǎn)介 ARM內(nèi)核包含1個(gè)CPSR和5個(gè)僅供異常處理程序使用的SPSR。CPSR反映當(dāng)前處理器的狀態(tài),其包含:4個(gè)條件代碼標(biāo)志(負(fù)標(biāo)志N、零標(biāo)志Z、進(jìn)位標(biāo)志C和溢出標(biāo)志V );2個(gè)中斷禁止位(IRQ禁止與FIQ禁止);5個(gè)對(duì)當(dāng)前處理器模式進(jìn)行編碼的位(M4:0);1個(gè)用于指示當(dāng)前執(zhí)行指令的位(ARM指令還是Thumb指令)。 程序狀態(tài)寄存器的格式NZCV IM0M1M2M3M4TF. . .31 30 29 28 27

28、 26 8 7 6 5 4 3 2 1 0條件代碼標(biāo)志保留控制位溢出標(biāo)志進(jìn)位或借位擴(kuò)展零負(fù)或小于IRQ禁止FIQ禁止?fàn)顟B(tài)位模式位NZCVIM0M1M2M3M4TF 條件代碼標(biāo)志各標(biāo)志位的含義如下:負(fù)標(biāo)志N:運(yùn)算結(jié)果的第31位值,記錄標(biāo)志設(shè)置操作的結(jié)果;零標(biāo)志Z:如果標(biāo)志設(shè)置的操作為0,則置位;進(jìn)位標(biāo)志C:記錄無(wú)符號(hào)加法溢出,減法無(wú)借位,循環(huán)移位;溢出標(biāo)志V:記錄標(biāo)志設(shè)置操作的有符號(hào)溢出。 警告:絕對(duì)不要強(qiáng)制改變CPSR寄存器中的控制位T。如果這樣做,處理器將進(jìn)入一個(gè)無(wú)法預(yù)測(cè)的狀態(tài)。 控制位1、中斷禁止控制位I和F;2、處理器狀態(tài)位T;3、處理器模式位M0M4。當(dāng)控制位I置位時(shí),IRQ中斷被禁止

29、;當(dāng)控制位F置位時(shí),F(xiàn)IQ中斷被禁止。當(dāng)控制位T置位時(shí),處理器正在Thumb狀態(tài)下運(yùn)行;當(dāng)控制位T清零時(shí),處理器正在ARM狀態(tài)下運(yùn)行。M4:0模式模式可見(jiàn)的可見(jiàn)的Thumb狀態(tài)寄存器狀態(tài)寄存器可見(jiàn)的可見(jiàn)的ARM狀態(tài)寄存器狀態(tài)寄存器10000用戶R0R7, SP, LR, PC, CPSRR0R14, PC, CPSR 10001快速中斷R0R7, SP_fiq, LR_fiq, PC,CPSR, SPSR_fiq R0R7, R8_fiqR14_fiq, PC,CPSR, SPSR_fiq 10010中斷R0R7, SP_irq, LR_irq, PC,CPSR, SPSR_fiq R0R12

30、, R13_irq, R14_irq, PC,CPSR, SPSR_irq 10011管理R0R7, SP_svc, LR_svc, PC,CPSR, SPSR_svc R0R12, R13_svc, R14_svc, PC,CPSR, SPSR_svc 10111中止R0R7, SP_abt, LR_abt, PC,CPSR, SPSR_abt R0R12, R13_abt, R14_abt, PC,CPSR, SPSR_abt 11011未定義R0R7, SP_und, LR_und, PC,CPSR, SPSR_und R0R12, R13_und, R14_und, PC,CPSR,

31、SPSR_und11111系統(tǒng)R0R7, SP, LR, PC,CPSR R0R14, PC, CPSR 注意:不是所有模式位的組合都定義了有效的處理器模式,如果將非法值寫(xiě)入M4:0中,處理器將進(jìn)入一個(gè)無(wú)法恢復(fù)的模式。 保留位 CPSR中的保留位被保留將來(lái)使用。當(dāng)改變CPSR標(biāo)志和控制位時(shí),請(qǐng)確認(rèn)沒(méi)有改變這些保留位。 另外,請(qǐng)確保您的程序不依賴于包含特定值的保留位,因?yàn)閷?lái)的處理器可能會(huì)將這些位設(shè)置為1或者0。2.8 ARM體系的異常 異常簡(jiǎn)介 只要正常的程序流被暫時(shí)中止,處理器就進(jìn)入異常模式。例如在用戶模式下執(zhí)行程序時(shí),當(dāng)外設(shè)向處理器內(nèi)核發(fā)出中斷請(qǐng)求導(dǎo)致內(nèi)核從用戶模式切換到異常中斷模式。 如

32、果同時(shí)發(fā)生兩個(gè)或更多異常,那么將按照固定的順序來(lái)處理異常。 異常入口/出口匯總 下表所示為異常返回地址值以及退出異常處理程序所推薦使用的指令。 異常入口異常入口返回指令返回指令返回地址返回地址SWIMOVS PC,R14_svcR14未定義的指令MOVS PC,R14_undR14預(yù)取指中止SUBS PC,R14_abt,#4R144快速中斷SUBS PC,R14_fiq,#4R144中斷SUBS PC,R14_irq,#4R144數(shù)據(jù)中止SUBS PC,R14_abt,#8R148復(fù)位無(wú) 注意:“MOVS PC,R14_svc”是指在管理模式執(zhí)行MOVS PC,R14 指令,同樣類似的指令還

33、有“MOVS PC,R14_und”、“SUBS PC,R14_abt,#4”等。 異常向量表地址地址異常異常進(jìn)入時(shí)的模式進(jìn)入時(shí)的模式進(jìn)入時(shí)進(jìn)入時(shí)I的狀態(tài)的狀態(tài)進(jìn)入時(shí)進(jìn)入時(shí)F的狀態(tài)的狀態(tài)0 x00000000復(fù)位管理禁止禁止0 x00000004未定義指令未定義IF0 x00000008軟件中斷異常管理禁止F0 x0000000C中止(預(yù)取指)中止IF0 x00000010中止(數(shù)據(jù))中止IF0 x00000014保留保留0 x00000018IRQ中斷禁止F0 x0000001CFIQ快速中斷禁止禁止注:表中的I和F表示不對(duì)該位有影響,保留原來(lái)的值。 異常優(yōu)先級(jí) 當(dāng)多個(gè)異常同時(shí)發(fā)生時(shí),一個(gè)固

34、定的優(yōu)先級(jí)決定系統(tǒng)處理它們的順序。 優(yōu)先級(jí)優(yōu)先級(jí)異常異常1復(fù)位2數(shù)據(jù)中止3FIQ4IRQ5預(yù)取指中止6未定義指令中止6軟件中斷異常優(yōu)先級(jí)由高到低 異常的進(jìn)入當(dāng)一個(gè)異常導(dǎo)致模式切換時(shí),內(nèi)核自動(dòng)的做如下處理: 將異常處理程序的返回地址(加固定的偏移量)保存到相應(yīng)異常模式下的LR; 將CPSR的當(dāng)前值保存到相應(yīng)異常模式下的SPSR; 設(shè)置CPSR為相應(yīng)的異常模式; 設(shè)置PC為相應(yīng)異常處理程序的中斷入口向量地址,跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序執(zhí)行;用戶模式SPSR異常模式CPSRR15(PC)R14(LR)R0R13BackAddrJumpAddrUserModeExceptionMode程序代碼正常運(yùn)

35、行在用戶模式下。 異常的進(jìn)入當(dāng)一個(gè)異常導(dǎo)致模式切換時(shí),內(nèi)核自動(dòng)的做如下處理: 將異常處理程序的返回地址(加固定的偏移量)保存到相應(yīng)異常模式下的LR; 將CPSR的當(dāng)前值保存到相應(yīng)異常模式下的SPSR; 設(shè)置CPSR為相應(yīng)的異常模式; 設(shè)置PC為相應(yīng)異常處理程序的中斷入口向量地址,跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序執(zhí)行; 異常的退出 當(dāng)異常處理程序結(jié)束時(shí),異常處理程序必須: 返回到發(fā)生異常中斷的指令的下一條指令處執(zhí)行,即就是說(shuō)將LR中的值減去偏移量后移入PC; 將SPSR的值復(fù)制回CPSR;SPSR異常模式用戶模式CPSRR15(PC)R14(LR)R0R13BackAddrCurrentAddrUs

36、erModeExceptionModeBackAddrOff 清零在入口處置位的中斷禁止標(biāo)志。 復(fù)位異常 當(dāng)nRESET信號(hào)被拉低時(shí),ARM處理器放棄正在執(zhí)行的指令,等到nRESET信號(hào)再次變高時(shí),處理器執(zhí)行以下操作: 強(qiáng)制M4:0變?yōu)?0011,系統(tǒng)進(jìn)入管理模式; 將CPSR中的標(biāo)志位I和F置位,IRQ與FIQ中斷被禁止; 將CPSR中的標(biāo)志位T清零,處理器處于ARM狀態(tài); 強(qiáng)制PC從地址0 x00開(kāi)始對(duì)下一條指令進(jìn)行取指; 返回到ARM狀態(tài)并恢復(fù)執(zhí)行。 中斷請(qǐng)求異常 只有當(dāng)CPSR中相應(yīng)的中斷屏蔽位被清除時(shí),才可能發(fā)生IRQ異常,中斷請(qǐng)求(IRQ)異常由一個(gè)nIRQ輸入端的低電平所產(chǎn)生的正

37、常中斷。 注:中斷異常產(chǎn)生時(shí),中斷異常模式下的R14保存的是PC的值。取指譯碼執(zhí)行取指譯碼執(zhí)行取指譯碼執(zhí)行周期4 周期5周期1 周期2 周期3PC-8指令1指令2指令3PC-4PC中斷發(fā)生周期指令1的執(zhí)行不會(huì)中斷;異常程序結(jié)束時(shí)返回到指令2;進(jìn)入中斷服務(wù)程序時(shí),指令3地址被保存在R14中。R14保存的地址:中斷返回地址+4 程序運(yùn)行在用戶模式下,當(dāng)一個(gè)IRQ異常中斷發(fā)生時(shí),內(nèi)核切換到“中斷模式”,并自動(dòng)的做如下處理: 進(jìn)入IRQ異常模式R0R12R13_usrR14_usrR15CPSR-R13_irqR14_irqSPSR_irqUSR模式IRQ模式2I=1,T=0,mod=irq3異常向量

38、地址0 x00184ISR代碼將寄存器壓棧 51 將異常處理程序的返回地址保存到異常模式下的R14(R14_irq)中。1 用戶模式的CPSR被保存到新的IRQ中斷異常模式SPSR_irq中。2 修改CPSR,禁止新的IRQ中斷產(chǎn)生,進(jìn)入ARM狀態(tài),設(shè)置為IRQ模式。3 設(shè)置IRQ模式下的PC為IRQ異常處理程序的中斷入口向量地址0 x00000018。4 將IRQ中斷異常模式的棧頂指針保存到R13_irq中,之后軟件處理程序調(diào)用中斷服務(wù)程序?yàn)橹袛嘣捶?wù)。5 從R13_irq中獲取IRQ中斷異常模式的棧頂指針。1 退出IRQ異常模式R0R12R13_usrR14_usrR15CPSR-R13_

39、irqR14_irqSPSR_irqIRQ模式USR模式恢復(fù)CPSR2R14減4后為返回地址3ISR代碼將寄存器出棧 1 將SPSR_irq中的內(nèi)容復(fù)制到CPSR。2 由于流水線的特性,將R14_irq指向的地址減去一個(gè)偏移量后存入R15(PC),實(shí)現(xiàn)指令為:SUBS PC,R14_irq,#4 3 中斷服務(wù)程序執(zhí)行完畢后,系統(tǒng)將通過(guò)以下幾步軟件操作返回用戶模式: 快速中斷請(qǐng)求異常 快速中斷請(qǐng)求(FIQ)適用于對(duì)一個(gè)突發(fā)事件的快速響應(yīng),這得益于在ARM狀態(tài)中,快中斷模式有8個(gè)專用的寄存器可用來(lái)滿足寄存器保護(hù)的需要(這可以加速上下文切換的速度)。 不管異常入口是來(lái)自ARM狀態(tài)還是Thumb狀態(tài),

40、FIQ處理程序都會(huì)通過(guò)執(zhí)行下面的指令從中斷返回:SUBS PC,R14_fiq,#4 在一個(gè)特權(quán)模式中,可以通過(guò)置位CPSR中的F位來(lái)禁止FIQ異常。系統(tǒng)模式FIQ模式程序寄存器組 FIQ中斷的例子“?”表示該位無(wú)關(guān)SPSR_fiqPCCPSRSPSRMODTFI. . .N Z C VSYS100. . .? ? ? ?R8R12R8_fiqR12_fiqLRLR_sysLR_fiqR0R7SP_sysSP_fiqThumbThumb指令1指令2指令3BX指令BX指令A(yù)RMARMSYS100.?FIQ011. . .? ? ? ?BackAddrJumpAddrJump1 0SYS100.

41、. .? ? ? ?JumpBackAddr-4 Thumb不是一個(gè)完整的體系結(jié)構(gòu),不能指望處理器只執(zhí)行Thumb指令而不支持ARM指令集。 因此,Thumb指令只需要支持通用功能,必要時(shí)可以借助于完善的ARM指令集,比如,所有異常自動(dòng)進(jìn)入ARM狀態(tài)。 在系統(tǒng)模式下運(yùn)行用戶程序,當(dāng)前處理器處于Thumb狀態(tài),執(zhí)行Thumb指令代碼,同時(shí)處理器還允許IRQ和FIQ中斷。 指令1的在執(zhí)行過(guò)程產(chǎn)生了FIQ中斷。 注:完成指令1的執(zhí)行后才響應(yīng)中斷。 FIQ中斷相應(yīng)過(guò)程中,硬件自動(dòng)執(zhí)行如下動(dòng)作:將CPSR寄存器內(nèi)容存入IRQ模式的SPSR寄存器置為F和I(禁止FIQ和IRQ中斷);清零T位(進(jìn)入ARM狀

42、態(tài));設(shè)置MOD位,切換處理器模式至FIQ模式。將PC指向的取指地址存入FIQ模式的LR寄存器,即指令3的地址。將跳轉(zhuǎn)地址存入PC,即FIQ中斷服務(wù)函數(shù)的入口地址,實(shí)現(xiàn)跳轉(zhuǎn)。 FIQ中斷服務(wù)程序在ARM狀態(tài)下執(zhí)行現(xiàn)場(chǎng)保護(hù)等操作。 FIQ中斷服務(wù)程序使用BX指令,將處理器從ARM狀態(tài)切換到Thumb狀態(tài),通過(guò)置位CPSR的T位實(shí)現(xiàn)。 FIQ中斷服務(wù)程序開(kāi)始執(zhí)行Thumb指令。 FIQ中斷服務(wù)程序使用BX指令,將處理器從Thumb狀態(tài)切換到ARM狀態(tài),通過(guò)清除CPSR的T位實(shí)現(xiàn)。 FIQ中斷服務(wù)程序在ARM狀態(tài)下執(zhí)行恢復(fù)中斷現(xiàn)場(chǎng)等操作。 FIQ中斷異常處理結(jié)束后,異常處理程序完成以下動(dòng)作:將SPS

43、R寄存器的值復(fù)制回CPSR寄存器;將LR寄存的值減去一個(gè)常量(FIQ異常為4)后復(fù)制到PC寄存器,跳轉(zhuǎn)到被中斷的用戶程序(指令2的地址)。 未定義的指令異常 未定義指令異常是內(nèi)部異常中斷,當(dāng)ARM處理器遇到一條自己和系統(tǒng)內(nèi)部任何協(xié)處理器都無(wú)法執(zhí)行的指令時(shí),就會(huì)發(fā)生未定義指令異常,從而進(jìn)入中斷處理程序。 同時(shí)軟件可使用這一機(jī)制通過(guò)仿真未定義的協(xié)處理器指令來(lái)擴(kuò)展ARM指令集。 在仿真失敗的指令后,捕獲處理器執(zhí)行下面的指令: MOVS PC,R14_und 中止異常 中止表示當(dāng)前對(duì)存儲(chǔ)器的訪問(wèn)不能被完成,這是由外部ABORT輸入信號(hào)引起的異常中斷。中止類型有2種類型: 預(yù)取指中止:由程序存儲(chǔ)器引起的中止異常; 數(shù)據(jù)中止:由數(shù)據(jù)存儲(chǔ)器引起的中止異常。 預(yù)取指中止 當(dāng)發(fā)

溫馨提示

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