物联网之ARM体系结构及接口技术一(ARM基础)

ARM基础

认识ARM

ARM 产品线

物联网之ARM体系结构及接口技术一(ARM基础)

ARM 体系架构:不同ARM体系采用不同的指令集,哈弗结构是数据和指令分开存储并行(现在都是基于这种结构),早期的冯诺依曼(普林斯顿)结构是混合存储的

ARM系统硬件组成和运行原理

手机程序存储在FLASH中,板子上电之后CPU会将程序搬到内存中进行执行(提高执行速率)

控制器找到FLASH程序的地址,然后把指令取出来

运算器用于指令的相关运算

寄存器用于临时存放运算的数据

物联网之ARM体系结构及接口技术一(ARM基础)

开发环境搭建:(略)

ARM的工作模式及寄存器

ARM 工作模式

ARM主要有7个基本工作模式:

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

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

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

    Supervisor :当复位或软中断指令执行时将会进入这种模式(超级模式,有更高的访问权限

    Abort : 当存取异常时将会进入这种模式(异常模式,一般接触的少)

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

    System : 使用和User模式相同寄存器集的特权模式(与User模式相同,只是比User权限更高一点)

ARM 有37个寄存器:

    1 个用作PC( Program Counter)(程序计数寄存器

    1个用作CPSR(Current Program Status Register)(状态寄存器:CPU处于哪种状态

   5个用作SPSR(Saved Program Status Registers)(备用的状态寄存器:当切换到其他工作模式时,用来保存当前状态寄存器(CPSR),便于下次切换回来时再将该值赋给CPSR

    30 个通用寄存(临时存放数据的场所)        

ARM 工作模式及寄存器框图:(重要

以下列出了ARM的7中工作模式(其中UserSystem 基本相同,所以列在一起)

该ARM是32位,所以一个寄存器有4个字节

r0-r7:普通寄存器,用来存放数据

User模式下:r8-r12也是普通寄存器

r15:PC寄存器

r4:存储函数返回地址

r3:栈顶指针(中断时(IRQ)保护现场(进栈)和恢复现场(出栈))

CPSR:当前状态寄存器

没有三角形标注的寄存器为7种工作模式的公用寄存器,有三角形标注的寄存器表示额外多的一份寄存器

物联网之ARM体系结构及接口技术一(ARM基础)

搬移指令

     mov  r1,#3

     mov  r2,r1

CPSR 寄存器:(当前程序状态寄存器)

物联网之ARM体系结构及接口技术一(ARM基础)

 条件位:

N = Negative result from ALU

Z = Zero result from ALU

C = ALU operation Carried out or  borrow

V = ALU operation oVerflowed

T 位(M[5]) J 位(M[24])

T = 0;J=0    处理器处于 ARM 状态(一条指令占4个字节)

T = 1;J=0    处理器处于 Thumb 状态(一条指令只占2个字节)

中断禁止位:(M[6-7])

I  = 1: 禁止  IRQ.

                  F = 1: 禁止  FIQ

       Mode位:处理器模式位(低五位M[0-4]:表示7种模式)

                 10000  User mode     10011 SVC mode;            

                 10010  IRQ                10001 FIQ mode;          

                 10111  Abort mode   11011 Undfined mode  11111 System mode;

      CPSR / SPSR操作指令

                 mrs   r0,CPSR   (特殊寄存器操作使用msr。将CPSR的值读到r0寄存器中)

                 msr  CPSR,r0     (特殊寄存器操作使用msr将r0寄存器中的值赋给CPSR)

物联网之ARM体系结构及接口技术一(ARM基础)

.text                                                @文件头

mov r0,#3                                       @将常数3赋值给r0寄存器

cmp r0,#3                                       @r0和3的值进行比较(可根据cpsr的高5位判断比较或者计算的结果)

add r1,r0,#5                                   @将r0+5的值赋给r1

mov r1,r0                                        @将r0的值赋给r1

mov r3,#0xd0                                 @将常数0xd0(该常数低5位表示User模式,其余位和cpsr保持一致)

msr cpsr,r3                                    @将r3的值赋给cpsr寄存器,将状态由Supervisor模式转变为User模式,注意给特殊寄存器赋值要使用msr

mov r3,#0xd3                                 @常数0xd3的低5位表示Supervisor模式

msr cpsr,r3                                    @这一步目的是想将r3的值赋给cpsr,从而可以改变当前运行状态,但是状态还是没有改变,因为User模式权限不够,不能改变该寄存器的值,可以通过中断将状态更改为Supervisor模式

swi 1                                              @软中断,将运行状态从User模式转变为Supervisor模式

.end                                               @文件尾