艾巴生活网

您现在的位置是:主页>科技 >内容

科技

armv7架构_关于ARMv7的知识--了解

2023-08-02 11:32:01科技帅气的蚂蚁
首先,在学习皮层-M3时,我们必须知道必要的缩写。组织如下:AMBA: ADK:AMBA设计套件AHB-AP:AHB-AP: AHB访问端口APB:高级外设总线ARM AR

armv7架构_关于ARMv7的知识--了解

首先,在学习皮层-M3时,我们必须知道必要的缩写。

组织如下:

AMBA: ADK:AMBA设计套件AHB-AP:AHB-AP: AHB访问端口APB:高级外设总线ARM ARM:ARM架构参考手册ASIC:行业专用集成电路ATB:高级跟踪总线BE8:字节不变大端模式CPI:每条指令周期数DAP:调试访问端口D. SP:数字信号处理器DWT:数据观察点和跟踪ETM:嵌入式跟踪宏单元FPB: flash地址过载和断点FSR:故障状态寄存器HTM: coresight AHB跟踪宏单元ICE:在线仿真器IDE:集成开发环境IRQ:中断请求(中例程ITM:仪表化跟踪宏单元JTAG:连接点测试行动组(测试和调试接口的标准)LR:连接寄存器LSB:最低有效位MSB:最高有效位LSU:加载存储单元MCU:微控制器单元MPU:内存保护单元MMU:内存管理单元MSP:主堆栈指针NMI:不可屏蔽中断NVIC:嵌套向量中断控制器PC:程序计数器PPB:专用外围总线

同时,还作了如下规定:

价值:

1.4”HC和0x123都代表十六进制数。2.#3代表数字3(例如,IRQ #3指的是3号中断)。3.#immed_12代表一个12位的立即数。4.寄存器位。通常,它是代表一个位段的数值。例如,bit[15:12]表示位数从15倒数到12,这是该段的数值。寄存器访问类型1。r表示只读;2.w表示只写;3.RW的意思是可读可写(前三项好像世界上所有人都知道);4.R/Wc表示可读,但是写访问将清除它;0Cortex-M3芯片描述1、芯片的基本结构如下:

2、关于ARMv7的知识-理解

在这个版本中,内核架构首次从单一风格变为三种风格:

风格A: ——,一个为高性能而设计的“开放式应用平台”,离计算机越来越近了。

R风格:用于高端嵌入式系统,尤其是有实时性要求的——,速度快,实时性强。

m型:用于深度嵌入的单芯片计算机型系统。

简介A:高性能的“开放应用平台”,适用于那些需要运行复杂应用的处理器。支持大型嵌入式操作系统

r:用于高端嵌入式系统,要求实时性。

m:用于深度嵌入式单片机系统3、Cortex-M3处理器级。

高性能、高代码密度和小硅面积使CM3成为大面积的理想处理平台,主要用于以下领域:

(1)低成本单片机

(2)汽车电子

(3)数据通信

(4)工业控制

(5)消费电子产品4、 Cortex-M3概述(1)简介Cortex-M3是一款32位处理器内核。内部数据路径是32位,寄存器是32位,存储器接口是32位。CM3采用哈佛结构,有独立的指令总线和数据总线,使取指令和数据访问可以齐头并进。这样,数据访问不再占用指令总线,从而提高了性能。为了实现这一功能,CM3中有几个总线接口,每个接口都针对自己的应用进行了优化,它们可以并行工作。另一方面,指令总线和数据总线共享相同的存储空间(统一的存储系统)。更复杂的应用可能需要更多的存储系统功能,因此为这个CM3提供了可选的MPU,必要时还可以使用外部缓存。另外,在CM3中,小端模式和大端模式都被支持。

(2)大脑皮层-M3的简图

(3)注册组

处理器有一个寄存器组R0-R15,其中R13是堆栈指针SP,有两个SP,但同时只能看到一个,也就是所谓的“banked”寄存器。

a、R0-R12是用于数据操作的32位通用寄存器。但是,请注意,大多数16位Thumb指令只能访问R0-R7,而32位Thumb-2指令可以访问所有寄存器。M3有两个堆栈指针,但是它们是成组的,所以任何时候只能使用其中一个。主堆栈指针(MSP):复位后默认使用的堆栈指针,用于操作系统内核和异常处理例程(包括中断服务例程)进程堆栈指针(PSP):用户的应用程序代码使用。-堆栈指针的最低两位总是0,这意味着堆栈总是4字节对齐的。- c,R14:连接寄存器-调用子程序时,R14存储返回地址d,R15:程序计数寄存器-指向当前程序地址,如果修改其值,可以改变程序的执行流程(这里有很多高级技巧)。e、Cortex-M3还在内核级配备了几个特殊功能寄存器,包括程序状态字寄存器组(PSRs)中断。

Cortex-M3处理器支持两种处理器操作模式,也支持两种特权操作。两种操作模式是:处理器模式和线程模式。引入两种模式的初衷是,用于区分普通应用程序代码和异常服务例程代码的代码——中包含了中断服务例程的代码。

Cortex-M3的另一面是权限分类,——权限级别和用户级别。这样可以为内存访问提供保护机制,使得普通用户程序代码无法意外甚至恶意执行涉及关键点的操作。处理器支持两个特权级别,这也是一个基本的安全模型。

在CM3(线程模式)中运行主应用程序时,可以使用特权级或用户级;然而,异常服务例程必须在特权级别执行。复位后,处理器默认进入线程模式,具有特权访问。在特权级别下,程序可以访问内存的所有范围(如果有MPU,也是在MPU指定的禁区之外),可以执行所有指令。特权级别下的程序可以为所欲为,但也可能在。一旦进入用户级别,想回来就得走“法律程序”。——用户级程序不能简单地试图重写控制寄存器并返回特权级。它必须首先“上诉”:执行一个系统调用指令(SVC)。这将触发一个SVC异常,该异常将由异常服务例程(通常是操作系统的一部分)接管。如果条目被批准,异常服务例程将修改控制寄存器,以在用户级线程模式中重新进入特权级。

实际上,从用户级到特权级的唯一途径就是异常:如果在程序执行过程中触发了异常,处理器总是先切换到特权级,在异常服务例程执行完毕退出时,返回到之前的状态。

通过引入特权级和用户级,可以在硬件级限制一些不可信或者没有调试过的程序,防止它们随意配置涉及关键点的寄存器,从而提高系统的可靠性。进一步,如果配备MPU,还可以作为特权机制的补充,保护关键存储区域不被破坏,这些区域通常是操作系统的区域。(4)内置嵌入式矢量中断控制器Cortex-M3在内核级配备了中断控制器——嵌入式矢量中断控制器NVIC(Nested Vector Interrupt Controller)。它与内核有着很深的“亲密接触”,——与内核紧密耦合。NVIC提供了以下功能:可嵌套中断支持向量中断支持动态优先级调整支持中断延迟大大缩短中断屏蔽可嵌套中断支持:可嵌套中断支持应用广泛,覆盖所有外部中断和大部分系统异常。从外部来看,这些异常可以被赋予不同的优先级。当前优先级存储在xPSR的专用字段中。当出现异常时,硬件会自动比较该异常的优先级是否高于当前的异常优先级。如果发现更高优先级的异常,处理器将中断当前的中断服务例程(或普通程序),新的异常——将立即被抢占。向量中断支持:当响应一个中断时,CM3会自动定位一个向量表,根据中断号从表中找出ISR的入口地址,然后跳转过来执行。不需要软件像以前的ARM那样区分发生了哪个中断,也不需要半导体厂商提供私有的中断控制器来完成这项工作。因此,中断延迟时间大大缩短。(5)内存映射Cortex-M3支持4G存储空间,具体分配如下:

(6)总线接口Cortex-M3有多个总线接口,使得CM3可以同时访问地址和存储器。他们是:指令存储总线(两条)?系统总线?专用外设总线有两条代码存储区总线,I代码总线和D代码总线,负责访问代码存储区。前者用于取指,后者用于查表等操作,并按照最佳执行速度进行优化。系统总线用于访问存储器和外设,覆盖的区域包括SRAM、片内外设、片外RAM、片外扩展设备以及部分系统级存储区域。私有外设总线负责访问一些私有外设,主要是访问调试组件。它们也在系统级存储区域。(7)内存保护单元(MPU) Cortex-M3有一个可选的内存保护单元。使用它,您可以分别对特权访问和用户访问施加不同的访问限制。当检测到违规时,MPU将产生故障异常,故障异常服务程序可以对其进行分析,并在可能的情况下进行纠正。MPU有很多玩法。最常见的方式是操作系统使用MPU,这样特权代码的数据,包括操作系统本身的数据,就不会被其他用户程序破坏。当保护存储器时,MPU按区域管理。它可以将一些内存区域设置为只读,从而防止那里的内容被意外更改;您还可以在多任务系统中隔离不同任务之间的数据区域。总之会让嵌入式系统更加健壮可靠(很多行业标准尤其是航空标准规定必须使用MPU来执行保护功能)。(8)简评8)Cortex-M31、高性能很多指令都是单周期——包括乘法相关指令。就整体性能而言,Cortex-M3优于大多数其他架构。指令总线和数据总线是分开的,存取和值检索可以并行。Thumb-2的到来告别了老一代的状态切换,不再需要花时间在32位ARM状态和16位Thumb状态之间切换。这简化了软件开发和代码维护,并使产品更快地进入市场。Thumb-2指令集为编程带来了更大的灵活性。许多数据操作现在可以用更短的代码完成,这意味着Cortex-M3具有更高的代码密度和更少的内存需求。取指按32位处理。在同一个周期内最多可以取出两条指令,为数据传输留出更多带宽。Cortex-M3的设计让单片机可以高频率运行(现代半导体制造技术可以保证100MHz以上的速度)。即使在相同的速度下,CM3的每条指令的周期数(CPI)也更低,因此在相同的MHz下可以完成更多的工作。另一方面,这也使得同样的应用在CM3上需要更低的主频。2、高级中断处理功能内置嵌套矢量中断控制器支持240个外部中断输入。矢量化的中断功能大大降低了中断延迟,因为不需要软件判断中断源。中断嵌套也在硬件级实现,无需软件代码。Cortex-M3在进入异常服务例程时自动堆栈R0-R3、R12、LR、PSR和PC,返回时自动弹出。多清爽啊!它不仅加速了中断的响应,而且不需要汇编语言代码。NVIC支持为每个中断设置不同的优先级,使得中断管理非常灵活。最粗行的实现也应该支持至少8级优先级,并且还可以动态修改。优化中断响应的方法有两种,分别是“咬尾中断机制”和“迟到中断机制”。一些需要更多周期才能完成的指令可以被中断——就像一系列指令一样继续执行。这些指令包括加载多个寄存器(LDM)、存储多个寄存器(STM)、使用多个寄存器推送以及使用多个寄存器弹出。除非系统完全锁定,否则NMI(不可屏蔽中断)将在收到请求后立即响应。NMI对于许多安全关键应用来说是必不可少的(例如当化学反应即将失控时的紧急关闭)。

通过以上,我们可以很容易的了解STM32的一些基础知识和结构,为学习STM32打下良好的基础。