ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄器包括:
● 31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。
● 6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。
ARM微处理器支持7种运行模式,分别为:
● usr(用户模式):ARM处理器正常程序执行模式。
● fiq(快速中断模式):用于高速数据传输或通道处理
● irq(外部中断模式):用于通用的中断处理
● svc(管理模式):操作系统使用的保护模式
● abt (数据访问终止模式): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。
● sys(系统模式): 运行具有特权的操作系统任务。
● und(未定义指令中止模式):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。
ARM微处理器的运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。
大多数的应用程序运行在用户模式下,当处理器运行在用户模式下时,某些被保护的系统资源是不能被访问的。
除用户模式以外,其余的所有6种模式称之为非用户模式,或特权模式(Privileged Modes);其中除去用户模式和系统模式以外的5种又称为异常模式(Exception Modes),常用于处理中断或异常,以及需要访问受保护的系统资源等情况。
ARM处理器在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0~R14)、一至二个状态寄存器和程序计数器。在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。
ARM处理器有32位ARM和16位Thumb两种工作状态。在32位ARM状态下执行字对齐的ARM指令,在16位Thumb状态下执行半字对齐的Thumb指令。
在Thumb状态下,程序计数器PC(Program Counter)使用位[1]选择另一个半字。
ARM处理器在两种工作状态之间可以切换,切换不影响处理器的模式或寄存器的内容。
(1)当操作数寄存器的状态位(位[0])为1时,执行BX指令进入Thumb状态。如果处理器在Thumb状态进入异常,则当异常处理(IRQ、FIQ、Undef、Abort和SWI)返回时,自动转换到Thumb状态。
(2)当操作数寄存器的状态位(位[0])为0时,执行BX指令进入ARM状态,处理器进行异常处理(IRQ、FIQ、Reset、Undef、Abort和SWI)。在此情况下,把PC放入异常模式链接寄存器中。从异常向量地址开始执行也可以进入ARM状态。
n ARM处理器的寄存器组织
ARM处理器的37个寄存器被安排成部分重叠的组,不能在任何模式都可以使用,寄存器的使用与处理器状态和工作模式有关。如图2.3.1所示,每种处理器模式使用不同的寄存器组。其中15个通用寄存器(R0~R14)、1或2个状态寄存器和程序计数器是通用的。
通用寄存器
通用寄存器(R0~R15)可分成不分组寄存器R0~R7、分组寄存器R8~R14和程序计数器R15 三类。
(1)不分组寄存器R0~R7
不分组寄存器R0~R7是真正的通用寄存器,可以工作在所有的处理器模式下,没有隐含的特殊用途。
(2)分组寄存器R8~R14
分组寄存器R8~R14取决于当前的处理器模式,每种模式有专用的分组寄存器用于快速异常处理。
寄存器R8~Rl2可分为两组物理寄存器。一组用于FIQ模式,另一组国用于除FIQ以外的其他模式。第1组访问R8_fiq~R12_fiq,允许快速中断处理。第二组访问R8_usr~R12_usr,寄存器R8~R12没有任何指定的特殊用途。
表明用户或系统模式使用的一般寄存器己被异常模式特定的另一寄存器所替代。
寄存器R13~R14可分为6个分组的物理寄存器。1个用于用户模式和系统模式,而其他5个分别用于svc、abt、und、irq和fiq五种异常模式。访问时需要指定它们的模式,如:R13_,R14_;其中:可以从usr、svc、abt、und、irq和fiq六种模式中选取一个。
寄存器R13通常用作堆栈指针,称作SP。每种异常模式都有自己的分组R13。通常R13应当被初始化成指向异常模式分配的堆栈。在入口处,异常处理程序将用到的其他寄存器的值保存到堆栈中;返回时,重新将这些值加载到寄存器。这种异常处理方法保证了异常出现后不会导致执行程序的状态不可靠。
寄存器R14用作子程序链接寄存器,也称为链接寄存器LK (Link Register)。当执行带链接分支(BL)指令时,得到R15的备份。 在其他情况下,将R14当做通用寄存器。类似地,当中断或异常出现时,或当中断或异常程序执行BL指令时,相应的分组寄存器R14_svc、R14_irq、R14_fiq、R14_abt和R14_und用来保存R15的返回值。
FIQ模式有7个分组的寄存器R8~R14,映射为R8_fiq~R14_fiq。在ARM状态下,许多FIQ处理没必要保存任何寄存器。User、IRQ、Supervisor、Abort和Undefined模式每一种都包含两个分组的寄存器R13和R14的映射,允许每种模式都有自己的堆栈和链接寄存器。
(3)程序计数器R15
寄存器R15用作程序计数器(PC)。在ARM状态,位[1:0]为0,位[31:2]保存PC。在Thumb状态,位[0]为0,位[31:1]保存PC。R15虽然也可用作通用寄存器,但一般不这么使用,因为对R15的使用有一些特殊的限制,当违反了这些限制时,程序的执行结果是未知的。
① 读程序计数器。指令读出的R15的值是指令地址加上8字节。由于ARM指令始终是字对齐的,所以读出结果值的位[1:0]总是0(在Thumb状态下,情况有所变化)。读PC主要用于快速地对临近的指令和数据进行位置无关寻址,包括程序中的位置无关转移。
② 写程序计数器。写R15的通常结果是将写到R15中的值作为指令地址,并以此地址发生转移。由于ARM指令要求字对齐,通常希望写到R15中值的位[1:0]=0b00。
由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。
程序状态寄存器
寄存器R16用作程序状态寄存器CPSR(Current Program Status Register,当前程序状态寄存器)。在所有处理器模式下都可以访问CPSR。CPSR包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。每种异常模式都有一个程序状态保存寄存器SPSR(Saved Program Status Register)。当异常出现SPSR用于保留CPSR的状态。
CPSR和SPSR的格式如下:
(1)条件码标志
N、Z、C、V(Negative、Zero、Carry、oVerflow)均为条件码标志位(Condition Code Flags),它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行。CPSR中的条件码标志可由大多数指令检测以决定指令是否执行。在ARM状态下,绝大多数的指令都是有条件执行的。在Thumb状态下,仅有分支指令是有条件执行的。通常条件码标志通过执行比较指令(CMN、CMP、TEQ、TST)、一些算术运算、逻辑运算和传送指令进行修改。
条件码标志的通常含义如下:
N:如果结果是带符号二进制补码,那么,若结果为负数,则N=1;若结果为正数或0,则N=0。
Z:若指令的结果为0,则置1(通常表示比较的结果为“相等”),否则置0。
C:可用如下4种方法之一设置:
一-加法(包括比较指令CMN)。若加法产生进位(即无符号溢出),则C置1;否则置0。
一-减法(包括比较指令CMP)。若减法产生借位(即无符号溢出),则C置0;否则置1。
一-对于结合移位操作的非加法/减法指令,C置为移出值的最后1位。
一-对于其他非加法/减法指令,C通常不改变。
V:可用如下两种方法设置,即
一-对于加法或减法指令,当发生带符号溢出时,V置1,认为操作数和结果是补码形式的带符号整数。
一-对于非加法/减法指令,V通常不改变。
(3)控制位
程序状态寄存器PSR(Program Status Register)的最低8位I、F、T和M[4:0]用作控制位。当异常出现时改变控制位。处理器在特权模式下时也可由软件改变。
a.中断禁止位
I:置1,则禁止IRQ中断;
F:置1,则禁止FIQ中断。
b.T位
T=0 指示ARM执行;
T=1 指示Thumb执行。
c.模式控制位
M4、M3、M2、Ml和M0(M[4:0])是模式位,决定处理器的工作模式,如表所列。
M[4:0]工作模式可访问的寄存器
10000用户模式PC,CPSR,R14~R0
10001FIQ模式PC,R7~R0,CPSR, SPSR_fiq,R14_fiq~R8_fiq
10010IRQ模式PC,R12~R0,CPSR, SPSR_irq,R14_irq,R13_irq
10011管理模式PC,R12~R0, CPSR, SPSR_svc,R14_svc,R13_svc
10111中止模式PC,R12~R0, CPSR, SPSR_abt,R14_abt,R13_abt
11011未定义模式PC,R12~R0, CPSR, SPSR_und,R14_und,R13_und
11111系统模式PC,R14~R0,CPSR(ARM v4及以上版本)
并非所有的模式位组合都能定义一种有效的处理器模式。其他组合的结果不可预知。
(4)其他位
程序状态寄存器的其他位保留,用做以后的扩展。
上一篇:使用AM335x系列芯片该注意哪些问题
下一篇:ARM紧致内存TCM的解释
推荐阅读
史海拾趣
长工微电子成立于2016年5月,创立之初,公司就明确了以技术创新为核心的发展战略。公司迅速组建了一支由高级工程师、博士、硕士等组成的数十人专业开发运营团队。这支团队秉承着“创新、踏实、学习”的理念,致力于电源集成芯片市场,不断推出创新产品。通过每年推出5-10款核心芯片的速度,长工微电子迅速占领了中高端市场,逐渐在行业中崭露头角。
为了进一步扩大市场份额,Calmos Systems Inc公司积极寻求与行业内外的合作伙伴建立合作关系。公司与多家知名企业签订了战略合作协议,共同开发新产品、拓展新市场。同时,公司还积极参加各类行业展会和交流活动,与业内同行进行深入交流,了解行业动态和发展趋势。通过这些努力,公司的品牌知名度和影响力不断提升,为公司的长期发展打下了坚实的基础。
为了满足不断增长的市场需求,地博电子在2017年创立了株洲地博光电材料有限公司,打造了第二智造基地。新基地的建设不仅进一步提高了公司的生产能力和研发水平,还为公司的长期发展提供了强有力的支持。在株洲地博高科技园一期建设完成后,地博电子的产能和品质都得到了显著提升。
COMPEX公司自成立以来,一直致力于电子技术的研发与创新。在光通讯领域,公司凭借先进的光通讯模块电路板小器件技术,逐渐在市场中占据了一席之地。COMPEX团队不断突破技术壁垒,推出了多款高性能、高可靠性的产品,赢得了客户的广泛认可。同时,公司还积极与国内外知名企业和研究机构合作,共同推动电子行业的技术进步。
为了进一步提升研发实力,艾派克先后在珠海、上海、杭州和美国北卡罗来纳州建立了四大研发中心,并与浙江大学、中科院上海微系统所等国内外知名机构建立联合实验室。这些举措不仅加强了公司在技术研发方面的国际合作,也推动了艾派克在行业技术前沿的领先地位。
背景:随着环保意识的增强,消费者对电子产品的环保要求也越来越高。Hisetec Electronic Co Ltd公司积极响应这一趋势,将绿色环保理念融入产品设计、生产和回收的全过程。
发展:公司投入大量资金研发环保材料和生产工艺,确保产品从源头到终端都符合环保标准。同时,公司还建立了完善的电子废弃物回收体系,对废旧电子产品进行拆解、分类和再利用。这些举措不仅赢得了消费者的信任和支持,还推动了整个电子行业的绿色升级。
用普通的元件(不能用IC,555可以用),普通的开关(不是按钮)即只有两种态,接通/闭合; 要求:开关被打到闭合壮态时,LED亮10分钟后熄灭, 开关被打到接通壮态时,LED亮10分钟后熄灭, & ...… 查看全部问答∨ |
|
利用下面一段代码重启,发现好像是系统注销了,并没有关机重启,请问哪个地方需要修改,或者还有别的方法? #define IOCTL_HAL_REBOOT CTL_CODE(FILE_DEVICE_HAL, 15, METHOD_BUFFERED, FILE_ANY_ACCESS) #include <winioctl.h> extern "C ...… 查看全部问答∨ |
正在熟悉x86 CPU的体系结构,指令等 希望在裸机的状态下运行并调试我的程序 在ARM,MIPS等开发板上有JTAG调试方法,不知x86的CPU是否有类似的东西呢? MBR程序如何调试的,BIOS程序如何调试的?… 查看全部问答∨ |
怎么老是碰到点稀奇古怪的问题。ADC初始化后,那几个ADC寄存器的值始终不变,搞怪的 看下面的图: 程序已经正常跑了,然后我暂停,查看寄存器的值, 下载 (47.48 KB) 2010-9-27 11:07 PB_DDR=0x07和TIM1_ARRL=0xc6都 ...… 查看全部问答∨ |
版主,STM32FSMCmultimaster的问题还挂着吗 st的errata说stm32的fsmc在multi master访问时会bus fault,这个问题不知是否仍存在于新批号的芯片中?我目前的项 ...… 查看全部问答∨ |
Proteus 7.7汉化 破解版 免费下载Proteus VSM CPU Models: 新增单片机PIC18F8680, PIC18F8585MSP430F2112, MSP430F2122, MSP430F2132, MSP430F2232, MSP430F2252, MSP430F2272MSP430F233, MSP430F235, MSP430F247, MSP430F248, MSP430F249, MSP430F ...… 查看全部问答∨ |
|
为什么我的ccs V5.1装完之后只能选择通用的器件这一种?而不能选择MSP430的具体型号的? 跟视频教程中的不一样,跟后续的调试下载有关系嘛? [ 本帖最后由 open82977352 于 2012-5-24 19:29 编辑 ]… 查看全部问答∨ |
XC2S500E 5PQ208I这款FPGA时钟最高能到多少M?100M有么?看了说明书这个芯片是steping0,只能到90M 还有这款芯片有军工级的么? 在线等大虾… 查看全部问答∨ |