一、背景
RISC(精简指令集计算机):指令集精简(仅保留常用指令)、指令长度固定、大部分操作通过寄存器完成、流水线效率高,适合低成本、低功耗场景。
CISC(复杂指令集计算机):指令集丰富(包含复杂指令)、指令长度可变、依赖微码实现复杂操作,适合高性能计算,但功耗和复杂度较高。
ARM 属于 RISC,其设计遵循精简指令集理念,注重低功耗和高效能。
Cortex A7是32字节
二、寄存器
以下为ARM架构内核通用寄存器及特殊功能寄存器:
寄存器功能表
名称(缩写) | 主要功能 |
---|---|
R0-R12 | 通用寄存器,存储运算数据或地址;R0-R7为未分组寄存器,R8-R12可能因模式不同有分组复用。 |
SP (R13) | 栈指针寄存器,指向当前栈顶位置。 |
LR (R14) | 链接寄存器,保存子程序返回地址(如函数调用后的下一条指令地址)。 |
PC (R15) | 程序计数器,存储下一条待执行指令的地址,自动递增或跳转。 |
CPSR | 当前程序状态寄存器,存储 ALU 标志位、中断状态、处理器模式等。 |
SPSR | 备份程序状态寄存器,异常模式下保存被中断的 CPSR 值。 |
MMU | 内存管理单元,负责虚拟地址到物理地址的转换和内存访问权限控制(关闭时为物理内存)。 |
CACHE | 高速缓存,分为指令 Cache 和数据 Cache,提升访问效率。 |
指令 Cache | 缓存指令以减少从主存读取的延迟。 |
数据 Cache | 缓存数据以减少从主存读取的延迟,使用时常需关闭(dcash)。 |
ALU | 算术逻辑单元,执行算术运算(如加减乘除)和逻辑运算(如与或非)。 |
冯诺伊曼架构:指令数据放在一起;哈佛架构:指令数据分开放;所以ARM架构属于哈佛架构
典型使用场景
R0-R3:函数参数传递和返回值存储
R4-R11:局部变量保存(需在子程序中压栈保护)
R13(SP):在PUSH/POP指令中自动调整栈位置
R14(LR):BL/BLX指令自动保存返回地址,异常发生时自动备份到SPSR
R15(PC):直接修改可实现跳转(如
MOV PC, LR
返回函数)变量的计算:SoC中集成了一个RAM控制器,定义的变量存储在RAM中。当需要进行运算时,先将变量从RAM复制到R寄存器,然后调用ALU执行运算操作,最后将计算结果从寄存器写回RAM存储。
三、总线
AHB 和 APB 总线简介
AHB(Advanced High-performance Bus)和 APB(Advanced Peripheral Bus)是ARM公司提出的AMBA(Advanced Microcontroller Bus Architecture)总线协议中的两种主要总线类型,广泛应用于嵌入式系统设计中。
AHB(Advanced High-performance Bus)
AHB是一种先进的高速总线,主要用于连接处理器、内存控制器、DMA控制器等高带宽需求的模块。
APB(Advanced Peripheral Bus)
APB是一种低功耗、低复杂度的总线,主要用于连接外设,如UART、SPI、GPIO等。
四、开发基础
1.门电路
与
或
非
2.RAM分类
sram(static ram)用晶体管存储0、1。速度快,成本高,存储密度低。
dram(dynamic ram)动态存储,用电容充放电存储0,1。功耗大,需要外接刷新电路,读写速度低于sram。成本低,存储密度大。
sdram(synchronous dram)增加了同步电路,提高dram的数据读写速度。
ddr ram(全称ddr sdram即double data rate sdram),为sdram的下一代。目前已发展到ddr5。
iram(internal ram)注意iram并非是真正意义上的某种ram,通常iram就是sram,它通常存在于Soc内部,所以被称为iram。
3.ROM分类
ROM:非易失性存储器,出厂时写入数据,之后无法更改。
PROM(Programmable ROM):可编程 ROM,出场后用户能写入一次数据,例如 CD - ROM。
EPROM(Erasable PROM):可擦写 PROM,出场后可擦除数据再次写入,但需要紫外光等特殊设备。
EEPROM(Electrically EPROM):电可擦写可编程 ROM,无需专用设备就能擦写、编程。
Flash(闪存):新一代非易失性存储器,包含 Nor(或非) Flash(可寻址)、NAND(与非) Flash(不可寻址);其中eMMC本质上是 NAND(类似 SD 卡),常以芯片形式出现。
五、s3c2440
以s3c2440为例,中间:内核为arm920t,最后:指令集为v4
ARM小端存储
有supervisor,可以跑操作系统
寄存器个数:
arm 37个
Cortex 40个
N,普通结果;Z,结果为0,c进位,v,有符号位
第一个是错误的,改为10000
汇编指令
Encoding A1 ARMv4*, ARMv5T*, ARMv6*, ARMv7
MOV{S} <c> <rd>, #const
A算术右移:有符号位的补符号位
L逻辑右移:无符号补0