首先我们来了解一下ARM相关的一些知识:

1.ARM公司:

  • 成立于1990年11月
  • 前身为 Acorn计算机公司
  • 主要设计ARM系列RISC处理器内核
  • 授权ARM内核给生产和销售半导体的合作伙伴
  • ARM 公司不生产芯片
  • 另外也提供基于ARM架构的开发设 计技术
  • 软件工具, 评估板, 调试工具,应用 软件,总线架构, 外围设备单元,等

2.ARM:

  • CPU IP CORE ,CPU 的硬件内核

ARM 就是一种CPU 内核的设计方式

接下来我们就对于这一款CPU内核展开学习一下:

ARM

1.CPU内核(kaenel)及其分类:

1.分类:
1.1.指令集:

  • CPU的指令集其实就是用指令对计算机实现控制和计算的指令集合。

1.2.根据指令集不同分为:

  1. CISC:Complex Instruction Set Computer ,复杂指令集计算机,(x86 架构)
  2. RISC:Reducd Instruction Set Computer , 精简指令集计算机,(ARM,8051,dsp)

2.类比CISC与RISC

2.1.CISC:

  • 芯片面积大
  • 加工成本高
  • 设计复杂
  • 体积大,功耗大
  • 拥有庞大的指令集

2.2.RISC:

  • 芯片面积小
  • 加工成本低
  • 功耗低
  • 体积小(适用于便携式设备)
  • 去除了CISC 的多余指令集

2.ARM发展史:

ARM公司就是设计RISC这样的处理器内核的公司
司也根据不同的应用场景设计了不同型号的CPU内核:
在这里插入图片描述

ARM的不同版本也经历了如下的演变:
在这里插入图片描述

Cortex版本的不同型号也对应了不同的功能:

型号 优点 应用领域
Cortex - A A:applaction 应用型高 手机与应用电子领域
Cortex - R R:realtime 实时性高 汽车电子,航空航天与军工领域
Cortex - M M:Micro 微控制器 单片机领域

接下来正式对于ARM的内核结构进行了解:

3.ARM内核结构

用这款i.mx6ull 的开发板来展开学习:它使用了Crotex - A7 的内核,一次操作的寄存器是32bit大小

1.处理器组成:
处理器的功能就是为了操作数据,那么我们一个处理器应当具备的基本结构就是:

  1. ALU :Arithmetic Logical Unit 算数逻辑单元‘
  2. 寄存器:reg
  3. 状态指示寄存器:PSR
  4. 外部数据访问:BIU ,Bus Interface Unit 总线接口单元

2.寄存器:

2.1.R0 - R12 通用寄存器(在内核中进行操作)

  • 作用:在内核中存放数据
  • 不可位寻址,寄存器在硬件中直接存死,不可以通过软件操作

2.2.PC寄存器:Program Conter 程序计数器
在这里插入图片描述

  • 本质上是一个指针,指向当前程序允许指令的下一条指令
  • PC指向哪里,程序接下来就会去允许哪一条指令

程序允许的三级流水线结构
在这里插入图片描述

  • 取指令,解释指令,执行指令,三者是同时向下运行的

2.3.LR寄存器:Linker Register 链接寄存器

  • 保存程序返回的地址

操作

  • 当PC发生带链接的跳转指令时,将PC的内容存入LR中

2.4.SP寄存器:Stack Point ,栈指针寄存器

  • PC寄存器指向栈顶
  • 这个栈是专门存放LR寄存器的内容的

当函数的调用或者PC的跳转发生嵌套时,仅仅依靠LR寄存器无法返回初始执的地方,我们需要将LR寄存器的地址
在第二次调用前,先将第一次的地址压入栈,在出栈时,拿出SP寄存器指向的地址赋给lr让程序返回上一级调用的j
结束位置

2.6.CPSR寄存器:Current Progrem Status Register ,当前程序状态寄存器

  • 保存程序运行到某一步的状态

在这里插入图片描述

2.7.SPRC寄存器:Save Progrem Status Register ,保存/备份程序状态寄存器

  • 当发生异常情况时,存在于异常状态的寄存器SPRC_会存储CPRC 中的当前程序状态
  • 等到异常结束时,会将SPRC_ 中的程序状态赋给CPRC,恢复原始状态

2.8.MMU单元:Mermory Manager Unit , 内存管理单元

  • 管理虚拟内存
  • 用于管理虚拟内存到真实内存的映射,从而提高物理内存的利用率
  • 可以将不同的虚拟地址,映射到一块连续的物理地址中

这里要注意,当我们在进行ARM下的逻辑操作时,应当关闭MMU,防止MMU进行内存映射后
本来应该操作的真实物理地址发生了改变,对硬件的操作就会失效

在这里插入图片描述
ARM架构的寄存器常态下一共有37个,cortax-a 的芯片多出两种模式,一共有40 个寄存器

4.计算机系统组成
计算机系统=硬件系统+软件系统
硬件是计算机系统的物质基础,软件是计算机系统的灵魂。硬件和软件是相辅相成的,两者是不可分割的整体

计算机系统硬件组成部分:

  1. 输入设备
  2. 输出设备
  3. 计算器
  4. 存储器
  5. 控制器

1.存储器:
来看一下计算机的三级存储结构:
在这里插入图片描述

存储器是用来存放程序和数据的部件,它是一个记忆装置,也是计算机能够实现“存储程序控制”的基础

  1. 主存储器
    可由CPU直接访问,用来存放当前正在执行的程序和数据。
  2. 辅助存储器
    设置在主机外部,CPU不能直接访问,用来存放暂时不参与运行的程序和数据,需要时再传送到主存。

辅助存储器也就是我们的外存,经过演变,现在我们常用的是FLASH(闪存)
分类:

  • nor flash 每个字节可以被寻址,有两根总线,一根数据总线,一根地址总线

  • nand flash 每个字节无法被寻址,必须以固定块的大小写入或者读取 一段数据(512byte)
    例:OMMC :本质上是nand 是我们常用的SD卡,OMMC通常以芯片的形式出现

  • 高速缓冲存储器(Cache)
    CPU可以直接访问,用来存放当前正在执行的程序中的活跃部分,以便快速地向CPU提供指令和数据。

Cache:高速数据缓存

  • 将数据存入Cache中后,可以让内核直接从Cache中访问数据,不同再让CPU每次都和内存进行数据交互
  • 可以提高CPU访问数据的效率

Cache分类:

  • ICache:instruction Cache ,指令集缓存,用于对指令进行存储
  • dCache:data Cache , 数据缓存,用于对数据的存储

这种Cache的高速缓存将我们的指令与数据分开存储,优于经典的冯诺依曼数据与指令同时存储的方式,
可以防止程序运行时忽略掉我们的数据操作指令

5.计算机的总线结构

1.单总线通信:
在这里插入图片描述

  • 通过一组数据线与外设进行数据交互,

缺点:

  • 当与一台外设交互时,其他外设接不进来

2.双总线通信:
在这里插入图片描述

  • 有两组负责通信的数据线

2.1. AHB总线:

  • 先进高速总线(USB,网卡,RAM)
  • 连接通信速度较快的总线

2.2. APB总线:

  • 先进外设总线
  • 用于连接通信速度较慢的外设

6.处理器的基本工作模式

1.基本工作模式:

  1. USER:非特权工作模式,大部分任务的执行都在这个模式
  2. FIQ :快速中断请求模式(高优先级的异常事件)
    当一个高优先级(fast)的中断发生时,将会进入这种模式
  3. IRQ:低优先级(normal)中断时,将会进入这种模式
  4. supervisor:管理员SVC模式,板子上电复位或者发生软件中断时处于这种状态
  5. Abort:存取异常模式,读取或者写入数据异常时进入此模式
  6. Undef:执行未定义指令时进入这种模式,即从PC取出的指令经过译码器翻译出出错时进入
  7. system :使用与USER模式相同寄存器的特权模式

*2.Cortex - A 特有模式:

  1. cortex-A 特有模式
  2. monitor模式:为了安全而拓展出的用于执行安全监测代码的模式,也是一种特权模式

以上模式中除了USER模式之外,其余的均是特权模式

7.异常处理

当程序在运行时出现异常状态时,需要对应的进行异常处理,异常处理流程如下

在这里插入图片描述

异常向量表:

  • 本质上是一个数组
  • 存放的是跳转到异常服务函数的指令

ARM中的异常向量如下:
在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐