嵌入是系统结构 第2讲 ARM技术与ARM体系结构.ppt

上传人:小飞机 文档编号:6415049 上传时间:2023-10-28 格式:PPT 页数:75 大小:761.50KB
返回 下载 相关 举报
嵌入是系统结构 第2讲 ARM技术与ARM体系结构.ppt_第1页
第1页 / 共75页
嵌入是系统结构 第2讲 ARM技术与ARM体系结构.ppt_第2页
第2页 / 共75页
嵌入是系统结构 第2讲 ARM技术与ARM体系结构.ppt_第3页
第3页 / 共75页
嵌入是系统结构 第2讲 ARM技术与ARM体系结构.ppt_第4页
第4页 / 共75页
嵌入是系统结构 第2讲 ARM技术与ARM体系结构.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《嵌入是系统结构 第2讲 ARM技术与ARM体系结构.ppt》由会员分享,可在线阅读,更多相关《嵌入是系统结构 第2讲 ARM技术与ARM体系结构.ppt(75页珍藏版)》请在三一办公上搜索。

1、嵌入式系统结构,主讲教师:邱铁 E_mail:Tel:87571521 参考教材:1.嵌入式系统开发与应用,田泽北京航空航天大学出版社2.嵌入式系系结构与编程,杜春蕾.清华大学出版社,第二讲 ARM技术与ARM体系结构,第一片ARM处理器是1983年10月到1985年4月 间在位于英国剑桥的Acorn Computer公司开发 1990年,ARM公司成立20世纪90年代,ARM快速进入世界市场1995年 StrongARM 问世 XScale是下一代StrongARM芯片的发展基础 ARM10TDMI是ARM处理器核中的高端产品 ARM11是ARM家族中性能最强的一个系列,一.ARM体系结构的

2、基本版本,ARM7TDMI,4T,1,支持Halfword 和signed halfword/byte 和System mode,支持Thumb指令集,2,4,ARM9TDMI,ARM720T,ARM940T,改良的ARM/Thumb 交互作用以及CLZ 指令,5TE,Saturated mathsDSP multiply-accumulate instructions,XScale,ARM1020E,ARM9E-S,ARM966E-S,3,早期的ARMs,ARM9EJ-S,5TEJ,ARM7EJ-S,ARM926EJ-S,Jazelle支持Java字节码,6,ARM11,SIMD,SISIM

3、DMD,S,SIMD,ARM体系结构的基本版本,版本4与以前版本相比增加了下列指令:有符号、无符号的半字和有符号字节的load和store指令。增加了T变种,处理器可以工作于Thumb状态,在该状态下的指令集是16位的Thumb指令集。增加了处理器的特权模式。在该模式下,使用的是用户模式下的寄存器。,ARM体系结构的基本版本,版本5主要由两个变型版本5T、5TE组成 相比与版本4,版本5的指令集有了如下的变化:提高了T变种中ARM/Thumb混合使用的效率。增加前导零记数(CLZ)指令,该指令可使整数除法和中断优先级排队操作更为有效;增加了BKPT(软件断点)指令;为协处理器设计提供了更多的可

4、供选择的指令;更加严格地定义了乘法指令对条件码标志位的影响。,ARM体系结构的基本版本,ARM体系版本6是2001年发布的。新架构v6在降低耗电量的同时还强化了图形处理性能。通过追加有效进行多媒体处理的SIMD功能,将语音及图像的处理功能提高到了原机型的4倍。ARM体系版本6首先在2002年春季发布的ARM11处理器中使用。,ARM体系结构的基本版本,二.Thumb技术,为解决代码长度的问题,ARM体系结构增加了变种,这就是Thumb指令集,它是ARM技术的一大特色。Thumb是ARM体系结构的扩展。它有从标准32位ARM指令集抽出来的36条指令格式,可以重新编成16位的操作码。这能带来很高的

5、代码密度。ARM7TDMI是第一个支持Thumb的核。,三.处理器工作模式,ARM 有7个基本工作模式:User:非特权模式,大部分任务执行在这种模式正常程序执行的模式FIQ:当一个高优先级(fast)中断产生时将会进入这种模式高速数据传输和通道处理IRQ:当一个低优先级(normal)中断产生时将会进入这种模式通常的中断处理Supervisor:当复位或软中断指令执行时将会进入这种模式供操作系统使用的一种保护模式Abort:当存取异常时将会进入这种模式虚拟存储及存储保护Undef:当执行未定义指令时会进入这种模式软件仿真硬件协处理器System:使用和User模式相同寄存器集的特权模式特权级

6、的操作系统任务,ARM 寄存器,寄存器组织概要,Usermoder0-r7,r15,andcpsr,r8,r9,r10,r11,r12,r13(sp),r14(lr),spsr,FIQ,User,r13(sp),r14(lr),spsr,IRQ,Usermoder0-r12,r15,andcpsr,r13(sp),r14(lr),spsr,Undef,Usermoder0-r12,r15,andcpsr,r13(sp),r14(lr),spsr,SVC,Usermoder0-r12,r15,andcpsr,r13(sp),r14(lr),spsr,Abort,Usermoder0-r12,r1

7、5,andcpsr,Thumb stateLow registers,Thumb stateHigh registers,Note:System模式使用user模式寄存器集,ARM 寄存器,ARM 有37个32-Bits长的寄存器.1 个用作PC(program counter)1个用作CPSR(current program status register)5个用作SPSR(saved program status registers)30 个通用寄存器当前处理器的模式决定着哪组寄存器可操作.任何模式都可以存取:相应的r0-r12子集相应的 r13(the stack pointer,sp)

8、and r14(the link register,lr)相应的 r15(the program counter,pc)相应的CPSR(current program status register,cpsr)特权模式(除system模式)还可以存取;相应的 spsr(saved program status register),程序状态寄存器,条件位:N=1-结果为负,0-结果为正或0Z=1-结果为0,0-结果不为0C=1-进位,0-借位V=1-结果溢出,0结果没溢出Q 位:仅ARM 5TE/J架构支持指示增强型DSP指令是否溢出J 位仅ARM 5TE/J架构支持J=1:处理器处于Jazel

9、le状态,中断禁止位:I=1:禁止 IRQ.F=1:禁止 FIQ.T Bit仅ARM xT架构支持T=0:处理器处于 ARM 状态T=1:处理器处于 Thumb 状态Mode位(处理器模式位):0b10000User0b10001FIQ0b10010IRQ0b10011Supervisor0b10111Abort0b11011Undefined0b11111System,当处理器执行在ARM状态:所有指令 32 bits 宽所有指令必须 word 对齐所以 pc值由bits 31:2决定,bits 1:0 未定义(所以指令不能halfword/byte对齐).当处理器执行在Thumb状态:所有

10、指令 16 bits 宽所有指令必须 halfword 对齐所以 pc值由bits 31:1决定,bits 0 未定义(所以指令不能 byte对齐).当处理器执行在Jazelle状态:所有指令 8 bits 宽处理器执行 word 存取一次取4条指令,程序指针PC(r15),Vector Table,异常处理,当异常产生时,ARM core:拷贝 CPSR 到 SPSR_设置适当的 CPSR 位:改变处理器状态进入 ARM 态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如果需要)保存返回地址到 LR_设置 PC 为相应的异常向量返回时,异常处理需要:从 SPSR_恢复CPSR从

11、LR_恢复PC Note:这些操作只能在 ARM 态执行.,Vector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devices,FIQ,IRQ,(Reserved),Data Abort,Prefetch Abort,Software Interrupt,Undefined Instruction,Reset,The ARM 可以用 little/big endian 格式存取数据.,r0=0 x11223344,STR r0,r1,LDRB r2,r1,r1=0 x100,Memory,3 2 1 0,0 1

12、 2 3,Byte Lane,31,24,23,16,15,8,7,0,11,22,33,44,31,24,23,16,15,8,7,0,11,22,33,44,31,24,23,16,15,8,7,0,11,22,33,44,31,24,23,16,15,8,7,0,00,00,00,44,31,24,23,16,15,8,7,0,00,00,00,11,Little endian,Big endian,R2=0 x44,R2=0 x11,For more information,see:“Application Note:Big and Little Endian Byte Address

13、ing”,字节顺序,四.ARM7TDMI,ARM7TDMI 是基于 ARM7 内核3 级流水线-0.9MIPS/MHz冯.诺依曼架构CPI(Cycle Per Instruction)约为1.9 T-Thumb 架构扩展,提供两个独立的指令集:ARM 指令,均为 32位Thumb指令,均为 16位两种运行状态,用来选择哪个指令集被执行D-内核具有Debug扩展结构M-增强乘法器 支持64位结果.I-EmbeddedICE-RT逻辑-提供片上断点和调试点支持,ARM7TDMI 内核信号,ARM7TDMI 方框图,ARM7TDMI内核,TAP 控制器,JTAG 接口,数据总线,控制信号,D31:0

14、,地址总线,A31:0,DIN31:0,DOUT31:0,BUSSplitter,EmbeddedICE逻辑,乘法器,ARM7TDMI 内核,指令解码,地址自增器,nRESET,nMREQ,SEQ,ABORT,nIRQ,nFIQ,nRW,MAS1:0,LOCK,nCPI,CPA,CPB,nWAIT,MCLK,nOPC,BIGEND,ISYNC,nTRANS,nM4:0,D31:0,桶形移位器,32 位 ALU,DBE,写数据 寄存器,读数据 寄存器,地址寄存器,寄存器,A31:0,ABE,及,控制 逻辑,PC Update,解码站,指令 解码,Incrementer,PC,ABus,BBus,

15、ALUBus,外部地址产生,PC31:2 ARM StatePC31:1 Thumb State,ALU31:0,INC,自增器,A31:0,向量,0 x1C,0 x00,地址寄存器,指令流水线,为增加处理器指令流的速度,ARM7 系列使用3级流水线.允许多个操作同时处理,比逐条指令执行要快。PC指向正被取指的指令,而非正在执行的指令,Fetch,Decode,Execute,从存储器中读取指令,解码指令,寄存器读(从寄存器Bank)移位及ALU操作寄存器写(到寄存器Bank),PCPC,PC-4PC-2,PC-8PC-4,ARMThumb,最佳流水线,该例中用6个机器周期执行了6条指令所有的

16、操作都在寄存器中(单周期执行)指令周期数(CPI)=1机器周期,操作,周期,1 2 3 45 6,Fetch,Decode,Execute,Fetch,Decode,Execute,Fetch,Decode,Execute,Fetch,Decode,Execute,Fetch,Decode,Execute,Decode,Execute,Fetch,Decode,Fetch,Fetch,LDR 流水线举例,该例中,用6机器周期执行了4条指令指令周期数(CPI)=1.5 机器周期,周期,操作,123456,Fetch,Decode,Execute,Fetch,Decode,Execute,Fetc

17、h,Decode,Execute,Data,Writeback,Fetch,Decode,Execute,Fetch,Decode,Fetch,分支流水线举例,流水线被阻断注意:内核运行在ARM状态,周期,1 2 3 4 5,地址 操作,Fetch,Decode,Execute,Fetch,Decode,Execute,Fetch,Decode,Fetch,Fetch,Decode,Execute,Linkret,Adjust,Fetch,Decode,Fetch,中断流水线举例,周期,1 2 3 4 5 6 7 8,IRQ,IRQ 中断的反应时间最小=7机器周期,地址 操作,F,D,E,Li

18、nkret,Adjust,F,F,Decode IRQ,Linkret,Execute IRQ,Adjust,F,D,E,F,D,F,F,D,E,F,D,F,F,D,对齐,存储器访问必须始终适当地保持地址对齐非对齐地址将产生不可预测的/未定义的结果用Data Abort 异常来检测无效的非对齐数据存取扩展逻辑要求,或使用MMU在 720T,920T,926E-S,1020E谨防指令读取时出现非对齐非对齐数据存取能够完成,但不是用 LDR使用 LDRB,STRB 传递字节,或使用LDM 加移位/屏蔽,T标志位的作用,16,16,32-bit data,16,A1,Mux,Thumb指令解码,Mu

19、x,Mux,T标志,ARM指令解码,阶段 1,阶段 2,D31:0,0,1,1,0,Fetch,Decode,Execute,带Cache的ARM7TDMI,ARM710T8K 统一的 cache 完整的内存管理单元(mmu),支持虚拟地址和存储器保护写缓冲,ARM720T同ARM710T,但支持 WinCEARM740T8K 统一的 cache内存管理单元写缓冲,ARM7TDMI内核,地址,地址,数据读,AMBA接口,写缓冲,MMU,数据写,数据,ARM7xxT,控制逻辑,Cache,AMBA总线接口,JTAG 和非 AMBA 信号,CP15,五.ARM9TDMI,Harvard架构增加了可

20、用的存储器宽度指令存储器接口数据存储器接口可以实现对指令和数据存储器的同时访问5 级流水线实现了以下改进:提高了最大时钟频率,ARM9TDMI流水线的变化,InstructionFetch,Shift+ALU,MemoryAccess,RegWrite,RegRead,RegDecode,FETCH,DECODE,EXECUTE,MEMORY,WRITE,ARM9TDMI,ARM or ThumbInst Decode,Reg Select,RegRead,Shift,ALU,RegWrite,ThumbARMdecompress,ARM decode,InstructionFetch,FET

21、CH,DECODE,EXECUTE,ARM7TDMI,ARM9TDMI数据通道(1),寄存器Bank,ALU,C,B,A,DINFWD,结果,DA,DD,数据递增,向量,指令递增,IA,字节旋转/符号扩展.,MU 逻辑,双向缓冲器,字节/半字复制,MU逻辑单元包含有:多路复用器,乘法器和桶形移位器,数据总线,地址总线,字节/半字,指令地址总线,ARM9TDMI 数据通道(2),寄存器Bank,PSR,乘法器,移位器,ALU,B,A,Imm,DINFWD,BDATA,ADATA,锁存,锁存,MU 逻辑,(至 IA 生成逻辑),结果,周期,操作,ADD R1,R1,R2,SUB R3,R4,R1,

22、ORR R8,R3,R4,AND R6,R3,R1,EOR R3,R1,R2,1,2,3,4,5,6,7,8,LDRR4,R7,9,F,D,E,F,D,E,W,F,D,E,W,F,D,E,W,F,D,W,E,F,D,E,W,F 取指(Fetch)D 解码(Decode)E 执行(Execute)I 互锁(Interlock)M 存储器(Memory)W 写回(Writeback),I,LDR互锁,本例中,用了7个机器周期执行6条指令,CPI=1.2 机器周期。LDR指令之后立即跟一条数据操作指令,由于使用了相同的寄存器,将会导致互锁。,W,I,M,周期,操作,ADD R1,R1,R2,SUB

23、R3,R4,R1,ORR R8,R3,R4,AND R6,R3,R1,EOR R3,R1,R2,LDRR4,R7,最佳流水线,本例中,用了6个机器周期执行6条指令,CPI=1机器周期。LDR指令没有引起流水线互锁,LDM互锁(1),本例中,用了8个机器周期执行5条指令,CPI=1.6在LDM期间,有并行的存储器访问和回写周期,周期,操作,LDMIA R13!,R0-R3,SUB R9,R7,R8,ORR R8,R4,R3,AND R6,R3,R1,1,2,3,4,5,6,7,8,STRR4,R9,9,F 取指(Fetch)D 解码(Decode)E 执行(Execute)MW-存储器和回写同时

24、执行I 互锁(Interlock)M 存储器(Memory)W 写回(Writeback),F,D,E,W,F,D,E,W,D,E,F,D,E,W,F,M,D,W,E,I,I,I,I,I,I,M,F,LDM 互锁(2),本例中,用了9个机器周期执行5条指令,CPI=1.8 此处SUB 使用了 R3,增加了一个额外的互锁周期来完成该寄存器数据的获取 这种情况对任何LDM 指令,像带IA,DB,FD,等,都会发生。,ARM9TDMI系统举例,注意:数据接口必须能够读取指令存储器中的数据。为调试方便,建议数据接口能够读写指令存储器。,带Cache的ARM9TDMI,ARM9TDMI,D Cache,

25、I Cache,MMU,GLUE,外部存储器,ARM920T2x 16K caches MMU支持虚拟地址和内存保护 写缓冲,ARM940T2x 4K caches MPU写缓冲,ARM9xxT,ARM10E 系列概述,ARM1020Ev5TE架构CPI 1.36 级流水线静态分支预测32kB 指令cache和32kB数据cache支持“Hit under miss”非阻塞的执行单元每周期64 位的 LDM/STM操作EmbeddedICE逻辑-RT-II支持新的 VFPv1 结构ARM1022E同上,除了cache大小为16kB对SUDL(single user design license

26、)有效,ARM10 与ARM9的流水线对比,指令取指,移位+ALU,寄存器写,寄存器读,寄存器译码,FETCH,DECODE,EXECUTE,MEMORY,WRITE,ARM9TDMI,ARM 或 Thumb指令解码,ARM10,指令地址 生成,移位+ALU,数据 Cache 接口,寄存器写,FETCH,DECODE,EXECUTE,MEMORY,WRITE,寄存器读+结果 前向迁移+记分板,乘法,乘 加,协处理器 数据接口,分支预测,指令取指,ISSUE,寄存器访问,数据+分支地址生成,ARM 或 Thumb指令解码,协处理器 指令发出,ARM10 整数单元数据通道,寄存器Bank,PSR,

27、乘法器,移位器,ALU,B,A,Imm,B,A,结果,CLZ,写端口,PC,数据装载,周期,Operation,LDR A B C,ADD A B,1,2,3,4,5,6,7,MUL A,F-Fetch I-Issue D-Decode E-Execute M Memory Wb-Writeback Wl-Write to register using load port,顺序代码的执行 开始于64位的对齐地址,Address,0 x07334,0 x0732C,0 x07330,SUB B C,0 x07328,ADDA C,0 x07324,ADDB,0 x07320,Fetch to B

28、uffer,8,9,M,Wl,D,Wb,D,D,Wb,D,Wb,F,D,Wb,D,E,E,F,F,F,F,F,六.异常处理,中断处理软中断(SWI)处理其它异常处理,Vector Table,Vector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devices,FIQ,IRQ,(Reserved),Data Abort,Prefetch Abort,Software Interrupt,Undefined Instruction,Reset,异常处理,当异常产生时,ARM core:拷贝 CPSR 到 SPSR_

29、设置适当的 CPSR 位:改变处理器状态进入 ARM 状态改变处理器模式进入相应的异常模式设置中断禁止位禁止相应中断(如果需要)保存返回地址到 LR_设置 PC 位相应的异常向量返回时,异常处理需要:从 SPSR_恢复CPSR从LR_恢复PC Note:这些操作只能在 ARM 态执行.,异常优先级,异常在当前指令执行完成之后才被响应多个异常可以在同一时间产生 异常指定了优先级和固定的服务顺序:ResetData AbortFIQIRQPrefetch AbortSWIUndefined instruction,向量表指令,32 Mbytes,4 Kbytes,Literal pool cont

30、aining address of Undef Handler,IRQ handler within 32MBytes Branch instruction range,SWI Exception handler placed on applicable address boundary,FIQ handler follows vector table,Undef handler outside 32MBytes branch instruction range,0 x0,0 x1000,0 x2000000,0 xFFC,0 x8,0 x18,0 x30000000,0 xFFFFFFFF,

31、0 x1C,0 x4,MOV PC,#0 x30000000,B IRQ_handler,0 x30008000,IRQ Handler,SWI Handler,FIQ Handler,LDR PC,PC,#+0 xFF0,Undef Handler,0 x30008000,ARM or Thumb?,Thumb/ARM 混合应用程序,ARM Code,ARM Code,ThumbCode,FIQ,IRQ,(Reserved),Data Abort,Prefetch Abort,Software Interrupt,Undefined Instruction,Reset,异常处理中的寄存器使用

32、,与异常发生相关的模式改变意味着所调用的异常处理程序至少要访问:私有的 SP_(stack pointer).私有的 LR_(link register).私有的 SPSR_(saved program status register).在 FIQ异常处理中,另有5个私有的通用寄存器(r8_fiq to r12_fiq).其它的寄存器是所有模式公用的.异常处理程序必须确保其他的寄存器在退出前恢复到原来的状态这可以通过将任何正在使用的寄存器的内容保存在堆栈中,并在返回前恢复来实现任何所需寄存器的初始化要有应用程序的起始代码来完成,外中断处理,ARM 有两级外部中断 FIQ,IRQ.可是大多数的基

33、于ARM 的系统有 2个的中断源!因此需要一个中断控制器(通常是地址映射的)来控制中断是怎样传递给ARM的。在许多系统中,一些中断的优先级比其它中断的优先级高,他们要抢先任何正在处理的低优先级中断。Note:通常中断处理程序总是应该包含清除中断源的代码。,地址映射中断控制器,nIRQ,nFIQ,ARM,MultiplePeripheralinterruptsources,ARM读控制器寄存器并找到IRQ/FIQ中断源,ARM写外设寄存器清相应中断源,FIQ vs IRQ,FIQ 和 IRQ 提供了非常基本的优先级级别。在下边两种情况下,FIQs有高于IRQs的优先级:当多个中断产生时,FIQ高

34、于IRQ.处理 FIQ时禁止 IRQs.IRQs 将不会被响应直到 FIQ处理完成.FIQs 的设计使中断处理尽可能的快.FIQ 向量位于中断向量表的最末.为了使中断处理程序可从中断向量处连续执行FIQ 模式有5个额外的私有寄存器(r8-r12)中断处理必须保护其使用的非私有寄存器可以有多个FIQ中断源,但是考虑到系统性能应避免嵌套。,中断重新使能的问题,当另外一个中断抢先当前中断时,如果程序员使用下边特殊的步骤来防止系统状态丢失,中断是可以嵌套:保存IRQ状态下的LR(LR_irq)保存IRQ状态下的SPSR(SPSR_IRQ)当中断可重入时,在中断处理程序中使用“BL”必须特别小心:如果第

35、二个中断产生,BL调用的返回地址(LR_irq)可能被冲掉,子程序将错误的返回 导致无限循环!解决方法是在使用“BL”之前改变模式来避免 LR_irq 被冲掉通常使用“System”模式(这时 BL 使用 LR_usr)在处理程序结束,必须:切换回 IRQ 模式 禁止中断(来避免在恢复SPSR_irq 到一个临时的寄存器中后它被冲掉).,C 可重入中断示例,IRQHandler SUBlr,lr,#4 STMFDsp!,lr MRSr14,SPSR STMFDsp!,r12,r14 MOVr12,#IntBase LDRr12,r12,#IntSource MRSr14,CPSR BICr14

36、,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)压栈保护来避免下一次中断发生使它们被冲掉,保存R0-3,LR_user 到 use

37、r 栈中,然后调用 C 子程序,中断源(R0)作为一个参数传入 C 处理函数。,恢复LR_irq,SPSR_irq 和工作寄存器(r12),然后退出中断处理使用修正后的LR,读/清中断控制器中断源,切换到 System 模式同时使能 IRQ,软中断,SWI 0 x01,向量表,用户程序(C/ASM),SWI 处理程序(ASM),(可选),SWI 处理程序(C),用户程序调用 SWISWI 中断处理程序包含汇编部分和可选用的 C 部分,SWI 调用,汇编中,SWI 调用使用“SWI 中断号”实现:SWI 0 x24小心在汇编中如果SWI 调用时处于Supervisor模式将会冲掉LR_svc.例

38、如:在SWI处理程序中的二级调用解决方法:在SWI调用之前对LR_svc 压栈保护C 中,使用关键词“_swi”来定义一个软中断函数.,For Example,compiles to:,_swi(0 x24)void my_swi(void);void foo(void)my_swi();,foo STMFD sp!,lr SWI 0 x24 LDMFD sp!,pc,ARM 内核不提供直接传递软中断(SWI)号到处理程序的机制:SWI 处理程序必须定位SWI 指令,并提取SWI指令中的常数域为此,SWI 处理程序必须确定SWI 调用是在哪一种状态(ARM/Thumb).检查 SPSR 的 T

39、-bitSWI 指令在ARM 状态下在 LR-4 位置,Thumb 状态下在 LR-2位置SWI 指令按相应的格式译码:ARM 态格式:Thumb 态格式:,存取 SWI 号,存取 SWI 参数,汇编中,存取调用者设置的寄存器即可.在返回之前,修改寄存器的值,传回参数给调用者.传参数给C,通常采用压栈的方法.将参数压栈给调用的函数传递一个指向这些参数的指针也可以通过将参数值写回到适当的堆栈位置,将参数传回,复位(reset),Reset 处理程序执行的动作取决于不同的系统.例如它可以:设置异常向量初始化存储器系统(MMU/PU)初始化所有需要的模式的堆栈和寄存器 初始化所有 C 所需的变量初始

40、化所有I/O设备使能中断改变处理器模式或/和状态调用主应用程序,未定义指令,下列情况将引起未定义指令异常:ARM 试图执行一真正的未定义指令ARM 遇到一协处理器指令,可是系统中的协处理器硬件并不存在ARM 遇到一协处理器指令,系统中协处理器硬件也存在,可是ARM 不是在超级用户模式(privileged mode)例如:操作协处理器15(cp15)-ARM cache 控制器解决方法:在处理程序中执行软协处理器仿真禁止在非超级用户模式下操作报告错误并退出,预取异常,不论异常是发生在 ARM 还是Thumb 状态下,导致预取异常的指令地址在 lr-4 处.处理方法取决于存储器管理策略有存储器管

41、理的系统(e.g.demand paged virtual memory)修正问题(e.g.enable correct memory page)返回并重新执行预取异常的指令(SUBS pc,lr,#4)没有存储器管理的系统通常表示一个致命的错误报告错误(如果可能)然后退出,数据异常,导致异常的指令的地址在 lr-8 处.处理方法取决于存储器管理策略有存储器管理的系统(demand-paged virtual memory)如果使用了 MMU,数据异常的地址在 MMU 的“Fault Address”寄存器中修正问题(enable correct page of memory)返回并重新执行数

42、据异常的指令SUBS pc,lr,#8没有存储器管理的系统通常表示一个致命的错误报告错误(如果可能)然后退出,The Abort Model,许多ARM 存储器存取指令将更新基址寄存器:LDRr0,r1,#8!;“!”将更新 R1如果异常是数据异常,对基址寄存器的影响取决于使用的是哪种 ARM core.“Base Restored Abort Model”StrongARM,ARM9 and ARM10 系列支持基址寄存器由ARM core 自动恢复.“Base Updated Abort Model”ARM7TDMI 系列支持在异常指令重新执行之前基址寄存器必须由处理程序进行恢复,异常返回

43、地址,ARM 状态:在异常产生的时候内核设置 LR_mode=PC-4.处理程序需要调整 LR_mode(取决于是哪一个异常发生了),以便返回到正确的地址Thumb 状态:处理器根据发生的异常自动修改存在 LR_mode 中的地址不论异常产生时的状态如何,处理器确保处理程序的ARM 返回指令能返回到正确的地址(和正确的状态),从SWIs和未定义指令返回,异常是由指令本身引起的,因此内核在计算 LR 时的 PC 值并没有被更新.ARM Thumb SWIpc-8 pc-4;Exception taken here xxx pc-4 pc-2;lr=next instruction yyy pc

44、pc因此返回指令为:MOVS pc,lrNote:表示异常返回后将执行的那条指令,从FIQs和IRQst和预取异常返回,异常在当前指令执行完成后才被响应.因此内核在计算 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:表示异常返回后将执行的那条指令,从预取异常

45、返回,当指令到达执行阶段时异常才产生,因此内核在计算 LR 时的 PC 值已被更新.需要重新执行导致异常的指令 ARM Thumb www pc-8 pc-4 Prefetch Abort occurred here xxx pc-4 pc-2 ARM lr=next instruction yyy pc pc Thumb lr=two instructions ahead因此返回指令为:SUBS pc,lr,#4Note:表示异常返回后将执行的那条指令,从数据异常返回,异常发生(和计算 LR)在 PC 被更新之后.需要重新执行导致异常的指令ARM Thumb www pc-12pc-6 Da

46、ta abort occurred here xxx pc-8pc-4 yyy pc-4pc-2 ARM lr=two instructions ahead zzz pcpc aaa pc+4pc+2 Thumb lr=four instructions ahead因此返回指令为:SUBS pc,lr,#8Note:表示异常返回后将执行的那条指令,Back to ExceptionReturn Instruction slide,从SWI 和 Undef异常返回MOVS pc,lr从FIQ,IRQ 和 预取异常(Prefect Abort)返回SUBS pc,lr,#4从数据异常(Data A

47、bort)返回SUBS pc,lr,#8如果 LR之前被压栈的话使用LDM“”LDMFD sp!,pc,异常返回:使用一数据处理指令:相应的指令取决于什么样的异常在特权模式不仅仅更新PC,而且 拷贝SPSR 到 CPSR,设置CPSR,“S”bitPC做为目的寄存器,异常返回指令,See end of presentation for backgroundinformation on these instructions,Quiz1,1)说出ARM可以工作的模式名字。2)ARM核有多少个寄存器?3)什么寄存器用于存储PC和连接寄存器?4)R13通常用来存储什么?5)哪种模式使用的寄存器最少?6

48、)在Thumb 指令集中,哪些寄存器处于Low group?7)CPSR的哪一位反映了处理器的状态?8)所有的Thumb指令采取什么对齐方式?9)ARM有哪几个异常类型。10)为什么FIQ的服务程序地址要位于0X1C?11)在复位后,ARM处理器处于何种模式、何种状态?,Quiz 2,1)哪些ARM指令可以有条件的执行?2)下面的指令完成什么工作?MOVNES r2,r3,ASR#23)Thumb代码与ARM代码比较的两大优势?4)AMBA代表是什么?5)Multi-ICE为你完成什么工作?,Quiz3,1)一条简单的算术操作(如:ADD)要占用几个周期?2)ARM7TDMI指令流水线有几个阶

49、段?3)ARM7TDMI 是否使用 ALU 计算地址?4)ARM在存储器里,可寻址几种类型的数据?5)试举一非顺序周期的例子?6)数据总线的哪一半可被内核用作Thumb 指令?,Quiz4,1)Harvard结构带来了哪些优势?2)ARM9TDMI流水线有几级?3)在流水线的哪一个阶段读寄存器?4)寄存器 bank由几个读或写端口?5)什么条件下会出现互锁?,Quiz5,1)中断向量表位于存储器的什么位置?2)IRQ或FIQ异常的返回指令是什么?3)什么类型的中断优先级最高?4)什么指令可以放在中断向量表?5)FIQ的什么特点使得它处理的速度比IRQ快?6)在嵌套的中断处理程序中,如何确保LR没有被破坏?,Quiz6,1)预取和数据异常之间的差别是什么?2)什么会导致未定义指令异常发生?3)为什么异常只能在arm状态下返回?4)如何禁止中断?5)为什么在异常处理程序中,你可能想切换到Thumb状态?,下一讲内容提示,ARM指令的寻址方式请同学们查阅相关资料作好预习!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号