ARM体系结构与编程(篇二):ARM体系架构与寄存器介绍


前言

该文章是通过学习《ARM体系结构与编程》 杜春雷的书,这本书描述的是以ARM v6之前的体系架构为基础的,相对比较老,不过对于初学者还是有很多可以借鉴的地方,并结合网上资料所做的笔记,希望可以共同进步。


一、ARM内核与架构

1.1 ARM芯片的组成

  任何一款arm芯片主要由两大部分组成:arm内核 、外设 。

  1. arm内核: arm内核主要由:寄存器 、指令集 、总线 、存储器映射规则 、中断逻辑 和调试组件等。内核是由ARM公司设计并以销售方式授权给个芯片厂商使用的(ARM公司本身不做芯片)。比如为高速度设计的Cortex A8、A9都是ARMv7a 架构;Cortex M3、M4是ARMv7m架构;前者是处理器(就 是内核) ,后者是指令集的架构(也简称架构)
  2. 外设: 包括计时器、A/D转换器、存储器、I2C、UART、SPI、ROM等等。由各个芯片厂商自己设计并与ARM内核衔接配套。不同的芯片厂商就有不同的外设,因此构成了数量和规格庞大的ARM芯片产业。

1.2 ARM处理器命名规则(arm v6之前)

ARM处理器命名规则

1.3 ARM指令集与架构

  1. ARM指令集介绍
      指令集的设计是处理器结构中最重要的部分,用arm的术语称之为ISA(Instruction Set Architecture)。
      指令集可以说是cpu设计的灵魂,是打开CPU这个潘多拉魔盒的咒语,要想使用cpu,我们只能通过这些指令来操作cpu。
      对于32位的cpu,这些指令就是一个个32位的01的序列,不同的值就代表了不同的机器指令 ,cpu的硬件能完美的解析并执行这些指令,比如寻址、运算、异常处理等等。

  2. ARM处理器架构
       Cortex-A32/35/53/57/72/73/77/78采用的都是ARMv8 架构,这是ARM公司的首款支持64位指令集的处理器架构 。
    (1)ARM11之前的处理器和指令集架构对应关系如下:

    体系架构处理器家族
    ARMv1ARM1
    ARMv2ARM2、ARM3
    ARMv3ARM6、ARM600、ARM610、ARM7、ARM700、ARM710
    ARMv4StrongARM、ARM8、ARM810、ARM7-TDMI、ARM9-TDMI
    ARMv5ARM7EJ、ARM9E、ARM10E、XScale
    ARMv6ARM11
    ARMv7Cortex-A、Cortex-R、Cortex-M
    ARMv8Cortex-A35、Cortex-R52+、Cortex-A50系列、Cortex-A72、Cortex-A73

(2)ARM11之后处理器和指令集架构

  从1995年开始,《ARM体系结构参考手册》是ARM文档的主要来源,提供了关于ARM处理器架构和指令集,区分接口,所有的ARM处理器的支持(如指令语义)的实现细节可能会有所不同。
  ARM公司自2004年推出ARMv7内核架构时(ARM11之前的处理器统称经典处理器系列),ARM的命名方式有所改变,摒弃了以往"ARM+数字"这种处理器命名方法。
  新的处理器家族,改以Cortex命名,并分为三个系列,分别是Cortex-A,Cortex-R,Cortex-M。
  1)Cortex-A系列(A:Application 应用)
  面向性能密集型系统的应用处理器内核。*针对日益增长的消费娱乐和无线产品设计,用于具有高计算要求、运行丰富操作系统及提供交互媒体和图形体验的应用领域 ,如智能手机、平板电脑、汽车娱乐系统、数字电视,智能本、电子阅读器、家用网络、家用网关和其他各种产品。
  2)Cortex-R系列 (R:Real-time 实时)
  面向实时应用的高性能内核。*针对需要运行实时操作的系统应用,面向如汽车制动系统 、动力传动解决方案 、大容量存储控制器 等深层嵌入式实时应用。
  3)Cortex-M系列(M:MCU & FPGA)
  面向各类嵌入式应用的微控制器内核。
  4)Cortex-SC系列(SC:SecurCore)
  其实,除了上述三大系列之外,还有一个主打安全的Cortex-SC系列(SC:SecurCore),主要用于政府安全芯片 。

ARM11之后的指令集架构.png
  Cortex-A系列是用于移动领域的CPU,Cortex-R和Cortex-M系列是用于实时控制领域的MCU。Cortex-M系列主要是用来取代经典处理器ARM7系列(比如基于ARMv4架构的ARM7TDMI),Cortex-M比ARM7的架构高了3代,性能也有较大提升,所以新的设计推荐使用Cortex-M,关于从ARM7到Cortex-M的移植详见ARM官网指导 ARM7处理器系列。此外,Cortex-M系列还细分为M0、M3、M4和超低功耗的M0+,用户依据成本、性能、功耗等因素来选择芯片。

1.4 ARM授权方式

ARM公司本身并不靠自有的设计来制造或出售CPU,而是将处理器架构授权给有兴趣的厂家。

STM32就是属于ARM公司授权Cortex-M内核给ST公司生产的一款处理器。

ARM提供了多样的授权条款,包括售价与散播性等项目。对于授权方来说,ARM提供了ARM内核的集成硬件叙述,包含完整的软件开发工具(编译器、debugger、SDK),以及针对内含ARM CPU硅芯片的销售权。

许多半导体公司持有ARM授权:Atmel、 ST、NXP、 TI、 IBM等。

在知识产权工业,ARM是广为人知最昂贵的CPU内核之一。单一的客户产品包含一个基本的ARM内核可能就需索取一次高达美金20万的授权费用。而若是牵涉到大量架构上修改,则费用就可能超过千万美元。

1.5 ARM核心时间线

早在1993年,经典的ARM7就问世了,直到现在大家看到的Cortex-A系列处理器。
ARM核心时间线


二、ARM处理器模式与寄存器

2.1 ARM处理器模式

  ARM处理器共有7种运行模式,分别为用户(usr)、快速中断(fiq)、外部中断(irq)、特权(svc)、中止(abt)、未定义指令中止(und)和系统模式(sys)。
ARM处理器模式

  在特权模式下程序可以访问所有的系统资源。非特权模式和特权模式之间的区别在于有些操作只能在特权模式下才被允许,例如直接改变模式和中断使能等。而且为了保证数据安全,一般MMU会对地址空间进行划分,只有特权模式才能访问所有的地址空间。而用户模式如果需要访问硬件,必须切换到特权模式下,才允许访问硬件。

2.2 ARM寄存器

  • ARM共有37个寄存器,都是32位长度的
    1)31个通用寄存器,包括程序计数器(PC)在内;
    2)6个状态寄存器,包括1个当前状态寄存器和5个备份状态寄存器(影子寄存器)。目前只使用了其中12位。

  • ARM各工作模式下的寄存器
    ARM各模式下的寄存器.png

  • Thumb状态下的寄存器
    Thumb状态下的寄存器.png

  • ARM各寄存器介绍

  1. 未分组寄存器 R0 ~ R7,共 8 个。在所有的运行模式下都使用同一个物理寄存器,它们未被系统用作特殊的用途。

  2. 分组寄存器 R8 ~ R12,R13 ~ R14
    (1)R8 ~ R12:( 总共10个 )
      每次所访问的物理寄存器与处理器当前的运行模式有关,R8~R12:每个寄存器对应两个不同的物理寄存器当使用fiq模式时,访问寄存器R8_fiq~R12_fiq,当使用除fiq模式以外的其他模式时,访问寄存器R8_usr~R12_usr。其中 FIQ 模式有单独的一组 R8 ~ R12,共5个;( FIQ ( 快速中断模式 ) 时访问寄存器 R8_fiq ~ R12_fiq )另外 6 种模式共用一组 R8 ~ R12,共5个;(当使用除 FIQ 模式以外的其他模式时,访问寄存器 R8 ~ R12)
    (2) R13 ~ R14:( 总共12个 )
      其中 USR 和 SYS 模式(表格的第一列)共用一组 R13 ~ R14 共2个,
      另外 5 种模式下各有独自的一组 R13 ~ R14,并采用以下记号来区分不同的物理寄存器,分别为 fiq、irq、svc、abt、und。共10个。( mode为以下几种之一:usr、fiq、irq、svc、abt、und)
      1)R13 在 ARM 指令中常用作堆栈指针 SP。由于每一种模式都有自己的 R13,所以我们在自己初始化的时候一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间
      2)R14 称为子程序链接寄存器 LR (Link Register),即在调用子程序的时候,可以将当前的程序地址存入LR寄存器,这样就方便了函数的返回。它有两个特殊功能,一种是每一种模式下都可以用于保存函数的返回地址,通常LR会配合BL和BLX来使用;另外就是异常处理后的返回地址,如中断。

  3. PC 指针( R15 )

      R15 用作程序计数器 ( PC ),对应一个物理寄存器,由于 ARM 体系结构采用了多级流水线技术,对于 ARM 指令集而言,PC 总是指向当前指令的下两条指令的地址,可以通过向 pc 赋值,来控制程序跳转,即 PC 的值为当前指令的地址值加8个字节。

  4. CPSR (1 个 状态寄存器,当前程序状态寄存器 )
    在这里插入图片描述

  5. SPSR ( 5 个 备份状态寄存器 )

  SPSR(备份的程序状态寄存器,或者叫 影子寄存器)。
  SPSR 除 usr、sys 外,对应用于异常保护的 CPSR 的备份,异常时,保存CPSR值,异常退出时,将该值恢复到CPSR,以保证程序的正常运行,每一中异常运行模式(除usr和sys)有各自的物理寄存器。

参考资料

STM32、Cortex-M3和ARMv8-M之间的关联(知乎)

arm cortex-a cortex-r cortex-m的本质区别是什么,体系架构?指令集?

ARM cortex三个版本A,R, M之间区别

ARM7、ARM9、ARM11、ARM-Cortex系列的关系

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ARM体系结构编程PDF是一本对ARM处理器体系结构编程介绍性资料,可以帮助读者了解ARM芯片的结构和特点,并学习如何编程和开发ARM架构的应用程序。 ARM体系结构是一种低功耗、高性能的处理器架构,广泛应用于移动设备、嵌入式系统和物联网等领域。该体系结构具有可扩展性强、功耗低、指令集精简等特点,在各个领域都有广泛的应用。 《ARM体系结构编程PDF》是一本综合性的指导手册,内容丰富全面。首先介绍ARM体系结构的基本概念和原理,包括指令集、寄存器、数据处理和存储等方面的内容。然后介绍ARM处理器的内部结构和运行方式,包括流水线、乱序执行、Cache等原理和技术。 接着,本书还详细介绍ARM编程的基本知识和技巧。包括了ARM汇编语言的语法和指令集,以及使用C语言进行ARM编程的方法和技巧。还包含了一些实际案例,通过解析和分析具体的应用场景,帮助读者更好地理解和掌握ARM编程的方法和技巧。 此外,《ARM体系结构编程PDF》还介绍了一些ARM开发工具和资源,包括交叉编译器、调试器和模拟器等工具,以及一些开发板和开发环境。这些工具和资源可以帮助读者更加便捷地进行ARM编程和应用开发。 总之,《ARM体系结构编程PDF》是一本对ARM体系结构编程进行全面介绍的资料,通过阅读和学习这本书,读者可以获得对ARM处理器体系结构编程的深入理解,并可以用于自己的应用开发和学习研究。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值