历史上的今天
今天是:2024年09月29日(星期日)
2021年09月29日 | ARM状态寄存器CPSR SPSR
2021-09-29 来源:eefocus
ARM的状态寄存器格式如上
位[31:24]为条件标志位域,用f 表示;
位[23:16]为状态位域,用s 表示;
位[15:8]为扩展位域,用x 表示;
位[7:0]为控制位域,用c 表示;
显然,常用的只有条件标志位域f和控制位域c。
如果需要操作状态寄存器,比如切换处理器模式,就需要修改控制位域中的模式位。
MRS: 程序状态寄存器到通用寄存器的数据传送指令
MSR: 通用寄存器到程序状态寄存器的数据传送指令
附:
M控制位控制处理器模式,具体含义如下:
M[4:0] 处理器模式 可访问的寄存器
ob10000 user pc,r14~r0,CPSR
0b10001 FIQ PC,R14_FIQ-R8_FIQ,R7~R0,CPSR,SPSR_FIQ
0b10010 IRQ PC,R14_IRQ-R13_IRQ,R12~R0,CPSR,SPSR_IRQ
0B10011 SUPERVISOR PC,R14_SVC-R13_SVC,R12~R0,CPSR,SPSR_SVC
0b10111 ABORT PC,R14_ABT-R13_ABT,R12~R0,CPSR,SPSR_ABT
0b11011 UNDEFINEED PC,R14_UND-R8_UND,R12~R0,CPSR,SPSR_UND
0b11111 SYSTEM PC,R14-R0,CPSR(ARM V4以及更高版本)
***条件标志位***
N——本位设置成当前指令运算结果的bit[31]的值。当两个表示的有符号整数运算时,n=1表示运算结果为负数,n=0表示结果为正书或零。
Z——z=1表示运算的结果为零;z=0表示运算的结果不为零。对于CMP指令,Z=1表示进行比较的两个数大小相等。
C——下面分四种情况讨论C的设置方法:
在加法指令中(包括比较指令CMP),当结果产生了进位,则C=1,表示无符号运算发生上溢出;其他情况C=0。
在减法指令中(包括减法指令CMP),当运算中发生错位,则C=0,表示无符号运算数发生下溢出;其他情况下C=1。
对于包含移位操作的非加减运算指令,C中包含最后一次溢出的的位的数值。对于其他非加减运算指令,C位的值通常不受影响。
V——对于加减运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号为溢出;通常其他指令不影响V位。
史海拾趣
|
这是一个内置音乐播放器、扬声器的枕头,手提箱式的设计方便携带,打开之后还可以展开一张很大的毯子,就算是躺在操场的草坪上,也不用担心草尖会扎到脖颈。内置的播放器可以识别U盘或存储卡,随时随地可以营造一个有轻音乐伴随的休憩空间。 … 查看全部问答> |
|
我想用C#开发WinCE的程序,找了半天没有找到怎么在按钮上放图片,听说是没有带这样的控件, 都是第三方的才行. 哪位有发给小弟一个. … 查看全部问答> |
|
在s2440.h有这么一段: #define ADC_BASE 0xB1800000 // 0x58000000 typedef struct { unsigned int rADCCON; ...… 查看全部问答> |
|
买的是tq2440,有四个GPIO引脚支持SPI协议。 但是不知道调试的话该从何做起。 刚开始学习,网上溜达了好多天 看了driver下的驱动程序以及DOcument下面的test程序 但是具体是怎么个操作过程,希望有人能指点一下 譬如说是不是先要用导线将MISO ...… 查看全部问答> |
|
转贴:LM3S单片机UART的FIFO理解 和μDMA方式的UART 最近在看UART,看到这篇理解的不错,特转发过来,和大家一起学习学习。 Stellaris单片机有两个16字FIFO,分别用于缓存收和发的数据。FIFO触发中断的深度可设置,设置为8个数据(1/8)触发发送中断时,就是当发送FIFO中数据少于8时触发发送 ...… 查看全部问答> |
|
void EEP_INIT(void) { FLASH_CR1 = 0x00; FLASH_CR2 = 0x00; FLASH_NCR2 = 0xff; FLASH_DUKR = MASS_KEY1; FLASH_DUKR = MASS_KEY2; while(!FL ...… 查看全部问答> |
|
现在产品已基本上开发出来,即将批量生产,但是却存在一个问题,在以前开发阶段,我总是通过在线 编程的方式将程序写入芯片,现在要批量生产了,总不能还通过这种方式吧,能不能向51单片机一样将程序编译成HEX或二进制文件,通过编程器,先加密,然后写到片子 ...… 查看全部问答> |





