ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【嵌入式学习笔记】ARM的处理模式和寄存器

【嵌入式学习笔记】ARM的处理模式和寄存器 ARM的工作状态ARM7ARM状态32位ARM状态下执行字对准的32位ARM指令Thumb状态16位Thumb状态下执行半字对准的16位Thumb指令。在程序执行的过程中处理器可以在两种状态下切换需要强调的是ARM和Thumb之间状态的切换不影响处理器的模式或寄存器的内容ARM处理器开始执行代码是时只能处于ARM状态ARM 处理器在复位上电或重启后硬件默认从 ARM 状态开始执行第一条指令而不是从 Thumb 状态开始Cortex以AM64x/AM243x为例Cortex-A53基于 ARMv8-A 架构有两种执行状态AArch64 状态/AArch32 状态。AArch64 状态支持64位指令集AArch32 状态可在 ARMA32和 ThumbT32之间切换Cortex-R5F基于 ARMv7-R 架构实际开发中通常以 Thumb-2 为主但也可以使用 ARM 指令Cortex-M4F基于 ARMv7E-M 架构只支持 Thumb/Thumb-2 指令集不支持 ARM 指令集Thumb-232位和16位让 Thumb 状态同时拥有 16 位和 32 位指令。CPU 在执行时依然处于 Thumb 状态。核心与架构ARM7是处理器核心ARMv7是体系结构版本如ARM7核心是ARMv3架构Cortex核心是ARMv7架构。ARM的处理模式CPSR【40】处理模式用途可访问的寄存器10000User程序正常的执行模式PCR14~R0CPSR10001FIQ用于高速数据传输和通道处理PCR14_fiq~R8_fiqR7~R0CPSRSPSR_fiq10010IRQ用于普通的外部中断请求处理PCR14_irq~R13_irqR12~R0CPSRSPSR_irq10011SVC供操作系统使用的保护模式PCR14_svc~R13_svcR12~R0CPSRSPSR_svc10111Abort用于虚拟存储和存储保护PCR14_abt~R13_abtR12~R0CPSRSPSR_abt11011Undefined用于支持硬件协处理器软件仿真PCR14_und~R13_undR12~R0CPSRSPSR_abt11111System用于运行特权级的操作系统任务PCR14~R0CPSR寄存器R13SP栈指针。管“临时数据往哪放”。它始终指向当前栈顶。函数调用时返回地址、局部变量、寄存器现场都压到 SP 指向的位置。函数返回时再从 SP 弹回去。寄存器R14LR链接寄存器。管“函数从哪来回哪去”——存返回地址。寄存器R15PC程序计数器。管“下一条指令在哪”。它保存当前正在执行指令的下一条指令的地址。CPU 每执行完一条PC 就指向下一条流水线才能连续不断地取指。寄存器CPSRCurrent Program Status Register32位记录 CPU 当前运行状态的寄存器。寄存器SPSRSaved Program Status RegisterCPSR 的“备份副本”。当异常中断、系统调用等发生时CPU 硬件会自动把当前的 CPSR 内容复制到对应异常模式的 SPSR 里保存起来。等异常处理完返回时再从 SPSR 恢复到 CPSR这样就能准确回到异常发生前的状态。分组寄存器ARM 架构里的分组寄存器主要包括 SP、LR、SPSR以及 FIQ 模式下专属的 R8_fiq ~ R12_fiq。SP (R13)每个特权模式都有独立的副本SP_irq, SP_fiq, SP_svc, SP_abt, SP_undLR (R14)每个特权模式都有独立副本LR_irq, LR_fiq, LR_svc, LR_abt, LR_undSPSR每个异常模式对应一个SPSR_irq, SPSR_fiq, SPSR_svc, SPSR_abt, SPSR_undR8~R12只有 FIQ 模式有专属副本R8_fiq ~ R12_fiq其他模式共用当User模式切换到IRQ模式时寄存器进入 IRQ 时ISR 执行中返回 User 后R0-R7不变用户值手动压栈保存后可用恢复为用户值R8-R12不变用户值手动压栈保存后可用恢复为用户值SP (R13)切到 SP_irqSP_irq切回 SP_usrLR (R14)切到 LR_irq存返回地址LR_irq可能被覆盖已压栈切回 LR_usrPC (R15)跳到向量表执行 ISR回到被中断处CPSR存入SPSR_irq自身切模式IRQ 模式从 SPSR_irq 恢复SPSR_irq硬件写入只读不再使用在AM64x/AM243x中Cortex-A53除了经典的 USR、FIQ、IRQ、SVC、ABT、UND、SYS 外它还额外增加了 HYP虚拟化 和 MON安全监控 模式以支持 Linux、虚拟化和 TrustZone 安全隔离。Cortex-R5F保留了经典 7 种模式USR、FIQ、IRQ、SVC、ABT、UND、SYS专门为硬实时任务优化。Cortex-M4F模式被极致简化只有 Thread线程和 Handler处理两种模式。它没有 USR/SVC 等复杂区分中断发生时硬件自动切到 Handler 并保存现场非常适合极简的低功耗控制。
返回列表