详解ARM9的CPSR寄存器
最近在学习嵌入式底层系统开发,在写启动代码时要设置各个模式的SP,需要调整CPU的工作模式,部分代码如下:
.equ DISABLE_IRQ, 0x80
.equ DISABLE_FIQ, 0x40
.equ SYS_MOD, 0x1f
.equ IRQ_MOD, 0x12
.equ FIQ_MOD, 0x11
.equ SVC_MOD, 0x13
.equ ABT_MOD, 0x17
.equ UND_MOD, 0x1b
msr cpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|SVC_MOD)
ldr sp,=_SVC_STACK
msr cpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|IRQ_MOD)
ldr sp,=_IRQ_STACK
msr cpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|FIQ_MOD)
ldr sp,=_FIQ_STACK
msr cpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|ABT_MOD)
ldr sp,=_ABT_STACK
msr cpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|UND_MOD)
ldr sp,=_UND_STACK
msr cpsr_c,#(DISABLE_IRQ|DISABLE_FIQ|SYS_MOD)
ldr sp,=_SYS_STACK
代码中用到了cpsr_c,那么究竟cpsr_c与cpsr是什么关系?
ARM9的每种工作模式除R0~R15共16个寄存器外,还有第17个寄存器CPSR(Current Program Status Register),叫做当前程序状态寄存器,CPSR中一些位被用于标识各种状态,一些位被用于标识当前出于什么工作模式。CPSR有4个8位区域:标志域(F)、状态域(S)、扩展域(X)、控制域(C)。
在ARM 处理器中,只有MSR 指令可以直接设置状态寄存器CPSR或SPSR。指令格式如下:
MSR{cond} psr_fields,#immed_8r(8位立即数)
MSR{cond} psr_fields,Rm
其中: psr 指CPSR 或SPSR
fields 指定传送的区域。Fields 可以是以下的一种或多种(字母必须为小写):
- c 控制域屏蔽字节(psr[7…0])
- x 扩展域屏蔽字节(psr[27…8])
- s 状态域屏蔽字节(psr[31.…28])
分享到:
相关推荐
ARM_cpsr寄存器
ARM CPSR + SPSR详解 1、SPSR 为 CPSR 中断时刻的副本,退出中断后,将SPSR中数据恢复到CPSR中。 2、用户模式和系统模式下SPSR不可用。
ARM中的程序状态寄存器(CPSR).pdf
从实例学会ARM指令集,主要有自述逻辑指令,移位指令,比较指令,分支指令等等
ARM V4的CPSR寄存器(和保存它的SPSR寄存器)中的位分配如下图1所示。 图1 程序状态寄存器格式 状态标志位含义:(其它位的含义和本文主题无关,此处不多介绍) N N=1 表示运算的结果为负数;N=0 ...
ARM中通过cpsr技术,可以让arm工作在不同的工作状态。
ARM体系结构包含1个当前程序状态寄存器(CPSR)和5个各份的程序状态寄存器(SPSRs)。使用MSR和MRS指令来设置和读取这些寄存器。 当前程序状态寄存器(CPSR),持有关于当前处理器状态的信息。其他5个各份的程序...
ARM指令集详解 ARM可以用两套指令集:ARM指令集和Thumb指令集。本文介绍ARM指令集。在介绍ARM指令集之前,先介绍指令的格式。 1 指令格式 (1)基本格式 <opcode>{<cond>}{S} ,<Rn>{,<opcode2>} 其中,内的项是...
ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。 状态寄存器中有些位是当前没有使用的,但在ARM将来版本中有可能使用这些位,因此用户程序不要使用这些位。 程序不能通过直接修改CPSR中T的控制位...
1 ARM 汇编指令集 一、 跳转指令 跳转指令用于实现程序流程的跳转, 在 ARM 程序中有两种方法可以实现程序流程的跳转: ...当 CPSR 寄存器中的 Z 条件码置位时,程序跳转到标号 Label 处执行 BEQ Label
Thumb状态下的寄存器集是ARM状态下寄存器集的一个子集,程序可以直接访问8个通用寄存器(R7~R0)、程序计数器(PC)、堆栈指针(SP)、链接寄存器(LR)和CPSR。同时,在每一种特权模式下都有一组SP、I-R和SPSR。 ...
MRS R1,CPSR BIC R1,R1,#0x1F ORR R1,R1,#0x1B MSR CPSR_cxsf,R1
ARM 体系结构所支持的异常和具体含义如下: 1、复位(优先级1) ... 当处理器的外部中断请求引脚有效,且CPSR 中的I 位为0 时,产生IRQ 异常。系统的外设能该异常请求中断服务(异常向量:0x0000,0018);
对初学arm的时,一些疑难问题进行总结,ARM汇编% ldr和adr CPSR_cxsf ^的作用 MACRO-MEND
SP(R13) 特殊寄存器 LR(R14) 1、当存在子程序时,保存有子程序的返回地址 2、当异常中断发生时,保存有异常模式的返回地址 PC(R15) 保存程序的当前地址 例 :(bootloader中start.S文件) reset: bl ...
当前程序状态信息从原来的R15寄存器移到当前程序状态寄存器CPSR中(Current Program Status Register);增加了程序状态保存寄存器SPSR(Saved Program Status Register);增加了两种异常模式,使操作系统代码可...
ARM处理器核包含一个CPSR寄存器,该寄存器包括一个全局中断禁止位,控制它打开和关闭中断。 (4)处理器支持一定数量的数据存储硬件堆栈 对于一些只有10根地址线的8位控制器,芯片最多可访问1KB存储单元,在...
[root@ORA9 gcc-asm]# arm-linux-gcc hello.c -o hello -static [root@ORA9 gcc-asm]# ls -l hello* -rwxr-xr-x 1 root root 520775 Sep 8 10:18 hello -rw-r--r-- 1 root root 160 Sep 8 10:15 hello.c [root@ORA9...
cpsr
9.3 ARM9TDMI 260 9.4 ARM10TDMI 263 9.5 Discussion 266 9.6 Example and exercises 267…… 10.1 Memory size and speed 10.2 On-chip memory 10.3 Caches 10.4 Cache design - an example 10.5 Memory management...