历史上的今天
返回首页

历史上的今天

今天是:2025年12月16日(星期二)

正在发生

2022年12月16日 | ARM Cortex-M7处理器体系结构简介

2022-12-16 来源:zhihu

本文以ST公司的STM32F7为实例来介绍M7体系结构,主要涉及M7存储器模型以及缓冲机制、编程模型、异常模型、处理器两大工作模式以及特权级,对于核心寄存器、内核外设SysTick、MPU、FPU以及系统控制块SCB仅做简单介绍。适用于对MCU+RTOS感兴趣的读者;

参考手册:
  • STM32F7 Series Cortex®-M7 processor programming manual

  • ARM Cortex-M7 Processor Technical Reference Manual

  • ARM Cortex-M7 Devices Generic User Guide

一、指令集类型简单介绍:

在计算机处理器发展史上形成了CISC(复杂指令集计算机)和RISC(精简指令集计算机)两大指令集阵营;CISC以x86体系结构为主,它拥有复杂且庞大的运算和控制指令,可以为桌面计算机和服务器提供强悍的计算能力;RISC主要以ARM体系结构为主,它克服了x86指令集中的二八原则,复杂指令分解为基本指令来处理;由于ARM指令集宽度一致,它可以采用超长流水线技术提升执行速度;由于ARM指令集规模较小,电路规模自然没有x86庞大,因此具备低功耗特点;ARM体系结构还有很多不同于x86的特点,例如存储加载型访问,采用大量寄存器;本文所述M7也是采用了RISC技术;

二、存储器模型以及缓存机制:

存储器地址映射示意图

在M7上,将代码区,数据区,外设区,FSMC区和内核区统一组织在4GB的线性地址空间中。CPU只能通过LDR,STR等存储加载指令访问存储器,可以采用字节访问,半字访问和字访问三种访问类型;采用小端模式,即低字节存储在低地址;

指令缓存,数据缓存

CPU和存储器之间有4KB指令缓存和4KB数据缓存,缓存可以加速CPU对存储区的访问;在某些场合开发者需要注意缓存和存储区一致性问题,例如如果开发者使能了缓存,然后将某一个代码区扇区擦除(未存储代码),则此时已经擦除扇区数据和已经缓存数据便不一致,导致出错;

三、编程模型:

在CPU执行程序过程中,可以分为Thread模式和Handler模式;在Thread模式下执行应用代码,属于处理器正常工作过程;在Handler模式下执行异常代码,例如不可屏蔽异常服务程序,硬件错误异常服务程序等;

特权级:程序有特权级和非特权级之分;特权级程序运行在特权级别上,可以访问系统所有资源,非特权级程序运行在非特权级别上,它的访问有限制,例如不能访问系统内核寄存器;Handler模式运行在特权级别上,Thread模式可以运行在特权或者非特权级上;

堆栈指针:它有主堆栈指针MSP和线程堆栈指针PSP之分,Handler模式下只能使用MSP,Thread模式可以使用MSP或者PSP;

模式,特权级别和堆栈指针

核心寄存器:

M7包含R0~R12,SP(MSP,PSP),LR,PC,APSR,IPSR,EPSR,PRIMASK,FAULTMASK,BASEPRI和CONTROL;

R0~R12作为通用寄存器用于数据处理;

SP(R13)用于存放栈地址,它有MSP和PSP之分,具体使用取决于CONTROL.bit1;在Handler模式下强制CONTROL.bit1为0,即使用MSP;

LR(R14)用于存放子程序返回,异常返回数据,例如模式,堆栈,FPU使用等;

PC(R15)用于存放当前指令地址;

PSR程序状态寄存器包含APSR应用程序状态寄存器,IPSR中断程序状态寄存器,EPSR异常程序状态寄存器;APSR记录程序计算状态条件,IPSR用来记录当前中断服务程序的异常类型编号,EPSR用于THUMB状态位,IT位,ICT位等;

PRIMASK:用于屏蔽可配置的优先级;

FAULTMASK:用于屏蔽除了NMI以外的所有可配置的优先级

BASEPRI:屏蔽所有数值上不小于它的优先级;

CONTROL:用于设置特权级,选择堆栈指针以及FPU上下文切换;

四、异常模型:

M7异常向量表,包含异常编号,中断请求编号,存储器分布

M7处理器一共有255个异常,异常编号为1~255;其中1~15属于内核异常,大于15属于外设中断;在程序开发中,使用-14~-1表示内核中断(异常)请求编号,大于-1表示外设中断请求编号;

异常分为非活跃且非挂起状态,挂起状态,活跃状态,活跃且挂起状态;

M7每个异常有一个8位寄存器表示其优先级,即支持0~255优先级,但是在STM32F7内部只是实现其高4位,即支持0~15优先级;通过配置优先级分组后,高优先级可以抢占低优先级异常;

异常处理是保存现场和恢复现

保存现场:考虑一种简单的情况,异常帧中没有FPU保存时,这时硬件会将xPSR, PC, LR, R12, R3, R2, R1, R0全部保存在SP指向的栈区,在RTOS中R4~R11由程序员入栈;

执行中断服务程序:用于处理外部事件;

恢复现场:采用以下其中一条指令进行返回:

  1. An LDM or POP instruction that loads the PC.

  2. An LDR instruction with PC as the destination.

  3. A BX instruction using any register.

异常返回LR定义

例如采用BX LR返回,执行指令后处理器根据LR最低5bit获取返回模式,堆栈指针使用以及FPU使用等;然后硬件将R0, R1, R2, R3, R12, LR, PC, xPSR出栈,在RTOS中R4~R11由程序员出栈,并且开始执行被中断程序的下一条指令;为了降低中断延时,M7还采用了咬尾中断,晚到中断等机制;

五、SCB:系统控制块

系统控制块

系统控制块主要实现系统状态和系统控制功能,例如1~15号异常控制,优先级分组配置,重定位中断表位置等;

六、NVIC:嵌套向量中断控制器

主要用来管理IRQ0~IRQ239外设中断请求,并且CMSIS提供了一套函数用来访问NVIC寄存器;

七、SysTick:系统滴答定时器

SysTick操作函数接口

SysTick旨意提供MCU软件重用,用户在更换以M7为内核的其他MCU尤其在支持RTOS时,在移植内核时,可以不加修改地直接使用。

八、MPU:存储器保护单元

存储器保护单元寄存器

MPU将存储器空间划分为若干分区,定义每个分区的位置、大小、访问权限和属性等。



九、FPU:浮点数处理单元

浮点处理单元寄存器

FPU支持单精度和双精度加、减、乘、除、乘加以及平方根运算;支持定点数和浮点数之间的格式转换以及浮点常量指令;支持IEEE754标准;

十、总线访问控制

指令数据紧密耦合存储器控制

AHB主总线控制

AHB从总线控制

缓存控制

总线错误状态

十一、总结

内核寄存器映射和访问函数由CMSIS统一提供,提高了软件在以M7为内核的微控制器上的复用。使开发者在不同芯片厂商之间快速开发切换提供了可能。以上是对M7体系结构的简介,详介请参考手册;


推荐阅读

史海拾趣

中移物联网(Chinamobile)公司的发展小趣事

中移物联网在智能终端产品的创新方面也取得了显著成果。公司设计并生产了物联网专用模组和芯片,打造了智能组网、智能安防、智能家居、智能穿戴等行业终端。这些产品在市场上受到了广泛欢迎,特别是在智能家居和智能穿戴领域,中移物联网的产品凭借其高性能和稳定性,赢得了众多消费者的青睐。

Graseby Infrared公司的发展小趣事
确保电路中的互锁机构工作正常,防止两个接触器同时吸合导致短路事故。
BALLUFF公司的发展小趣事

随着中国经济的快速发展,BALLUFF公司也看到了中国市场的巨大潜力。为了更好地服务中国市场,BALLUFF在2007年坚定地走本土化路线,在成都建立了生产工厂。这一举措不仅缩短了亚洲地区的响应时间和供货周期,也极大地提升了客户满意度。随着工厂的正式运行,BALLUFF在中国市场的地位逐渐稳固,其传感器产品也广泛应用于汽车、冶金、机床和风电等行业。

Concurrent Logic公司的发展小趣事

随着公司规模的扩大,Concurrent Logic开始寻求国际合作。他们与日本、韩国和欧洲的几家公司签订了技术合作协议,共同开发新一代的并行处理解决方案。这些合作为公司带来了更广阔的市场和更多的资源,推动了技术的进一步创新。

Applied Micro Circuits (MACOM)公司的发展小趣事

MACOM公司设计和制造的半导体产品广泛应用于电信、工业和数据中心等行业。其高性能的半导体产品在全球范围内得到了广泛应用和认可。此外,MACOM还通过了一系列重要的行业认证,包括IATF16949汽车电子认证、AS9100D航空航天标准、ISO9001国际质量标准认证以及ISO14001环境管理标准认证等。这些认证不仅证明了MACOM在产品质量和企业管理方面的卓越表现,也为其在全球范围内开展业务提供了有力保障。

以上是关于电子行业中的Applied Micro Circuits(MACOM)公司发展的五个相关故事。这些故事展示了MACOM在创立、技术创新、上市募资、业务扩张和行业应用等方面的发展历程和成就。作为一家在电子行业中具有重要地位的公司,MACOM不断推动着技术的进步和行业的发展。

Conexcon Group公司的发展小趣事

在电子行业的快速发展中,Conexcon Group以其前瞻性的技术视野,成功研发出一款新型智能芯片,这款芯片不仅性能卓越,而且功耗极低,迅速赢得了市场的青睐。公司凭借这一技术突破,逐步扩大了在国内外市场的份额,成为了行业内技术创新的领军者。随着产品线的不断丰富,Conexcon Group逐渐形成了从芯片设计到整机制造的完整产业链,进一步巩固了其在电子行业的领先地位。

问答坊 | AI 解惑

bios设置HWI问题,请求各位前辈给指导一下!刚学DSP痛苦啊

我用dsp/bios设置的HWI 选择的是HWI_INT5,选择External_Pin_5作为interrupt soure function为:UART_isr Use Dispatcher选为true 设置完并保存,编译后发现错误 不是说在bios中添加硬件中断,系统会自动识别吗? 为什么会出现下面错误: un ...…

查看全部问答>

搞定这5个RC振荡电路让你的模拟设计顺畅很多

采用RC振荡的方法非常多,如文氏桥振荡等。这里介绍几种笔者常用的方法: 1.最简单的振荡器 最简单的振荡器 这种振荡器特点是:T≈(1.4~2.3)R*C 电源波动将使频率不稳定,适合小于100KHz的低频振荡情况。 2.加补偿电阻的振荡 加补偿电阻 ...…

查看全部问答>

关于flash擦除的问题

1、原先用spansion的norflash s29GL032操作一切正常,先改为ST的M29W320的flash,在用jtag烧写uboot时,一直擦除不成功,我用的是片擦除,系统时钟为125M,指令如下 //16bit erase         *(volatile UINT16 *)(AM_START_AD ...…

查看全部问答>

大家点个思路,有关基于S3C2440和WinCE如何使用串口及SD卡的问题

大家好,谢谢大家这么些天来一直很热心的回答我的问题,十分感谢! 现在我想实现这样的功能: 外面通过串口将数据传给S3C2440,这里S3C2440跑的是WinCE操作系统,在WinCE上应用程序将数据接收处理并将其存入SD卡,并画出数据拟合成的曲线。 这里 ...…

查看全部问答>

请问ic卡于银行间通信的问题。

现在手上有个单子,是要将煤气购买ic卡能够通过银行atm来购买的,不知道这个需要从哪里入手?具体过程是怎样的?难不难啊?…

查看全部问答>

ab 1769 L32e CPU 通讯问题?

用RSLINX 连接ab 1769 L32e CPU 通讯不上,用工业以太网, 拼地址拼不通,无网络连接,计算机加网线上网正常,连接其他ab通讯模块正常,rslinx显示不识别硬件,cpu还挂着ab panel view plus 1000 连接正常 麻烦各位给分析分析什么原因。…

查看全部问答>

ST新库3.4.0中stm32f10x.h里面为啥又把bool型定义去掉了?

                                 写库的人到底怎么想的,去掉类型定义,原来的程序会不兼容,有脑子吗?我已经出离愤怒了,版主告诉我他们怎么想的 ...…

查看全部问答>

电路分析

本帖最后由 paulhyde 于 2014-9-15 09:38 编辑 当拿到一个电路,我们应该从哪里开始分析,应当注意哪些特征?期待您的好的方法和思路或感悟。  …

查看全部问答>

Lm8962,UDP同时接收、发送数据,UDP接收会丢包,请问下各位大侠是什么原因?

我创建了一个UDP socket,来实现对数据的收发。   我用PC机周期性地通过UDP给lm3s8962发数据,lm3s8962处理完后,再通过UDP发送给PC机。 无论PC机的周期设为多大,发现lm3s8962只能收到一半pc机发送的数据。   假如我分别创建两个U ...…

查看全部问答>

哥哥姐姐们帮我打开schdoc并转成.sch文件吧

哥哥姐姐们帮我打开schdoc并转成.sch文件吧谢谢啊。。在线等啊,谢谢啊…

查看全部问答>