嵌入式开发手记(一)嵌入式系统启动过程 (S5pv210) 原

ARM 365浏览

1.ARM的编程模式

1.1当ARM 采用的是32位架构.

 

ARM 约定:

 

Byte : 8 bits

 

Halfword(半字):16 bits (2 byte)

 

Word : 32 bits (4 byte)联想: 数据位宽4 byte,地址映射数据线32条

 

注意:Word在VC下是16bit,原因早期微软16位时就定义为16bit,后来32位时候未改换成DWord.

 

1.2大部分ARM core 提供:

 

(2)ARM 指令集(32-bit)

 

(1)Thumb 指令集(16-bit )

 

(3)Thumb2指令集(16 &; 32bit)

 

小计:早期时候Thumb指令集,每条指令16bit。缺点:有时需要两个指令完成,效率,时间。之后ARM指令集每条指令32bit,缺点:浪费资源。随后Thumb2(armV7)[16&;32]。

 

1.3 Jazelle cores 支持 Java bytecode(支持JAVA加速)

2.ARM处理器工作模式

 

2.1 ARM 有7个基本工作模式:

 

(1)User : 非特权模式,大部分任务执行在这种模式

 

(2)FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式

 

(3)IRQ : 当一个低优先级(normal) 中断产生时将会进入这种模式

 

(4)Supervisor :当复位或软中断指令执行时将会进入这种模式

 

(5)Abort : 当存取异常时将会进入这种模式

 

(6)Undef : 当执行未定义指令时会进入这种模式

 

(7)System : 使用和User模式相同寄存器集的特权模式

 

2.2注意:

 

(1)除User(用户模式)是Normal(普通模式)外,其他6种都是Privilege(特权模式)。

 

(2)Privilege中除Sys模式外,其余5种为异常模式。

 

(3)各种模式的切换,可以是程序员通过代码主动切换(通过写CPSR寄存器);也可以是CPU在某些情况下自动切换。

 

(4)各种模式下权限和可以访问的寄存器不同。

 

2.3 CPU为什么设计这些模式?

 

(1)1CPU是硬件,OS是软件,软件的设计要依赖硬件的特性,硬件的设计要考虑软件需要,便于实现软件特性。

 

(2)操作系统有安全级别要求,因此CPU设计多种模式是为了方便操作系统的多种角色安全等级需要。

 

3.ARM的37个寄存器详解

 

嵌入式开发笔记(三)ARM基础知识_Java

 

3.1特点

 

1.ARM总共有37个寄存器,但是每种模式下最多只能看到18个寄存器,其他寄存器虽然名字相同但是在当前模式不可见。

 

例如:对r13这个名字来说,在ARM中共有6个名叫r13(又叫sp)的寄存器,但是在每种特定处理器模式下,只有一个r13是当前可见的,其他的r13必须切换到他的对应模式下才能看到。这种设计叫影子寄存器(banked register)

 

嵌入式开发笔记(三)ARM基础知识_Java

 

注意: System模式使用user模式寄存器集

 

Sp:栈指针寄存器。

 

lr:保存指针

 

Cpsr:程序状态寄存器

 

Spsr:保存cpsr状态寄存器

 

3.1.2总结

 

(1)ARM共有37个寄存器,都是32位长度

 

(2)37个寄存器中30个为“通用”型,1个固定用作PC,一个固定用作CPSR, 5个固定用作5种异常模式下的SPSR。

 

3.2 CPSR程序状态寄存器

 

嵌入式开发笔记(三)ARM基础知识_Java

 

(1)Mode位:

 

处理器模式位(7种)

 

(2)T Bit

 

仅ARM xT架构支持

 

T src= 0: 处理器处于 ARM 状态

 

T = 1: 处理器处于 Thumb 状态

 

(3)中断禁止位:

 

I = 1: 禁止 IRQ.

 

F = 1: 禁止 FIQ.

 

(4)J 位

 

仅ARM 5TE/J架构支持

 

J = 1: 处理器处于Jazelle状态

 

(5)Q 位:

 

仅ARM 5TE/J架构支持

 

指示饱和状态

 

(6)条件位:

 

N = Negative result from ALU

 

(当运算为负的自动为1)

 

Z = Zero result from ALU

 

(当运算为0的自动为1)

 

C = ALU operation Carried out

 

(当运算进位自动为1)

 

V = ALU operation oVerflowed

 

(当运算溢出自动为1)

 

3.2.2注意

 

(1)CPSR中各个bit位表明了CPU的某些状态信息,这些信息非常重要, 和后面学到的汇编指令息息相关(譬如BLE指令中的E就和CPSR中的Z标志位有关)

 

(2)CPSR中的I、F位和开中断、关中断有关

 

(3)CPSR中的mode位(bit4~bit0共5位)决定了CPU的工作模式,在uboot 代码中会使用汇编进行设置。