关于ARM中的7中模式

来源:互联网 发布:excel中怎么编程 编辑:程序博客网 时间:2024/05/17 00:06

ARM总共有7中模式,除了用户模式之外的6中处理器模式称为特权模式(privileged modes)。

用户模式(user,use) 正常程序执行模式

快速中断模式(fiq)用于高速数据传输和通道处理

外部中断模式(irq)用于通常的中断处理

特权模式(sve) 操作系统使用的一种保护模式

数据访问终止模式(abt)用于虚拟存储及存储保护

未定义指令终止模式(und)用于支持通过软件方针硬件的协处理器

系统模式(sys)用于运行特权级的操作系统任务

 

除用户模式外都 是特权模式。吸有在特权模式下才允许对当前的程序状态寄存器的反有控制位直接进行读写访问。

特权模式中除系统模式外都是异常模式。异常发生时总是切换到ARM状态。

何时近入到异常模式

1 复位进入管理模式,操作系统内核通常处于此种模式

2访问失败则进入中止模式

3 遇到不支持的指令时,进入未定义

4中断模式与快速中断模式分别对ARM外理器2种不同等级别的中断响应

特权模式可以访问所有内部资源

用户模式与作系统模式不能由异常进入必须通过修改CPSR才能实现。

默认模式是ARM模式,因为复位也是一种异常中断

用来管理你的任务。操作系统中的任务切换。自动进入。例如:只要有中断就可以进入中断模式。

在uboot中,一上电要求SVC模式,为什么?

大概是:os常处于这样的状态中吧 .....

 



ARM 处理器有二十七个寄存器,其中一些是在一定条件下使用的,所以一次只能使用十六个...

寄存器 0 到寄存器 7 是通用寄存器并可以用做任何目的。不象 80x86 处理器那样要求特定寄存器被用做栈访问,或者象 6502 那样把数学计算的结果放置到一个累加器中,ARM 处理器在寄存器使用上是高度灵活的。
寄存器 8 到 12 是通用寄存器,但是在切换到 FIQ 模式的时候,使用它们的影子(shadow)寄存器。
寄存器 13 典型的用做 OS 栈指针,但可被用做一个通用寄存器。这是一个操作系统问题,不是一个处理器问题,所以如果你不使用栈,只要你以后恢复它,你可以在你的代码中自由的占用(corrupt)它。每个处理器模式都有这个寄存器的影子寄存器。
寄 存器 14 专职持有返回点的地址以便于写子例程。当你执行带连接的分支的时候,把返回地址存储到 R14 中。同样在程序第一次运行的时候,把退出地址保存在 R14 中。R14 的所有实例必须被保存到其他寄存器中(不是实际上有效)或一个栈中。这个寄存器在各个处理器模式下都有影子寄存器。一旦已经保存了连接地址,这个寄存器就 可以用做通用寄存器了。
寄存器 15 是程序计数器。它除了持有指示程序当前使用的地址的二十六位数之外,还持有处理器的状态。
为更清晰一些... 提供下列图表:

User 模式  SVC 模式   IRQ 模式   FIQ 模式  APCS

R0 ------- R0 ------- R0 ------- R0        a1
R1 ------- R1 ------- R1 ------- R1        a2
R2 ------- R2 ------- R2 ------- R2        a3
R3 ------- R3 ------- R3 ------- R3        a4
R4 ------- R4 ------- R4 ------- R4        v1
R5 ------- R5 ------- R5 ------- R5        v2
R6 ------- R6 ------- R6 ------- R6        v3
R7 ------- R7 ------- R7 ------- R7        v4
R8 ------- R8 ------- R8         R8_fiq    v5
R9 ------- R9 ------- R9         R9_fiq    v6
R10 ------ R10 ------ R10        R10_fiq   sl
R11 ------ R11 ------ R11        R11_fiq   fp
R12 ------ R12 ------ R12        R12_fiq   ip
R13        R13_svc    R13_irq    R13_fiq   sp
R14        R14_svc    R14_irq    R14_fiq   lr
------------- R15 / PC -------------       pc

最右侧的列是 APCS 代码使用的名字,关于 APCS 的详情参见这里。 
程序计数器构造如下:

  位   31  30  29  28  27  26  25------------2  1  0

       N   Z   C   V   I   F    程 序 计 数 器  S1 S0

对 R15 的详细解释,请参见 psr.html。
下面是你想知道的"模式",比如上面提及的"FIQ"模式。

用户模式,运行应用程序的普通模式。限制你的内存访问并且你不能直接读取硬件设备。
超级用户模式(SVC 模式),主要用于 SWI(软件中断)和 OS(操作系统)。这个模式有额外的特权,允许你进一步控制计算机。例如,你必须进入超级用户模式来读取一个插件(podule)。这不能在用户模式下完成。
中断模式(IRQ 模式),用来处理发起中断的外设。这个模式也是有特权的。导致 IRQ 的设备有键盘、 VSync (在发生屏幕刷新的时候)、IOC 定时器、串行口、硬盘、软盘、等等...
快速中断模式(FIQ 模式),用来处理发起快速中断的外设。这个模式是有特权的。导致 FIQ 的设备有处理数据的软盘,串行端口(比如在 82C71x 机器上的 A5000) 和 Econet。
IRQ 和 FIQ 之间的区别是对于 FIQ 你必须尽快处理你事情并离开这个模式。IRQ 可以被 FIQ 所中断但 IRQ 不能中断 FIQ。为了使 FIQ 更快,所以有更多的影子寄存器。FIQ 不能调用 SWI。FIQ 还必须禁用中断。如果一个 FIQ 例程必须重新启用中断,则它太慢了并应该是 IRQ 而不是 FIQ。 Phew!
关于如果变更处理器的模式的详情请参照 psr.html。