Presentation is loading. Please wait.

Presentation is loading. Please wait.

微机原理与接口技术 第二章 ARM微处理器硬件结构

Similar presentations


Presentation on theme: "微机原理与接口技术 第二章 ARM微处理器硬件结构"— Presentation transcript:

1 微机原理与接口技术 第二章 ARM微处理器硬件结构
主讲人:鞠 雷 山东大学 计算机科学与技术学院

2 第2章 ARM微处理器硬件结构 计算机体系结构 ARM处理器结构和技术特征 ARM处理器模式及内部寄存器 ARM 存 储 系 统 机 制

3 处理器7种工作模式 Arm处理器工作于7种模式,不同模式所能访问的系统资源不同,由此提供了对系统资源的有效保护并提高了异常处理的速度。
处理器模式 说明 备注 用户 (usr) 正常程序执行模式 不能直接切换到其它模式 系统 (sys) 运行操作系统的特权任务 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 用于高速数据传输及通道处理 FIQ异常响应时且CPSR的F=0进入进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时且CPSR的I=0进入进入此模式 管理 (svc) 操作系统保护模式 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 用户程序运行在用户模式。此模式下不能访问受操作系统保护的资源,除异常发生切换到异常模式外,不能以软件切换到其它模式。 系统模式可以访问系统资源。异常模式下通过软件进入系统模式可以访问系统资源。 Arm处理器欲访问的数据或指令的地址不存在,进入中止模式。 系统启动过程:引导程序把系统引导至ram区,进入管理模式,设置各模式堆栈,进入用户模式。若发生异常,进入异常模式,异常处理结束后返回用户模式。

4 处理器模式 特权模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 未定义 (und) 中止 (abt) 管理 (svc) 中断 (irq) 快中断 (fiq) 系统 (sys) 除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。 用指令向CPSR的M[4:0]字段写入特定的值,以进入相应的工作模式.

5 处理器模式 异常模式 处理器模式 说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。 未定义 (und) 中止 (abt) 管理 (svc) 中断 (irq) 快中断 (fiq)

6 处理器模式 用户和系统模式 这两种模式都不能由异常进入,都使用完全相同的寄存器组。
说明 备注 用户 (usr) 正常程序工作模式 不能直接切换到其它模式 系统 (sys) 用于支持操作系统的特权任务等 与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq) 支持高速数据传输及通道处理 FIQ异常响应时进入此模式 中断 (irq) 用于通用中断处理 IRQ异常响应时进入此模式 管理 (svc) 操作系统保护代码 系统复位和软件中断响应时进入此模式 中止 (abt) 用于支持虚拟内存和/或存储器保护 在ARM7TDMI没有大用处 未定义 (und) 支持硬件协处理器的软件仿真 未定义指令异常响应时进入此模式 系统 (sys) 用户 (usr) 这两种模式都不能由异常进入,都使用完全相同的寄存器组。 系统模式是特权模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。

7 ARM® Developer Suite Developer Guide
关于ARM的system mode ARM® Developer Suite Developer Guide 5.12. System mode

8 通用寄存器寄存器 简介 在ARM7TDMI处理器内部有37个用户可见的寄存器。
在不同的工作模式和处理器状态下,程序员可以访问的寄存器也不尽相同。

9 ARM状态各模式下的寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断
通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq * R9(SB,v6) R9 R9_fiq * R10(SL,v7) R10 R10_fiq * R11(FP,v8) R11 R11_fiq * R12(IP) R12 R12_fiq * R13(SP) R13 R13_svc* R13_abt * R13_und * R13_irq * R13_fiq * R14(LR) R14 R14_svc * R14_abt * R14_und * R14_irq * R14_fiq * R15(PC) R15 状态寄存器 R16(CPSR) CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq

10 ARM状态各模式下的寄存器 所有的37个寄存器,分成两大类: 31个通用32位寄存器; 6个状态寄存器。 寄存器类别 寄存器在汇编中的名称
各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq R15 R14_fiq R14_irq R14_und R14_abt R14_svc R14 R13_fiq R13_irq R13_und R13_abt R13_svc R13 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8 R7 R6 R5 R4 R3 R2 R1 R0 所有的37个寄存器,分成两大类: 31个通用32位寄存器; 6个状态寄存器。 SPSR_fiq SPSR_irq SPSR_und SPSR_abt SPSR_svc CPSR

11 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器
ARM状态各模式下可以访问的寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_abt SPSR_und SPSR_irq SPSR_fiq CPSR R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 用户 CPSR R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 系统 SPSR_svc CPSR R15 R14_svc R13_svc R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 管理 SPSR_abt CPSR R15 R14_abt R13_abt R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 中止 SPSR_und CPSR R15 R14_und R13_und R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 未定义 SPSR_fiq CPSR R15 R14_fiq R13_fiq R12_fiq R11_fiq R10_fiq R9_fiq R8_fiq R7 R6 R5 R4 R3 R2 R1 R0 快中断 SPSR_irq CPSR R15 R14_irq R13_irq R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 中断

12 一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq R13_fiq R13_irq R13_und R13_abt R13_svc R13 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8 R7 R6 R5 R4 R3 R2 R1 R0 在汇编语言中寄存器R0~R13为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。

13 根据是否为所有模式共享,分为未分组寄存器和分组寄存器。
一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq R7 R6 R5 R4 R3 R2 R1 R0 R13_fiq R13_irq R13_und R13_abt R13_svc R13 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8 R7 R6 R5 R4 R3 R2 R1 R0 根据是否为所有模式共享,分为未分组寄存器和分组寄存器。 其中R0~R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。

14 寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。
一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R8~R14为分组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器。 分为2类: 1、二分组 2、六分组 R14_fiq R14_irq R14_und R14_abt R14_svc R14 R13_fiq R13_irq R13_und R13_abt R13_svc R13 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8

15 一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R8~R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。 R12_fiq R12 R11_fiq R11 R10_fiq R10 R9_fiq R9 R8_fiq R8

16 寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。
一般的通用寄存器 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。 R14_fiq R14_irq R14_und R14_abt R14_svc R14 R13_fiq R13_irq R13_und R13_abt R13_svc R13

17 堆栈指针寄存器R13(SP) 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R13常作为堆栈指针(SP,系统和用户模式)。在ARM指令集当中,没有以特殊方式使用R13的指令或其它功能,只是习惯上都这样使用。但是在Thumb指令集中存在使用R13的指令。

18 R14为链接寄存器(LR),在结构上有两个特殊功能: 在每种模式下,模式自身的R14版本用于保存子程序返回地址;
寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq R14为链接寄存器(LR),在结构上有两个特殊功能: 在每种模式下,模式自身的R14版本用于保存子程序返回地址; 当发生异常时,将R14对应的异常模式版本设置为异常返回地址(有些异常有一个小的固定偏移量)。

19 内部寄存器 R14(LR)寄存器与子程序调用 操作流程 程序A 程序B R14 1.程序A执行过程中调用程序B; ???
Lable 程序A 程序B R14 1.程序A执行过程中调用程序B; Lable ??? 2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14(LR); BL Lable 地址A ??? MOV PC,LR R14(地址A) 3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;

20 内部寄存器 R14寄存器与异常发生 异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,都是由硬件完成的。区别在于有些异常有一个小常量的偏移。 与流水线级数、指令的时钟周期数等有关。

21 内部寄存器 R14寄存器注意要点 当发生异常嵌套时,这些异常之间可能会发生冲突(lr的内容可能被覆盖,致使程序不能返回正确的断点地址)。
例如:如果用户在用户模式下执行程序时发生了IRQ中断,用户模式寄存器不会被破坏。但是如果允许在IRQ模式下的中断处理程序重新使能IRQ中断,并且发生了嵌套的IRQ中断时,外部中断处理程序保存在R14_irq中的任何值都将被嵌套中断的返回地址所覆盖。

22 内部寄存器 R14寄存器注意要点: 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;
用户模式下的程序 IRQ模式下的程序A 1.执行用户模式下的程序; 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏; 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序; a B ... X A 地址B return 地址B 未被破坏 R14_irq

23 内部寄存器 R14寄存器注意要点: 解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈)。
R14_irq 用户模式下的程序 IRQ模式下的程序A IRQ模式下的程序B 解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值(将R14入栈)。 1.执行用户模式下的程序; 2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏; 3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序; a a 4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断; 5. 硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误; 6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回; B ... X A 地址A D ... X C 地址B return return return 地址B 地址D 未被破坏 R14_irq 被破坏

24 程序计数器R15(PC) 寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器R15为程序计数器(PC),它指向正在取指的地址。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。

25 内部寄存器 读R15的限制: 正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。 MOV R0,PC ??? PC PC-4 PC-8 正在执行 正在译码 正在取指 流水线状态 地址 程序代码 当前pc值

26 CPSR和SPSR通过特殊指令(MRS、MSR)进行访问.
寄存器类别 寄存器在汇编中的名称 各模式下实际访问的寄存器 用户 系统 管理 中止 未定义 中断 快中断 通用寄存器和程序计数器 R0(a1) R0 R1(a2) R1 R2(a3) R2 R3(a4) R3 R4(v1) R4 R5(v2) R5 R6(v3) R6 R7(v4) R7 R8(v5) R8 R8_fiq R9(SB,v6) R9 R9_fiq R10(SL,v7) R10 R10_fiq R11(FP,v8) R11 R11_fiq R12(IP) R12 R12_fiq R13(SP) R13 R13_svc R13_abt R13_und R13_irq R13_fiq R14(LR) R14 R14_svc R14_abt R14_und R14_irq R14_fiq R15(PC) R15 状态寄存器 CPSR SPSR SPSR_svc SPSR_abt SPSR_und SPSR_irq SPSR_fiq 寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态备份寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。 CPSR和SPSR通过特殊指令(MRS、MSR)进行访问.

27 程序状态寄存器 简介 4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V) ); 2个中断禁止位,分别控制一种类型的中断;
ARM7TDMI内核包含1个CPSR和5个供异常处理程序使用的SPSR。CPSR反映了当前处理器的状态,其包含: 4个条件代码标志(负(N)、零(Z)、进位(C)和溢出(V) ); 2个中断禁止位,分别控制一种类型的中断; 5个对当前处理器模式进行编码的位; 1个用于指示当前执行指令(ARM还是Thumb)的位。

28 程序状态寄存器 CPSR/SPSR寄存器的格式 条件代码标志 保留 控制位 N Z C V — I M0 M1 M2 M3 M4 T F
. . . N Z C V I F T M0 M1 M2 M3 M4 溢出标志 oVerflow 进位或借位扩展 Carry 模式位 Mode 状态位 Thumb 零 Zero FIQ禁止 Fast 负或小于 Negative IRQ禁止 Interrupt

29 程序状态寄存器 所有ARM指令都可按条件来执行。 ADDEQ R0,R1,R2
条件代码标志 N、 Z、 C和V位都是条件代码标志。算术操作、逻辑操作、MSR或者LDM指令可以对这些位进行设置。 所有ARM指令都可按条件来执行。 ADDEQ R0,R1,R2 大多数“数值处理指令”可以选择是否影响条件代码标志位。通常如果指令带S后缀,则该指令的执行会影响条件代码标志;但有一些指令的执行总是会影响条件代码标志. ADDS R0,R1,R ADD R0,R1,R2

30 程序状态寄存器 各标志位的含义如下: N 运算结果的最高位反映在该标志位。对于有符号二进制补码,结果为负数时N=1(MI),结果为正数或零时N=0(PL); Z 指令结果为0时Z=1(通常表示比较结果“相等” EQ),否则Z=0(NE); C 当进行加法运算,并且最高位产生进位时C=1(CS),否则C=0(CC)。当进行减法运算,并且最高位产生借位时C=0,否则C=1。 V当进行加法/减法运算,并且发生有符号溢出时V=1,否则V=0,其它指令V通常不变。

31 程序状态寄存器 中断禁止位包括I和F位: 当I位置位时,IRQ中断被禁止; 当F位置位时,FIQ中断被禁止。 T位反映了正在操作的状态:
控制位(CPSR的最低8位为控制位) 中断禁止位包括I和F位: 当I位置位时,IRQ中断被禁止; 当F位置位时,FIQ中断被禁止。 T位反映了正在操作的状态: 当T位为1时,处理器正在Thumb状态下运行; 当T位清零时,处理器正在ARM状态下运行。

32 程序状态寄存器 控制位 模式位包括M4、M3、M2、M1和M0,这些位决定处理器的操作模式。
注意:不是所有模式位的组合都定义了有效的处理器模式,如果使用了错误的设置,将引起一个无法恢复的错误。

33 CPSR模式位设置表 M[4:0] 模式 可见的Thumb状态寄存器 可见的ARM状态寄存器 10000 用户
R0~R7,SP,LR,PC,CPSR R0~R14,PC, CPSR 10001 快中断 R0~R7,SP_fiq,LR_fiq,PC,CPSR, SPSR_fiq R0~R7,R8_fiq~R14_fiq,PC, CPSR, SPSR_fiq 10010 中断 R0~R7,SP_irq,LR_irq,PC,CPSR, SPSR_fiq R0~R12,R13_irq,R14_irq,PC, CPSR, SPSR_irq 10011 管理 R0~R7,SP_svc,LR_svc,PC,CPSR, SPSR_svc R0~R12,R13_svc,R14_svc, PC,CPSR, SPSR_svc 10111 中止 R0~R7,SP_abt,LR_abt,PC,CPSR, SPSR_abt R0~R12,R13_abt,R14_abt,PC, CPSR, SPSR_abt 11011 未定义 R0~R7,SP_und,LR_und,PC,CPSR, SPSR_und R0~R12,R13_und,R14_und, PC,CPSR,SPSR_und 11111 系统

34 程序状态寄存器 保留位 8-27位 CPSR中的保留位被保留将来使用。为了提高程序的可移植性,当改变CPSR标志和控制位时,请不要改变这些保留位。另外,请确保程序的运行不受保留位的值影响,因为将来的处理器可能会将这些位设置为1或者0。

35 异常中断 异常中断是指处理器由于外部或内部的原因,停止执行当前任务,转而处理特定的事件,处理完后返回原程序,继续执行。 ARM共有7种类型的异常,不同类型的异常将导致处理器进入不同的工作模式,并执行不同特定地址的指令。各异常类型具有不同的优先级 ,如下表所示 35

36 异常中断 中断产生条件 及处理 复位:处理器reset引脚为有效信号发生复位异常。复位时,进入管理模式,跳转到复位处理 程序重新引导系统
异常进入和退出 中断产生条件 及处理 复位:处理器reset引脚为有效信号发生复位异常。复位时,进入管理模式,跳转到复位处理 程序重新引导系统 未定义指令:当ARM7TDMI-S 处理器遇到一条系统内任何协处理器都无法处理的指令时产生未定义指令异常。软件可使用这一机制通过仿真未定义的协处理器指令来扩展ARM 指令集。 中断产生条件 及处理 软件中断:执行swi指令产生软件中断。用户程序通过软件中断可实现操作系统功能调用。 指令预取中止:当处理器预取指令的地址不存在(cache),或该地址不允许当前指令访问(存储器),存储器会向处理器发出中止信号;当发生预取指中止时ARM7TDMI-S 内核将预取的指令标记为无效,只有在指令到达流水线的执行阶段时才进入异常。 数据访问中止: 若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。 中止处理程序必须找出中止的原因,使请求的数据可以被访问并重新执行被中止的指令 3 0xFFFF001C 0x C 快速中断模式 快速中断请求(FIQ) 4 0xFFFF0018 0x 外部中断模式 外部中断请求(IRQ) 2 0xFFFF0010 0x 中止模式 数据访问中止 5 0xFFFF000C 0x C 指令预取中止 6 0xFFFF0008 0x 管理模式 软件中断 (SWI) 0xFFFF0004 0x 未定义指令中止模式 未定义指令 1 0xFFFF0000 0x 复位 优先级 特定地址 (高端) (低端) 工作模式 异常类型 中断产生条件 及处理 外部中断请求: 当处理器的外部中断请求引脚有效,而且CPSR中的I位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。 快速中断请求: 处理器的快速中断请求引脚有效,而且CPSR中的F位为0时,产生FIQ异常。 FIQ优先级高于IRQ,FIQ含有较多的私有寄存器。 36


Download ppt "微机原理与接口技术 第二章 ARM微处理器硬件结构"

Similar presentations


Ads by Google