第三讲 ARM编程模型,异常处理.ppt

上传人:hyn****60 文档编号:71357197 上传时间:2023-02-03 格式:PPT 页数:49 大小:3.19MB
返回 下载 相关 举报
第三讲 ARM编程模型,异常处理.ppt_第1页
第1页 / 共49页
第三讲 ARM编程模型,异常处理.ppt_第2页
第2页 / 共49页
点击查看更多>>
资源描述

《第三讲 ARM编程模型,异常处理.ppt》由会员分享,可在线阅读,更多相关《第三讲 ARM编程模型,异常处理.ppt(49页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、No.1 2006第三讲第三讲 ARMARM微处理器编程模型和异常处理微处理器编程模型和异常处理第二讲第二讲 ARM7TDMI嵌入式微处理器原嵌入式微处理器原理理ARM 微处理器的编程模型ARM微处理器的异常处理No.2 2006存储程序处理器存储程序处理器No.3 2006指令的执行周期指令的执行周期No.4 2006控制和数据通路控制和数据通路取指取指译码:根据指令译码:根据指令产生控制信号产生控制信号在适当的时间向正确的部件发正确的控制信号在适当的时间向正确的部件发正确的控制信号数据通路数据通路:在控制信号的控制下执行运算或传输功能在控制信号的控制下执行运算或传输功能No.5 2006数

2、据通路:数据通路:u寄存器组寄存器组u地址寄存器地址寄存器u读数据寄存器读数据寄存器u写数据寄存器写数据寄存器u乘法器乘法器u桶型移位器桶型移位器u3232位位ALUALUu地址累加器地址累加器uA BUSA BUSuB BUSB BUSuALU BUSALU BUSu INC BUS INC BUSNo.6 2006数据通路组成数据通路组成RegisterBankMultiplierAddressIncrementerALUBAVectorsA31:0AddressRegisterBarrelShifterPCALURead DataRegisterWrite DataRegisterD31

3、:0InstructionDecodeARM7ARM7的数据通路的数据通路单循环数据处理指令中:单循环数据处理指令中:寄存器寄存器R1 R1 BB总线总线,通过移位通过移位 寄存器寄存器R2R2AA总线总线 在在ALUALU中合并,结果被写回寄存器组。中合并,结果被写回寄存器组。地址累加地址累加 PCPC的值的值 地址寄存器,地址寄存器,再进入地址累加器再进入地址累加器 再写回寄存器组中的程序寄存器再写回寄存器组中的程序寄存器 产生下一个地址产生下一个地址PCNo.7 2006流水技术的本质流水技术的本质No.8 2006流水技术的使用流水技术的使用No.9 2006ARM7 TDMI 三级流

4、水线三级流水线CycleOperationADDSUBORRANDEORORR123456789FDEFDEFEFDEFDEDFDEWF-FetchD-DecodeE-ExecuteM ARM ThumbpPC PC取指取指指令从存储器中取出指令从存储器中取出pPC4PC2译码译码对指令使用的寄存器进行译码对指令使用的寄存器进行译码数据控制信号数据控制信号 将准备下一个周期。这一阶段,指令拥有将准备下一个周期。这一阶段,指令拥有译码逻辑,但不拥有数据通路。译码逻辑,但不拥有数据通路。pPC8PC4执行执行指令拥有数据通路。指令拥有数据通路。从寄存器组中读出寄存器,执行移位和从寄存器组中读出寄存

5、器,执行移位和ALU操作,寄存器写回到寄存器组操作,寄存器写回到寄存器组No.10 2006The ARM Core RoadmapARM966E-SARM946E-SARM1026EJ-S20002001200319992002MHz100200300ARM7EJ-SARM7TDMI-SARM7TDMILeopard-SARM926EJ-SARM1136J-SSC100SC200ARM920TNo.11 2006第三讲第三讲 ARMARM微处理器编程模型和异常处理微处理器编程模型和异常处理第二讲 ARM7TDMI嵌入式微处理器原理ARM 微处理器的编程模型微处理器的编程模型ARM微处理器的异

6、常处理No.12 2006编程模式编程模式寄存器寄存器p处理器内部的存储部件处理器内部的存储部件,不同处理器具有很大不同处理器具有很大的不同的不同p所有处理器都具有的所有处理器都具有的:程序计数器程序计数器(程序指针程序指针),状状态寄存器态寄存器(标识处理器的状态标识处理器的状态),累加寄存器累加寄存器(用于用于算术运算算术运算)p处理器通常所说的处理器通常所说的8位位/16位位/32位位/64位位,是指其是指其内部寄存器的位宽内部寄存器的位宽堆栈堆栈p先进后出先进后出,中断和任务调度中保存现场和局部中断和任务调度中保存现场和局部变量变量p很多处理器都有一个或者多个堆栈指针很多处理器都有一个

7、或者多个堆栈指针编程模式:编程模式:处理器指令集定义了操作,处理器指令集定义了操作,程序员通过操作改变处理器的系统状态,程序员通过操作改变处理器的系统状态,每一条指令:指令前后状态的变化每一条指令:指令前后状态的变化这些状态是有处理器可见寄存器和存储器中的数这些状态是有处理器可见寄存器和存储器中的数据项构成的。据项构成的。No.13 2006存储器系统内存映射存储器系统内存映射内存映射内存映射:如何划分不同的内存和如何划分不同的内存和I/O设备之间的地址空间设备之间的地址空间(memory Map)pIntel的的X86处理器处理器,对对I/O设备设置了单独的地址空间设备设置了单独的地址空间,

8、用单独指令来访问用单独指令来访问,I/O端口映射端口映射方式方式 ported I/O;p大部分处理器大部分处理器I/O设备和内存存在相同的地址空间设备和内存存在相同的地址空间,用相同指令进行访问用相同指令进行访问,memory-mapped I/O;端口I/OI/O 空间内存空间内存I/O内存空间No.14 2006ARM的存储器格式的存储器格式存储器组织存储器组织p字(Word):在ARM体系结构中,字的长度为32位,而在8位/16位处理器体系结构中,字的长度一般为16位,请读者在阅读时注意区分。p半字(Half-Word):在ARM体系结构中,半字的长度为16位,与8位/16位处理器体系

9、结构中字的长度一致。p字节(Byte):在ARM体系结构和8位/16位处理器体系结构中,字节的长度均为8位。ARM体系结构将存储器看作是从零地址零地址开始的字节的线性组合开始的字节的线性组合。从零字节到三字节放置第一个存储的字数据,从第四个字节到第七个字节放置第二个存储的字数据,依次排列。作为32位的微处理器,ARM体系结构所支持的最大寻址空间为4GBNo.15 2006存储器数据顺序存储器数据顺序Big-Endian 和和 Little-Endian p处理器在存放多字节的数据时候处理器在存放多字节的数据时候,一般将低位字节存放在低地址单元一般将低位字节存放在低地址单元,譬譬如如X86 系列

10、的处理器系列的处理器;这种方法成为小印第安序这种方法成为小印第安序(低端优先低端优先);p在嵌入式系统中被广泛应用的在嵌入式系统中被广泛应用的PowerPC处理器中处理器中,则把低位字节放在高地则把低位字节放在高地址单元址单元,这种方法成为大印第安序这种方法成为大印第安序(高端优先高端优先);0100010101020103Long wordwordByte0100010101020103Long wordwordByteNo.16 2006七种工作模式七种工作模式处理器的工作模式:处理器的工作模式:对处理器不同状态分类,对每一种方式规定其可以控制的资源。以减少对处理器不同状态分类,对每一种方

11、式规定其可以控制的资源。以减少不同工作方式之间的切换代价。对于程序员而言,处理器的不同工作模不同工作方式之间的切换代价。对于程序员而言,处理器的不同工作模式就是不同的编程模式式就是不同的编程模式ARMV4版本以后共有版本以后共有7种工作模式种工作模式:pUser 用户模式用户模式:处理器正常的程序执行状态处理器正常的程序执行状态pFIQ 快速中断模式快速中断模式:用于高速数据传输或通道处理用于高速数据传输或通道处理pIRQ 中断模式:用于通用的中断处理用于通用的中断处理pSupervisor管理模式:操作系统使用的保护模式操作系统使用的保护模式 entered on reset and whe

12、n a Software Interrupt instruction is executedpAbort数据访问中止模式:当数据或指令预取终止时进入该模式,可用于虚拟存储及存储当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。保护。used to handle memory access violationspUndef未定义指令中止模式:used to handle undefined instructions当未定义的指令执当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真行时进入该模式,可用于支持硬件协处理器的软件仿真pSystem系统模式:privileged

13、mode using the same registers as user mode运行具有运行具有特权的操作系统任务特权的操作系统任务No.17 2006ARM 编程模式编程模式ARM的七种工作模式的说明的七种工作模式的说明p两大类两大类:访问的资源不同:访问的资源不同l用户模式用户模式l特权模式(其他六种模式)。特权模式(其他六种模式)。p特权模式又分两类特权模式又分两类l系统模式:高级的用户模式系统模式:高级的用户模式l其他又称为异常模式。处理器模式可以通过软件控制进行切换,也可以其他又称为异常模式。处理器模式可以通过软件控制进行切换,也可以通过外部中断或异常处理过程进行切换。通过外部中

14、断或异常处理过程进行切换。p应用程序运行在应用程序运行在用户模式用户模式。应用程序可以产生异常处理,在异常处理过程中。应用程序可以产生异常处理,在异常处理过程中进行模式的切换。进行模式的切换。p系统模式系统模式使用用户模式的寄存器组,但可以访问所有的系统资源。主要供操使用用户模式的寄存器组,但可以访问所有的系统资源。主要供操作系统任务使用。作系统任务使用。p异常模式异常模式:快速中断模式、外部中断模式、管理模式、中止模式、未定义模快速中断模式、外部中断模式、管理模式、中止模式、未定义模式式。常用于处理中断或异常,以及需要访问受保护的系统资源等情况。常用于处理中断或异常,以及需要访问受保护的系统

15、资源等情况。8086微处理器没有工作模式之分微处理器没有工作模式之分80386处理器有处理器有3种工作模式:实模式、保护模式和虚拟种工作模式:实模式、保护模式和虚拟86模式模式 No.18 2006ARMxyzApplication codeOSS/W Interrupt(SWI)Undefined InstructionPrivilegedmodesUser mode工作模式的切换工作模式的切换MemoryInstructions&DataAbortsInterruptsReset不同的工作模式对应不同的工作模式对应不同的权限不同的权限不同的工作模式对应不同的工作模式对应不同的寄存器组不同的

16、寄存器组对于程序员而言,就对于程序员而言,就是不同的编程模式是不同的编程模式No.19 2006ARM的寄存器的寄存器未备份未备份(未分组)寄存器未分组)寄存器 R0R7 8p在所有的处理器模式下对应同一个物理寄存器在所有的处理器模式下对应同一个物理寄存器备份(分组)寄存器备份(分组)寄存器 R8R12 5210p每个寄存器对应两个不同的物理寄存器每个寄存器对应两个不同的物理寄存器p快速中断模式下为一组物理寄存器快速中断模式下为一组物理寄存器R8_fiq,R9_fiqp其他模式下是一组物理寄存器其他模式下是一组物理寄存器pFIQ处理程序可以不必执行保存和恢复现场的指令,加快中断处理器过程处理程

17、序可以不必执行保存和恢复现场的指令,加快中断处理器过程备份寄存器备份寄存器R13,R14 2612p共有共有6组不同的组不同的R13,R14,其中一组为用户和系统模式使用其中一组为用户和系统模式使用p每一种异常模式都有自己的每一种异常模式都有自己的R13,R14,共,共5组组p寄存器寄存器R13,通常被用作栈指针,当进入异常模式以后,可以把需要使用的寄存器保通常被用作栈指针,当进入异常模式以后,可以把需要使用的寄存器保存在存在R13所指向的堆栈中,当退出异常模式的时候,则弹出相应的寄存器所指向的堆栈中,当退出异常模式的时候,则弹出相应的寄存器p寄存器寄存器R14,通常被称为连接寄存器(通常被称

18、为连接寄存器(link register)l在每一种模式自己的在每一种模式自己的R14中存放当前子程序的返回地址,譬如使用中存放当前子程序的返回地址,譬如使用BL跳转指令跳转指令的时候,当的时候,当R14中的值复制到中的值复制到PC中的时候,子程序即返回中的时候,子程序即返回l在异常中断发生的时候,该异常模式的物理在异常中断发生的时候,该异常模式的物理R14被设置为该异常模式将要返回被设置为该异常模式将要返回的地址的地址No.20 2006寄存器寄存器R13寄存器R13在ARM指令中常用作堆栈指针:p但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。p而在Thumb指令集中,某些指令

19、强制性的要求使用R13作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。8086系统中的堆栈是用段定义语句在存储器中定义的一个堆栈段。SS寄存器给定堆栈段的段基址,SP给定当前堆栈的栈顶。No.21 2006寄存器寄存器R14R14也称作子程序连接寄存器(Subroutine Link Register)或连接寄存

20、器LR。当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。其他情况下,R14用作通用寄存器。与之类似,当发生中断或异常时,对应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。在每一种运行模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值拷贝给R14,执行完子程序后,又将R14的值拷贝回PC,即可完成子程序的调用返回。以上的描述可用指令完成:No.22 2006程序计数器(程序计数器(r15)当处理器运行于当处理器运行于ARM状态:状态:p所有指令都是32位宽p所有指令

21、必须字对齐p因此PC值存于位31:2,位1:0未定义(指令不能为半字或字节对齐)当处理器运行于当处理器运行于Thumb状态:状态:p所有指令都是16位宽p所有指令必须半字对齐p因此PC值存于位31:1,位0未定义(指令不能为字节对齐)R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。由于ARM体系结构采用了多级流水线技术,对于ARM7TDMI指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。No.23 2006程序状态寄存器程序状态寄存器ARM体系结构包含一个当前程序状态寄存

22、器(CPSR)和五个备份的程序状态寄存器(SPSRs)。备份的程序状态寄存器用来进行异常处理,其功能包括:p保存ALU中的当前操作信息 p控制允许和禁止中断 p设置处理器的运行模式 2731N Z C V Q2867I F T mode1623 815 54024fsxc U n d e f i n e dJNo.24 2006条件码标志条件码标志条件码标志(Condition Code Flags)N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。p在ARM状态下,绝大多数的指令都是有条件执行的。p在Thumb状态下,仅有分支指令是有条

23、件执行的。No.25 2006控制位标志控制位标志PSR的低8位(包括I、F、T和M4:0)称为控制位,当发生异常时这些位可以被改变。如果处理器运行特权模式,这些位也可以由程序修改。p中断禁止位I、F:I=1 禁止IRQ中断;F=1 禁止FIQ中断。pT标志位:该位反映处理器的运行状态。p对于ARM体系结构v5及以上的版本的T系列处理器,当该位为1时,程序运行于Thumb状态,否则运行于ARM状态。p对于ARM体系结构v5及以上的版本的非T系列处理器,当该位为1时,执行下一条指令以引起为定义的指令异常;当该位为0时,表示运行于ARM状态。运行模式位M4:0:M0、M1、M2、M3、M4是模式位

24、。这些位决定了处理器的运行模式。No.26 2006r0r1r2r3r4r5r6r7r8r9r10r11r12r13(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)spsrFIQIRQSVCUndefAbortUser Moder0r1r2r3r4r5r6r7r8r9r10r11r12r13(sp)r14(lr)r15(pc)cpsrr13(sp)r14(lr)spsrr13(sp)r14(lr)sps

25、rr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr8r9r10r11r12r13(sp)r14(lr)spsrCurrent Visible RegistersBanked 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 Re

26、gistersUserIRQSVCUndefAbortr8r9r10r11r12r13(sp)r14(lr)FIQ ModeIRQ Moder0r1r2r3r4r5r6r7r8r9r10r11r12r15(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 Mo

27、der0r1r2r3r4r5r6r7r8r9r10r11r12r15(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 RegistersUserFIQIRQSVCAbortr13(sp)r14(lr)SVC Moder0r1r2r3r4r5r6r7r8r9r10r11r12r15(pc)cpsrr13(sp)r14(lr)spsrr13(sp)r14(l

28、r)spsrr13(sp)r14(lr)spsrr13(sp)r14(lr)spsrr8r9r10r11r12r13(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

29、)spsrCurrent Visible RegistersBanked out RegistersUserFIQIRQSVCUndefr13(sp)r14(lr)The ARM Register SetNo.27 2006Register Organization SummaryUsermoder0-r7,r15,andcpsrr8r9r10r11r12r13(sp)r14(lr)spsrFIQr8r9r10r11r12r13(sp)r14(lr)r15(pc)cpsrr0r1r2r3r4r5r6r7Userr13(sp)r14(lr)spsrIRQUsermoder0-r12,r15,an

30、dcpsrr13(sp)r14(lr)spsrUndefUsermoder0-r12,r15,andcpsrr13(sp)r14(lr)spsrSVCUsermoder0-r12,r15,andcpsrr13(sp)r14(lr)spsrAbortUsermoder0-r12,r15,andcpsrThumb stateLow registersThumb stateHigh registersNote:System mode uses the User mode register set No.28 2006ARM的寄存器总结的寄存器总结 1个专用的程序计数器个专用的程序计数器 PC,R15

31、 1个专用的当前程序状态寄存器个专用的当前程序状态寄存器 CPSR 5个专用的程序状态保存寄存器个专用的程序状态保存寄存器 (用于异常模式下的用于异常模式下的SPSR)总计共有总计共有37个物理寄存器,其中个物理寄存器,其中30个通用寄存器,个通用寄存器,1个程序计数器,个程序计数器,6个状态寄存器个状态寄存器在每一种模式下只有在每一种模式下只有R0R15,CPSR寄存器程序员可见。寄存器程序员可见。只有当前只有当前处理器工作模式可以访问的寄存器称为影子寄存器。处理器工作模式可以访问的寄存器称为影子寄存器。pR0R12寄存器寄存器pR13(堆栈指针,堆栈指针,SP)和)和R14(连接寄存器)连

32、接寄存器)p程序计数器,程序计数器,R15(PC)p当前程序状态寄存器,当前程序状态寄存器,cpsr在特权模式下(除了系统模式)还可以访问在特权模式下(除了系统模式)还可以访问p一个特殊的一个特殊的spsr(程序状态保存寄存器),每一种异常模式对应一个程序状态保存寄存器),每一种异常模式对应一个SPSR异常模式发生的时候用来存储当前程序的异常模式发生的时候用来存储当前程序的CPSR其他的微处理器没有工作模式之分,自然没有影子寄存器的概念。其他的微处理器没有工作模式之分,自然没有影子寄存器的概念。No.29 2006第三讲第三讲 ARMARM微处理器编程模型和异常处理微处理器编程模型和异常处理第

33、二讲 ARM7TDMI嵌入式微处理器原理ARM 微处理器的编程模型ARM微处理器的异常处理微处理器的异常处理No.30 2006ARM的异常处理的异常处理正常的程序执行流程发生暂时的停止时,称之为异常正常的程序执行流程发生暂时的停止时,称之为异常。例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态例如处理一个外部的中断请求。在处理异常之前,当前处理器的状态必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理必须保留,这样当异常处理完成之后,当前程序可以继续执行。处理器允许多个异常同时发生,它们将会按固定的优先级进行处理。器允许多个异常同时发生,它们将会按固定的优先级进行处理。

34、ARM体系结构中的异常,与体系结构中的异常,与8位位/16位体系结构的中断有很大的相似之位体系结构的中断有很大的相似之处,但异常与中断的概念并不完全等同。处,但异常与中断的概念并不完全等同。ARM的异常有七种的异常有七种p复位异常、复位异常、SWI异常、未定义指令异常、数据中止和指令中止异常。异常、未定义指令异常、数据中止和指令中止异常。p外部中断分为外部中断分为FIQ和和IRQ两种,分别为快速中断和通用中断。都可以通过两种,分别为快速中断和通用中断。都可以通过CPSR中的中的相应位来屏蔽。相应位来屏蔽。8086微处理器的异常分为内部异常和外部中断微处理器的异常分为内部异常和外部中断p内部异常

35、:单步、内部异常:单步、INTO(软件中断)、软件中断)、INTn(软件中断)、除法错软件中断)、除法错p外部中断:非屏蔽中断和可屏蔽中断。外部中断:非屏蔽中断和可屏蔽中断。No.31 2006ARM的的7种异常种异常No.32 2006ARM 7种异常对应的模式种异常对应的模式地地 址址异异 常常进入模式进入模式5个异常模式个异常模式优先级优先级6最低最低0 x0000,0000复位复位管理模式管理模式10 x0000,0004未定义指令未定义指令未定义模式未定义模式60 x0000,0008软件中断软件中断管理模式管理模式60 x0000,000C中止(预取指令)中止(预取指令)中止模式中

36、止模式50 x0000,0010中止(数据)中止(数据)中止模式中止模式20 x0000,0014保留保留保留保留未使用未使用0 x0000,0018IRQIRQ40 x0000,001CFIQFIQ3No.33 2006ARM异常处理的分类异常处理的分类指令执行引起的直接异常:指令执行引起的直接异常:p软件中断指令软件中断指令SWIp未定义指令未定义指令p预取指令中止预取指令中止指令执行引起的简介异常指令执行引起的简介异常p数据中止(数据中止(Load 和和 Store 数据访问时候的存储器故障)数据访问时候的存储器故障)外部产生的与指令流没有关系的外部产生的与指令流没有关系的 异常异常p复

37、位复位pIRQpFIQNo.34 2006异常响应伪代码描述异常响应伪代码描述ARM处理器发生异常的时候:尽量完成当前指令(除了复位异常中止当前指令),然后脱离当前的指令序列处理器异常p间接和外部事件异常将占据当前序列中的指令p直接异常按照顺序执行ARM微处理器对异常的响应过程用伪码可以描述为:R14_=Return Link:保存返回地址SPSR_=CPSR :保存当前状态CPSR4:0=Exception Mode Number :设置进入异常模式CPSR5=0;当运行于ARM工作状态时 If =Reset or FIQ then 当响应FIQ异常时,禁止新的FIQ异常 lCPSR6=1

38、lCPSR7=1 PC=Exception Vector Address 执行异常处理程序,还需要保存其他 用户寄存器到R13指定的堆栈中No.35 2006 异常处理中寄存器的使用异常处理中寄存器的使用在异常发生时处理器模式的改变意味着异常处理程序至少需要访问下在异常发生时处理器模式的改变意味着异常处理程序至少需要访问下列寄存器:列寄存器:p堆栈指针寄存器(堆栈指针寄存器(SP_)p连接寄存器(连接寄存器(LR_)p程序状态保存寄存器(程序状态保存寄存器(SPSR_)p在在FIQ异常处理中,异常处理中,5个其他的通用寄存器(个其他的通用寄存器(r8_FIQ到到r12_FIQ)p其他的寄存器可

39、以和发生异常之前的模式共用其他的寄存器可以和发生异常之前的模式共用异常处理程序必须确保其他的寄存器在退出异常处理程序时恢复到进异常处理程序必须确保其他的寄存器在退出异常处理程序时恢复到进入异常之前的值。入异常之前的值。这个可以通过在进入异常时把工作寄存器的值压入堆栈,在退出异常这个可以通过在进入异常时把工作寄存器的值压入堆栈,在退出异常时再弹出堆栈来实现。时再弹出堆栈来实现。No.36 2006 复位异常复位异常复位异常在系统加电或复位时执行,它将进行一些初始化工作,具体复位异常在系统加电或复位时执行,它将进行一些初始化工作,具体内容与具体系统相关,然后程序控制权交给应用程序,因而复位异常内容

40、与具体系统相关,然后程序控制权交给应用程序,因而复位异常处理程序不需要返回。处理程序不需要返回。响应复位异常的过程:响应复位异常的过程:R14_svc=Unpredictable ValueSPSR_svc=Unpredictable ValueCPSR4:0=0b10011 :设置进入异常模式CPSR5=0:切换到ARM工作状态时CPSR6=1 :禁止FIQ 中断CPSR7=1 :禁止IRQ 中断PC=0000000 或者 0 xFFFF0000No.37 2006 未定义指令异常未定义指令异常未定义指令异常在下面的情况下发生:未定义指令异常在下面的情况下发生:pARM尝试执行一个真正的没有

41、定义的指令尝试执行一个真正的没有定义的指令pARM遇到一个协处理器指令,但这个协处理器在系统中并不存在遇到一个协处理器指令,但这个协处理器在系统中并不存在pARM遇到一个协处理器指令,这个协处理器在系统中存在,但是遇到一个协处理器指令,这个协处理器在系统中存在,但是ARM运行于非特运行于非特权模式,于是拒绝这条指令权模式,于是拒绝这条指令这种机制可以用来通过软件仿真系统中的某些部件的功能这种机制可以用来通过软件仿真系统中的某些部件的功能p例:如果系统中不包含浮点运算部件,例:如果系统中不包含浮点运算部件,CPU遇到浮点运算指令时,将发生未定义指遇到浮点运算指令时,将发生未定义指令异常,在该未定

42、义指令异常处理程序中可以通过其它的指令序列仿真该浮点运算令异常,在该未定义指令异常处理程序中可以通过其它的指令序列仿真该浮点运算指令指令。Thumb 指令集不包括协处理器,因而不需要这种指令仿真机制。指令集不包括协处理器,因而不需要这种指令仿真机制。响应过程响应过程 R14_und=未定义指令的下一条指令SPSR_und=CPSRCPSR4:0=0b11011 :进入未定义指令模式CPSR5=0 :切换到ARM工作状态时CPSR7=1 :禁止IRQ 中断PC=0000004 或者 0 xFFFF0004No.38 2006 SWI指令异常指令异常SWI 指令:用户定义的中断指令,在实时操作系统

43、中通过指令:用户定义的中断指令,在实时操作系统中通过该机制调用系统功能该机制调用系统功能响应过程响应过程 R14_svc=SWI指令的下一条指令SPSR_svc=CPSRCPSR4:0=0b10011 :进入未定义指令模式CPSR5=0 :切换到ARM工作状态时CPSR7=1 :禁止IRQ 中断PC=0000008 或者 0 xFFFF0008No.39 2006 指令预取中止异常指令预取中止异常处理器预取的指令地址不存在,或者该地址不允许当前指处理器预取的指令地址不存在,或者该地址不允许当前指令访问令访问响应过程响应过程 R14_abt=取指异常的指令的下一条指令SPSR_abt=CPSRC

44、PSR4:0=0b10111 :进入未定义指令模式CPSR5=0 :切换到ARM工作状态时CPSR7=1 :禁止IRQ 中断PC=000000C 或者 0 xFFFF000CNo.40 2006 数据访问中止异常数据访问中止异常处理器执行的数据访问指令的目标地址不存在,或者该地处理器执行的数据访问指令的目标地址不存在,或者该地址不允许当前指令访问址不允许当前指令访问响应过程响应过程 R14_abt=产生数据异常的指令后面的第三条指令SPSR_abt=CPSRCPSR4:0=0b10111 :进入未定义指令模式CPSR5=0 :切换到ARM工作状态时CPSR7=1 :禁止IRQ 中断PC=000

45、0010或者 0 xFFFF0010No.41 2006 FIQ与与IRQARM有两级外部中断有两级外部中断FIQ和和IRQpARM提供的提供的FIQ和和IRQ异常用于外部设备向异常用于外部设备向CPU请求异常服务。这两个异常的引脚请求异常服务。这两个异常的引脚都是低电平有效的。都是低电平有效的。p当前程序状态寄存器当前程序状态寄存器CPSR 的的I和和F控制位可以屏蔽这两个异常请求:当程序状态寄控制位可以屏蔽这两个异常请求:当程序状态寄存器的存器的CPSR中的中的I位和位和F位为位为1时,时,FIQ和和IRQ异常被屏蔽;当程序状态寄存器异常被屏蔽;当程序状态寄存器CPSR中的中的I位和位和F

46、位为位为0时,时,cpu正常响应正常响应FIQ和和IRQ异常请求。异常请求。FIQ和和IRQ提供了基本的优先级提供了基本的优先级FIQ的优先级高于的优先级高于IRQ:p当多个中断同时发生时,首先处理当多个中断同时发生时,首先处理FIQ中断中断p处理处理FIQ中断时屏蔽中断时屏蔽IRQ中断中断lFIQ中断处理完成并退出之后才会处理中断处理完成并退出之后才会处理IRQ中断中断ARM内核在内核在FIQ在快速响应中断上作了一些设计在快速响应中断上作了一些设计pFIQ异常位于异常向量表的最后异常位于异常向量表的最后l使得异常处理程序可以放在异常向量表之后使得异常处理程序可以放在异常向量表之后pFIQ工作

47、模式有五个影子寄存器(工作模式有五个影子寄存器(r8_FIQ到到r12_FIQ)p可以有多个可以有多个FIQ中断源,但为了系统的性能避免嵌套中断中断源,但为了系统的性能避免嵌套中断No.42 2006FIQ 异常处理异常处理FIQ异常是为了支持数据传输或者通道处理而设计的。在ARM状态下,系统有足够的私有寄存器,从而可以避免对寄存器保存的需求,并减小了系统上下文切换的开销。响应过程响应过程 R14_FIQ=产生数据异常的指令后面的第二条指令SPSR_FIQ=CPSRCPSR4:0=0b10001 :进入未定义指令模式CPSR5=0 :切换到ARM工作状态时 CPSR6=1 :禁止FIQ中断CP

48、SR7=1 :禁止IRQ 中断PC=000001C或者 0 xFFFF001CNo.43 2006IRQ异常处理异常处理IRQ异常属于正常的中断请求,可通过对处理器的nIRQ引脚输入低电平产生,IRQ的优先级低于FIQ,当程序执行进入FIQ异常时,IRQ可能被屏蔽。响应过程响应过程 R14_IRQ=产生数据异常的指令后面的第二条指令SPSR_IRQ=CPSRCPSR4:0=0b10010 :进入未定义指令模式CPSR5=0 :切换到ARM工作状态时CPSR7=1 :禁止IRQ 中断PC=0000018或者 0 xFFFF0018No.44 2006从异常的返回从异常的返回异常处理完毕之后,AR

49、M微处理器会执行以下几步操作从异常返回:1、将连接寄存器LR的值减去相应的偏移量后送到PC中。2、将SPSR复制回CPSR中。3、若在进入异常处理时设置了中断禁止位,要在此清除。可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。No.45 2006SWI和未定义指令异常的返回 SWI和未定义指令异常是由当前执行的指令产生的和未定义指令异常是由当前执行的指令产生的,当,当SWI和未定义指令和未定义指令异常产生时,程序计数器异常产生时,程序计数器PC的值还未更新,它指向当前指令后面第的值还未更新,它指向当前指令后面第2条指条指令:令:pSWIpc8 异常在这条指令处

50、发生异常在这条指令处发生pXxxpc4 LRPC-4pYyypc返回指令:返回指令:MOV PC,LR 将寄存器将寄存器LR中的值复制到程序计数器中的值复制到程序计数器PC中中 同时同时将将SPSR_mode寄存器内容复制到当前程序状态寄存寄存器内容复制到当前程序状态寄存 器器CPSR中。中。产生异常返回地址PC地址No.46 2006 IRQ和FIQ异常的返回 当当IRQ和和FIQ异常产生时,程序计数器异常产生时,程序计数器PC的值已经更新,它指向当前指令后面的值已经更新,它指向当前指令后面第第3条指令。条指令。pwwwpc12 这条指令执行过程中发生中断这条指令执行过程中发生中断pXxxp

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁