嵌入式系统课程笔记02 ARM Cortex-M处理器

02 ARM Cortex-M处理器

文章目录

  • 02 ARM Cortex-M处理器
  • 理论
    • 概述
      • ARM(Advanced RISC Machine)
        • 名称
        • RISC(精简指令集)
        • 特点
          • 小体积、低功耗、低成本、高性能
          • 支持Thumb(16bit)/ARM(32bit)双指令集,能很好地兼顾性能代码密度
          • 大量使用寄存器,指令执行速度更快
          • 大多数数据操作都在寄存器中完成,更多单周期指令,便于指令流水线执行
          • 寻址方式灵活简单,执行效率高
          • 指令长度固定
    • ARM体系结构版本
      • ARM处理器
        • ARM体系结构版本
          • 1. V1架构(ARM1)
          • 2. V2架构(ARM2,ARM3)
          • 3. V3架构(ARM6)
          • 4. V4架构(ARM7,ARM9)
          • 5. V5架构(ARM10)
          • 6.V6架构
          • 7. V7架构----- Cortex-M4所用
          • 8. V8架构
        • V8架构支持三个主要指令集:
          • A32(或ARM)
          • T32(Thumb)
          • A64
        • ARM处理器核简介
          • ARM处理器核简介(约2000~2010年):
          • SecurCore
          • Xscale
          • Cortex
            • Cortex-A:Applications
            • Cortex-M:MCU
            • Cortex-R:Real time
    • Cortex-M 处理器内核及功能介绍
      • 嵌入式处理器内核
        • Cortex-M0
          • #嵌套向量中断控制器(Nested Vectored Interrupt Controller,NVIC)
          • 唤醒中断控制器接口(Wake-up Interrupt Controller,WIC)
          • 调试子系统
          • JTAG(Joint Test Action Group,联合测试行动小组)
        • Cortex-M3
          • FPB(Flash Patch and Breakpoint,Flash 转换和断点单元)
          • DWT(数据观察点和触发单元)
          • ITM(指令跟踪宏单元)
          • TPIU(跟踪端口的接口单元)
          • EMT(Embeded Macrocell Trace,嵌入式跟踪宏单元)
          • MPU(Memory Protection Unit,存储器保护单元)
        • Cortex-M4
          • 内存保护单元(MPU)
          • FPU(浮点运算单元)
        • Cortex-M7
          • ECC(Error Correction Code)单元
          • 调试单元
    • 处理器的工作模式和特权级别
      • 处理器状态
        • ARM Cortex-M4 处理器有2 种操作状态
          • 1.调试状态
          • 2.Thumb 状态
        • 2 个处理器模式
          • 1.线程模式
          • 2.处理模式
        • 处理器特权级别
          • 处理器特权级别
            • 1.软件非特权级(用户级)
            • 2.软件特权级
          • Cortex-M4 处理器工作模式与特权等级的关系
    • 寄存器
      • ARM Cortex-M4 寄存器
        • 7 种32 位主要寄存器
          • R0~R12 32 位通用寄存器
            • R0~R7 低地址寄存器/低组寄存器(Low Register)
            • R8~R12 高地址寄存器/高组寄存器(High Register)
          • R13 堆栈指针寄存器(SP)、
            • 主堆栈指针(Main Stack Pointer,MSP)寄存器
            • 进程堆栈指针(Process Stack Pointer,PSP)寄存器
          • R14 链接寄存器(LR)
          • R15 程序计数寄存器(PC)
          • 程序状态寄存器(PSR)
            • 应用状态寄存器(APSR)
            • 中断状态寄存器(IPSR)
            • 执行状态寄存器(EPSR)
          • 中断屏蔽寄存器(PRIMASK)
            • PRIMASK(片上外设总中断开关)
            • FAULTMASK(寄存器管理系统错误总开关)
            • BASEPRI
          • 控制寄存器(CONTROL)
            • CONTROL[1] 位
            • CONTROL[1] 位
    • 异常
      • 异常类型
      • 外设中断异常
      • 异常的进入
        • 1.入栈
        • 2.取向量
        • 3.更新寄存器
          • SP(Stack Pointer,堆栈指针)
          • xPSR(程序状态)
          • PC(程序计数)
          • LR(链接)
      • 异常的返回
        • 中断返回序列前
            • 操作1(激活异常优先级高)
          • 操作2(没有激活异常/优先级低)
          • 操作3(没有激活的中断/被压栈的异常)
        • 中断返回序列后
          • (1)出栈
          • (2)更新NVIC
          • (3)异常返回值
      • 异常的处理机制
        • tail-chainning(末尾连锁)机制
      • 异常模式转换
      • 异常的处理机制
        • tail-chainning(末尾连锁)机制

理论

概述

ARM(Advanced RISC Machine)

名称

一类微处理器的统称+公司的名字+一类技术的名称

RISC(精简指令集)

ARM 处理器采用RISC(精简指令集)结构,RISC 处理器简化了处理器结构、减少了复杂功能的指令,同时支持处理器扩展

特点
小体积、低功耗、低成本、高性能
支持Thumb(16bit)/ARM(32bit)双指令集,能很好地兼顾性能代码密度

Thumb指令集比ARM指令集有更高的代码密度

编写具有同样功能的一段代码,编译器编译后,占用的空间越大,则代码密度低,也就是效率低。反之,代码密度高,执行效率高。

大量使用寄存器,指令执行速度更快
大多数数据操作都在寄存器中完成,更多单周期指令,便于指令流水线执行
寻址方式灵活简单,执行效率高
指令长度固定

ARM体系结构版本

ARM处理器

ARM体系结构版本

ARM 处理器真正的版本是以体系结构(指令集架构)的版本号来区分的。到目前为止,已经发布了V1~V8
共8 个版本。

1. V1架构(ARM1)

-基本的数据处理指令(无乘法)

-字节、半字和字的Load/Store指令

-转移指令,包括子程序的调用和链接指令

-软件中断指令(Software Interrupt,SWI)

供操作系统使用

-26位寻址空间(64MB)

2. V2架构(ARM2,ARM3)

-增加乘法和乘法指令

-增加支持协处理器的操作

-增加快速中断模式

-增加SWP(Swap Word,字数据交换指令)/SWPB(Swap Byte,字节数据交换指令)的存储器和寄存器交换指令

3. V3架构(ARM6)

-增加了MRS/MSR指令,访问新增的CPSR/SPSR寄存器;

-增加了异常处理返回;

-寻址空间4GB

4. V4架构(ARM7,ARM9)

-增加符号化和非符号化半字及符号化字节的存取指令

-增加16位的Thumb指令

-完善软件中断SWI指令

-增加处理器管理模式(SVC)

5. V5架构(ARM10)

-带有链接和交换的转移BLX指令

-计数前导零CLZ指令

-BRK中断指令

-增加了一些信号处理的指令

6.V6架构

增加了SIMD功能扩展,为包括音频/视频处理在内的应用系统提供优化功能

异常处理和中断处理得以改进,实时任务处理能力增强

7. V7架构----- Cortex-M4所用

-32位、16位混合编码指令

-增强了SIMD、DSP功能扩展,为OS、音视频处理应用系统提供优化功能

8. V8架构

-ARM 公司首款支持64 位指令集的处理器架构

-包括64 位通用寄存器、SP(堆栈指针)和PC(程序计数器)64 位数据处理和扩展的虚拟寻址

V8架构支持三个主要指令集:
A32(或ARM)

32 位固定长度指令集,通过不同架构变体增强,部分32 位架构执行环境现在称为AArch32

T32(Thumb)

是以16 位固定长度指令集的形式引入的,随后在引入Thumb-2技术时增强为16 位和32 位混合长度指令集

A64

提供与ARM 和Thumb 指令集类似功能的32 位固定长度指令集,它是一种AArch64 指令集

ARM处理器核简介

ARM公司开发了许多系列的ARM处理器核,目前最新的系列已经是ARM11、Cortex了。目前应用比较
广泛的系列是:ARM7、ARM9、ARM9、EARM10E、ARM11、SecurCore、Xscale 和Cortex系列

ARM处理器核简介(约2000~2010年):

➢ARM7、ARM9(V4)
➢ARM10(V5,向量浮点(VFP) )
➢ARM11(V6,350MHz~1G)

SecurCore

该系列涵盖了SC100、SC110、SC200和SC210处理核。该系列处理器主要针对新兴的安全市场,以一种全新的安全处理器设计为智能卡和其它安全IC(Integrated Circuit)开发提供独特的32位系统设计,并具有特定反伪造方法,从而有助于防止对硬件和软件的盗版。

-灵活的保护单元->确保操作系统和应用数据的安全

-采用软内核技术->防止外部对其进行扫描探测

-可集成用户自己的安全特性和其他协处理器

Xscale

Intel Xscale微控制器提供全性能高性价比低功耗的解决方案,支持16位Thumb指令并集成数字信号处理(DSP)指令。功耗较大,没有新发展

Cortex
Cortex-A:Applications

用于复杂操作系统用户应用程序,追求高时钟频率高性能合理功耗

支持ARM、Thumb、Thumb-2指令集,功能强大,可运行大型OS

ARM Cortex-A 系列主要的处理器大体有:Cortex-A5 、Cortex-A8 、Cortex-A9、Cortex-A53 等

Cortex-M:MCU

追求低成本低功耗

针对低成本应用优化的微控制器,可为超低功耗的嵌入式计算应用提供最佳解决方案;
比Cortex-R 处理器更加精简,有更短的流水线更简单的指令更少的运算单元和调试单元

Cortex-R:Real time

实时响应、合理性能、较低功耗;主要针对要求可靠性和实时响应的嵌入式系统

高性能:与高时钟频率相结合的快速处理能力;

实时:不仅要求任务响应实时,而且要求在规定的时间内完成事件的处理

安全:具有高容错能力的可靠且可信的系统

经济实惠:相同价位下,可实现功耗和面积的最佳性能

Cortex-M 处理器内核及功能介绍

嵌入式处理器内核

Cortex-M 处理器主要包括Cortex-M0、Cortex-M3、Cortex-M4 和Cortex-M7。

Cortex-M0

核心架构:ARMv6-M

<48MHz,32KB RAM

嵌入式系统课程笔记02 ARM Cortex-M处理器_第1张图片

处理器内核包括寄存器组算术逻辑单元(ALU)、数据总线控制逻辑。寄存器组包含16 个32 位寄存器,还有一些特殊功能寄存器;

#嵌套向量中断控制器(Nested Vectored Interrupt Controller,NVIC)

每次最多可以处理32 个中断请求一个不可屏蔽中断(NMI)输入。NVIC 比较正在执行中断和处于请求状态中断的优先级,然后自动执行高优先级中断。当需要处理一个中断时,NVIC 会和处理器进行通信,通知处理器执行正确的中断处理

唤醒中断控制器接口(Wake-up Interrupt Controller,WIC)

可选单元,在低功耗应用中,当关闭了处理器大部分模块后,微控制器会进入待机状态。此时,WIC可以在NVIC和处理器都休眠的情况下,执行中断屏蔽功能。当WIC检测到一个中断时,通知电源管理部分给系统上电,让NVIC和处理器内核执行剩下的中断处理

调试子系统

包括多个功能模块,用来处理调试控制、程序断点和数据监视点(Data watchpoint)。当开发人员进行调试时,处理器内核会被置于暂停状态,这时开发人员可以检查当前处理器的状态。

JTAG(Joint Test Action Group,联合测试行动小组)

开放的协议。串行线协议扩展的协议,只需时钟线和数据线就可以实现和JTAG相同的调试功能。JTAG/串行线调试接口提供了通向总线系统和调试功能的入口

AHB-Lite

片上总线协议

Cortex-M3

核心架构:ARMv7-M

<100MHz
嵌入式系统课程笔记02 ARM Cortex-M处理器_第2张图片

其内核集成嵌套向量中断控制器NVIC,内核中还包括一个适用于传统Thumb 与新型Thumb-2 指令的译码器
一个支持硬件乘法与除法的先进ALU(算术逻辑单元)逻辑控制以及用于连接处理器其他部件的接口

FPB(Flash Patch and Breakpoint,Flash 转换和断点单元)

用于实现断点操作。产生一个断点,从而使处理器进入调试模式

DWT(数据观察点和触发单元)

包含比较器,可以配置成在发生比较匹配时,产生一个观察点调试事件,用它来调用调试模式

ITM(指令跟踪宏单元)

可以产生时间戳数据包,并插入跟踪数据流中,用于帮助调试器求出各事件发生时间DWT产生的跟踪数据包通过ITM输出

TPIU(跟踪端口的接口单元)

ITM、DWT和EMT的跟踪数据都在TPIU处汇聚。TPIU用于把这些跟踪数据格式化并输出到片外,以供跟踪端口分析仪等设备接收使用。

EMT(Embeded Macrocell Trace,嵌入式跟踪宏单元)

可选择

MPU(Memory Protection Unit,存储器保护单元)

可选择

Cortex-M4

核心架构:ARMv7-M

< 200MHz

嵌入式系统课程笔记02 ARM Cortex-M处理器_第3张图片

内存保护单元(MPU)

是Cortex-M4 中用于内存保护的可选组件。Cortex-M4 处理器可以在MPU 执行“特权/访问”规则,或者执行独立的进程

功能:

保护区;
重叠保护区域,提升区域优先级(7 表示最高优先级;0 表示最低优先级);
访问权限
④将存储器属性输出至系统。

FPU(浮点运算单元)

可选的,->Cortex-M4F

Cortex-M7

核心架构:ARMv7-M

400MHz

嵌入式系统课程笔记02 ARM Cortex-M处理器_第4张图片

Cortex-M7 处理器采用64 位AXI 总线AHB 总线进行数据的交流,拥有32位指令集,超标量6级流水线加分支预测的设计使得CPU的吞吐率更高。

ECC(Error Correction Code)单元

可以实现错误检查和纠正,它是可选的,在指令缓存、数据缓存、指令TCM 和数据TCM 单元中都可以选择ECC,来提高它们的错误识别、更正的能力

调试单元

包括可选的JTAG 和串行线调试,最多可以有8 个断点和4 个观察点,另外,还包含ITM(指令跟踪宏单元) 和ETM(嵌入式追踪宏单元),可以记录处理器行为并发送给外部调试器

处理器的工作模式和特权级别

处理器状态

ARM Cortex-M4 处理器有2 种操作状态

(由于Cortex-M处理器不支持ARM指令集,所以ARM模式不存在)

1.调试状态

当处理器由于触发断点等原因被暂停后,进入调试状态并停止指令执行。

2.Thumb 状态

若处理器在执行程序代码(Thumb指令),则会处于此状态

2 个处理器模式
1.线程模式

用于执行应用程序软件

2.处理模式

处理异常时处理器工作于处理模式,完成异常处理后返回线程模式

处理器特权级别
处理器特权级别
1.软件非特权级(用户级)

① 有限访问MSR 和MRS 指令,并且不能使用CPS(Control Performance Standard)指令;
② 可以访问系统定时器、NVIC 或者系统控制块;
③ 有对存储器或外设的限制访问。

2.软件特权级

非特权状态可以使用SVC(Supervisor Calls)指令产生一个系统调用控制权转移到特权状态。只有特权状态可以在线程模式下通过写控制寄存器来改变状态执行的特权等级

Cortex-M4 处理器工作模式与特权等级的关系

处理器模式处于处理模式时一定是特权访问

处理器模式处于线程模式可以是特权访问也可以时用户访问

寄存器

ARM Cortex-M4 寄存器

寄存器是CPU(Central Processing Unit,中央处理器)内有限存储容量高速存储部件,用来暂时存放参与运算的数据和运算结果。

嵌入式系统课程笔记02 ARM Cortex-M处理器_第5张图片

7 种32 位主要寄存器

(4 种通用寄存器和3种特殊功能寄存器)

通用寄存器:

R0~R12 32 位通用寄存器

13 个32 位通用寄存器R0~R12

所有32 位通用寄存器指令都可以访问,但是所有的16 位指令都不能访问

R0~R7 低地址寄存器/低组寄存器(Low Register)
R8~R12 高地址寄存器/高组寄存器(High Register)
R13 堆栈指针寄存器(SP)、

用于访问堆栈,包括两个物理寄存器

系统可以同时支持这两个堆栈寄存器

主堆栈指针(Main Stack Pointer,MSP)寄存器
进程堆栈指针(Process Stack Pointer,PSP)寄存器
R14 链接寄存器(LR)

1.在执行分支(B)和链接(BL)指令或带有交换分支(BX)和链接指令(BLX)时,PC 的返回地址自动保存进LR

2.异常返回,保存返回后的状态,异常返回是通过硬件自动出栈弹出之前压入PC完成的(地址)

R15 程序计数寄存器(PC)

指向当前程序执行指令的地址程序,可以直接对寄存器进行操作,从而改变程序流程。若用BL 指令来进行跳转,会更新LR 和PC 寄存器。用MOV(move,数据传送)指令来操作PC 实现跳转时,不更新LR。由于Cortex-M4 内部采用指令流水线技术,所以读PC 时返回值是前指令的地址+4

特殊寄存器:

程序状态寄存器(PSR)

3种处理器状态组合起来构成一个32 位的寄存器,统称xPSR

应用状态寄存器(APSR)
中断状态寄存器(IPSR)
执行状态寄存器(EPSR)

嵌入式系统课程笔记02 ARM Cortex-M处理器_第6张图片
嵌入式系统课程笔记02 ARM Cortex-M处理器_第7张图片

中断屏蔽寄存器(PRIMASK)
PRIMASK(片上外设总中断开关)

只有单一比特的寄存器。

置1后,就关掉所以可屏蔽的异常,只剩下NMI(不可屏蔽中断)硬fault可以响应。

默认值是0,表示没有关中断

FAULTMASK(寄存器管理系统错误总开关)

只有单一比特的寄存器。

置1时,只有NMI才能响应

默认值是0,表示没有关异常

BASEPRI

最多有9位的(由表达优先级的位数决定)定义了被屏蔽优先级的阈值。

设为某个值,所有优先级号大于等于此值的中断都被关(优先级号越大,优先级越低)

默认值为0,不关闭任何中断

控制寄存器(CONTROL)
CONTROL[1] 位

堆栈指针选择

0:选择主堆栈指针(MSP)

1:选择进程堆栈指针(PSP)

CONTROL[1] 位

0:特权级

1:用户级

异常

异常类型

编号 类型 优先级 描述
0 / / 没有异常
1 复位 -3(最高) 复位
2 NMI -2 不可屏蔽中断(来自外部NMI输入脚)
3 硬故障 -1 当故障优先级或者可配置的故障处理程序被禁止而无法激活时,所有故障都会以硬故障的方式激活
4 存储器管理 可编程 MPU(内存保护单元)不匹配,包括访问冲突和不匹配
5 总线故障 可编程 预取值故障、存储器访问故障和其他地址/存储器相关的故障
6 用法故障 可编程 由于程序错误导致的异常,通常是使用一条无效指令,或都是非法的状态转换
7 保留
8 保留
9 保留
10 保留
11 SVCall 可编程 执行SVC指令的系统服务调用
12 调试监视器 可编程 调试监视器(断电,数据观察点,或外部调试请求)
13 保留
14 PendSV 可编程 系统服务的可触发(pendable)请求
15 SysTick 可编程 系统节拍定时器

外设中断异常

嵌入式系统课程笔记02 ARM Cortex-M处理器_第8张图片

异常的进入

1.入栈

当处理器发生异常时,首先自动依次把8 个寄存器(xPSR、PC、LR、R12、R3、R2、R1、R0)压入栈。在自动入栈的过程中,栈地址为N,把寄存器写入栈的时间顺序并不是与写入空间相对应的,但机器会保证正确的寄存器被保存到正确的位置。

内部入栈示意图:

嵌入式系统课程笔记02 ARM Cortex-M处理器_第9张图片

2.取向量

通过异常类型号中断向量表中取出发生中断的中断源对应的中断向量,然后在服务程序的入口处预取指,处理器将取指取数据分别通过总线进行控制,使入栈与取指这两项工作能同时进行,以便快速进入中断。

3.更新寄存器

入栈和取向量操作完成之后,在执行服务程序之前,还必须更新一系列寄存器。

以下是在响应异常时通用寄存器及特殊功能寄存器的变化。另外在NVIC(嵌套向量中断控制器)中,也会更新若干个相关寄存器。

SP(Stack Pointer,堆栈指针)

入栈后会把堆栈指针(PSP 或MSP)更新到新的位置。在执行服务例程时,将由MSP 负责对堆栈的访问。

xPSR(程序状态)

更新IPSR 位段(中断状态寄存器,处于PSR 的最低部分)的值为新响应的异常编号

PC(程序计数)

在取向量完成后,PC 将指向服务例程入口地址

LR(链接)

在出入ISR(Interrupt Service Routines,中断服务程序)时,LR 的值将得到重新诠释,这种特殊的值称为“EXC_RETURN”。在异常进入时由系统计算并赋予LR,并在异常返回时使用它。

异常的返回

在从异常返回时处理器将执行下列操作之一。

中断返回序列前
操作1(激活异常优先级高)

如果激活异常的优先级比所有被压栈(等待处理)的异常的优先级都高,则处理器会末尾连锁到一个激活异末尾连锁机制能够在两个中断之间没有多余的状态保存和恢复指令的情况下实现异常处理,最大限度节省中断响应时间

操作2(没有激活异常/优先级低)

如果没有激活异常,或者如果被压栈的异常的最高优先级比激活异常的最高优先级要高,则处理器返回到上一个被压栈的中断服务程序

操作3(没有激活的中断/被压栈的异常)

如果没有激活的中断或被压栈的异常,则处理器返回线程模式

中断返回序列后
(1)出栈

先前压入栈中的寄存器在这里恢复。内部出栈的顺序与入栈时的相对应,堆栈指针的值也改回之前的值

(2)更新NVIC

伴随异常的返回,活动位被硬件清除。对于外部中断,倘若中断输入被再次置为有效,悬起位也再次置位,新一次的中断响应序列也可随之再次开始

(3)异常返回值

异常返回值存放在LR中。这是一个高28位全为1的值。只有[3:0]的值有意义
嵌入式系统课程笔记02 ARM Cortex-M处理器_第10张图片

EXC_RETURN = 0xFFFFFFF1 (0001)处理模式+MSP

EXC_RETURN = 0xFFFFFFF9 (1001)线程模式+MSP

EXC_RETURN = 0xFFFFFFFD (1101)线程模式+PSP

异常的处理机制

tail-chainning(末尾连锁)机制

末尾连锁能够在两个中断之间没有多余的状态保存和恢复指令的情况下实现异常处理。

当内核正在处理一个中断1 时,另外一个同级或低级的中断2 触发,则其处于挂起状态等待前一中断1 处理完毕。中断1 处理完毕时,按正常流程需要恢复中断现场,将寄存器出栈,再响应中断2,重新将现场寄存器进行入栈操作。整个出栈/入栈需要30 多个周期。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n0Nfx5fU-1673645642295)(C:\Users\Fang\AppData\Roaming\Typora\typora-user-images\image-20230113091151913.png)]

回值存放在LR中。这是一个高28位全为1的值。只有[3:0]的值有意义

[外链图片转存中…(img-MYbTnST7-1673645642294)]

EXC_RETURN = 0xFFFFFFF1 (0001)处理模式+MSP

EXC_RETURN = 0xFFFFFFF9 (1001)线程模式+MSP

EXC_RETURN = 0xFFFFFFFD (1101)线程模式+PSP

异常模式转换

异常发生时,Cortex-M4 工作模式的转换:

嵌入式系统课程笔记02 ARM Cortex-M处理器_第11张图片

异常的处理机制

tail-chainning(末尾连锁)机制

末尾连锁能够在两个中断之间没有多余的状态保存和恢复指令的情况下实现异常处理。

当内核正在处理一个中断1 时,另外一个同级或低级的中断2 触发,则其处于挂起状态等待前一中断1 处理完毕。中断1 处理完毕时,按正常流程需要恢复中断现场,将寄存器出栈,再响应中断2,重新将现场寄存器进行入栈操作。整个出栈/入栈需要30 多个周期。

嵌入式系统课程笔记02 ARM Cortex-M处理器_第12张图片

你可能感兴趣的:(嵌入式系统,arm开发,学习,嵌入式硬件)