ARM的37个寄存器

发布者:静静思索最新更新时间:2017-02-06 来源: eefocus关键字:ARM  寄存器 手机看文章 扫描二维码
随时随地手机看文章

1.ARM的7种工作模式

ARMv4和ARMv5的指令集规定了ARM的7种工作模式,由寄存器CPSR[4:0]决定(见下表),分别是

用户(User)模式:ARM处理器正常的程序执行状态

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

快速中断(FIQ)模式:用于处理紧急的中断,如高速数据传输或通道处理

普通中断(IRQ)模式:用于处理通用的中断,通常在硬件中断信号后进入该模式

管理(Supervisor)模式:操作系统使用的保护模式,是CPU上电后的默认模式,主要用于系统的初始化

数据访问终止(Abort)模式:用于虚拟存储及存储保护,当访问非法地址或读取无权限内存地址时进入该模式

未定义指令中止(Undifined)模式:当执行未定义的指令时进入该模式,用于支持硬件协处理器的软件仿真

CPSR[4:0]定义的ARM工作模式
CPSR[4:0]  处理器模式可访问的寄存器
0b10000USERR0~R14;PC;CPSR
0b11111SYSTEMR0~R14;PC;CPSR
0b10001FIQ R0~R7;R8_FIQ-R14_fiq;PC;CPSR;SPSR_fiq
0b10010IRQ R0~R12;R13_irq-R14_irq;PC;CPSR;SPSR_irq
0b10011SUPERVISORR0~R12;R13_svc-R14_svc;PC;CPSR;SPSR_svc
0b10111ABORTR0~R12;R13_abt-R14_abt;PC;CPSR;SPSR_abt
0b11011UNDEFINEDR0~R12;R13_und-R14_und;PC;CPSR;SPSR_und

现在ARMv6和ARMv7指令集做出了改变,由MSP(主堆栈指针)和PSP(进程堆栈指针),用户模式和特权模式组合成4种工作模式,将其他模式整合到异常向量表中,干净简洁舒服啦。

2.ARM寄存器
ARM共有37个32位物理寄存器,7种工作模式下可访问的寄存器见下表,User和System使用完全相同的物理寄存器。

ARM寄存器介绍

ARM寄存器介绍


2.1 R0~R7
      所有工作模式下,R0-R7都分别指向同一个物理寄存器(共8个物理寄存器),它们未被系统用作特殊的用途。在中断或异常处理进行工作模式转换时,由于不同工作模式均使用相同的物理寄存器,可能造成寄存器中数据的破坏。
2.2 R8~R12

      在User&System、IRQ、Svc、Abt和Und模式下访问的R8~R12都是同一个物理寄存器(共5个物理寄存器);在FIQ模式下,访问的R8_fiq~R12_fiq是另外独立的物理寄存器(共5个物理寄存器)。

2.3 R13和R14

       在User&System、IRQ、FIQ、Svc、Abt和Und访问的R13_~R14都是各自模式下独立的物理寄存器(共12个物理寄存器)。

       R13在ARM指令中常用作堆栈指针(SP),但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。

       由于处理器的每种工作模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该工作模式的栈空间。这样,当程序进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。
     R14称为链接寄存器(Link Register),当执行子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备份。在每一种工作模式下,都可用R14保存子程序的返回地址,当用BL或BLX指令调用子程序时,将PC的当前值复制给R14,执行完子程序后,又将R14的值复制回PC,即可完成子程序的调用返回。以上的描述可用指令完成。

执行以下任意一条指令:
MOV PC, LR
BX LR
在子程序入口处使用以下指令将R14存入堆栈:
STMFD SP!,{,LR}
对应的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}
R14也可作为通用寄存器。
2.4 程序计数器PC(R15)
      所有工作模式下访问的R15都是同一个物理寄存器,由于ARM体系结构采用了多级流水线技术,对于ARM指令集而言,PC总是指向当前指令的下两条指令的地址,即PC的值为当前指令的地址值加8个字节。

    在ARM状态下,R15[1:0]为0,R15[31:2]用于保存PC;在Thumb状态下,R15[0]为0,R15[31:1]用于保存PC。

2.5 CPSR和SPSR

      R16用作CPSR(Current Program Status Register,当前程序状态寄存器),CPSR可在任何工作模式下被访问,它包括条件标志位、中断禁止位、当前处理器模式标志位,以及其他一些相关的控制和状态位。

      每一种工作模式下又都有一个专用的物理状态寄存器,称为SPSR(Specified Program Status Register,备份的程序状态寄存器),当异常发生时,SPSR用于保存CPSR的当前值,从异常退出时则可由SPSR来恢复CPSR。
     User模式和System模式不属于异常模式,它们没有SPSR,当在这两种模式下访问SPSR,结果是未知的。

2.6 CPSR各标志位含义

31302928272676543210
NZCVQDNM(RAZ)IFTM4M3M2M1M0

N(Negative)---设置成当前指令运算结果的bit[31]的值。当两个有符号整数运算时,N=1运算结果为负数,N=0运算结果为正。

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

C(Carried out)---分四种情况讨论
1)在加法指令中(包括比较指令CMP),当结果产生进位,则C=1,表示无符号运算发生上溢出;其他情况C=0。
2)在减法指令中(包括减法指令CMP),当运算发生借位,则C=0,表示无符号运算发生下溢出;其他情况下C=1。
3)对于包含移位操作的非加减运算指令,C中包含最后一次溢出的位的数值
4)对于其他非加减运算指令,C位的值通常不受影响
V(oVerflow)---对于加减运算指令,当操作数和运算结果为二进制的补码表示的带符号数时,V=1符号为溢出;通常其他指令不影响V位。

Q---在ARM V5的E系列处理器中,CPSR的bit[27]称为Q标识位,主要用于指示增强的DSP指令是否发生了溢出。同样的spsr的bit[27]位也称为Q标识位,用于在异常中断发生时保存和恢复CPSR中的Q标识位。在ARM V5以前的版本及ARM V5的非E系列的处理器中,Q标识位没有被定义。

I和F---当I=1时禁止IRQ中断,当F=1时禁止FIQ中断

T---对于ARM V4以更高版本的T系列ARM处理器,T=0表示执行ARM指令;T=1表示执行Thumb指令
对于ARM V5以及更高版本的非T系列处理器,T=0表示执行ARM指令;T=1表示强制下一条执行的指令产生未定指令中断

M[4:0]---定义了的ARM工作模式,具体见1中表CSPR[4:0]定义的ARM工作模式

3 控制程序的执行流程的3种方式

1)在正常执行过程中,每执行一条ARM指令,程序计数器(PC)的值加4个字节;每执行一条Thumb指令,程序计数器寄存器(PC)加2个字节。整个过程是按顺序执行。

2)跳转指令,程序可以跳转到特定的地址处执行,或者跳转到特定的子程序处执行。其中,B指令用于执行跳转操作;BL指令在执行跳转操作同时,保存子程序的返回地址;BX指令在执行跳转操作同时,根据目标地址为可以将程序切换到Thumb状态;BLX指令执行3个操作,跳转到目标地址处执行,保存子程序的返回地址,根据目标地址为可以将程序切换到Thumb状态。

3)当异常中断发生时,系统执行完当前指令后,将跳转到相应的异常中断处理程序处执行。当异常中断处理程序执行完成后,程序返回到发生中断指令的下条指令处执行。在进入异常中断处理程序时,要保存被中断程序的执行现场,从异常中断处理程序退出时,要恢复被中断程序的执行现场。


关键字:ARM  寄存器 引用地址:ARM的37个寄存器

上一篇:ARM的9种寻址方式
下一篇:ARM的异常中断和处理过程

推荐阅读最新更新时间:2024-03-16 15:32

STM32寄存器映射
我们知道,存储器本身没有地址,给存储器分配地址的过程叫存储器映射,那什么叫寄存器映射?寄存器到底是什么? 在存储器Block2 这块区域,设计的是片上外设,它们以四个字节为一个单元,共32bit,每一个单元对应不同的功能,当我们控制这些单元时就可以驱动外设工作。我们可以找到每个单元的起始地址,然后通过C 语言指针的操作方式来访问这些单元,如果每次都是通过这种地址的方式来访问,不仅不好记忆还容易出错,这时我们可以根据每个单元功能的不同,以功能为名给这个内存单元取一个别名,这个别名就是我们经常说的寄存器,这个给已经分配好地址的有特定功能的内存单元取别名的过程就叫寄存器映射。 比如,我们找到GPIOB 端口的输出数据寄存器ODR 的地址
[单片机]
STM32<font color='red'>寄存器</font>映射
插上智慧翅膀,Actel SmartFusion发布
“一直以来,我都在强调,我们一直在专注开发自己的市场。尽管整个FPGA市场有两家强大的竞争对手,但Actel的策略使我们具备了额外的优势。”Actel(爱特)CEO John East日前对中国媒体表示。 John的一席话,的确是Actel的真实写照。一直以来,Actel凭借其独特的Flash工艺,占据着航天及军工市场,而混合信号Fusion及低功耗IGLOO系列也使得Actel完全不用束缚于网络通讯领域。 混合信号市场规模庞大 根据Gartner的市场预测,在2010年,FPGA规模约为36亿美元,而微处理器市场(120亿美元)与可变成模拟市场(61亿美元)规模远高于传统FPGA领域。因此,开发能满足于
[EEWORLD独家]
STM32M3_GPIO寄存器&GPIO工作方式
STM32M3_GPIO寄存器 STM32F103ZET6中 一共有7组IO口,每组IO口有16个IO,一共16X7=112个IO GPIOA,GPIOB---GPIOG 每组IO口含下面7个寄存器。也就是7个寄存器, 一共可以控制一组GPIO的16个IO口。 每组GPIO端口的寄存器包括: 两个32位配置寄存器(GPIOx_CRL ,GPIOx_CRH) , 两个32位数据寄存器 (GPIOx_IDR和GPIOx_ODR), 一个32位置位/ 复位寄存器(GPIOx_BSRR), 一个16位复位寄存器(GPIOx_BRR), 一个32位锁定寄存器(GPIOx_LCKR)。 每个I/O端口位可以自由编程,然而I/O端口寄
[单片机]
基于32位ARM和μC/OS-II的心电信号处理系统
据统计,我国目前有县及县级以上医院1.3万家,医疗机械总数达17.5万台,加上一些专业心脏疾病治疗机构,我国目前每年心脏疾病的门诊量约在一千万人次以上。根据国家卫生部《全国卫生信息化发展规划纲要》的目标,在2010年要基本实现医院的数字化和信息化。所以未来医疗器械市场对新型医疗设备的市场空间巨大,特别是拥有数字化和信息化特征的心电信号处理系统具有广阔的应用前景和实用价值。本文就是介绍的一种基于ARM的心电信号处理系统设计。 系统总体设计 本文所介绍的系统的主要功能是对心电信号进行实时的处理和传输,系统原理框图如图1所示。 心电信号通过电极提取进入模拟处理模块,在模拟处理部分经过放大和滤波处理后,提高了信号的强度和信噪比。信号
[单片机]
基于32位<font color='red'>ARM</font>和μC/OS-II的心电信号处理系统
巨头携手通用平台65纳米工艺,提供先进物理IP支持
ARM公司近日宣布与IBM、特许半导体(Chartered)及三星电子有限公司合作,为其通用平台之65纳米通用工艺提供ARM Advantage产品——Artisan系列物理IP产品的一部分。在同IBM和Chartered共同为90纳米工艺提供物理IP的基础上,这一协议扩展了ARM为通用平台提供的设计实现支持。针对65纳米低功耗工艺向IBM、特许半导体和三星提供的低功耗的ARM Metro产品已于去年发布。 IBM系统和技术集团半导体技术平台副总裁Steve Longoria表示:“很多客户不仅需要业界领先的生产能力,同时也需要低风险、灵活的方式来管理他们的资源战略,通用平台模式已经被证明对于他们是非常有吸引力的。通过这次引入的
[焦点新闻]
ARM linux的中断处理过程
一、前言 本文主要以ARM体系结构下的中断处理为例,讲述整个中断处理过程中的硬件行为和软件动作。具体整个处理过程分成三个步骤来描述: 1、第二章描述了中断处理的准备过程 2、第三章描述了当发生中的时候,ARM硬件的行为 3、第四章描述了ARM的中断进入过程 4、第五章描述了ARM的中断退出过程 本文涉及的代码来自3.14内核。另外,本文注意描述ARM指令集的内容,有些source code为了简短一些,删除了THUMB相关的代码,除此之外,有些debug相关的内容也会删除。 二、中断处理的准备过程 1、中断模式的stack准备 ARM处理器有多种process mode,例如user mode(用户空间的AP所处
[单片机]
<font color='red'>ARM</font> linux的中断处理过程
ARM/uClinux开发环境的建立
先说两句废话为和我以前一样对操作系统(尤其是嵌入式操作系统)迷惑的弟兄解释些概念。因为总是有人在问是不是一定要用操作系统,我的CPU能不能移植操作系统,可以移植什么操作系统,有了操作系统可不可以运行某些程序。 从我的个人经历来讲,这其实就是许多硬件出身的弟兄对操作系统这个东西有神秘感(和我一年前一样)。说白了,操作系统就是一段设计非常巧妙的程序,和你自己的程序从本质讲没有区别,于是,以上问题转为,我是不是一定要用这段程序,我的CPU能不能运行这段程序,可以跑什么样的程序。这个程序可以跑,调用这个程序接口的另一个程序能不能跑! 答案也就变得简单,操作系统对任何一个CPU都不是必须的(对嵌入式系统更是如此),你可以自己编些程序
[单片机]
ARM基础:linux运行态与ARM运行模式的对应
问: 从某一个方面来看,核心态与软中断有些类似。 系统通常情况下在用户态运行。只有发生了特定的操作后才切换到核心态。 始终都有一个Idle进程(用户态)在运行。这个Idle进程保证了系统通常运行在用户态。 用户态切换到核心态的过程可以拿软中断的过程作比喻(压栈,存上下文,按照不同的体系结构切换寄存器组,切换地址映射范围...)。 看《linux kernel development》看得一知半解。 上面自己的一些说法可能很不准确。表达大概的意思。不知这样理解对不对? 另外有一个问题: linux分用户态、核心态。两种状态;ARM处理器有7种运行模式。 这之间有什么联系吗?如果有,这两种状态和这7中运行模式是怎么对应
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved