ARM裸机程序开发——ARM运行模式及寄存器

原创 2016年08月31日 10:53:30

现在来总结一下ARM的运行模式以及寄存器

★ARM的运行模式类型

ARM微处理器有7中运行模式:用户模式(user)、系统模式(system)、一般中断模式(IRQ)、快速中断模式(FIQ)、管理模式(supervisor、svr)、中止模式(abort)、未定义指令中止模式(undefined)

◇这七种运行模式分别用于什么情况下?

▲用户模式:用户模式是用户程序的工作模式,它运行在操作系统的用户态,没有权限去操作硬件资源,只用执行处理自己的数据,也不能切换到其他的模式。如果想要访问硬件资源只能靠两种办法:产生异常或者软中断

▲系统模式:系统模式是特权模式,不受用户模式的限制。用户模式跟系统模式共用一套寄存器。操作系统在该模式下可以访问用户模式的寄存器,操作系统的一些特权任务也可以使用这个模式访问一些受控的资源。

▲一般中断模式:又叫做普通中断模式,用于一般的中断请求,通常在硬件产生中断后进入该模式,该模式可以自由访问硬件资源

▲快速中断模式:相对于一般中断模式,用于处理紧急的中断请求,主要用于高速数据传输及通道处理中

▲管理模式:CPU上电后,默认会进入到这个模式,用来做系统的一些初始化工作,软中断处理也在该模式下。当用户模式下的用户程序请求使用硬件资源时通过软件中断进入该模式

▲中止模式:用于虚拟内存以及存储器的保护,当用户程序访问非法地址或者没有权限读取的地址时,会进入该模式。在Linux编程中,经常会出现segment fault一般都是在该模式下抛出的返回

▲未定义模式

用于支出硬件协处理器的软件仿真,CPU在指令的译码阶段不能识别的指令操作时,就会进入未定义模式

◇他们的关系图

◇这几种模式具体是如何切换的?(阅读Bootloader源代码)

★ARM寄存器

ARM中共有37个寄存器,但是不能在任何模式下都可以使用,它与工作模式有关系。不同的工作模式会使用不同的寄存器组。

◇通用寄存器

通用寄存器可分为不分组寄存器(R0-R7)和分组寄存器(R8-R14)和程序计数器(R15)

◇不分组寄存器(R0-R7)

不分组寄存器工作在所用的模式下,并且没有隐含的功能

◇分组寄存器(R8-R14)

分组寄存器(R8-R14)则取决于当前的处理器工作模式,每种工作模式都有专用的分组寄存器。寄存器R8-R12可以分为2组物理寄存器。一组用于FIQ模式,另一组用于除FIQ之外的其他模式。寄存器R13-R14可分为6个分组的物理寄存器。1个用于用户模式和系统模式,其他5个分别用于svc,abt,und,irq和fiq这5个异常模式。访问时需要指定他们的模式。R13_svc,R13_abt等等

▲什么是分组寄存器?

分组寄存器在CPU不同的工作模式下所指向的物理寄存器是不同的。例如:对于分组寄存器R8-R12来说,它指向两组不同的物理寄存器。FIQ模式用一组,其他模式使用另外一组。那么在FIQ模式和其他几个模式下,虽然都是使用R8-R12这几个寄存器,但是它们却是使用了不相同的物理寄存器。


▲分组寄存器有什么作用?(或者说为什么会出现分组寄存器呢)

就使用R8-R12这几个分组寄存器。都知道这几个寄存器分为2组,其中FIQ模式使用一组,假设为A组,其他的工作模式使用另一组,假设为B组。那么当CPU运行在用户模式的时候,使用的是B组寄存器。这是突然产生一个快速中断,CPU转换为FIQ模式,然后处理中断。而快速中断模式一般使用来处理比较紧急的中断,主要用于高速的数据传输及通道处理,因此FIQ模式下处理的中断一般都是体现处理速度要非常快。如果FIQ模式与USER模式使用同一组寄存器,就会出现这样的情况,首先要将USER模式下这组寄存器的值保存下来,然后才能处理FIQ模式的中断,最后在将USER模式下的寄存器值还原,这样就会减慢了速度。而使用两组寄存器则可以解决这个问题。

◇程序计数器(R15)

寄存器R15被用作程序计数器

◇状态寄存器CPSR


▲条件代码标志位


▲保留位

▲控制位

△中断禁止位

I = 1 禁止IRQ中断

F = 1 禁止FIQ中断

△T位

该位反应了运行着的状态

T = 1执行在Thumb状态

T = 0 执行在ARM状态

△模式位

决定了CPU的工作模式

 

◇程序状态保存寄存器SPSR

   

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ARM裸机程序开发——中断系统

★中断控制机制 CPU在运行过程中,怎样知道外部设备需要进行一些事件的处理呢?比如在一个按键程序设计中,按下某个按键,蜂鸣器会发出响声。当按下按键的时候,CPU怎样知道按键已经被按下,并且调用相应...

ARM裸机程序开发——ARM寻址方式及指令集

下面总结这几天学习的知识,ARM寻址方式以及指令集 ★ARM寻址方式 ◇什么是寻址方式 寻址方式是处理器根据指令中给出的地址信息来寻找物理地址的方式,是确定本条指令的数据地址以及下一条要执行的指令...

arm-linux-gcc 裸机程序开发(二)

把u-boot的start.S移植到我的程序上,这样程序可以用supervivi的D功能下载到内存中运行了,但是还不够。因为程序在内存里,如果掉电程序就没有了,所以我们得将程序固化在flash里面。这...

arm-linux-gcc裸机程序开发(三)

中断问题与完整工程测试 一. 中断问题        中断对编写程序非常的重要,所以程序对中断处理的好坏将直接影响程序的优劣,对实时性要求较高的系统更是如此。对于ADS2.0,在编写中断处理程序的...

arm-linux-gcc裸机程序开发(三)

中断问题与完整工程测试 一. 中断问题        中断对编写程序非常的重要,所以程序对中断处理的好坏将直接影响程序的优劣,对实时性要求较高的系统更是如此。对于ADS2.0,在编写中断处理程序的...

[1]ARM裸机程序开发环境搭建

arm-linux-gcc交叉编译工具链 arm-linux-gcc常用命令 Makefile工程管理 链接器脚本

arm-linux-gcc 裸机程序开发(二)

NANDFLASH启动与标准库问题         把u-boot的start.S移植到我的程序上,这样程序可以用supervivi的D功能下载到内存中运行了,但是还不够。因为程序在内存里,如果掉电...

Arm裸机程序开发演示

  • 2013-01-22 17:48
  • 1.26MB
  • 下载

Arm裸机程序开发演示

  • 2013-04-10 00:02
  • 1.26MB
  • 下载

aiku基于mini2440下裸机程序开发《概述与SDRAM运行》

大家好,我是aiku,今天主要跟大家介绍一些 基于mini2440下裸机程序开发《概述与SDRAM运行》 有什么问题:都可以联系我们,谢谢! 我是aiku,本博客主要写一些我们的项目经验与大家...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)