快速掌握单片机基础(5)(ARM基本概念)

三、ARM

1.计算机CPU分类与ARM基础

1)CPU指令集架构分类

(1)CISC(Complex Instruction Set Computer,复杂指令集):代表为 x86。

特点:指令功能多、芯片复杂、成本高、体积大、功耗大。

(2)RISC(Reduced Instruction Set Computer,精简指令集):

特点:指令功能少、芯片简单、成本低、体积小、功耗低。

(3)ARM:设计RISC精简指令集架构CPU(分版本)。

商业模式:ARM公司设计内核,授权给半导体公司(如ST意法半导体),由半导体公司设计外围电路并生产芯片(如STM32F103)。

2)ARM内核版本分类

早期版本:ARM7、ARM9、ARM11。

Cortex系列(按应用领域划分):

Cortex-A (Application,应用领域):用于智能手机、高性能计算。

Cortex-A5 (摩托罗拉)

Cortex-A7 (IMX6ULL, STM32MP157)

Cortex-A8 (Samsung Gaxlay Note)

Cortex-A9 (Samsung Exynos 4412)

......

Cortex-A725 (玄戒o1)。

Cortex-R (Real-Time,实时性领域):用于汽车电子、工业控制。

Cortex-M (MCU,单片机领域):用于微控制器控制。

Cortex-M3 (STM32F103)

Cortex-M4 (STM32F407, STM32MP157)。

3)SOC架构

以NXP IMX6ULL Cortex-A7为例

外部引脚:VCC, GND, OSC (晶振), RESET (复位)。

内部结构:ARM kernel (内核)、GPIO、TIMER、USB、RAM控制器、RAM 128KB。

外部扩展:DDR3 512MB、EMMC 8GB。

2.总线、交叉编译与存储器基础

1)总线分类

单总线:内核和外设之间通过一组线连接通信。

多总线(双总线):按速度划分,实现高效通信。

速度快的外设 -> 内核:AHB总线: Advanced High Bus 先进高速总线(USB、网卡、RAM)

速度慢的外设 -> 内核:APB总线:Advanc Periphal Bus 先进外设总线(GPIO、UART、TIMER)

2)交叉编译

定义:在一个平台编写编译程序,在另外一个平台运行程序。

示例:在 Ubuntu 平台使用 arm-none-linux-gcc main.c 编译程序,生成的可执行文件放到 ARM 平台上运行。

3)存储器基础

RAM:易失性存储器(断电丢失),如 SRAM。

ROM:非易失性存储器(断电不丢失)。

Nor Flash:任何字节可以被寻址,带有地址总线和数据总线。

Nand Flash:块设备,以512byte为一块进行读写数据。

硬件参数记录:S3C2440 软件仿真 4KB RAM;EEPROM AT24C02 2048bit (256byte)。

3.ARM体系结构核心

以Cortex-A7 32位为例

1)寄存器组织

  1. ALU:算术逻辑单元,完成算术运算。

通用寄存器:R0 ~ R12(16个通用寄存器),用于存放数据。

特殊功能寄存器:

  1. SP (R13):Stack Pointer,栈指针寄存器,管理栈区空间。
  2. LR (R14):Linked Register,链接寄存器,保存函数的返回地址。
  3. PC (R15):Program Counter,程序计数器,本质是一个指针,指向当前程序正在执行指令的下一条指令。

状态寄存器:

  1. CPSR:Current Program Status Register,当前程序状态寄存器,记录程序运行到某一步时相关的状态(溢出、借位、进位)。
  2. SPSR:Save Program Status Register,保存/备份程序状态寄存器,保存当异常发生时 CPSR 寄存器中的值。

系统控制:

  1. MMU:Memory Mangement Unit 内存管理单元,将程序中的虚拟地址转换为物理地址

2)函数调用与栈机制

函数调用过程:

main 调用 add,add 调用 fn。

入栈:sp--,将数据存放到 sp 指向的新的位置。

出栈:从 sp 指向的位置取出数据,sp++。

栈的特点:先进后出(或后进先出)。

PC与LR配合:

执行 main 函数时,sp:0x1000000C 将 main 函数返回地址入栈。

pc:0x20000000 跳转到 add 函数执行。

sp:0x20000008 将 add 函数返回地址入栈。

pc:0x30000000 跳转到 fn 函数执行。

返回时,lr:0x20000008(sp) 将 add 函数返回地址存入到 lr,pc:lr 跳回到 add 函数。

最终 lr:0x1000000C(sp) 将 main 函数返回地址存入到 lr,pc:lr 跳回到 main 函数。

流水线结构:

三级流水线(取指 -> 译码 -> 执行)。

pc 取指令 -> 译码器翻译指令 -> CPU 执行指令。

3)MMU与CACHE

MMU (Memory Management Unit):内存管理单元,将程序中的虚拟地址转换为物理地址。

裸机:关掉 MMU。

Linux驱动:打开 MMU。

映射示例:进程1 (虚拟地址 0x20000000) -> MMU页表 -> 物理内存 RAM (0x80000000);进程2 (虚拟地址 0x20001000)。

CACHE:高速缓存,CPU直接从CACHE中访问数据,提高CPU访问数据效率。

D-CACHE:data cache 数据缓存(关闭dcache)。

I-CACHE:instruction cache 指令缓存(打开icache)。

4)计算机架构

冯·诺依曼架构:数据和指令共享同一块存储空间。

哈佛架构:数据和指令拥有独立的存储空间(现代计算机多采用此架构)。

4.数据存储与指令细节

1)存储模式(端序)

ARM处理器默认小端存储。

内存大端:高地址存放低数据位,低地址存放高数据位。

内存小端:高地址存放高数据位,低地址存放低数据位。

2)移位操作

逻辑右移 (LSR):最高位补0,不考虑数值的符号位(无符号数)。

示例:1011 0010 >> (LSR) 1 = 0101 1001

算术右移 (ASR):最高位补符号位,考虑数值的符号位(有符号数)。

示例:1011 0010 >> (ASR) 1 = 1101 1001

循环右移 (ROR):循环将每次移出的最低位补到最高位。

示例:1011 0010 >> (ROR) 1 = 0101 1001,再执行一次 >> (ROR) 1 = 1010 1100

5.异常与中断向量表

1)概念区别

中断向量表:本质是一个数组,数组中存放的是中断服务函数的入口地址。

异常向量表:本质是一个数组,数组中存放的是跳转到异常服务函数的指令。

注:向量表基地址可以位于 0xFFFF0000 (ARM720T, ARM9/10 family devices)。

2)异常向量表结构(按偏移量从低到高)

0x00:Reset(复位)

0x04:Undefined Instruction(未定义指令)

0x08:Software Interrupt(软中断)

0x0C:Prefetch Abort(预取指令异常)

0x10:Data Abort(数据异常)

0x14:保留

0x18:IRQ(中断请求异常)

0x1C:FIQ(快速中断请求异常)

6.版本对应关系总结

imx6ull -> Cortex-A7 (内核版本) -> ARMv7 (汇编指令集版本)

s3c2440 -> ARM920T (内核版本) -> ARMv4 (汇编指令集版本)

Exynos 4412 -> Cortex-A8 (内核版本) -> ARMv8 (汇编指令集版本)

相关推荐
星栖与芯10 小时前
LiteOS-M 切换汇编逐行图解(4):中断三件套与 HalTaskSchedule 触发
汇编·stm32·单片机·嵌入式硬件·harmonyos
SKH.17 小时前
ARM汇编
嵌入式硬件·arm
朝发如雪18 小时前
快速掌握单片机基础(1)(嵌入式基本概念)
单片机
szxinmai主板定制专家18 小时前
【嵌入式实战】RK3588+GMSL多路相机采集方案|SerDes长距离低延时视频流落地教程
人工智能·单片机·机器人·边缘计算·zynq
LCG元18 小时前
STM32F103 SPI 驱动 W5500 以太网模块实战:硬件协议栈寄存器体系、Socket 状态机避坑与 TCP 吞吐实测
stm32·单片机·嵌入式硬件
Zhang.Yi19 小时前
STM32-SPI
stm32·单片机·嵌入式硬件
en.en..19 小时前
网络分层封装 与 TCP粘包的因果关系
网络·单片机·嵌入式硬件
天空'之城19 小时前
单片机基础核心知识点汇总(三十九)
单片机·嵌入式硬件
mk01520 小时前
电动自行车汽车工业系统电机驱动100V高压恒定导向芯片进口替代
驱动开发·单片机·硬件工程·智能硬件·pcb工艺