历史上的今天
返回首页

历史上的今天

今天是:2025年04月05日(星期六)

2020年04月05日 | ARM的7种运行模式和37个寄存器

2020-04-05 来源:eefocus

ARM的7种工作模式

包括用户模式和特权模式二大类,其中特权模式又分为系统模式和异常模式。CPU每次只能运行在一种工作模式下,各种模式之间的切换可以是程序员通过代码主动切换(通过程序状态寄存器CPSR)也可以是CPU自己在某种情况下自动切换。在每种模式下最多只能看到18个寄存器,其他的寄存器虽然名字相同但是在当前模式下都不可见。由于操作系统有安全级别的需要,因此CPU设计多种模式是为了满足操作系统的多种角色安全等级的需要。


用户模式(USR): 非特权模式,ARM处理器正常执行状态都在这种模式。

系统模式(SYS):运行具有特权操作系统任务。

快速中断模式(FIQ):Fast Interrupt Request,用于高速数据传输或通道处理。

外部中断模式(IRQ):当普通中断发生时会进入。

管理模式(SVC):操作系统使用的保护模式。

数据访问中止模式(ABT): 当数据或指令预取终止时进入,可用于虚拟存储和存储管理。

未定义指令终止模式(UND): 当CPU执行未定义指令时会进入。


注意:FIQ在中断向量表中的相对地址一般为0x1C,即在该地址后没有任何中断向量表了,因此FIQ的中断处理程序可以完全放在这里;而IRQ的在中断向量表中的相对地址为0x18,即在FIQ的前面,因此只有四个字节,只能放一条跳转指令,当该中断发生时还要从此处跳到真正的IRQ处理程序的地方执行,这也是导致IRQ比FIQ慢的原因之一。


32位的RAM共有37个寄存器

31个是通用型的,包括未分组寄存器( R0 - R7),分组寄存器(R8 - R14)和PC指针。

在这里插入图片描述

**不分组寄存器:**在所有的运行模式下都使用同一个物理寄存器,它们未被系统用作特殊的用途。

分组寄存器:


对于R8—R12当使用FIQ(快速中断模式)时访问寄存器R8_fiq — R12_fiq,当使用除FIQ模式以外的其他模式时,访问寄存器

R8 -R12

对于R13,R14来说,每个寄存器对应6个不同的物理寄存器,其中一个是用户模式与系统模式共用(图中的R13,R14),另外5个物理寄存器对应其他5种不同的运行模式,并采用以下记号来区分不同的物理寄存器分别为fiq,irq,svc,abt,und.

2.1) R13在ARM指令中常用作栈指针SP

特别注意:由于每一种模式都有自己的R13,所以我们在自己初始化的时候一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间。

2.2) R14称为子程序链接寄存器LR(Link Register)

有两个特殊功能,一种是每一种模式下都可以用于保存函数的返回地址,另外就是异常处理后的返回地址,如中断。

PC指针(R15)

R15用作程序计数器(PC)对应一个物理寄存器,由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器。

6个是状态寄存器 1个CPSR和5个SPSR

CPSR为程序状态寄存器,从官方文档种可以提取到如下图,它的各个位都表明了CPU的某些状态信息。

在这里插入图片描述

下面介绍其中几个比较重要的位

在这里插入图片描述

N: 当两个表示的有符号整数运算时,1表示运算结果为负数,0表示结果为正或零。

Z:1表示运算的结果为零,0表示运算的结果不为零。对于CMP指令,1表示进行比较的两个数大小相等。


C:下面分四种情况讨论C的设置方法:

a) 加法运算(包括比较指令CMN):当运算产生了进位时(无符号数溢出),C=1,否则C=0。

b) 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出),C=0,否则C=1。

c) 对于包含移位操作的非加/减运算指令,C为移出值的最后一位。

d) 对于其他的非加/减运算指令,C的值通常不改变。


V:下面分两种情况讨论V的设置方法

a) 对于加/减法运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1表示符号位溢出。

b) 对于其他的非加/减运算指令,C的值通常不改变。


I:1 表示禁止外部(硬件)中断(IRQ)

F:1 表示禁止快速中断(FIQ)

T:1表示为Thumb状态,0为ARM状态(Thumb态和ARM态是ARM的二种运行状态)

M[4:0]:用来设置处理器的工作模式具体数据见本文开始的介绍。


SPSR是 除USR和SYS模式外,对应用于异常保护的CPSR的备份,异常时,保存CPSR值,异常退出时,将该值恢复到CPSR,以保证程序的正常运行。

推荐阅读

史海拾趣

GSG公司的发展小趣事
检查通信接口是否连接正确,通信协议是否匹配,以及通信线路是否受到干扰或损坏。
EDDING公司的发展小趣事

在2000年代初,ECLIPSE公司是一家专注于企业级软件开发的公司。公司内部的一个小型团队开发了一个名为“Eclipse”的集成开发环境(IDE),用于提高内部项目的开发效率。随着Eclipse的内部使用越来越广泛,公司高层意识到其巨大的潜力,决定将Eclipse开源,并成立专门的Eclipse部门来管理和推广这一项目。通过开放源代码和社区合作,Eclipse迅速吸引了全球开发者的关注,并逐渐成长为开源开发领域的领军者。

Crane Co.公司的发展小趣事

Crane Co.的创立可以追溯到1855年,当时R. T. 克瑞黄铜与铸钟厂在芝加哥正式成立。公司起初主要生产阀门、配件和特种铸件,这些产品为当时的工业发展提供了关键支持。随着美国工业的蓬勃发展,Crane Co.凭借其精湛的铸造技术和优质的产品质量,逐渐在阀门制造领域崭露头角。

Eurosil Electronics Ltd公司的发展小趣事

随着技术的不断成熟,Eurosil开始将产品推向市场。公司凭借优质的产品和卓越的服务,逐渐在电子行业中树立了良好的品牌形象。同时,Eurosil积极拓展国际市场,与多家国际知名企业建立了合作关系,将产品销往全球各地。这一过程中,Eurosil不仅扩大了市场份额,也积累了丰富的国际经验。

光磊(GL)公司的发展小趣事

随着技术的不断成熟,Eurosil开始将产品推向市场。公司凭借优质的产品和卓越的服务,逐渐在电子行业中树立了良好的品牌形象。同时,Eurosil积极拓展国际市场,与多家国际知名企业建立了合作关系,将产品销往全球各地。这一过程中,Eurosil不仅扩大了市场份额,也积累了丰富的国际经验。

BEI Sensors公司的发展小趣事

Beckhoff Automation GmbH公司成立于1953年,总部设立在德国Verl市。公司自创立之初,便致力于工业自动化产品的研发与生产。在创始人的领导下,公司逐步建立起一套完整的工业自动化产品体系,包括工业PC、现场总线模块、驱动产品等。凭借卓越的产品质量和创新的技术理念,Beckhoff在行业内逐渐崭露头角,赢得了客户的广泛认可。

问答坊 | AI 解惑

今年清单出来来,大家来讨论下控制类的题目

本帖最后由 paulhyde 于 2014-9-15 09:05 编辑 从它给的原件来分析,今年的控制还是小车,而且遥控的可能不大,小车上有的应给具备些基本功能如黑线循迹模块,霍尔测速模块,超声波测障模块的基础上,可能会加入图形识别,语音识别等一些较高级的 ...…

查看全部问答>

在平时我们常用的电烙铁上面做点小文章

电烙铁暂时不用时也是满功率在加热,大家发发自己是如何避免,烙铁暂时不用但想用时立即能加热起来的方法,不用在等待长久的预热!再不用时,还能防止长期满功率加热造成烙铁头烧死,以及降低消耗电能的方法! [ 本帖最后由 DIAG 于 2010-8-21 17:3 ...…

查看全部问答>

Qt程序如何在WinCE下编译??

前两天费了九牛二虎之力将Qt的开发环境安装成功,即将qt-embedded-wince-opensource-src-4.5.2.zip集成到了VS2005中,nmake过程用了将近3个小时。下一步想编译能在WInCE下运行的程序,但一直编译不成功,有没有哪位高手做过类似工作,指点一下??…

查看全部问答>

求解:coldfire怎么进行uart和cdc之间数据传输

我有英文的资料文档,但是我看不懂。 请高手教教。 谢谢…

查看全部问答>

MC39i GPRS模块开发

     各位大虾!      小生近期,用新华龙的单片机开发GPRS组网相关工程。遇到了一些问题,希望各位大虾能不吝赐教。      目前已通过单片机实现短信功能,在开发或测试GPRS指令时 ...…

查看全部问答>

50人接入蓝牙服务器的问题

如果设置一个蓝牙服务器,由客户端通过蓝牙与服务器进行交互. 一台蓝牙设备好象只能和7台作交互,那么这个蓝牙服务器应该是怎么样个配置呢?用USB接入多个蓝牙适配器吗?支持吗?…

查看全部问答>

一步一步教你使用uCOS-II 资料整理,欢迎下载

我把版主wstrom的帖子,一步一步教你使用uCOS-II,整理了一下,希望对大家学习ucos有所帮助......…

查看全部问答>

codewarrior v7.1 使用ucos v2.86版本的问题

ucos-ii v2.86 在coldfire v2上的移植问题? codewarrior v7.1 使用ucos v2.86版本的问题    各位大侠。我再ucos官网上下载了MCF5235的移植代码。我用到了MCF52110上,我只建立了一个任务,这个任务和空闲任务之间切换几次后出现 ...…

查看全部问答>

富士通FM3官网模块例程

http://www.fujitsu.com/global/services/microelectronics/product/micom/support/sample/index2_fm3.html     TYPE0 High Performance Function File 12bit-ADC ZIPmb9bf50xr-adc12-v12.zip [498KB] Base Timer ...…

查看全部问答>