ARM体系结构
ARM体系结构
编程原理
从源代码到CPU执行过程
体系结构
冯诺依曼结结构
程序和数据放在同一内存中,彼此不分离的结构。如:Intel CPU
- 特点
- 安全和稳定性不好
- 处理起来简单
哈佛结构
程序(一般放在ROM、Flash中)和数据(一般放在RAM中)分开独立存放在不同的内存块中,彼此完全分离的结构。如:单片机、ARM CPU
- 特点
- 安全和稳定性高
- 软件处理复杂
指令集
- CISC复杂指令集
- 设计理念:用最少的指令完成任务
- CPU本身设计复杂,工艺复杂
- 如:Intel CPU
- RISC精简指令集
- 设计理念:让软件完成具体的任务,CPU本身仅提供基本指令集
- 编译器的设计变难了
- 如:ARM CPU
总线编址方式
- IO与内存独立编址
使用专用的CPU指令来访问某种特定外设。如:Intel CPU - IO与内存统一编址
把外设的寄存器当做一个内存地址来读写。如:ARM CPU
ARM CPU 工作模式
7个基本工作模式
- 非特权模式
- User:普通模式,大部分任务执行在这种模式
- 特权模式
- 系统模式
- System:使用和User模式相同寄存器集的特权模式
- 异常模式
- FIQ:当高优先级(fast)中断产生时,进入这种模式
- IRQ:当低优先级(normal)中断产生时,进入这种模式
- Supervisor:当复位或软中断指令执行时,进入这种模式
- Abort:当存取异常时,进入这种模式
- Undef:当执行未定义指令时,进入这种模式
- 系统模式
寄存器
寄存器特性
- 寄存器属于CPU外设的硬件组成部分
- CPU可以像访问内存一样访问寄存器
- 寄存器设计的目的是留作外设被编程控制的“活动开关”
- 寄存器中每个bit位都有特定含义,编程时需要位操作。如STM32寄存器编程
- 单个寄存器的位宽一般和CPU的位宽一样,以实现最佳访问效率
寄存器分类
- 通用寄存器
- 是CPU的组成部分,ARM CPU有37个。
- SFR(特殊功能寄存器)
- 不在CPU中,而是存在于CPU的外设中,可通过访问外设的SFR来编程操控这个外设。
ARM CPU的37个寄存器
- ARM 共有37个寄存器,但每种工作模式下最多只能看到18个寄存器,其他寄存器在当前模式下不可见。这种设计叫影子寄存器(banked register)
- ARM 37个寄存器,都是32位长度
- 30个:“通用”型
- 1个:固定用作PC
- 1个:固定用作CPSR
- 5个:固定用作5种异常模式下的SPSR
- CPSR程序状态寄存器
- CPSR中各个bit位表明了CPU的某些状态信息
- CPSR中的I、F位和开中断、关中断有关
- CPSR的mode位决定了CPU的工作模式
- PC(Program control register)程序指针
- 整个CPU只有一个PC,PC指向哪里,CPU就会执行哪条指令
- 整个CPU只有一个PC,PC指向哪里,CPU就会执行哪条指令
ARM 异常处理方式
异常
- 正常工作之外的流程都叫异常
- 异常会打断正在执行的工作,且异常处理完成后继续回来执行原来的工作
- 中断是异常的一种
异常向量表
- 所有的CPU都有异常向量表,是CPU设计时就设定好的,是硬件决定的
- 当异常发生时,CPU会自动动作(PC跳转到异常向量处处理异常)
- 异常向量表是硬件向软件提供的处理异常的支持
异常处理机制
- 当异常产生时,ARM core进行现场保护:
- 拷贝CPSR到SPSR_
- 设置适当的CPSR位:
- 改变处理器状态进入ARM态
- 改变处理器模式进入相应的异常模式
- 如果需要,设置中断禁止位禁止中断
- 保存返回地址到LR_
- 设置PC为相应的异常向量
- 返回时:
- 从SPSR_恢复CPSR
- 从LR_恢复PC
内存地址映射
以S5PV210为例,ARM Cortex-A8架构,32位CPU。
- 相关术语表
术语 | 描述 |
---|---|
ROM(Read only Memory) | 只读存储器 |
RAM(Random access Memory) | 随机访问存储器 |
IROM(Internal ROM) | 内部ROM,集成到SOC内部的ROM |
IRAM(Internal RAM) | 内部RAM,集成到SOC内部的RAM |
DRAM(Dynamic RAM) | 动态RAM |
SRAM(Static RAM) | 静态RAM |
SFR(Special function Register) | 特殊功能寄存器 |
内存与外存
- 内存/外存区别
术语 | 用途 | 描述 |
---|---|---|
内存 | 用来运行程序 | RAM,如DRAM、SRAM、DDR |
外存 | 用来存储程序和数据 | ROM,如Flash(Nand、iNand、U盘、SSD)、硬盘、光盘 |
- 内存的区别
术语 | 特点 |
---|---|
SRAM | 容量小、价格高,优点是不需要软件初始化,上电直接就能用 |
DRAM | 容量大、价格低,缺点是上电后不能直接使用,需要软件初始化后才能使用 |
- 外存的区别
术语 | 特点 |
---|---|
NorFlash | 容量小、价格高,优点是可以和CPU直接总线式相连,CPU上电后直接读取。一般用作启动介质 |
NandFlash | 容量大、价格低,缺点是不能总线式访问,上电时CPU不能直接读取,需要CPU先运行初始化软件,然后通过时序接口进行读写 |
SOC启动过程
启动过程
启动过程对比
类型 | 描述 |
---|---|
PC机 | 很小容量的BIOS(NorFlash) + 很大容量的硬盘(类似于NandFlash) + 大容量的DRAM |
单片机 | 很小容量的NorFlash + 很小容量的SRAM |
SoC | 外接的大容量Nand + 外接的大容量DRAM + SOC内置的SRAM |
SOC启动步骤示例
- 第一步:CPU上电后先从内部IROM中读取预先设置的代码(BL0),并执行。BL0代码,首先做一些基本初始化(CPU时钟,关看门狗…);然后判断选择启动模式(如通过OMPin设置),并从对应的外部存储器中去读取第一部分启动代码(BL1,大小为16KB)到内部SRAM。
- 第二步:从IRAM中去运行上一步读取来的BL1(16KB)。BL1负责初始化NandFlash,然后将BL2读取到IRAM(剩余的80KB)。
- 第三步:从IRAM运行BL2,BL2初始化DRAM;然后将OS读取到DRAM中,并启动OS。启动过程结束。