ARM架构

1、指令集体系结构

1. 一条ARM指令的最高四位bit[31:28]为条件域(condition field),根据其值的不同来确定当前指令对CPSR中的N、Z、C和V标志的设置与否。

2. ARM指令集支持一个向前或向后32M范围内跳转的Branch指令。如果是Branch and Link指令,则除了支持向前或向后的32M范围跳转外,还能将跳转指令的下一条指令地址(返回地址)压入R14(LR)。而在ARMv4以上支持T的版本中,还有Branch and Exchange指令,此指令可以拷贝通用寄存器Rm的值到PC中,而若其bit[0]为0,则进行ARM至Thumb的切换。

3. ARM指令集中包含了状态寄存器获取指令MSR和MRS用来对CPSR和SPSR进行操作。同时ARM指令集还提供了对协处理器的操作指令MCR和MRC。

4. SWI提供了软件中断的功能,此指令的bit[23:0]为一个立即数,ARM处理器会忽略这个立即数,但这个立即数可以提供异常处理程序使用。

2、寄存器

         通用寄存器(r0-r15):

不分组寄存器r0-r7:

可以工作在所有的处理模式下,没有隐含的特殊用途

分组寄存器r8-r14:

分组寄存器的使用取决于当前的处理器模式,每种模式有专用的分组寄存器用于快速异常处理。

寄存器R13通常用作堆栈指针,称作sp。每种异常模式都有自己的R13。通常R13被初始化为指向异常模式分配的堆栈。在入口处,异常处理程序将用到的其他寄存器的值保存到堆栈中,返回时,重新将这些值加载到寄存器中。

寄存器R14用作子程序链接寄存器lr。当指令BL指令时,得到R15(PC)寄存器的备份。

程序寄存器R15:

ARM状态下,PC位[1:0]为0(字对齐)。

Thumb状态下,位[0]为0(半字对齐)。

由于流水线特性,PC总是指向当前执行指令的下两条指令地址。

程序状态寄存器:

所有处理器模式下都访问相同的CPSR,CPSR包含条件码标志。中断禁止位,当前处理器模式以及其他状态和控制信息。

每种异常模式下都有一个程序状态保存寄存器,发生异常时,SPSR用来保存CPSR的状态。

3、工作模式和特权等级

        ARM工作模式: 

ARM工作状态:从编程的角度看 有两种    并可以切换  ARM状态:执行32位 字对齐的ARM指令  THunb状态:执行 16位的  半字对齐 thumb指令 注意:ARM状态下只能执行ARM指令  thumb也是  

存储器格式:0-3第一个字 4-7第二个 ………………. 因此 ARM最大寻址是  4GB 

大端格式:高字节存放在 低地址空间 

小端空间:高字节放高地址,低地址存放低字节 ARM绝大多数时候使用  小端格式 

指令长度: ARM支持字节,半字,字三种数据类型 其中 字需要4字节对齐(地址的低两位是0)  半字需要2字节对齐(地址最低位0)  

工作模式: 

1:用户模式 usr:正常执行程序 

2:快速中断模式FIQ: 用于高速数据的传送 3:外部中断模式IRQ: 用于通常的中断处理 

4:管理模式svc: super verzer 超级模式,操作系统使用的保护模式 

5:数据访问终止模式abt:当数据或指令预取终止时进入该模式,用于虚拟存储及存储保护 6:系统模式sys: 运行具有特权的操作系统任务 

7:未定义指令终止模式und: 当未定义的指令执行时进入该模式,可用于支持硬件 除用户模式外,其它称为非用户模式,或者是 特权模式 除去用户模式和系统模式, 其它称为 异常模式.

4、存储器和映射

  1. 多数的系统需要通过以下的一些方式来初始化和控制存储系统设备:
  1. 使能Cache,以保证Cache执行所能获得的效益最大化
  2. 为虚拟存储系统建立虚拟到物理存储的映射
  3. 为不同的存储区域建立约束规则
  4. 保证在正确的时间,以正确的方式对存储映射I/O的获取

  1. 存储系统应该按以下的方式配置:
  1. 主存储区(RAM)应该被配置成cachable和bufferable;
  2. ROM存储区通常只配置成cachable和只读,因此bufferable属性不会被设置。

  1. 一些ARM实现中包含了一种契入式的write buffer,将多次对同一位置的写操作归并成对主存储区的一次操作。此外一些write buffer还支持写操作的重排序,那样会使处理器提交的写操作顺序与实际的写操作提交给存储区的顺序存在差异。因此,对I/O区域尽量不要配置成bufferable,以保证对I/O设置的写操作能以一个正确的顺序执行。

4. 所有存储和系统相关的特性都由协处理器15(CP15)来控制,因此CP15也被称为系统控制协处理器。其包含共计16个32位的主寄存器。此外,由于寄存器获取指令中可以包含额外的位来辨识特定的寄存器版本和(或者)对寄存器特定的获取方式,所以实际CP15种的32bit物理寄存器可以超过16个。CP15的属性可以是只读、只写或者可读可写。

5. ARM仅仅定义了一类对CP15操作的指令,即MCR和MRC,其中MCR用来将一个ARM寄存器的值写入CP15,而MRC指令可以将一个CP15寄存器的值读入ARM寄存器中。MRC和MCR指令只有在各个特权模式下才能正常执行,如果是在用户模式下执行这两条指令,则会导致一个未定义指令的异常发生。

CP15 Register 1中各个位的含义如下:

M(bit[0])                     MMU或保护单元使能位

A(bit[1])                      对齐错误校验使能位

C(bit[2])                      Cache使能位(如果是统一cache架构,则标识统一cache使能,如果是独立cache架构,则标识数据cache使能)

W(bit[3])                     Write buffer使能位

P(bit[4])                      异常处理模式选择位,可选择进入26-bit模式或32-bit模式

D(bit[5])                      26-bit地址异常校验使能位

L(bit[6])                       Abort模式版本选择位

B(bit[7])                      大端或小端配置位

S(bit[8])                       系统保护位(在基于MMU的存储系统中使用)

R(bit[9])                      ROM保护位(在基于MMU的存储系统中使用)

F(bit[10])                    该位由用户实现定义

Z(bit[11])                    跳转预测使能位

I(bit[12])                     指令cache使能位

V(bit[13])                    常规/高异常向量选择位

RR(bit[14])                 cache预测策略使能位

L4(bit[15])                  Load类指令如果地址最低位为1,选择是否支持ARM和Thumb间自动切换

Bit[31:16]               未定义

5、寻址方式

         寻址方式是根据指令中给出的地址码字段来实现寻找真实操作数地址的方式。ARM处理器具有9种基本寻址方式。 
  1.寄存器寻址;2.立即寻址; 
  3.寄存器移位寻址;4.寄存器间接寻址; 
  5.基址寻址;6.多寄存器寻址; 
  7.堆栈寻址;8.块拷贝寻址; 
  9.相对寻址。 
  1,立即寻址 
  立即寻址指令中的操作码字段后面的地址码部分即是操作数本身,也就是说,数据就包含在指令当中,取出指令也就取出了可以立即使用的操作数(这样的数称为立即数)。立即寻址指令举例如下: 
  SUBSR0,R0,#1;R01,结果放入R0,并且影响标志位 
  MOVR0,#0xFF000;将立即数0xFF000装入R0寄存器 
  2,寄存器寻址 
  操作数的值在寄存器中,指令中的地址码字段指出的是寄存器编号,指令执行时直接取出寄存器值来操作。寄存器寻址指令举例如下: 
  MOVR1,R2;R2的值存入R1 
  SUBR0,R1,R2;R1的值减去R2的值,结果保存到R0 
  3,寄存器移位寻址 
  寄存器移位寻址是ARM指令集特有的寻址方式。当第2个操作数是寄存器移位方式时,第2个寄存器操作数在与第1个操作数结合之前,选择进行移位操作。寄存器移位寻址指令举例如下: 
  MOVR0,R2,LSL#3;R2的值左移3位,结果放入R0;即是R0=R2×8 
  ANDSR1,R1,R2,LSLR3;R2的值左移R3位,然后和R1;“操作,结果放入R1 
  4,寄存器间接寻址 
  寄存器间接寻址指令中的地址码给出的是一个通用寄存器的编号,所需的操作数保存在寄存器指定地址的存储单元中,即寄存器为操作数的地址指针。寄存器间接寻址指令举例如下: 
  LDRR1,[R2];R2指向的存储单元的数据读出 
  ;保存在R1 
  SWPR1,R1,[R2];将寄存器R1的值和R2指定的存储 
  ;单元的内容交换 
  5,多寄存器寻址 
  多寄存器寻址一次可传送几个寄存器值,允许一条指令传送16个寄存器的任何子集或所有寄存器。多寄存器寻址指令举例如下: 
  LDMIAR1!,{R2-R7,R12};R1指向的单元中的数据读出到 
  ;R2R7R12(R1自动加1) 
  STMIAR0!,{R2-R7,R12};将寄存器R2R7R12的值保 
  ;存到R0指向的存储;单元中 
  ;(R0自动加1) 
  6,基址寻址 
  基址寻址就是将基址寄存器的内容与指令中给出的偏移量相加,形成操作数的有效地址。基址寻址用于访问基址附近的存储单元,常用于查表、数组操作、功能部件寄存器访问等。基址寻址指令举例如下: 
  LDRR2,[R3,#0x0C];读取R3+0x0C地址上的存储单元 
  ;的内容,放入R2 
  STRR1,[R0,#-4]!;R0=R0-4,然后把R1的值寄存 
  ;到保存到R0指定的存储单元 
  7,堆栈寻址 
  堆栈是一个按特定顺序进行存取的存储区,操作顺序为后进先出堆栈寻址是隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),指针所指向的存储单元即是堆栈的栈顶。存储器堆栈可分为两种: 
  向上生长:向高地址方向生长,称为递增堆栈 
  向下生长:向低地址方向生长,称为递减堆栈 
  堆栈指针指向最后压入的堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个待压入数据的空位置,称为空堆栈。 
  所以可以组合出四种类型的堆栈方式: 
  满递增:堆栈向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFASTMFA等; 
  空递增:堆栈向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEASTMEA等; 
  满递减:堆栈向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFDSTMFD等; 
  空递减:堆栈向下增长,堆栈指针向堆栈下的第一个空位置。指令如LDMEDSTMED等。 
  8,块拷贝寻址 
  多寄存器传送指令用于将一块数据从存储器的某一位置拷贝到另一位置。如: 
  STMIAR0!,{R1-R7};R1R7的数据保存到存储器中。 
  ;存储指针在保存第一个值之后增加, 
  ;增长方向为向上增长。 
  STMIBR0!,{R1-R7};R1R7的数据保存到存储器中。 
  ;存储指针在保存第一个值之前增加, 
  ;增长方向为向上增长。 
  9,相对寻址 
  相对寻址是基址寻址的一种变通。由程序计数器PC提供基准地址,指令中的地址码字段作为偏移量,两者相加后得到的地址即为操作数的有效地址。相对寻址指令举例如下: 
  BLSUBR1;调用到SUBR1子程序 
  BEQLOOP;条件跳转到LOOP标号处 
  ... 
  LOOPMOVR6,#1 
  ... 
  SUBR1... 
  (end)

6MDK开发工具

4.1  RealView MDK简介 

RealView MDK(RealView Microcontroller Development Kit)开发套件源自德国Keil公司,被全球超过10万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。RealView MDK集成了业内最领先的技术,融合了中国多数软件开发工程师所需的特点和功能。包括μVision集成开发环境与 RealView编译器,支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟,性能分析等功能。   RealView MDK的特点:  自动生成启动代码:RealView MDK开发工具可以帮您自动生成完善的启动代码,并提供图形化的窗口,随您轻松修改。无论对于初学者还是有经验的开发工程师,都能大大节省时间,提高开发效率。   

提供软件模拟器:RealView MDK的设备模拟器可以仿真整个目标硬件,包括快速指令集仿真、外部信号和I/O仿真、中断过程仿真、片内所有外围设备仿真等。开发工程师在无硬件的情况下即可开始软件开发和调试,使软硬件开发同步进行,大大缩短开发周期。而一般的ARM开发工具仅提供指令集模拟器,只能支持ARM内核模拟调试。  

提供性能分析器:RealView MDK的性能分析器可以让工程师看得更远和更准,它辅助您查看代码覆盖情况,程序运行时间,函数调用次数等高端控制功能,指导您轻松的进行代码优化,成为嵌入式开发高手。通常这些功能只有价值数千美元的昂贵的Trace工具才能提供。   

支持Cortex-M3:RealView MDK支持的Cortex-M3核是ARM公司最新推出的针对微控制器应用的内核,它提供业领先的高性能和低成本的解决方案,未来几年将成为MCU应用的热点和主流。目前国内只有ARM公司的MDK和RVDS开发工具可以支持Cortex-M3芯片的应用开发。  

RealView 编译器,代码更小,性能更高 RealView MDK的RealView编译器与ADS 1.2比较:  代码密度:比ADS 1.2编译的代码尺寸小10%;  代码性能:比ADS 1.2编译的代码性能高20%。   

配备ULINK2仿真器+ Flash编程模块: RealView MDK无需寻求第三方编程软件与硬件支持,通过配套的ULINK2仿真器与Flash编程工具,轻松实现CPU片内FLASH、外扩FLASH烧写,并支持用户自行添加FLASH编程算法;而且能支持FLASH整片删除、扇区删除、编程前自动删除以及编程后自动校验等功能,轻松方便。   

性价比高:RealView MDK中国版保留了RealView MDK国际版的所有卓越性能,而产品价格也是针对国内大多数用户预算而专门定制的,力求给国内开发工程师提供最高性价比的开发工具解决方案。RealView MDK中国版用户将享受到专业的本地化的技术支持和服务,包括电话、Email、论坛、中文技术文档等,这将有助于国内工程师们开发出更有竞争力的产品。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值