朱老师ARM裸机学习笔记(五):ARMCPU工作模式以及寄存器

发布者:温暖微笑最新更新时间:2017-08-16 来源: eefocus关键字:ARM裸机  工作模式  寄存器 手机看文章 扫描二维码
随时随地手机看文章

ARM的约定

byte 8bits 
halfword 16bits 
word 32bits

ARM Core 提供的指令集

ARM指令集 32bits 
Thumb 指令集 16bits 
Thumb2 指令集 16&32bits

ARM CPU的七种工作模式

符号解释
User用户模式,大部分任务执行在这种模式
FIQ快速中断模式,当一个更高优先级中断产生时,会进入这种模式
IRQ中断模式,当一个低优先级终端产生时,会进入这种模式
Supervisor复位或软中断指令执行时会进入这种模式
Abort存取异常,当存取异常时会进入这种模式
Undef未定义指令,当执行未定义指令时会进入这种模式
System系统模式,使用和User模式相同的寄存器集的特权模式

除User模式是normal(普通模式)外,其他6种都是Privilege(特权模式),特权模式中,除Sys模式外,其余5种都是异常模式。 
各种模式之间的切换,可以是程序员通过代码手动切换(写CPSR寄存器),也可以是CPU在某些情况下自动切换。 
各种模式下可以访问的CPU寄存器不同

ARM CPU的37个寄存器

ARM37寄存器 
CPU在不同的模式下可以反问的CPU寄存器不同,上图中黑色部分是user模式可以访问的寄存器,FIQ中的黑色部分表示和User模式下的一样,及FIQ模式下访问的r0和User模式下的r0是同一个寄存器,而灰色的r8是FIQ模式特有的自己的寄存器。同理,IRQ下的r13,r14同样也是自己模式下的私有寄存器,只有在自己的模式下才能访问。

ARM共有37个寄存器,都是32位长度。 
37个寄存器中30个为通用型,1个固定用作PC,一个固定用做CPSR,五个固定用做5种异常模式下的SPSR。

CPSR寄存器用以表明CPU的某些状态信息。各位意义如下图 
CPSR
SPSR寄存器用于,保存进入异常模式时保存CPSR中的数据,当从异常模式返回用户模式时,用以恢复CPSR中的数据。 
r15寄存器也叫pc (program control)寄存器,是程序指针,pc指向哪里,CPU就会执行pc指向地址的指令。

ARM异常处理

所有正常工作之外的流程叫做异常。中断也是异常的一种。 
当异常发生时,CPU会自动跳转到固定的地址运行,这个固定的地址就是终端向量表,中断向量表中存储所有异常的应跳转到的程序地址。异常向量表是硬件向软件提供的处理异常的支持。

ARM异常处理流程:当异常产生式,首先拷贝CPSR到 SPSR_, 
然后设置适当的CPSR位,改变处理器工作模式,进入ARM态,进行异常处理,保存返回地址LR_设置PC为相应的异常向量。 
当异常返回时,从SPSR_恢复CPSR,从LR_恢复PC 
这些操作只能在ARM态进行。


关键字:ARM裸机  工作模式  寄存器 引用地址:朱老师ARM裸机学习笔记(五):ARMCPU工作模式以及寄存器

上一篇:朱老师ARM裸机学习笔记(七):汇编写启动代码之调用C语言
下一篇:朱老师ARM裸机学习笔记(六):ARM汇编

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

单片机寄存器组注意重复使用原数据可能被覆盖危险
大家都知道51单片机有的寄存器R0-R7共有四组。很多朋友对寄存器组的使用时经常出现问题。虽然这并不是多难的问题,但如果出现错误,也会造成很严重的后果。 首先介绍一下51的寄存器组: 通过设置PSW寄存器的第3位和第4位可以任意切换寄存器组。在进入中断前,切换寄存器组,可以方便的保护原寄存器组的数据不被中断里的语句破坏,很方便。 RS1 RS0 字节地址 0 0 0组寄存器 00H~07H 0 1 1组寄存器 08H~0FH 1 0 2组寄存器 10H~17H 1 1 3组寄存器 18H~1FH RS1=PSW.4 RS0=PSW.3
[单片机]
基于linux2.6.30.4的s3c2440寄存器的虚拟地址和物理地址的关系
1 想一次修改某个目录下所有文件的权限,包括子目录中的文件权限也要修改,要使用参数-R表示启动递归处理。 刚开始学字符设备驱动,感觉最难的是驱动和底层硬件的连接。linux上的驱动程序,是基于操作系统之上的,他并不直接和底层的硬件打交道,但是我们写的驱动必须能使硬件“跑”起来,即与硬件紧密相连。 就拿最简单的LED驱动来说,我们的驱动程序是在虚拟的内存上面跑的,但是最终,LED的点亮还是必须靠GPIO管脚的高低电平来控制。那么,我们的虚拟的内存怎么才能和实际的硬件上面的寄存器对应起来呢? 这篇要写的就是ioremap这个映射函数,他可以将我们硬件上面的寄存器,映射为虚拟的内存,从而使驱动程序在我们的虚拟的内存中运行。 #incl
[单片机]
S3C44B0的初始化程序的理解
S3C44B0的初始化程序就是初始化各个关键的寄存器,建立中断向量,然后转移到主函数去执行程序。不过S3C44B0不支持地址映射,所以程序不COPY到RAM种执行。S3C44B0初始化对我们广大初学者来说,比较难理解的是中断的处理和一些少见的操作符号,S3C44B0的中断子程序地址存放在初始化程序最后就是   HandleADC # 4   HandleRTC # 4   HandleUTXD1 # 4   HandleUTXD0 # 4   HandleSIO # 4   HandleIIC # 4   HandleURXD1 # 4   HandleURXD0 # 4   这一段,它的其实地址是ISR_STA
[单片机]
DS1302 寄存器介绍
DS1302 的一条指令一个字节共8位,其中第7位(即最高位)固定为1,这一位如果是0的话,那写进去也是无效的。第6位是选择 RAM 还是 CLOCK 的,我前边说过,我们这里主要讲 CLOCK 时钟的使用,它的 RAM 功能我们不用,所以如果选择 CLOCK 功能,第6位是0,如果要用 RAM,那第6位就是1。从第5到第1位,决定了寄存器的5位地址,而第0位是读写位,如果要写,这一位就是0,如果要读,这一位就是1。指令字节直观位分配如图15-9所示。 图15-9 DS1302 命令字节 DS1302 时钟的寄存器,其中8个和时钟有关的,5位地址分别是 0b00000~0b00111,还有一个寄存器的地址是 01000,这是涓
[单片机]
DS1302 <font color='red'>寄存器</font>介绍
我感觉有必要把整个STM32内存包括寄存器的分配弄清楚
《跟工程师学嵌入式开发》这本书有讲。
[单片机]
我感觉有必要把整个STM32内存包括<font color='red'>寄存器</font>的分配弄清楚
中断保护现场
对于中断处理程序中使用到的寄存器,如果主程序中也要使用该寄存器就会发生冲突。常见的需要保护的寄存器有A、B、DPTR、PSW和工作寄存器组。 由于本技能训练的中断处理程序十分简单,对主程序没有影响,所以未进行保护现场,而一般的中断处理程序均需要保护现场。常见的几种保护现场的方法如下: (1)累加器A的保护 累加器A是程序中使用最为频繁的寄存器,中段处理程序中如果需要使用累加器A,就会改变A的数值。这样中断调用返回后,主程序中的输出控制字就被破坏了,造成输出错误。为了防止这种现象的出现,在中断处理程序中首先将需要使用的寄存器压入堆栈保存,中段处理程序完成后再使其弹出堆栈。以流水灯的中断程序为例,这一程序如下:
[单片机]
汇编语言学习笔记——————寄存器
CPU概述 内部总线 一个典型的CPU由运算器,逻辑控制器,寄存器等器件组成,这些器件靠内部总线相连。 内部总线与外部总线的区别 内部总线实现CPU内部各个器件之间的联系。 外部总线实现CPU和主板其他器件的联系。 寄存器 8086CPU有14个寄存器,他们的名称为:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。 通用寄存器 8086CPU所有的寄存器都是16位的,可以存放两个字节。 AX,BX,CX,DX通常用来存放一般性数据被称之为通用寄存器 下图是AX通用寄存器的寄存器图: 一个16位的寄存器可以存储一个16位的数据 8086上一代CPU中的寄存器都是8位的,为了保
[单片机]
汇编语言学习笔记——————<font color='red'>寄存器</font>
TI系列DSP的I2C模块配置与应用
  I2C总线最早是由Philips公司提出的串行通信接口规范,标准I2C总线只使用两条线通信,能将多个具有I2C接口的设备连接,进行可靠的通信,连接到同一总线的I2C器件数量,只受总线最大电容400pF的限制,而且最高通信速率可以达到3.4Mb/s,由于I2C接口简单,使用方便,被很多芯片采用,成为一种广泛应用的接口 。   DSP即数字信号处理器,是一种广泛应用的嵌入式处理器,主要应用是实时快速地实现各种数字信号处理算法,目前,国际主要的DSP供应商是TI公司,其TMS32系列产品占据了DSP市场近一半的份额,为了用户能方便快捷的进行系统的开发与集成,TI公司在一些型号的DSP中集成了I2C通信模块,本文以TMS320C67
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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