一类微处理器的统称+公司的名字+一类技术的名称
ARM 处理器采用RISC(精简指令集)结构,RISC 处理器简化了处理器结构、减少了复杂功能的指令,同时支持处理器扩展。
Thumb指令集比ARM指令集有更高的代码密度
编写具有同样功能的一段代码,编译器编译后,占用的空间越大,则代码密度低,也就是效率低。反之,代码密度高,执行效率高。
ARM 处理器真正的版本是以体系结构(指令集架构)的版本号来区分的。到目前为止,已经发布了V1~V8
共8 个版本。
-基本的数据处理指令(无乘法)
-字节、半字和字的Load/Store指令
-转移指令,包括子程序的调用和链接指令
-软件中断指令(Software Interrupt,SWI)
供操作系统使用
-26位寻址空间(64MB)
-增加乘法和乘法指令
-增加支持协处理器的操作
-增加快速中断模式
-增加SWP(Swap Word,字数据交换指令)/SWPB(Swap Byte,字节数据交换指令)的存储器和寄存器交换指令
-增加了MRS/MSR指令,访问新增的CPSR/SPSR寄存器;
-增加了异常处理返回;
-寻址空间4GB
-增加符号化和非符号化半字及符号化字节的存取指令
-增加16位的Thumb指令
-完善软件中断SWI指令
-增加处理器管理模式(SVC)
-带有链接和交换的转移BLX指令
-计数前导零CLZ指令
-BRK中断指令
-增加了一些信号处理的指令
增加了SIMD功能扩展,为包括音频/视频处理在内的应用系统提供优化功能
异常处理和中断处理得以改进,实时任务处理能力增强
-32位、16位混合编码指令
-增强了SIMD、DSP功能扩展,为OS、音视频处理应用系统提供优化功能
-ARM 公司首款支持64 位指令集的处理器架构
-包括64 位通用寄存器、SP(堆栈指针)和PC(程序计数器)64 位数据处理和扩展的虚拟寻址
32 位固定长度指令集,通过不同架构变体增强,部分32 位架构执行环境现在称为AArch32
是以16 位固定长度指令集的形式引入的,随后在引入Thumb-2技术时增强为16 位和32 位混合长度指令集
提供与ARM 和Thumb 指令集类似功能的32 位固定长度指令集,它是一种AArch64 指令集
ARM公司开发了许多系列的ARM处理器核,目前最新的系列已经是ARM11、Cortex了。目前应用比较
广泛的系列是:ARM7、ARM9、ARM9、EARM10E、ARM11、SecurCore、Xscale 和Cortex系列
➢ARM7、ARM9(V4)
➢ARM10(V5,向量浮点(VFP) )
➢ARM11(V6,350MHz~1G)
该系列涵盖了SC100、SC110、SC200和SC210处理核。该系列处理器主要针对新兴的安全市场,以一种全新的安全处理器设计为智能卡和其它安全IC(Integrated Circuit)开发提供独特的32位系统设计,并具有特定反伪造方法,从而有助于防止对硬件和软件的盗版。
-灵活的保护单元->确保操作系统和应用数据的安全
-采用软内核技术->防止外部对其进行扫描探测
-可集成用户自己的安全特性和其他协处理器
Intel Xscale微控制器提供全性能、高性价比、低功耗的解决方案,支持16位Thumb指令并集成数字信号处理(DSP)指令。功耗较大,没有新发展。
用于复杂操作系统和用户应用程序,追求高时钟频率、高性能、合理功耗;
支持ARM、Thumb、Thumb-2指令集,功能强大,可运行大型OS
ARM Cortex-A 系列主要的处理器大体有:Cortex-A5 、Cortex-A8 、Cortex-A9、Cortex-A53 等
追求低成本、低功耗
针对低成本应用优化的微控制器,可为超低功耗的嵌入式计算应用提供最佳解决方案;
比Cortex-R 处理器更加精简,有更短的流水线、更简单的指令集、更少的运算单元和调试单元。
实时响应、合理性能、较低功耗;主要针对要求可靠性和实时响应的嵌入式系统
高性能:与高时钟频率相结合的快速处理能力;
实时:不仅要求任务响应要实时,而且要求在规定的时间内完成事件的处理;
安全:具有高容错能力的可靠且可信的系统
经济实惠:相同价位下,可实现功耗和面积的最佳性能
Cortex-M 处理器主要包括Cortex-M0、Cortex-M3、Cortex-M4 和Cortex-M7。
核心架构:ARMv6-M
<48MHz,32KB RAM
处理器内核包括寄存器组、算术逻辑单元(ALU)、数据总线和控制逻辑。寄存器组包含16 个32 位寄存器,还有一些特殊功能寄存器;
每次最多可以处理32 个中断请求和一个不可屏蔽中断(NMI)输入。NVIC 比较正在执行中断和处于请求状态中断的优先级,然后自动执行高优先级中断。当需要处理一个中断时,NVIC 会和处理器进行通信,通知处理器执行正确的中断处理
可选单元,在低功耗应用中,当关闭了处理器大部分模块后,微控制器会进入待机状态。此时,WIC可以在NVIC和处理器都休眠的情况下,执行中断屏蔽功能。当WIC检测到一个中断时,通知电源管理部分给系统上电,让NVIC和处理器内核执行剩下的中断处理
包括多个功能模块,用来处理调试控制、程序断点和数据监视点(Data watchpoint)。当开发人员进行调试时,处理器内核会被置于暂停状态,这时开发人员可以检查当前处理器的状态。
开放的协议。串行线协议扩展的协议,只需时钟线和数据线就可以实现和JTAG相同的调试功能。JTAG/串行线调试接口提供了通向总线系统和调试功能的入口
AHB-Lite
片上总线协议
核心架构:ARMv7-M
其内核集成嵌套向量中断控制器NVIC,内核中还包括一个适用于传统Thumb 与新型Thumb-2 指令的译码器、
一个支持硬件乘法与除法的先进ALU(算术逻辑单元)、逻辑控制以及用于连接处理器其他部件的接口。
用于实现断点操作。产生一个断点,从而使处理器进入调试模式
包含比较器,可以配置成在发生比较匹配时,产生一个观察点调试事件,用它来调用调试模式。
可以产生时间戳数据包,并插入跟踪数据流中,用于帮助调试器求出各事件发生时间。DWT产生的跟踪数据包通过ITM输出
ITM、DWT和EMT的跟踪数据都在TPIU处汇聚。TPIU用于把这些跟踪数据格式化并输出到片外,以供跟踪端口分析仪等设备接收使用。
可选择
可选择
核心架构:ARMv7-M
< 200MHz
是Cortex-M4 中用于内存保护的可选组件。Cortex-M4 处理器可以在MPU 执行“特权/访问”规则,或者执行独立的进程
功能:
①保护区;
②重叠保护区域,提升区域优先级(7 表示最高优先级;0 表示最低优先级);
③访问权限;
④将存储器属性输出至系统。
可选的,->Cortex-M4F
核心架构:ARMv7-M
400MHz
Cortex-M7 处理器采用64 位AXI 总线和AHB 总线进行数据的交流,拥有32位指令集,超标量6级流水线加分支预测的设计使得CPU的吞吐率更高。
可以实现错误检查和纠正,它是可选的,在指令缓存、数据缓存、指令TCM 和数据TCM 单元中都可以选择ECC,来提高它们的错误识别、更正的能力
包括可选的JTAG 和串行线调试,最多可以有8 个断点和4 个观察点,另外,还包含ITM(指令跟踪宏单元) 和ETM(嵌入式追踪宏单元),可以记录处理器行为并发送给外部调试器。
(由于Cortex-M处理器不支持ARM指令集,所以ARM模式不存在)
当处理器由于触发断点等原因被暂停后,进入调试状态并停止指令执行。
若处理器在执行程序代码(Thumb指令),则会处于此状态
用于执行应用程序软件
处理异常时处理器工作于处理模式,完成异常处理后返回线程模式
① 有限访问MSR 和MRS 指令,并且不能使用CPS(Control Performance Standard)指令;
② 可以访问系统定时器、NVIC 或者系统控制块;
③ 有对存储器或外设的限制访问。
非特权状态可以使用SVC(Supervisor Calls)指令产生一个系统调用把控制权转移到特权状态。只有特权状态可以在线程模式下通过写控制寄存器来改变状态执行的特权等级。
处理器模式处于处理模式时一定是特权访问
处理器模式处于线程模式可以是特权访问也可以时用户访问
寄存器是CPU(Central Processing Unit,中央处理器)内有限存储容量的高速存储部件,用来暂时存放参与运算的数据和运算结果。
(4 种通用寄存器和3种特殊功能寄存器)
通用寄存器:
13 个32 位通用寄存器R0~R12
所有32 位通用寄存器指令都可以访问,但是所有的16 位指令都不能访问
用于访问堆栈,包括两个物理寄存器
系统可以同时支持这两个堆栈寄存器
1.在执行分支(B)和链接(BL)指令或带有交换分支(BX)和链接指令(BLX)时,PC 的返回地址自动保存进LR
2.异常返回,保存返回后的状态,异常返回是通过硬件自动出栈弹出之前压入PC完成的(地址)
指向当前程序执行指令的地址程序,可以直接对寄存器进行操作,从而改变程序流程。若用BL 指令来进行跳转,会更新LR 和PC 寄存器。用MOV(move,数据传送)指令来操作PC 实现跳转时,不更新LR。由于Cortex-M4 内部采用指令流水线技术,所以读PC 时返回值是当前指令的地址+4。
特殊寄存器:
3种处理器状态组合起来构成一个32 位的寄存器,统称xPSR
只有单一比特的寄存器。
置1后,就关掉所以可屏蔽的异常,只剩下NMI(不可屏蔽中断)和硬fault可以响应。
默认值是0,表示没有关中断
只有单一比特的寄存器。
置1时,只有NMI才能响应
默认值是0,表示没有关异常
最多有9位的(由表达优先级的位数决定)定义了被屏蔽优先级的阈值。
设为某个值,所有优先级号大于等于此值的中断都被关(优先级号越大,优先级越低)
默认值为0,不关闭任何中断
堆栈指针选择
0:选择主堆栈指针(MSP)
1:选择进程堆栈指针(PSP)
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 | 可编程 | 系统节拍定时器 |
当处理器发生异常时,首先自动依次把8 个寄存器(xPSR、PC、LR、R12、R3、R2、R1、R0)压入栈。在自动入栈的过程中,栈地址为N,把寄存器写入栈的时间顺序并不是与写入空间相对应的,但机器会保证正确的寄存器被保存到正确的位置。
内部入栈示意图:
通过异常类型号在中断向量表中取出发生中断的中断源对应的中断向量,然后在服务程序的入口处预取指,处理器将取指与取数据分别通过总线进行控制,使入栈与取指这两项工作能同时进行,以便快速进入中断。
入栈和取向量操作完成之后,在执行服务程序之前,还必须更新一系列寄存器。
以下是在响应异常时通用寄存器及特殊功能寄存器的变化。另外在NVIC(嵌套向量中断控制器)中,也会更新若干个相关寄存器。
入栈后会把堆栈指针(PSP 或MSP)更新到新的位置。在执行服务例程时,将由MSP 负责对堆栈的访问。
更新IPSR 位段(中断状态寄存器,处于PSR 的最低部分)的值为新响应的异常编号
在取向量完成后,PC 将指向服务例程的入口地址
在出入ISR(Interrupt Service Routines,中断服务程序)时,LR 的值将得到重新诠释,这种特殊的值称为“EXC_RETURN”。在异常进入时由系统计算并赋予LR,并在异常返回时使用它。
在从异常返回时处理器将执行下列操作之一。
如果激活异常的优先级比所有被压栈(等待处理)的异常的优先级都高,则处理器会末尾连锁到一个激活异常。末尾连锁机制能够在两个中断之间没有多余的状态保存和恢复指令的情况下实现异常处理,最大限度节省中断响应时间。
如果没有激活异常,或者如果被压栈的异常的最高优先级比激活异常的最高优先级要高,则处理器返回到上一个被压栈的中断服务程序
如果没有激活的中断或被压栈的异常,则处理器返回线程模式
先前压入栈中的寄存器在这里恢复。内部出栈的顺序与入栈时的相对应,堆栈指针的值也改回之前的值
伴随异常的返回,活动位被硬件清除。对于外部中断,倘若中断输入被再次置为有效,悬起位也再次置位,新一次的中断响应序列也可随之再次开始
异常返回值存放在LR中。这是一个高28位全为1的值。只有[3:0]的值有意义
EXC_RETURN = 0xFFFFFFF1 (0001)处理模式+MSP
EXC_RETURN = 0xFFFFFFF9 (1001)线程模式+MSP
EXC_RETURN = 0xFFFFFFFD (1101)线程模式+PSP
末尾连锁能够在两个中断之间没有多余的状态保存和恢复指令的情况下实现异常处理。
当内核正在处理一个中断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 工作模式的转换:
末尾连锁能够在两个中断之间没有多余的状态保存和恢复指令的情况下实现异常处理。
当内核正在处理一个中断1 时,另外一个同级或低级的中断2 触发,则其处于挂起状态等待前一中断1 处理完毕。中断1 处理完毕时,按正常流程需要恢复中断现场,将寄存器出栈,再响应中断2,重新将现场寄存器进行入栈操作。整个出栈/入栈需要30 多个周期。