嵌入是系統(tǒng)結(jié)構(gòu) 第2講 ARM技術(shù)與ARM體系結(jié)構(gòu)課件_第1頁
嵌入是系統(tǒng)結(jié)構(gòu) 第2講 ARM技術(shù)與ARM體系結(jié)構(gòu)課件_第2頁
嵌入是系統(tǒng)結(jié)構(gòu) 第2講 ARM技術(shù)與ARM體系結(jié)構(gòu)課件_第3頁
嵌入是系統(tǒng)結(jié)構(gòu) 第2講 ARM技術(shù)與ARM體系結(jié)構(gòu)課件_第4頁
嵌入是系統(tǒng)結(jié)構(gòu) 第2講 ARM技術(shù)與ARM體系結(jié)構(gòu)課件_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、嵌入式系統(tǒng)結(jié)構(gòu)主講教師:邱鐵 E_mail: qiutie Tel: 87571521 參考教材:1.嵌入式系統(tǒng)開發(fā)與應(yīng)用,田澤北京航空航天大學(xué)出版社2.嵌入式系系結(jié)構(gòu)與編程,杜春蕾. 清華大學(xué)出版社第二講 ARM技術(shù)與ARM體系結(jié)構(gòu) 第一片ARM處理器是1983年10月到1985年4月 間在位于英國劍橋的Acorn Computer公司開發(fā) 1990年,ARM公司成立20世紀(jì)90年代, ARM快速進(jìn)入世界市場1995年 StrongARM 問世 XScale是下一代StrongARM芯片的發(fā)展基礎(chǔ) ARM10TDMI是ARM處理器核中的高端產(chǎn)品 ARM11是ARM家族中性能最強(qiáng)的一個系列 一

2、.ARM體系結(jié)構(gòu)的基本版本ARM7TDMI4T1支持Halfword 和signed halfword / byte 和System mode支持Thumb指令集24ARM9TDMIARM720TARM940T改良的ARM/Thumb 交互作用以及CLZ 指令5TESaturated mathsDSP multiply-accumulate instructionsXScaleARM1020EARM9E-SARM966E-S3早期的ARMsARM9EJ-S5TEJARM7EJ-SARM926EJ-SJazelle支持Java字節(jié)碼6ARM11SIMDSISIMDMDSSIMD ARM體系結(jié)構(gòu)的

3、基本版本 版本4與以前版本相比增加了下列指令: 有符號、無符號的半字和有符號字節(jié)的load和store指令。增加了T變種,處理器可以工作于Thumb狀態(tài),在該狀態(tài)下的指令集是16位的Thumb指令集。增加了處理器的特權(quán)模式。在該模式下,使用的是用戶模式下的寄存器。 ARM體系結(jié)構(gòu)的基本版本ARM體系版本6是2001年發(fā)布的。新架構(gòu)v6在降低耗電量的同時還強(qiáng)化了圖形處理性能。通過追加有效進(jìn)行多媒體處理的SIMD功能,將語音及圖像的處理功能提高到了原機(jī)型的4倍。ARM體系版本6首先在2002年春季發(fā)布的ARM11處理器中使用。 ARM體系結(jié)構(gòu)的基本版本核體系結(jié)構(gòu)ARM1V1ARM2V2ARM2aS

4、,ARM3V2aARM6,ARM600,ARM610V3ARM7,ARM700,ARM710V3ARM7TDMI,ARM710T,ARM720T ARM740TV4TStrong ARM,ARM8,ARM810V4ARM9TDMI,ARM920T,ARM940TV4TARM9E-SV5TEARM10TDMI,ARM1020EV5TEARM11,ARM1156T2-S,ARM1156T2F-S,ARM1176JZ-S,ARM11JZF-SV6三.處理器工作模式 ARM 有7個基本工作模式:User:非特權(quán)模式,大部分任務(wù)執(zhí)行在這種模式正常程序執(zhí)行的模式FIQ:當(dāng)一個高優(yōu)先級(fast)中斷產(chǎn)生時

5、將會進(jìn)入這種模式高速數(shù)據(jù)傳輸和通道處理IRQ:當(dāng)一個低優(yōu)先級(normal)中斷產(chǎn)生時將會進(jìn)入這種模式通常的中斷處理Supervisor:當(dāng)復(fù)位或軟中斷指令執(zhí)行時將會進(jìn)入這種模式供操作系統(tǒng)使用的一種保護(hù)模式Abort: 當(dāng)存取異常時將會進(jìn)入這種模式虛擬存儲及存儲保護(hù)Undef: 當(dāng)執(zhí)行未定義指令時會進(jìn)入這種模式軟件仿真硬件協(xié)處理器System: 使用和User模式相同寄存器集的特權(quán)模式特權(quán)級的操作系統(tǒng)任務(wù)r0r1r2r3r4r5r6r7r8r9r10r11r12r13 (sp)r14 (lr)r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)sps

6、rr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrFIQIRQSVCUndefAbortUser Moder0r1r2r3r4r5r6r7r8r9r10r11r12r13 (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)spsrCurrent Visible RegistersBan

7、ked out RegistersFIQIRQSVCUndefAbortr0r1r2r3r4r5r6r7r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrCurrent Visible RegistersBanked out RegistersUserIRQSVCUndefAbortr8r9r10r11r12r13 (sp)r14 (lr)FIQ ModeIRQ Moder0r1r2r3r4r5r

8、6r7r8r9r10r11r12r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrCurrent Visible RegistersBanked out RegistersUserFIQSVCUndefAbortr13 (sp)r14 (lr)Undef Moder0r1r2r3r4r5r6r7r8r9r10r11r12r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp

9、)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsrCurrent Visible RegistersBanked out RegistersUserFIQIRQSVCAbortr13 (sp)r14 (lr)SVC Moder0r1r2r3r4r5r6r7r8r9r10r11r12r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r1

10、0r11r12r13 (sp)r14 (lr)spsrCurrent Visible RegistersBanked out RegistersUserFIQIRQUndefAbortr13 (sp)r14 (lr)Abort Moder0r1r2r3r4r5r6r7r8r9r10r11r12r15 (pc)cpsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr13 (sp)r14 (lr)spsrr8r9r10r11r12r13 (sp)r14 (lr)spsr當(dāng)前可見寄存器備用寄存器UserFIQIRQSVCUnd

11、efr13 (sp)r14 (lr)ARM 寄存器寄存器組織概要Usermoder0-r7,r15,andcpsrr8r9r10r11r12r13 (sp)r14 (lr)spsrFIQr8r9r10r11r12r13 (sp)r14 (lr)r15 (pc)cpsrr0r1r2r3r4r5r6r7Userr13 (sp)r14 (lr)spsrIRQUsermoder0-r12,r15,andcpsrr13 (sp)r14 (lr)spsrUndefUsermoder0-r12,r15,andcpsrr13 (sp)r14 (lr)spsrSVCUsermoder0-r12,r15,andc

12、psrr13 (sp)r14 (lr)spsrAbortUsermoder0-r12,r15,andcpsrThumb stateLow registersThumb stateHigh registersNote: System模式使用user模式寄存器集ARM 寄存器ARM 有37個32-Bits長的寄存器.1 個用作PC( program counter)1個用作CPSR(current program status register)5個用作SPSR(saved program status registers)30 個通用寄存器當(dāng)前處理器的模式?jīng)Q定著哪組寄存器可操作. 任何模式都可以

13、存取: 相應(yīng)的r0-r12子集相應(yīng)的 r13 (the stack pointer, sp) and r14 (the link register, lr)相應(yīng)的 r15 ( the program counter, pc)相應(yīng)的CPSR(current program status register, cpsr)特權(quán)模式 (除system模式) 還可以存?。幌鄳?yīng)的 spsr (saved program status register)程序狀態(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

14、位:僅ARM 5TE/J架構(gòu)支持指示增強(qiáng)型DSP指令是否溢出J 位僅ARM 5TE/J架構(gòu)支持J = 1: 處理器處于Jazelle狀態(tài)中斷禁止位:I = 1: 禁止 IRQ.F = 1: 禁止 FIQ.T Bit僅ARM xT架構(gòu)支持T = 0: 處理器處于 ARM 狀態(tài)T = 1: 處理器處于 Thumb 狀態(tài)Mode位(處理器模式位):0b10000User0b10001FIQ0b10010IRQ0b10011Supervisor0b10111Abort0b11011Undefined0b11111System2731N Z C V Q2867I F T mode1623 815 540

15、24 U n d e f i n e dJ當(dāng)處理器執(zhí)行在ARM狀態(tài):所有指令 32 bits 寬所有指令必須 word 對齊所以 pc值由bits 31:2決定, bits 1:0 未定義 (所以指令不能halfword / byte對齊).當(dāng)處理器執(zhí)行在Thumb狀態(tài):所有指令 16 bits 寬所有指令必須 halfword 對齊所以 pc值由bits 31:1決定, bits 0 未定義 (所以指令不能 byte對齊).當(dāng)處理器執(zhí)行在Jazelle狀態(tài):所有指令 8 bits 寬處理器執(zhí)行 word 存取一次取4條指令程序指針PC (r15)The ARM 可以用 little/big

16、endian 格式存取數(shù)據(jù). r0 = 0 x11223344STR r0, r1LDRB r2, r1r1 = 0 x100Memory3 2 1 0 0 1 2 3Byte Lane312423161587011223344312423161587011223344312423161587011223344312423161587000000044312423161587000000011Little endianBig endianR2 = 0 x44R2 = 0 x11For more information, see: “Application Note : Big and Litt

17、le Endian Byte Addressing”字節(jié)順序四. ARM7TDMIARM7TDMI 是基于 ARM7 內(nèi)核3 級流水線0.9MIPS/MHz馮.諾依曼架構(gòu)CPI(Cycle Per Instruction) 約為1.9 T - Thumb 架構(gòu)擴(kuò)展, 提供兩個獨立的指令集:ARM 指令,均為 32位Thumb指令,均為 16位兩種運行狀態(tài),用來選擇哪個指令集被執(zhí)行D - 內(nèi)核具有Debug擴(kuò)展結(jié)構(gòu)M - 增強(qiáng)乘法器 支持64位結(jié)果.I - EmbeddedICE-RT邏輯提供片上斷點和調(diào)試點支持ARM7TDMI 方框圖ARM7TDMI內(nèi)核TAP 控制器JTAG 接口數(shù)據(jù)總線控制

18、信號D31:0地址總線A31:0DIN31:0DOUT31:0BUSSplitterEmbeddedICE邏輯乘法器ARM7TDMI 內(nèi)核指令解碼地址自增器nRESETnMREQSEQABORTnIRQnFIQnRWMAS1:0LOCKnCPICPACPBnWAITMCLKnOPCBIGENDISYNCnTRANSnM4:0D31:0桶形移位器32 位 ALUDBE寫數(shù)據(jù) 寄存器讀數(shù)據(jù) 寄存器地址寄存器寄存器A31:0ABE及控制 邏輯PC Update解碼站指令 解碼IncrementerPCABusBBusALUBus外部地址產(chǎn)生PC31:2 ARM StatePC31:1 Thumb S

19、tateALU31:0INC自增器A31:0向量0 x1C0 x00地址寄存器指令流水線為增加處理器指令流的速度,ARM7 系列使用3級流水線.允許多個操作同時處理,比逐條指令執(zhí)行要快。 PC指向正被取指的指令,而非正在執(zhí)行的指令FetchDecodeExecute從存儲器中讀取指令解碼指令寄存器讀(從寄存器Bank)移位及ALU操作寄存器寫(到寄存器Bank )PCPCPC - 4PC-2PC - 8PC - 4ARMThumb 最佳流水線該例中用6個機(jī)器周期執(zhí)行了6條指令所有的操作都在寄存器中(單周期執(zhí)行)指令周期數(shù) (CPI) = 1機(jī)器周期 操作周期 1 2 3 45 6 ADD SU

20、B MOV AND ORR EOR CMP RSBFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDecodeExecuteFetchDecodeFetchFetch LDR 流水線舉例該例中,用6機(jī)器周期執(zhí)行了4條指令指令周期數(shù) (CPI) = 1.5 機(jī)器周期周期 操作123456 ADD SUB LDR MOV AND ORRFetchDecodeExecuteFetchDecodeExecuteFetchDecodeExecuteDataWriteback

21、FetchDecodeExecuteFetchDecodeFetch中斷流水線舉例周期 1 2 3 4 5 6 7 8IRQ IRQ 中斷的反應(yīng)時間最小=7機(jī)器周期地址 操作FDELinkretAdjustFFDecode IRQLinkretExecute IRQAdjustFDEFDFFDEFDFF0 x8000 ADD0 x8008 MOV0 x0018 B (to 0 xAF00)0 x8004 SUB0 x001C XX0 x0020 XXX0 xAF00 STMFD 0 xAF04 MOV0 xAF08 LDR0 x800C XD對齊存儲器訪問必須始終適當(dāng)?shù)乇3值刂穼R非對齊地址將

22、產(chǎn)生不可預(yù)測的/未定義的結(jié)果用Data Abort 異常來檢測無效的非對齊數(shù)據(jù)存取擴(kuò)展邏輯要求,或使用MMU在 720T, 920T, 926E-S, 1020E謹(jǐn)防指令讀取時出現(xiàn)非對齊非對齊數(shù)據(jù)存取能夠完成, 但不是用 LDR使用 LDRB, STRB 傳遞字節(jié),或使用LDM 加移位/屏蔽字節(jié)訪問(字節(jié)對齊)半字訪問(半字對齊)字訪問(字對齊)3210765402468ace089abcdef48c帶Cache的ARM7TDMI ARM710T8K 統(tǒng)一的 cache 完整的內(nèi)存管理單元(mmu),支持虛擬地址和存儲器保護(hù)寫緩沖ARM720T同ARM710T,但支持 WinCEARM740T

23、8K 統(tǒng)一的 cache內(nèi)存管理單元寫緩沖ARM7TDMI內(nèi)核地址地址數(shù)據(jù)讀AMBA接口寫緩沖MMU數(shù)據(jù)寫數(shù)據(jù)ARM7xxT控制邏輯CacheAMBA總線接口JTAG 和非 AMBA 信號CP15五.ARM9TDMIHarvard架構(gòu)增加了可用的存儲器寬度指令存儲器接口數(shù)據(jù)存儲器接口可以實現(xiàn)對指令和數(shù)據(jù)存儲器的同時訪問5 級流水線實現(xiàn)了以下改進(jìn):提高了最大時鐘頻率ARM9TDMI流水線的變化InstructionFetch Shift + ALUMemoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIAR

24、M or ThumbInst DecodeReg SelectRegReadShiftALURegWriteThumbARMdecompressARM decodeInstructionFetchFETCHDECODEEXECUTEARM7TDMIARM9TDMI數(shù)據(jù)通道 (1)寄存器BankALUCBADINFWD結(jié)果DADD數(shù)據(jù)遞增向量指令遞增IA字節(jié)旋轉(zhuǎn)/符號擴(kuò)展.MU 邏輯雙向緩沖器字節(jié)/半字復(fù)制MU邏輯單元包含有:多路復(fù)用器,乘法器和桶形移位器數(shù)據(jù)總線地址總線字節(jié)/半字指令地址總線ARM9TDMI 數(shù)據(jù)通道 (2)寄存器BankPSR乘法器移位器ALUBAImmDINFWDBDATA

25、ADATA鎖存鎖存MU 邏輯(至 IA 生成邏輯)結(jié)果周期操作ADD R1, R1, R2SUB R3, R4, R1ORR R8, R3, R4AND R6, R3, R1EOR R3, R1, R212345678LDRR4, R79FDEFDEWFDEWFDEWFDWEFDEWF 取指(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)致

26、互鎖 。WIM周期操作ADD R1, R1, R2SUB R3, R4, R1ORR R8, R3, R4AND R6, R3, R1EOR R3, R1, R2LDRR4, R7最佳流水線本例中,用了6個機(jī)器周期執(zhí)行6條指令, CPI = 1機(jī)器周期。LDR指令沒有引起流水線互鎖123456789FDEWFDEWFEWFDEWFDWEFDEWF 取指(Fetch)D 解碼(Decode)E 執(zhí)行(Execute)I 互鎖(Interlock)M 存儲器(Memory )W 寫回( Writeback)MDLDM互鎖 (1)本例中,用了8個機(jī)器周期執(zhí)行5條指令, CPI = 1.6在LDM期間

27、,有并行的存儲器訪問和回寫周期周期操作LDMIA R13!, R0-R3SUB R9, R7, R8ORR R8, R4, R3AND R6, R3, R112345678STRR4, R99F 取指(Fetch)D 解碼(Decode)E 執(zhí)行(Execute)MW-存儲器和回寫同時執(zhí)行I 互鎖(Interlock)M 存儲器(Memory )W 寫回( Writeback)FDEWFDEWDEFDEWFMDWEIIIIIIMFMWMWMWLDM 互鎖 (2)本例中,用了9個機(jī)器周期執(zhí)行5條指令, CPI = 1.8 此處SUB 使用了 R3,增加了一個額外的互鎖周期來完成該寄存器數(shù)據(jù)的獲取

28、 這種情況對任何LDM 指令,像帶IA, DB, FD,等,都會發(fā)生 。周期操作LDMIA R13!, R0-R3SUB R9, R7, R3ORR R8, R4, R3AND R6, R3, R112345678STRR4, R99F 取指(Fetch)D 解碼(Decode)E 執(zhí)行(Execute)I 互鎖(Interlock)M 存儲器(Memory )W 寫回( Writeback)FDEWFDEWDEFDEWFMDWEMWMWMWIIIIIIMIIFARM9TDMI系統(tǒng)舉例ARM9TDMI數(shù)據(jù)存儲器指令存儲器CTRLDA.DD.CTRLIA.ID.GLUEGLUE注意:數(shù)據(jù)接口必須

29、能夠讀取指令存儲器中的數(shù)據(jù)。為調(diào)試方便,建議數(shù)據(jù)接口能夠讀寫指令存儲器。帶Cache的ARM9TDMIARM9TDMID CacheI CacheMMUGLUE外部存儲器ARM920T2x 16K caches MMU支持虛擬地址和內(nèi)存保護(hù) 寫緩沖ARM940T2x 4K caches MPU寫緩沖ARM9xxTARM10E 系列概述ARM1020Ev5TE架構(gòu)CPI 1.36 級流水線靜態(tài)分支預(yù)測32kB 指令cache和32kB數(shù)據(jù)cache支持“Hit under miss” 非阻塞的執(zhí)行單元每周期64 位的 LDM / STM操作EmbeddedICE邏輯 - RT-II支持新的 VF

30、Pv1 結(jié)構(gòu)ARM1022E同上,除了cache大小為16kB對SUDL(single user design license )有效ARM10 與ARM9的流水線對比指令取指 移位+ ALU寄存器寫寄存器讀寄存器譯碼FETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARM 或 Thumb指令解碼ARM10指令地址 生成移位+ ALU數(shù)據(jù) Cache 接口寄存器寫FETCHDECODEEXECUTEMEMORYWRITE寄存器讀+ 結(jié)果 前向遷移 + 記分板乘法乘 加協(xié)處理器 數(shù)據(jù)接口分支預(yù)測指令取指ISSUE寄存器訪問數(shù)據(jù)+ 分支地址生成ARM 或 Thumb指令解碼

31、協(xié)處理器 指令發(fā)出ARM10 整數(shù)單元數(shù)據(jù)通道寄存器BankPSR乘法器移位器ALUBAImmBA結(jié)果CLZ寫端口PC數(shù)據(jù)裝載周期OperationLDR A B CADD A B1234567MUL AF - Fetch I - Issue D - Decode E - Execute M Memory Wb - Writeback Wl - Write to register using load port 順序代碼的執(zhí)行 開始于64位的對齊地址Address0 x073340 x0732C0 x07330SUB B C0 x07328ADDA C0 x07324ADDB0 x07320F

32、etch to Buffer89MWlDWbDDWbDWbFDWbDEEEEEEFFFFFIIIIII六 . 異常處理中斷處理軟中斷(SWI)處理其它異常處理Vector TableVector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devicesFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset0 x1C0 x180 x140 x100 x0C0 x080 x040 x00異常處理當(dāng)異常產(chǎn)生時

33、, ARM core:拷貝 CPSR 到 SPSR_設(shè)置適當(dāng)?shù)?CPSR 位: 改變處理器狀態(tài)進(jìn)入 ARM 狀態(tài)改變處理器模式進(jìn)入相應(yīng)的異常模式設(shè)置中斷禁止位禁止相應(yīng)中斷 (如果需要)保存返回地址到 LR_設(shè)置 PC 位相應(yīng)的異常向量返回時, 異常處理需要:從 SPSR_恢復(fù)CPSR從LR_恢復(fù)PC Note:這些操作只能在 ARM 態(tài)執(zhí)行.異常優(yōu)先級異常在當(dāng)前指令執(zhí)行完成之后才被響應(yīng)多個異常可以在同一時間產(chǎn)生 異常指定了優(yōu)先級和固定的服務(wù)順序:ResetData AbortFIQIRQPrefetch AbortSWIUndefined instruction向量表指令 32 Mbytes

34、4 KbytesLiteral pool containing address of Undef HandlerIRQ handler within 32MBytes Branch instruction rangeSWI Exception handler placed on applicable address boundaryFIQ handler follows vector table Undef handler outside 32MBytes branch instruction range0 x00 x10000 x20000000 xFFC0 x80 x180 x300000

35、000 xFFFFFFFF0 x1C0 x4MOV PC, #0 x30000000B IRQ_handler0 x30008000IRQ HandlerSWI HandlerFIQ HandlerLDR PC, PC, #+0 xFF0Undef Handler0 x30008000ARM or Thumb?Thumb / ARM 混合應(yīng)用程序ARM CodeARM CodeThumbCodeFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefined InstructionReset異常處理中的寄存器使用與異常發(fā)生相

36、關(guān)的模式改變意味著所調(diào)用的異常處理程序至少要訪問:私有的 SP_ (stack pointer ).私有的 LR_ (link register).私有的 SPSR_ (saved program status register ).在 FIQ異常處理中, 另有5個私有的通用寄存器 (r8_fiq to r12_fiq).其它的寄存器是所有模式公用的.異常處理程序必須確保其他的寄存器在退出前恢復(fù)到原來的狀態(tài)這可以通過將任何正在使用的寄存器的內(nèi)容保存在堆棧中,并在返回前恢復(fù)來實現(xiàn)任何所需寄存器的初始化要有應(yīng)用程序的起始代碼來完成外中斷處理ARM 有兩級外部中斷 FIQ,IRQ.可是大多數(shù)的基于A

37、RM 的系統(tǒng)有 2個的中斷源!因此需要一個中斷控制器(通常是地址映射的)來控制中斷是怎樣傳遞給ARM的。在許多系統(tǒng)中,一些中斷的優(yōu)先級比其它中斷的優(yōu)先級高,他們要搶先任何正在處理的低優(yōu)先級中斷。Note: 通常中斷處理程序總是應(yīng)該包含清除中斷源的代碼。地址映射中斷控制器nIRQnFIQARMMultiplePeripheralinterruptsourcesARM讀控制器寄存器并找到IRQ/FIQ中斷源ARM寫外設(shè)寄存器清相應(yīng)中斷源FIQ vs IRQFIQ 和 IRQ 提供了非?;镜膬?yōu)先級級別。在下邊兩種情況下,F(xiàn)IQs有高于IRQs的優(yōu)先級:當(dāng)多個中斷產(chǎn)生時,F(xiàn)IQ高于IRQ.處理 FI

38、Q時禁止 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)生,B

39、L調(diào)用的返回地址 (LR_irq) 可能被沖掉,子程序?qū)㈠e誤的返回 導(dǎo)致無限循環(huán)!解決方法是在使用“BL”之前改變模式來避免 LR_irq 被沖掉通常使用“System”模式 ( 這時 BL 使用 LR_usr)在處理程序結(jié)束,必須:切換回 IRQ 模式 禁止中斷 (來避免在恢復(fù)SPSR_irq 到一個臨時的寄存器中后它被沖掉). C 可重入中斷示例IRQHandler SUBlr, lr, #4 STMFDsp!, lr MRSr14, SPSR STMFDsp!, r12, r14 MOVr12, #IntBase LDRr12, r12, #IntSource MRSr14, CPSR

40、BICr14, r14, #0 x9F ORRr14, r14, #0 x1F MSRCPSR_c, r14 STMFDsp!, r0-r3, lr MOVr0,r12 BLC_irq_handler LDMFDsp!, r0-r3, lr MRSr12, CPSR BICr12, r12, 0 x1F ORRr12, r12, 0 x92 MSRCPSR_c, r12 LDMFDsp!, r12, r14 MSRSPSR_csxf, r14 LDMFDsp!, PC切換到 IRQ 模式同時禁止 IRQ.LR_irq , SPSR_irq 和工作寄存器 (r12) 壓棧保護(hù)來避免下一次中斷發(fā)生

41、使它們被沖掉保存R0-3, LR_user 到 user 棧中, 然后調(diào)用 C 子程序,中斷源(R0)作為一個參數(shù)傳入 C 處理函數(shù)?;謴?fù)LR_irq , SPSR_irq 和工作寄存器 (r12) ,然后退出中斷處理使用修正后的LR讀 / 清中斷控制器中斷源切換到 System 模式同時使能 IRQ軟中斷SWI 0 x01向量表用戶程序(C/ASM)SWI 處理程序 (ASM)(可選)SWI 處理程序(C)用戶程序調(diào)用 SWISWI 中斷處理程序包含匯編部分和可選用的 C 部分SWI 調(diào)用匯編中, SWI 調(diào)用使用“SWI 中斷號”實現(xiàn):SWI 0 x24小心在匯編中如果SWI 調(diào)用時處于S

42、upervisor模式將會沖掉LR_svc.例如:在SWI處理程序中的二級調(diào)用解決方法: 在SWI調(diào)用之前對LR_svc 壓棧保護(hù)C 中, 使用關(guān)鍵詞 “_swi” 來定義一個軟中斷函數(shù).For Examplecompiles to:_swi(0 x24) void my_swi (void); void foo (void) my_swi();foo STMFD sp!,lr SWI 0 x24 LDMFD sp!,pcARM 內(nèi)核不提供直接傳遞軟中斷(SWI)號到處理程序的機(jī)制:SWI 處理程序必須定位SWI 指令,并提取SWI指令中的常數(shù)域為此, SWI 處理程序必須確定SWI 調(diào)用是在

43、哪一種狀態(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 Cond 1 1 1 1SWI number2315 8 7 01 1 0 1 1 1 1 1SWI number存取 SWI 參數(shù)匯編中,存取調(diào)用者設(shè)置的寄存器即可.在返回之前,修改寄存器的值,傳回參數(shù)給調(diào)用者.傳參數(shù)給C, 通常采用壓棧的方法.將參數(shù)壓棧給調(diào)用的函數(shù)傳遞一個指向這些參數(shù)的指針也可以通過將參數(shù)值寫回到適當(dāng)?shù)亩褩N恢?,將參?shù)傳回復(fù)位

44、(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 不是在超級用戶模式(privileged mode)例如:操作協(xié)處理器15(cp15) - ARM cache 控制器解決方法:在處理程序中執(zhí)行軟協(xié)處

45、理器仿真禁止在非超級用戶模式下操作報告錯誤并退出預(yù)取異常不論異常是發(fā)生在 ARM 還是Thumb 狀態(tài)下,導(dǎo)致預(yù)取異常的指令地址在 lr-4 處.處理方法取決于存儲器管理策略有存儲器管理的系統(tǒng) (e.g. demand paged virtual memory)修正問題 (e.g. enable correct memory page)返回并重新執(zhí)行預(yù)取異常的指令( SUBS pc,lr,#4 )沒有存儲器管理的系統(tǒng)通常表示一個致命的錯誤報告錯誤 (如果可能) 然后退出數(shù)據(jù)異常導(dǎo)致異常的指令的地址在 lr-8 處.處理方法取決于存儲器管理策略有存儲器管理的系統(tǒng)( demandd virtual

46、 memory)如果使用了 MMU ,數(shù)據(jù)異常的地址在 MMU 的 “Fault Address” 寄存器中修正問題(enable correct page of memory)返回并重新執(zhí)行數(shù)據(jù)異常的指令SUBS pc,lr,#8沒有存儲器管理的系統(tǒng)通常表示一個致命的錯誤報告錯誤 (如果可能) 然后退出The Abort Model許多ARM 存儲器存取指令將更新基址寄存器 :LDRr0,r1,#8!;“!” 將更新 R1如果異常是數(shù)據(jù)異常, 對基址寄存器的影響取決于使用的是哪種 ARM core.“Base Restored Abort Model”StrongARM, ARM9 and

47、ARM10 系列支持基址寄存器由ARM core 自動恢復(fù).“Base Updated Abort Model”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)核在計算

48、LR 時的 PC 值并沒有被更新. ARM Thumb SWIpc-8 pc-4;Exception taken here xxx pc-4 pc-2;lr = next instruction yyy pc pc因此返回指令為:MOVS pc,lrNote : 表示異常返回后將執(zhí)行的那條指令從FIQs和IRQst和預(yù)取異常返回異常在當(dāng)前指令執(zhí)行完成后才被響應(yīng).因此內(nèi)核在計算 LR 時的 PC 值已被更新. ARM Thumb wwwpc - 12 pc - 6 Interrupt occurred during execution xxx pc - 8 pc - 4 yyy pc - 4 pc - 2 ARM lr = next instruction zzz pc pc Thumb lr = two instructions ahead因此返回指令為:SUBS pc,lr,#4Note : 表示異常返回后將執(zhí)行的那條指令從預(yù)取異常返回當(dāng)指令到達(dá)執(zhí)行階段時異常才產(chǎn)生,因此內(nèi)核在計算 LR 時的 PC 值已被更新.需要重新執(zhí)行導(dǎo)致異常的指令 ARM Thumb w

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論