ARM体系结构

计算机的指令集一般分为4种:浮渣指令集(CISC)、精简指令集(RISC)、显式并行指令集(EPIC)和超长指令集(VLIW)。在嵌入式中经常打交道的事RISC指令集。

RISC相对于CISC主要有以下特点:

  1. Load/Store架构,CPU不能直接处理内存中的数据,要将内存中的数据Load(加载)到寄存器中才能操作,然后将处理结果Store(存储)到内存中。
  2. 固定的指令长度、单周期指令。
  3. 倾向于使用更多的寄存器来存储数据,而不是使用内存中的堆栈,效率更高。

ARM指令集

ARM指令集虽然属于RISC,但是和原汁原味的RISC相比,有一些差异:

  1. ARM有桶型移位寄存器,单周期内可以完成数据的各种移位操作。
  2. 并不是所以的ARM指令都是单周期的
  3. ARM有16位的Thumb指令集,是32位ARM指令集的压缩形式,提高了代码密度。
  4. 条件执行:通过指令组合,减少了分支指令数目,提高了代码密度。
  5. 增加了DSP、SIMD/NEON等指令。

ARM处理器有多种工作模式。应用程序正常运行时,ARM处理器工作在用户模式(User mode),当程序运行出错或有中断发生时,ARM处理器就会切换到对应的特权工作模式。用户模式属于普通模式,有些特权指令是运行不了的,需要切换到特权模式下才能运行。在ARM处理器中,除了用户模式是普通模式,剩下的几种工作模式都属于特权模式。

为了保证计算机能长期安全稳定地运行,CPU提供了多种工作模式和权限管理。应用程序正常运行时,处理器处于普通模式,没有权限对内存和底层硬件进行操作。应用程序如果要读写磁盘上的音频数据,驱动声卡播放音乐,往屏幕写数据显示歌词,则要首先通过系统调用或软中断进入处理器特权模式,运行操作系统内核或硬件驱动代码,才能对底层的硬件设备进行读写操作。
在ARM处理器内部,除了基本的算术运算单元、逻辑运算单元、浮点运算单元和控制单元,还有一系列寄存器,包括各种通用寄存器、状态寄存器、控制寄存器,用来控制处理器的运行,保存程序运行时的各种状态和临时结果。

嵌入式常用的ARM Cortex-M系列处理器

Cortex-M3和Cortex-M4处理器
Cortex-M0、Cortex-M0+和Cortex-M1都是基于ARMv6-M,指令集较小,比较适合低成本的微控制器产品。Cortex-M3和Cortex-M4处理器都是基于ARMv7-M架构,使用32位架构,寄存器组中的内部寄存器、数据通路以及总线接口都是32位的。它们被广泛应用于现代微控制器产品,以及片上系统(SoC)。具有以下特点:

  • 都采用了三级流水线设计
  • 哈佛总线架构,具有统一的存储器空间(指令和地址总线使用相同的地址空间)
  • 32位寻址
  • 基于ARM AMBA(高级微控制器总线架构)技术的片上接口,支持高吞吐量的流水线总线操作
  • NVIC(嵌套向量中断控制器)中断,支持240个中断请求
  • 支持多种OS(操作系统)特性

Cortex-M3和Cortex-M4处理器常用的特殊的寄存器

R13,栈指针(Stack Pointer)
R13寄存器中存放的是栈顶指针,M3/M4 的栈是向下生长的,入栈的时候地址是往下减少的。
裸机程序不会用到PSP,只用到MSP,需要运行RTOS的时候才会用到PSP。
堆栈主要是通过POP,PUSH指令来进行操作。在执行 PUSH 和 POP 操作时, SP 的地址寄存器,会自动调整。

R14 ,连接寄存器(Link Register)
LR 用于在调用子程序时存储返回地址。 例如,在使用 BL(分支并连接, Branch and Link)指令时,就自动填充 LR 的值(执行函数调用的下一指令),进而在函数退出时,正确返回并执行下一指令。 如果函数中又调用了其他函数,那么LR将会被覆盖,所以需要先将LR寄存器入栈。
保存子程序返回地址。使用BL或BLX时,跳转指令自动把返回地址放入r14中;子程序通过把r14复制到PC来实现返回
当异常发生时,异常模式的r14用来保存异常返回地址,将r14如栈可以处理嵌套中断

R15,程序计数器(Program Count)
在Cortex-M3中指令是3级流水线,出于对Thumb代码的兼容的考虑,读取pc时,会返回当前指令地址+4的值。
读 PC 时返回的值是当前指令的地址+4,关于M3、M4 和 A7的 PC值的问题需要单独来解释一下,这里暂且不提。
因为ARM指令采用三级流水线机制,所以PC指针的值并不是当前执行的指令的地址值:
当前执行地址A的指令,
同时已经在对下一条指令进行译码,
同时已经在读取下下一条指令:PC = A +4 (Thumb/Thumb2指令集)、PC = A + 8 (ARM指令集)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值