Day1-arm体系结构概述
Day1-arm体系结构概述
STM32内部构造
一、必须get的ARM知识
1、ARM公司简介
ARM(Advanced RISC Machines),三种含义:(1)公司名称 (2)一类微处理器的通称 (3)技术名称
该公司不生产芯片,将设计方案提供半导体厂商,由半导体厂商生产SOC,并出售。
提供一些其他设计服务,如物理IP,图形内核和开发工具设计。
2、ARM处理器家族(CPU)
分四类:(1)早期经典处理器、(2)Cortex-M系列 (3)Cortex-A系列 (4)Cortex-R系列
早期经典处理器:如ARM7、ARM9、ARM11家族。
Cortex-M系列 :Cortex-M0、Cortex-M1、Cortex-M3、Cortex-M4、Cortex-M7
主要用于单片机,偏向控制领域。如意法半导体的STM32。为单片机驱动系统提供低成本优化方案。
- Cortex-A系列 :Cortex-A5、Cortex-A7、Cortex-A8、Cortex-A9、Cortex-A15、Cortex-A53、Cortex-A57。
主要针对操作系统,偏向处理领域。如安卓系统,应用于智能手机、智能电视等高端运用。
- Cortex-R系列 :Cortex-R4、Cortex-R5、Cortex-R7。
主要针对实时系统,偏向时间领域。对数据实时响应速率较高。如汽车刹车系统。汽车制动系统,动力系统。
3、ARM处理器(CPU)架构
2个内容:(1)指令集 (2)编程模型(基本数据类型、工作模型、寄存器组)
注意点:同种体系结构,可以有多种处理器。每个处理器性能不同,应用领域不同。
ARM体系结构发展
现共定义8个版本 V1-V8
最早: V1 - V3 已废弃
经典:V4 - V6 经典处理器运用较多。
主要: V7 目前Cortex系列处理器主流,支持Thumb-2的32位指令集。
最新: V8 兼容ARMV7架构特性,并支持64位数据处理
- 指令集
概念:处理器识别并执行的指令集合。
特点:(1)每条指令可处理一个简单或复杂的操作。(2)每条指令都有所对应的汇编指令(一条或多条)
分类: (1)复杂指令集(CISC) complex instruction set computer 包含处理复杂操作的特定指令,指令长度 不固定,执行需多周期。例如:英特尔PC
(2) 精简指令集(RISC) 指令简单有效,格式长度固定,可在一周期内执行完毕。如:ARM内核。 ARM内核基于RISC体系结构。
4、SOC的概念
概念:SOC片上系统,指单个芯片集成一个完整的计算机操作系统(包含中央处理器(CPU)、存储器、外围电路)
注意点:STM32 所说的F0、F1、F2指的是SOC片上系统不同。而说的英特尔和ARM指的是SOC片上系统里面的CPU。
常见Cortex-M系统SOC举例:意法半导体(ST)、恩智浦(NXP)、德州仪器(TI)、新塘科技(nuvoton)(Cortex-M0和Cortex-M4)等。
二、Cortex-M0处理器介绍
1、Cortex-M0处理器简介
(1)Cortex内核分类
Cortex内核根据ARM名称分为A系列、R系列和M系列。 A系列用于高端应用处理器,R系列用于高性能实时系统(刹车系统)和M系列用于微控制器应用(单片机)
Cortex-M0主打低功耗和混合信号处理。
Cortex-M3代替ARM7 侧重能耗与性能的平衡。
Cortex-M7高性能控制运算领域。
F0系列使用Cortex-M0内核。
F1系列使用Cortex-M3内核。
F4系列使用Cortex-M4内核。
2、Cortex-M0体系结构
(2)Cortex-M0结构框图
处理器内核:主要完成逻辑控制与运算。通过单总线和总线接口与存储器进行交互
嵌套向量中断控制器(NVIC):帮助CPU处理外部中断请求。对中断进行优先级排列。
唤醒中断控制器(WIC)
扩充:冯诺依曼架构和哈弗架构
冯诺依曼架构:数据和指令通过一条总线和存储器及外设进行交互。举例:Cortex-M0
哈弗架构:数据和指令通过两条总线(IBUS和DBUS)和存储器及外设进行交互 举例:Cortex-M3
(3)Cortex-M0特性
(4)Cortex-M0的两种工作模式和两种工作状态
两种工作模式:线程模式和处理模式。
- 线程模式:(Thread Mode)芯片复位后,即进入线程模式,执行用户程序。
- 处理模式:当处理器发生异常或中断,则进入处理模式处理,处理完成后返回线程模式。
两种工作状态:Thumb状态和调试状态。
- Thumb状态:正常运行时处理器的状态。
- 调试状态:调试程序时处理器的状态。
(5)Cortex-M0寄存器组——通用寄存器
13个通用寄存器和多个特殊寄存器
通用寄存器:R0-R12。
R0-R7:为低端寄存器 作为16位或32位指令操作数。
R8-R12:为高端寄存器 作为32位指令操作数。
堆栈指针SP:R13(有两个)
R13(MSP):主栈指针。在处理模式下只能使用主栈指针。
R13(PSP):进程栈指针。在线程模式下既可以使用主堆栈,又可以使用进程堆栈。由CONTROL寄存器控制完成。
连接寄存器(LR):R14用于存储子程序或者函数调用的返回地址。
程序计数器(PC):R15存储下一条将要执行的指令的地址。
(6) Cortex-M0寄存器组——特殊寄存器
XPSR:组合程序状态寄存器,该寄存器由三个程序状态寄存器组成
应用PSR(APSR):包含前一条指令执行后的条件标志
中断PSR(IPSR):包含当前ISR的异常编号
执行PSR(EPSR):包含Thumb状态位 T位负责切换ARM和Thumb 注:如Cortex-M0只支持Thumb指令集因此T位为固定位。
PRIMSK:中断屏蔽特殊寄存器
控制处理器处于线程模式 =0,使用MSP
=1,使用PSP
控制处理器处于处理器模式时,固定使用MSP。
- 注:系统启动时,控制处理器默认的方式是MSP(主栈指针)
3、Cortex-M0异常和中断
cortexM0 异常分为两种 中断和异常。无论那种都是跳到固定的入口进行请求
- 外设中断请求称为中断
- 内核中断请求称为异常
4、Cortex-M0指令集
ARM处理器支持两种指令集:ARM和Thumb。
EPSR寄存器的T标志位负责指令集的切换,cortex-M0只支持Thumb指令
ARM指令集
32位精简指令集
指令长度固定
降低编码数量产生的耗费,减轻解码和流水线的负担
Thumb指令集
Thumb指令集是ARM指令集的一个子集;
指令宽度16位
与32位指令集相比,节约系统存储空间
Thumb指令集不完整,所以需配合ARM指令集一同使用
注意点:
Thumb与ARM相比,代码体积小了30%,但性能也被降低了20%。
Thumb-2技术 具备一些32位的Thumb指令,使得原来只有用ARM指令能够完成的功能,用Thumb指令也可以完成。
Cortex-M0基于ARMv6-M体系结构,该体系结构的处理器只是用了16位Thumb指令和部分32位Thumb指令。
三、认识STM32
1、STM32F0体系架构
系统主要由以下几个模块构成
- 两个主模块
- Cortex-M0 内核及先进高性能总线(AHB bus)
- 通用DMA(GP-DMA-general purpose DMA)
- 四个从模块
- 内部FLASH
- 内部SRAM
- 专门用于连接GPIO口的AHB2
- AHB到APB的桥,所有的外设都挂在APB总线上
- AHB:高速总线。例:FLASH、SRAM、AHB2GPIO等
- APB:外设总线。例:RTC、I2C、USART等
- BusMatrix:总线矩阵单元进行仲裁