版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
12五月2023生物医学工程学院电子技术系1第三讲第3章ARM的编程模型与存储器设计
12五月2023生物医学工程学院电子技术系2第3章ARM的编程模型与存储器设计本章主要内容ARM微处理器的工作状态ARM体系结构的存储器格式处理器模式寄存器组织异常ARM存储器设计基于ARM的嵌入式系统开发12五月2023生物医学工程学院电子技术系3第3章ARM的编程模型与存储器设计第3章第1节ARM微处理器的编程模型12五月2023生物医学工程学院电子技术系43.1ARM微处理器的编程模型3.1.1ARM微处理器的工作状态
1.ARM微处理器有两种工作状态:ARM状态:处理器执行32位的字对齐(地址的低两位为0)的ARM指令。Thumb状态:处理器执行16位的半字对齐(地址的最低位为0)的Thumb指令。ARM微处理器可随时在两种工作状态之间切换,并且不影响处理器的工作模式和相应寄存器的内容。ARM微处理器支持字节(8位)、半字(16位)和字(32位)3种数据类型。ARM字长是32位。字长的长度是不固定的,字长是计算机内部一次可以处理的二进制数码的位数。字长越长,数据处理的速度越快。12五月2023生物医学工程学院电子技术系53.1ARM微处理器的编程模型ARM的两类指令均有处理器状态切换指令,但开始执行代码时,应处于ARM状态,这点在编程时应注意。
2.状态切换方法:进入Thumb状态:当操作数寄存器的状态位(位0)为1时,执行BX指令,使微处理器从ARM状态切换到Thumb状态。此外,当处理器从Thumb状态进入异常,一旦异常返回,自动切换到Thumb状态。进入ARM状态:当操作数寄存器的状态位(位0)为0时,执行BX指令,使微处理器从Thumb状态切换到ARM状态。此外,在进行异常处理时,将PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。12五月2023生物医学工程学院电子技术系63.1.2ARM体系结构的存储器格式存储器格式地址空间的规则:位于地址A的字包含的字节位于地址A,A+1,A+2和A+3;位于地址A的半字包含的字节位于地址A和A+1;位于地址A+2的半字包含的字节位于地址A+2和A+3;位于地址A的字包含的半字位于地址A和A+2(两个半字);
字节字节字节字节地址AA+1A+2A+3半字半字字12五月2023生物医学工程学院电子技术系73.1.2ARM体系结构的存储器格式存储器系统有两种映射机制:小端存储器系统:在小端格式中,高位数字存放在高位字节中。因此存储器系统字节0连接到数据线7~0。大端存储器系统:在大端格式中,高位数字存放在低位字节中。因此存储器系统字节0连接到数据线31~24。0x12345678字数据的大小端存储方式存储器格式0x12高位地址低位地址0x340x560x78大端模式0x78高位地址低位地址0x560x340x12小端模式12五月2023生物医学工程学院电子技术系83.1.2ARM体系结构的存储器格式...0000000000000001000000100000001100000100ARM存储器模型第一个字第二个字...783C1A24783C1A24...小端模式大端模式十六进制数783c1a24存储情况12五月2023生物医学工程学院电子技术系93.1.2ARM体系结构的存储器格式一个基于ARM内核的芯片可以只支持大端模式或小端模式,也可以两者都支持。在ARM指令集中不包含任何直接选择大小端的指令,但是一个同时支持大小端模式的ARM芯片可以通过硬件配置(一般使用芯片的引脚来配置)来匹配存储器系统所使用的规则。存储器格式注意:如果实际的存储器格式与芯片的存储器格式不符时,只有以字为单位的数据存取才正确,否则将出现不可预期的结果。12五月2023生物医学工程学院电子技术系103.1ARM微处理器的编程模型3.1.3处理器模式ARM支持7种运行模式:①用户模式USR(usermode)②快速中断模式FIQ(fastinterruptmode)③中断模式IRQ(interruptmode)④管理模式SVR(supervisormode)⑤中止模式ABT(abortmode)⑥系统模式SYS(systemmode)⑦未定义模式UND(undefinedmode)12五月2023生物医学工程学院电子技术系113.1.3处理器模式处理器模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式12五月2023生物医学工程学院电子技术系123.1.3处理器模式特权模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式
除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。12五月2023生物医学工程学院电子技术系133.1.3处理器模式异常模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。12五月2023生物医学工程学院电子技术系143.1.3处理器模式用户和系统模式处理器模式说明备注用户(usr)正常程序工作模式不能直接切换到其它模式系统(sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权快中断(fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式中断(irq)用于通用中断处理IRQ异常响应时进入此模式管理(svc)操作系统保护代码系统复位和软件中断响应时进入此模式中止(abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处未定义(und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式这两种模式都不能由异常进入,而且它们使用完全相同的寄存器组。系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。12五月2023生物医学工程学院电子技术系153.1ARM微处理器的编程模型3.1.4寄存器组织ARM有37个32位的寄存器,其中31个为通用寄存器、1个当前程序状态寄存器CPSR、5个备份的程序状态寄存器SPSR。37个不能同时被访问。只有16个通用R0~R15和1或2个状态寄存器可随时访问。
1.ARM状态下的寄存器组织下图为ARM状态下寄存器组织结构图。12五月2023生物医学工程学院电子技术系163.1.4寄存器组织R0R1R2R3R4R5R6R7R8R9R10R11R12R13R14R15(PC)R0R1R2R3R4R5R6R7R8_fiqR9_fiqR10_fiqR11_fiqR12_fiqR13_fiqR14_fiqR15(PC)R0R1R2R3R4R5R6R7R8R9R10R11R12R13_svcR14_svcR15(PC)R0R1R2R3R4R5R6R7R8R9R10R11R12R13_abtR14_abtR15(PC)R0R1R2R3R4R5R6R7R8R9R10R11R12R13_irqR14_irqR15(PC)R0R1R2R3R4R5R6R7R8R9R10R11R12R13_undR14_undR15(PC)CPSRCPSRSPSR_figCPSRSPSR_svcCPSRSPSR_abtCPSRSPSR_irqCPSRSPSR_undARM状态下的程序状态寄存器ARM状态下的通用寄存器与程序计数器12五月2023生物医学工程学院电子技术系173.1.4寄存器组织ARM状态各模式下的寄存器寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq12五月2023生物医学工程学院电子技术系18寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM状态各模式下的寄存器所有的37个寄存器,分成两大类:31个通用32位寄存器;6个状态寄存器。12五月2023生物医学工程学院电子技术系19寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM状态各模式下可以访问的寄存器12五月2023生物医学工程学院电子技术系20寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。12五月2023生物医学工程学院电子技术系21寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。12五月2023生物医学工程学院电子技术系22寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器12五月2023生物医学工程学院电子技术系23寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。12五月2023生物医学工程学院电子技术系24寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。12五月2023生物医学工程学院电子技术系25寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq堆栈指针寄存器R13(SP)寄存器R13常作为堆栈指针(SP)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。12五月2023生物医学工程学院电子技术系263.1.4寄存器组织R7AOBER61234R5EFR4100100EF1234AOBE80341010LR8034100EF1234AOBE80341010R7AOBER61234R5EFR4100PC8034LR9048SP(a)压栈SP←栈底→(b)POP出栈压栈/出栈操作oldSP12五月2023生物医学工程学院电子技术系27寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq链接寄存器R14(LR)
R14为链接寄存器(LR),在结构上有两个特殊功能:在每种模式下,模式自身的R14版本用于保存子程序返回地址;当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。12五月2023生物医学工程学院电子技术系283.1.4寄存器组织Lable程序A程序BR14R14寄存器与子程序调用BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A执行过程中调用程序B;操作流程2.程序跳转至标号Lable,执行程序B。同时硬件将“BLLable”指令的下一条指令所在地址存入R14;3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;12五月2023生物医学工程学院电子技术系293.1.4寄存器组织R14寄存器与异常发生
异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。12五月2023生物医学工程学院电子技术系303.1.4寄存器组织R14寄存器注意要点
当发生异常嵌套时,这些异常之间可能会发生冲突。例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。12五月2023生物医学工程学院电子技术系313.1.4寄存器组织R14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB...XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;12五月2023生物医学工程学院电子技术系323.1.4寄存器组织R14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AaB...XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3.IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;IRQ模式下的程序BbreturnB...XA地址B地址B4.如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断,或者调用子程序;5.硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;6.在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;returnreturn解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈),或者切换到其它处理器模式下。12五月2023生物医学工程学院电子技术系333.1.4寄存器组织⑶程序计数器PC(R15)在ARM状态下,位[1:0]为了0(32位,每4个字节,即4个物理单元一个字),位[31:2]用于保存PC。R15虽然可用作通用寄存器,但一般不这样使用,因为对R15有一些特殊的限制,若违反限制,执行结果是未知。ARM7采用了三级流水线技术,指令读出的PC值是当前指令地址值加8个字节。12五月2023生物医学工程学院电子技术系34寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序计数器R15(PC)寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。12五月2023生物医学工程学院电子技术系353.1.4寄存器组织读R15的限制正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。LDRR0,PC??????PCPC-4PC-8正在执行正在译码正在取指流水线状态地址程序代码12五月2023生物医学工程学院电子技术系363.1.4寄存器组织读R15的限制当使用STR或STM指令保存R15时,会有一个例外。这些指令可能将当前指令地址加8字节或加12字节保存(将来可能还有其它数字)。偏移量是8还是12取决于具体的ARM芯片,但是对于一个确定的芯片,这个值是一个常量。所以最好避免使用STR和STM指令来保存R15,如果很难做到,那么应当在程序中计算出该芯片的偏移量。12五月2023生物医学工程学院电子技术系373.1.4寄存器组织读R15的限制计算偏移量程序代码:SUB R1,PC,#4 ;R1=下面STR指令的地址STR PC,[R0] ;保存STR指令地址+偏移量LDR R0,[R0] ;然后重装SUB R0,R0,R1 ;计算偏移量12五月2023生物医学工程学院电子技术系383.1.4寄存器组织写R15的限制正常操作时,写入R15的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。
12五月2023生物医学工程学院电子技术系393.1.4寄存器组织写R15的限制
由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。12五月2023生物医学工程学院电子技术系403.1.4寄存器组织⑷当前程序状态寄存器CPSR和备份的程序状态寄存器CPSR可在任何模式下被访问。当异常发生时,SPSR用于保存CPSR的当前值,异常退出时,SPSR送回CPSR。12五月2023生物医学工程学院电子技术系41寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器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_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序状态寄存器CPSR寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。12五月2023生物医学工程学院电子技术系423.1.4寄存器组织2.Thumb状态下的寄存器组织(本部分自行阅读)12五月2023生物医学工程学院电子技术系433.1.4寄存器组织3.程序状态寄存器CPSR和SPSR的功能:保存ALU中的当前操作信息、控制允许和禁止中断,设置运行模式,程序状态寄存器由三部分组成:条件标志位、保留位和控制位。12五月2023生物医学工程学院电子技术系443.1.4寄存器组织NZCV——IM0M1M2M3M4TF—...313029282726876543210CPSR寄存器的格式条件代码标志保留控制位溢出标志进位或借位扩展零负或小于IRQ禁止FIQ禁止状态位模式位NZCVIM0M1M2M3M4TF12五月2023生物医学工程学院电子技术系453.1.4寄存器组织⑴条件标志位大多数“数值处理指令”可以选择是否影响条件代码标志位。通常如果指令带S后缀,则该指令的执行会影响条件代码标志;但有一些指令的执行总是会影响条件代码标志。
N、Z、C和V位都是条件代码标志。通过算术操作、逻辑操作、MSR或者LDM指令可以对这些位进行设置。所有ARM指令都可按条件来执行,而Thumb指令中只有分支指令可按条件执行。12五月2023生物医学工程学院电子技术系463.1.4寄存器组织各标志位的含义如下:N运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1,结果为正数或零时N=0;Z指令结果为0时Z=1(通常表示比较结果“相等”),否则Z=0;C当进行加法运算(包括CMN指令),并且最高位产生进位时C=1,否则C=0。当进行减法运算(包括CMP指令),并且最高位产生借位时C=0,否则C=1。对于结合移位操作的非加法/减法指令,C为从最高位最后移出的值,其它指令C通常不变;V当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。12五月2023生物医学工程学院电子技术系473.1.4寄存器组织⑵控制位PSR的低8位(包括I、F、T和M[4:0])为控制位。异常发生时,控制位被改变;特权模式下,可由程序修改。I、F为中断禁止位。I对应IRQ中断,F对应FIQ中断。T反映处理器的运行状态。对于ARMv5及以上版本的T系列处理器,T=1,Thumb状态,T=0,ARM状态。对于ARMv5及以上版本的非T系列处理器,T=1,执行下一条指令,T=0,ARM状态。M0、M1、M2、M3、M4是运行模式。12五月2023生物医学工程学院电子技术系483.1.4寄存器组织⑵控制位中断禁止位包括I和F位:当I位置位时,IRQ中断被禁止;当F位置位时,FIQ中断被禁止。T位反映了正在操作的状态:当T位置位时,处理器正在Thumb状态下运行;当T位清零时,处理器正在ARM状态下运行。模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误。12五月2023生物医学工程学院电子技术系493.1.4寄存器组织M[4:0]模式可见的Thumb状态寄存器可见的ARM状态寄存器10000用户R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSR10001快中断R0~R7,SP_fiq,LR_fiq,PC,CPSR,SPSR_fiqR0~R7,R8_fiq~R14_fiq,PC,CPSR,SPSR_fiq10010中断R0~R7,SP_irq,LR_irq,PC,CPSR,SPSR_fiqR0~R12,R13_irq,R14_irq,PC,CPSR,SPSR_irq10011管理R0~R7,SP_svc,LR_svc,PC,CPSR,SPSR_svcR0~R12,R13_svc,R14_svc,PC,CPSR,SPSR_svc10111中止R0~R7,SP_abt,LR_abt,PC,CPSR,SPSR_abtR0~R12,R13_abt,R14_abt,PC,CPSR,SPSR_abt11011未定义R0~R7,SP_und,LR_und,PC,CPSR,SPSR_undR0~R12,R13_und,R14_und,PC,CPSR,SPSR_und11111系统R0~R7,SP,LR,PC,CPSRR0~R14,PC,CPSRCPSR模式位设置表12五月2023生物医学工程学院电子技术系503.1.4寄存器组织⑶保留位
PSR中其余位为保留位。改变条件位和控制位时不要改变保留位。程序中也不要用保留位来存储数据。仅用ARM版本的扩展。12五月2023生物医学工程学院电子技术系513.1ARM微处理器的编程模型3.1.5ARM的异常异常是由内部或外部源产生并引起处理器处理的一个事件。正常程序执行时,每执行一个ARM指令,PC值加4;执行跳转指令时,程序跳转到标号处执行;执行子程序时,程序跳转到相应的子程序;当异常中断发生时,程序执行完当前指令后,根据引起异常的模式,转去相应的异常中断处理程序处执行。处理异常前,保留当前处理器的状态,异常处理完成后,恢复处理器的状态,当前程序继续执行。处理器可处理多个异常,并按优先级别进行处理。ARM的异常与8位/16位体系结构的中断有很大的相似性,但异常与中断的概念并不完全等同。12五月2023生物医学工程学院电子技术系523.1.5ARM的异常1.ARM体系结构所支持的异常类型异常类型具体含义复位当处理器的复位电平有效时,产生复位异常,程序跳转到复位处理程序处执行。未定义指令当ARM处理器或协处理器遇到不有处理的指令时,产生未定义指令异常,可使用该异常机制进行软件仿真。软件中断由执行SWI指令产生,可用于用户模式下和程序调用特权操作指令,可使用该异常机制实现系统功能调用。指令预取中止……数据中止……外部中断请求(IRQ)当处理器的外部中断请求引脚有效,且CPSR中的I位为0时,产生IRQ异常,系统的外设可通过该异常中断服务。快速中断请求(FIQ)当处理器的快速中断请求引脚有效,且CPSR中的F位为0时,产生FIQ异常。12五月2023生物医学工程学院电子技术系533.1.5ARM的异常2.对异常的响应ARM按4个步骤处理异常:将下一条指令的地址保存在LR中,确保异常返回时能从正确位置重新执行程序。若异常从ARM状态进入,LR保存当前的PC+4(或PC+8,依模式而定),若从Thumb进入,LR保存当前PC的偏移量,异常处理程序不需要确定异常是从何种状态进入的。将CPSR→SPSR。根据异常类型,重置CPSR的运行模式位[4:0],使处理器进入相应的工作模式。强制PC从相关有异常向量地址取下一条指令执行,并跳转到异常处理程序处。必要时还可设置CPSR中的中断禁止位,以禁止中断发生。12五月2023生物医学工程学院电子技术系54程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示进入异常过程1.程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;▲用户程序运行时发生IRQ中断,硬件完成以下动作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式将下一条指令的地址存入IRQ模式的LR寄存器将CPSR寄存器内容存入IRQ模式的SPSR寄存器将跳转地址存入PC,实现跳转IRQ0?1...????BackAddrJumpAddrJumpSYS1?0...????“?”表示对该位不关心12五月2023生物医学工程学院电子技术系553.1.5ARM的异常3.从异常返回异常返回步骤:①LR-相应的编移量→PC②将SPSR→CPSR。③若进入异常时设置中断禁止,则清除。12五月2023生物医学工程学院电子技术系56▲在异常处理结束后,异常处理程序完成以下动作:程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示退出异常过程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0...????MODTFI...NZCV将SPSR寄存器的值复制回CPSR寄存器;将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。IRQ0?1...????BackAddrJumpAddrreturnSYS1?0...????SYS1?0...????BackAddr-4Jump“?”表示对该位不关心12五月2023生物医学工程学院电子技术系573.1.5ARM的异常4.异常的具体描述
⑴快速中断请求(FIQ,FastInterruptRequest)该异常是为了处理数据传输或者通道处理而设计的。通过处理器的FIQ输入引脚,由外部产生FIQ异常。FIQ受CPSR的F状态的控制,F=1时,禁止FIQ,F=0,处理器会在指令执行时检查FIQ的输入,若引脚为低电平,产生FIQ异常,执行异常处理操作,在异常处理程序中,使用下面指令从FIQ模式返回。SUBSPC,R14_fiq,#4
⑵外部中断请求(IRQ,InterruptRequest)该异常属于正常中断请求。由外部IRQ引脚输入,受CPSR的I位控制。I=1,禁止IRQ,I=0,接受IRQ请求。返回指令与FIQ相同。12五月2023生物医学工程学院电子技术系583.1.5ARM的异常4.异常的具体描述
⑶中止(ABORT)当对存储器访问失败时,产生ABORT。处理器在存储器访问周期内,检查ABORT。指令预取中止,发生在指令预取时。数据中止,发生在数据访问时。
⑷软件中断(SWI,softwareInterrupt)
软件中断指令用于进入管理模式,请求执行特定的管理功能。返回指令:MOVPC,R14_svc
⑸未定义指令
当ARM处理器遇到不能处理的指令时,产生未定义的指令异常。返回指令:MOVPC,R14_und12五月2023生物医学工程学院电子技术系593.1.5ARM的异常异常或入口返回指令之前的状态备注ARMR14_xThumbR14_xBLMOVPC,R14PC+4PC+2此处PC为BL,SWI,为定义的指令取指或预取指中止指令的地址SWIMOVSPC,R14_svcPC+4PC+2未定义的指令MOVSPC,R14_undPC+4PC+2预取指中止SUBSPC,R14_abt,#4PC+4PC+4快中断SUBSPC,R14_fiq,#4PC+4PC+4此处PC为由于FIQ或IRQ占先而没有被执行的指令的地址中断SUBSPC,R14_irq,#4PC+4PC+4数据中止SUBSPC,R14_abt,#8PC+8PC+8此处PC为产生数据中止的装载或保存指令的地址。复位无——复位时保存在R14_svc中的值不可预知。注意:“MOVSPC,R14_svc”是指在管理模式执行MOVSPC,R14指令。“MOVSPC,R14_und”、“SUBSPC,R14_abt,#4”等指令也是类似的。异常进入/退出12五月2023生物医学工程学院电子技术系603.1.5ARM的异常异常向量表地址异常类型进入时的模式进入时I的状态进入时F的状态0x00000000复位管理禁止禁止0x00000004未定义指令未定义IF0x00000008软件中断管理禁止F0x0000000C中止(预取)中止IF0x00000010中止(数据)中止IF0x00000014保留保留——0x00000018IRQ中断禁止F0x0000001CFIQ快中断禁止禁止注:表中的I和F表示不对该位有影响,保留原来的指。12五月2023生物医学工程学院电子技术系613.1.5ARM的异常异常优先级注:当多个异常同时发生时,一个固定的优先级系统决定它们被处理的顺序异常类型优先级复位1(最高优先级)数据中止2FIQ3IRQ4预取中止5未定义指令6SWI7(最低优先级)优先级降低12五月2023生物医学工程学院电子技术系623.1.5ARM的异常5.应用程序中的异常处理为保证发生异常时处理器处于可知状态,一般在应用程序设计中,在异常向量表中设置一条跳转指令,一旦发生异常时,程序跳转到异常处理程序入口,异常处理后返回主程序继续执行。12五月2023生物医学工程学院电子技术系63第三章第2节ARM存储器设计12五月2023生物医学工程学院电子技术系643.2ARM存储器设计1.简介ARM7TDMI处理器采用冯·诺依曼(VonNeumann)结构,指令和数据共用一条32位数据总线。只有装载、保存和交换指令可访问存储器中的数据。ARM7的规范仅定义了处理器核与存储系统之间的信号及时序(局部总线),而现实的芯片一般在外部总线与处理器核的局部总线之间有一个存储器管理部件将局部总线的信号和时序转换为现实的外部总线信号和时序。因此,外部总线的信号和时序与具体的芯片相关,不是ARM7的标准。具体到某个芯片的外部存储系统的设计需要参考其芯片的数据手册或使用手册等资料。12五月2023生物医学工程学院电子技术系653.2ARM存储器设计1.简介ARM7内核存储器控制器存储器ARM7定义了局部总线的接口时序各芯片厂商制定了自己的接口时序ARM7局部总线一般在两者之间加入存储器控制器12五月2023生物医学工程学院电子技术系663.2ARM存储器设计1.简介ARM7TDMI处理器将存储器看作是一个从0开始的线性递增的字节集合:字节0到3保存第1个存储的字字节4到7保存第2个存储的字字节8到11保存第3个存储的字依此类推ARM7TDMI处理器可以将存储器中的字以下列格式存储(详细说明见“存储器格式”小节):大端格式(Big-endian)小端格式(Little-endian)12五月2023生物医学工程学院电子技术系672.地址空间ARM结构使用单个平面的232个8位字节地址空间。字节地址按照无符号数排列,从0到232-1。地址空间可以看作是包含230个32位字,或231个16位半字。如果地址向上或向下溢出地址空间,通常会发生翻转。注意:如果在取指操作时地址发生溢出,只要没有执行预取的无效指令,就不会导致异常。跳转目标的计算方法:(当前指令的地址)+8+偏移量下一条指令位置的计算方法:(当前指令的地址)+4
12五月2023生物医学工程学院电子技术系683.2ARM存储器设计3.存储器的容量和速度因处理器的速度很快,要求存储器的速度也要快,但存储器容量越大,其速度越慢。在设计时需要合理平衡,一般采用两级存储结构,速度快、容量小的作为高速缓存,容量大,速度慢的作为一般存储器。前者用于保存最常用的指令和数据。两个层次结构还可扩展到多个层次,每一个层次适应不同的存储要求。寄存器为顶层,几十个32位寄存器,速度为ns;12五月2023生物医学工程学院电子技术系693.2ARM存储器设计3.存储器的容量和速度片上高速缓存,8~32KB,约10ns;主存储器,几MB至几百MB,约100ns;备份存储器,数百MB到数百GB,约几十ms。寄存器中的数据由编译器或汇编器直接控制,其他层次数据被自动管理。高速缓存对应用程序不透明,主存和备份存储的分页由操作系统控制。嵌入式系统没有备份存储器,因此不使用分页。通常采用混合高速缓存组织结构,因此设计时需关注高速缓存的问题。12五月2023生物医学工程学院电子技术系703.2ARM存储器设计4.片上RAM片上RAM作为高速缓存,对程序员透明,需要管理与控制,才能有效地利用,但当应用不能预测时,应采用外扩的高速缓存。使用片上RAM时,它必须足够快,方可与处理器配合工作,又必须足够大,方可存下重要程序,但太快功耗就大,太大体积就大,设计时应平衡。12五月2023生物医学工程学院电子技术系713.2ARM存储器设计5.高速缓存DRAM容量约数百MB,存取频率约几十MHz,但处理器每秒达几千万个记忆请求,需要解决速度匹配问题。处理器支持两种组织结构:
①冯·诺依曼结构高速缓存特点:指令与数据公用,能够自动调整两者的比例,性能较好。12五月2023生物医学工程学院电子技术系72寄存器3.2ARM存储器设计寄存器处理器指令复制数据复制缓冲区指令数据存储区地址指令和数据地址和数据地址指令和数据公用的缓存12五月2023生物医学工程学院电子技术系733.2ARM存储器设计复制指令缓冲区寄存器地址复制数据缓冲区指令数据存储区地址地址地址指令指令数据数据数据和指令分开的缓存②Harward结构高速缓存特点:指令与数据分开,单一周期内完成载入和存储指令。处理器12五月2023生物医学工程学院电子技术系743.2ARM存储器设计6.高速缓存的设计实例典型设计见P55图2.9。虚拟地址分配:[1:0]用于32-bit字的一个字节(4个字节);[3:2]从高速缓存串(4个字)中选出一个字;[5:4]用于选择4个tagCAM(ContentAddressableMemory)64入口的标识内容可寻址存储器)中的一个;[31:6]用来检测数据是否在被选项中的那个高速缓存单元中。12五月2023生物医学工程学院电子技术系753.2ARM存储器设计7.未对齐的存储器访问ARM结构通常希望所有的存储器访问都合理的对齐。具体来说就是字访问的地址通常是字对齐的,而半字访问使用的地址是半字对齐的。不按这种方式对齐的存储器访问称为非对齐的存储器访问。将一个非字(半字)对齐的地址写入ARM(Thumb)状态的R15寄存器,将引起非对齐的指令取指。在一个非字(半字)对齐的地址读写一个字(半字),将引起非对齐的数据访问。
12五月2023生物医学工程学院电子技术系763.2ARM存储器设计8.指令的预取和自修改代码许多ARM实现在前一条指令的执行尚未完成时将指令从存储器中取出。这个动作称为指令的预取。指令的预取并不是实际执行指令。芯片的生产厂商可以自由选择预取指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《生物安全管理要求》课件
- 《生物质碳化技术》课件
- 2025年宇宙生命之谜
- 2024-2025学年浙江省丽水市“五校高中发展共同体”高一上学期10月联考历史试题(解析版)
- 单位管理制度集粹汇编【员工管理篇】
- 2025年高考数学一轮复习之常用逻辑用语
- 单位管理制度汇编大合集【员工管理】十篇
- 单位管理制度合并汇编职工管理十篇
- 2024春节放假安全风险应急预案范文(32篇)
- 《穴盘育苗技术》课件
- 2021年河南学业水平考试 pyton操作题代码以及 Python基础知识点
- 整本书阅读《乡土中国》课件+2024-2025学年统编版高中语文必修上册
- 夏天奔跑的声音(2022年浙江杭州中考语文试卷记叙文阅读题及答案)
- 人力资源许可证制度(服务流程、服务协议、收费标准、信息发布审查和投诉处理)
- 延期留用岗位协议书模板
- 借条的正规模板(2024版)
- 人教PEP版小学英语六年级上册Unit1-6单元单元检测试卷(含听力材料)
- 销售合同编号规则(2024版)
- 2024至2030年中国生活权益卡券行业发展监测及投资战略研究报告
- 大学美育-美育赏湖南智慧树知到期末考试答案章节答案2024年湖南高速铁路职业技术学院
- 数据结构期末考试题及答案
评论
0/150
提交评论