嵌入式学习 - ARM体系结构
嵌入式学习 - STM32存储器映射
嵌入式学习 - STM32F4启动分析
1、ARM含义
第一:ARM是个公司,它不生产CUP,只做CPU架构设计。
第二:ARM架构,就是通常说的Cortex-A、Cortex-R、Cortex-M等CPU架构。
2、裸机编程
一般是指操作系统运行之前的一段代码,可以是汇编语言实现,也可以是C语言代码实现;bootloader是一个裸机程序,在Ubuntu上运行的程序不是裸机程序,因为Ubuntu是一个操作系统,在Ubuntu上运行的程序是依赖操作系统才能运行的。
3、ARM内核的发展
ARM产品在指令架构集ARMv4、ARMv7、ARMv8等。
在ARMv7之前所对应的CUP核心名称是ARM7、ARM8、ARM9这种命名方式。
在ARMv7的时候,对CPU核心名称进行了调整,改用Cortex-A、Cortex-R、Cortex-M进行命名;A系列主要运行操作系统,性能较好;M系列相较于A系列没有A系列性能那么高,通常用于单片机开发;R系列主要用于实时控制系统方面。
ARMv8系列支持了64bit的指令集。处理器架构:体系结构定义指令集和基于这一体系结构下处理器的编程模型(基本数据类型、工作模型、寄存器组)。基于同种体系结构可以有多种处理器、每个处理器的性能不同,面向的应用领域也不同。
ARM处理器家族
早先经典处理器
包括ARM7、ARM9、ARM11家族
Cortex-A系列
针对开放式操作系统的高性能处理器;应用于智能手机,数字电视,服务器等高端运用。
Cortex-R系列
针对实时系统、满足实时性、高可靠性控制需求;应于汽车制动系统,动力系统,移动通信基带控制器等。
Cortex-M系列
为单片机驱动的系统提供的低成本优化方案;应用于传统的微控制器市场,智能传感器,汽车周边部件等。
指令集、CPU核心、CPU、SoC的区别
指令集
:处理器能够识别并执行的指令集合;每一条指令可处理一个简单或复杂操作(加、加乘…);每一条指令对应一条或几条汇编指令。通常ARMv7指令、ARMv8指令等这些指令集的架构,这部分定义了整体的架构,例如定义了ARM的工作模式、中断处理方式。
CPU核心
:是指令集的具体实现,例如Cortex-A7就是根据ARMv7指令集来实现的CPU核心,而STM32MP157则是意法半导体公司根据Cortex-A7的CPU核心设计出来的一款SoC。
SoC(System on Chip)
: 指的是在单个芯片上集成一个完整的计算机系统,所谓完整的系统一般包括中央处理器(CPU)
、存储器
、以及外围电路
等。也就是说一个芯片内部除了有CPU之外,还集成了很多控制单元,例如LED、UART控制器单元等。
指令集常见分类
复杂指令集(CISC)
:包含处理复杂操作的特定指令,指令长度不固定执行需要多个周期。
精简指令集(RISC)
:指令简单而有效,格式和长度通常是固定的,大多数指令在一个周期内可以执行完毕,ARM的内核是基于RISC体系结构的。
Cortex-M家族简介
Cortex-M系列产品主要包括Cortex-M0、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-M7等。
Cortex-M0:主打低功耗和混合信号的处理;
Cortex-M1:应用于FPGA的应用控制领域;
Cortex-M3和Cortex-M4:主要用来替代ARM7,重点侧重能耗与性能的平衡;
Cortex-M7:则重点放在高性能控制运算领域;
Cortex-M4特性和体系结构
ARM
Cortex-M4
处理器内核是在Cortex-M3
内核基础上发展起来的,其性能比Cortex-M3提高了20%。新增加了浮点、DSP、并行计算等。RISC处理器内核:高性能32位CPU;Thumb-2指令集,高效、高代码密度,高性能,使用ARMv7-M的体系架构支持DSP和SIMD; 中断数量可配置(1~240个),低中断切换时延,提供不可屏蔽中断(NM)输入保障高可靠性系统;
低功耗模式:集成的睡眠状态支持、多电源域、基于架构的软件控制;
支持多种嵌入式操作系统,也被多种开发组件支持,包括
MDK(ARM Keil微控制器开发套件)
、RVDS(ARM RealView开发组件)
、IARC编译器
等。
体系结构
Cortex-M微处理器主要包括
处理器内核
、嵌套向量中断控制器(NVIC)
、调试子系统
、内部总线系统
构成。
Cortex-M微处理器通过精简的高性能总线(AHB-LITE)
与外部存储器及外设
进行通信。
工作模式
Cortex-M4有两种工作模式和两种工作状态
处理模式(Handler Mode)
当处理器发生了异常或者中断,则进入处理模式进行处理、处理完成后返回线程模式。在该模式下处理器具有特权访问等级,可以访问处理器中的所有资源。
线程模式(Thread Mode)
芯片复位后,即进入线程模式,执行普通用户程序;可以处于特权或非特权模式,访问等级由CONTROL寄存器控制切换。
Thumb状态
正常运行时处理器的状态。
调试状态
调试程序时处理器的状态,调试器可以访问或修改处理器中寄存器的值。
寄存器组-通用寄存器
Cortex-M4处理器内核有13个通用寄存器以及多个特殊寄存器,具体介绍如下:
1、R0-R12
: 通用寄存器。其中R0-R7
为低端寄存器,可作为16位或32位指令操作数,R8-R12
为高端寄存器,只能用作32位操作数。
2、R13
: 堆栈指针SP, Cortex-M4在物理位置上存在两个栈指针,主栈指针MSP
, 进程栈指针PSP
。在处理模式
下,只能使用主堆栈,在线程模式
下,可以使用主堆栈也可以使用进程堆栈,这主要是由CONTROL寄存器控制完成。系统上电的默认栈指针是MSP。
3、R14
: 连接寄存器(LR), 用于存储子程序或者函数调用的返回地址。
4、R15
: 程序计数器(PC), 存储下一条将要执行的指令的地址。
寄存器组-特殊寄存器
PSR
:组合程序状态寄存器,该寄存器由三个程序状态寄存器组成。
1、应用PSR(APSR)
:包含前一条指令执行后的条件标志;
2、中断PSR(IPSR)
:包含当前SR的异常编号;
3、执行PSR(EPSR)
:包含Thumb状态位;
PRIMSK
:中断屏蔽特殊寄存器。
CONTROL
:控制寄存器。
1、[PRIV]:为0, 处理器处于线程模式的特权级,为1为非特权级;
2、[SPSEL]:为0时,线程模式使用MSP, 为1时使用PSP;
注意:处理器模式时,固定使用MSP。
写在最后
ARM 之十五 扫盲 ARM 架构、指令集、微架构、系统架构、ARM
四大主流芯片架构(X86、ARM、RISC-V和MIPS)
ARM 之五 发展史及各时期内核(ARM1 ~ ARM11 / Cortex)介绍