历史上的今天
返回首页

历史上的今天

今天是:2025年01月11日(星期六)

2020年01月11日 | ARM处理器解析

2020-01-11 来源:eefocus

按图分析:

ARM处理器有七种工作模式,为的是形成不同的使用级别,以防造成对系统的破坏。不同模式可以访问的寄存器不同,可以运行的指令不同。

(1)user(10000):普通应用程序运行的模式(应用程序),普通程序时运行在此模式下。

(2)FIQ(10001):快速中断模式,以处理快速情况,高速数据传输

(3)IRQ(10010):外部中断模式,普通中断处理

(4)svc(10011):保护模式(管理模式),操作系统使用的特权模式(内核),Linux是运行在此模式下。

(5)abt(10111):数据访问中止模式,用于虚拟存储和存储保护

(6)und(11011):未定义指令终止模式,用于支持通过软件仿真硬件的协处理器

(7)sys(11111):系统模式,用于运行特权级的操作系统任务(armv4以上版本才具有)

注意:usr是普通模式,其他六种是特权模式,而除了usr和sys模式以外的五种模式是异常模式

------------------------------------------------------------------------------------------------

下面进入正题:

我们首先可以找到这样一本资料《ARM Architecture Reference Manual》在其中的Programmers’Model一章中,我们可以轻松的找到官方文档对寄存器的说明,建议大家去看看官方的英文文档,我将其中的重要内容简单的总结一下。

Arm处理器总共有37个寄存器其可以分为以下两类(在此我先列出大框架下面会一一介绍):

  1. 通用寄存器(31个)

    1. 不分组寄存器(R0—R7)

    2. 分组寄存器(R8—R14)

    3. PC指针(R15)

  2. 状态寄存器(6个)

    1. CPSR(1个)

    2. SPSR(5个)

相信通过上面的介绍大家对arm的寄存器有个初步的印象,下面官方文档对寄存器的说明:

下面我将会结合上图和我上面列出的大框架对寄存器进行解析:

  1. 不分组寄存器(R0—R7)

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

  1. 分组寄存器(R8—R14)

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

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

i.R13在ARM指令中常用作堆栈指针SP

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

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

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

  1. PC指针(R15)

R15用作程序计数器(PC)对应一个物理寄存器,由于ARM体系结构采用了多级流水线技术(不了解多级流水线的可以访问这个博客http://blog.csdn.net/abclixu123/article/details/7471822,博主讲的不错),对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节程序状态寄存器。

  1. CPSR

在官方文档中我们可以总结如下:

下面介绍其中几个比较重要的位,其他位,大家可以参考官方手册:

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状态

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

  1. SPSR

SPSR 除usr、sys外,对应用于异常保护的CPSR的备份,异常时,保存CPSR值,异常退出时,将该值恢复到CPSR,以保证程序的正常运行,每一中异常运行模式(除user和sys)有各自的物理寄存器。

推荐阅读

史海拾趣

博巨兴公司的发展小趣事

随着业务的快速发展,博巨兴公司在2004年决定扩大经营规模,将写字楼搬迁至福田区彩田路彩虹大厦。这一举措不仅提升了公司的形象,也为进一步拓展业务提供了更好的条件。同时,公司不断加强技术研发,成功取得了苏州市华芯微电子有限公司的代理权,进一步巩固了在芯片代理领域的地位。

广东爱晟电子(exsense)公司的发展小趣事

为了进一步扩大市场份额,爱晟电子制定了国际化发展战略。公司积极参加国际电子展会和论坛,与国际同行进行交流合作。同时,公司还加大了对海外市场的拓展力度,产品出口到欧美、东南亚等多个国家和地区。这些举措使得爱晟电子在国际市场上获得了更多的认可和机会。

Displaytech公司的发展小趣事

随着公司业务的不断发展,Displaytech于1997年在加利福尼亚州圣地亚哥成立了销售办事处,名为SEACOMP。这一举措标志着公司开始向国际市场进军。SEACOMP的成立不仅为公司带来了更多的商业机会,也促进了公司在全球范围内的技术交流与合作。

国炬(GOOGLL)公司的发展小趣事
OCL电路能够驱动低阻抗的负载,提高了系统的整体效率。
Fluke公司的发展小趣事
可能是由于场效应管损坏、电源电压不足或负载阻抗过大等原因引起。解决方法包括更换损坏的场效应管、检查电源电压并适当提高或降低负载阻抗。
CONEXANT公司的发展小趣事

2017年,电子行业迎来了一场引人瞩目的收购案。新思科技(Synaptics),一家在人机界面交互开发解决方案领域具有领导地位的公司,宣布以3.95亿美元现金和726,666只普通股收购科胜讯系统公司(Conexant Systems)。这一收购行动不仅增强了Synaptics在智能家居领域的语音和音频处理解决方案的能力,也标志着Conexant正式成为Synaptics大家庭的一员。通过此次收购,两家公司实现了技术资源和市场优势的互补,共同开启了新的发展篇章。

问答坊 | AI 解惑

了解信号源

信号源发展到今天,它的涵盖范围已非常广。我们可以按照频率范围对它进行分类:超低频(0.1m~1kHz)、音频(20Hz~20kHz)、视频(20kHz~10MHz)、射频及高频(200k~3000MHz)、微波(≥3000MHz)、光波信号源等;按工作原理可以分为: LC 源、锁相源、合 ...…

查看全部问答>

海思DVR

有人是做海思的DVR的嘛?想找你具体聊聊。留下个联系方式希望…

查看全部问答>

建议开一个上位机开发相关的版块

昨天tiankai001建议我们坛子里可以开一个上位机开发相关的版块,你们可以考虑一下…

查看全部问答>

(悭钱十月)我的淘宝电子购物列表分享

先占位置,一会上传图片资料,一共有几十个吧:D   先发一部分 1、【148元,】芯达STM32开发板 + 2.4寸触摸屏 支持奋斗 stm32   http://trade.taobao.com/trade/detail/trade_snap.htm?tradeID=42386733579708 这个是我推荐过几次 ...…

查看全部问答>

新手总问个基本概念

是关于LPC23XX 的PWM控制电机的,现在有一块板子,上边用LPC23XX做处理器,然后用它控制电机同时这个处理器还用给无线网卡使用,在网上搜了一下,没有电的基础看着有点不懂,如果我想用它控制一个电机,或者先做到驱动电机转,这个处理器PWM有6个通 ...…

查看全部问答>

希望对大家有用

msp430  开发应用例子…

查看全部问答>

创业合作-欢迎人在上海放入志同道合的朋友一同创业

朋友您好! 我们创业团队现在在做的项目是健康与移动物联相结合的产品,分硬件和软件的两部分; 硬件部分具有感知人体的健康程度,智能感知,智能监护。软件部分是一个平台系统根据这个健康程度分析出结果和建议呈现给用户。 我们现在创业团队有 ...…

查看全部问答>

DS1302 读数据的问题

如下是 DS1302的 读时钟或ram的 子代码。scl为clock。 sda为data(I/0)。 en为RST信号。uchar read(uchar a2)  //a2 为地址{uchar j,d2=0x00;en=0;scl=0;en=1;for(j=0;j>1;scl=1;}for(j=0;j>1; scl=1;}en=0;//以下为DS1302复位的稳定时 ...…

查看全部问答>

关于STM8S和STM32的一些个人见解

由于产品需要,我先后接触了STM32和STM8S两种芯片。考虑到功能的可扩展性,我先选择使用STM32F103芯片,该芯片编程以及硬件设计都很方便,可以负责任的说该芯片很强大而且价位合适。但,考虑到功耗以及版图面积的原因,该芯片还是存在不足,我们实 ...…

查看全部问答>

MSP430仿真问题

用的MSP430F2274的芯片,CCS5.5版本,仿真器是MSP-FET430UIF型号,在进行仿真debug时,test connection按钮总是灰色的,如下图,无论有无接入JTAG,都是灰色的,请问是什么问题? …

查看全部问答>