一、cortex-m3和cortex-m4处理器的一般信息

1.1 处理器类型

ARM CORTEX-M 为32位RISC 处理器,其具有

32位寄存器

32位内部数据通路

32位总线接口

除了32位数据,ARM处理器都还可以高效地处理8位数据和16位数据。m3和m4处理器还支持涉及64位数据的多种运算(如乘和累加)m3 m4处理器都具有三级流水线(取指、译码和执行),它们都基于哈佛总线架构,取指令和数据访问可以同时执行。

ARM cortex-m 处理器的存储器系统使用32位寻址,地址空间最大为4GB。存储器映射是一致的,这意味着尽管总线接口有多个,4gb存储器空间却只有一个。存储器空间包括程序代码、数据、外设、处理器内的调试支持部件。与其他任何ARM处理器相同,cortex-m处理器基于一种加载–存储架构。这也就意味着数据需要从存储器中加载和处理后,使用多个单独的指令写回存储器。例如,要增加SRAM中存储的数据值,处理器需要使用一条指令从SRAM中读出数据,并且将数据放到处理器的寄存器中,然后使用第二条指令增加寄存器中的数据值,最后使用第三条指令将数值写回存储器。处理器内部的寄存器细节一般被称作编程模型。

1.2处理器架构

架构一般指两个方面:

①架构:指令集架构(ISA)、编程模型(对软件可见)以及调试方法(对调试器可见)

②微架构:接口信号、指令执行时序以及流水线阶段等实现相关的细节,微架构为处理器设计相关的。

1.3指令集

cortex-m处理器使用Thumb指令集(其中包括16位Thumb指令和更新的32位Thumb指令),m3和m4处理器用到了Thumb-2技术,它允许16位和32位指令的混合使用,以获取更高的代码密度和效率。

ARM7TDMI等经典的ARM处理器具有两种操作状态;32位的ARM状态和16位的Thumb状态。在ARM状态中,指令是32位的,内核能够以很高的性能执行所有支持的指令;而对于Thumb状态,指令是16位的,这样可以得到很好的代码密度,不过Thumb指令却不具有ARM指令的所有功能,要完成特定的操作,可能需要更多的指令。要同时得到两者的优势,许多ARM处理器的应用程序混合使用了ARM和Thumb代码。不过这种混合编码的方式会带来状态间切换的开销,而且两个状态的分离还增加了软件编译过程的复杂度。

ARM架构M4和M0通用吗 arm m3 m4区别_ARM架构M4和M0通用吗

cortex-m 不支持32位的ARM指令,甚至中断处理都可以完全在Thumb状态中实现,不过对于于经典的ARM处理器,中断处理是会进入ARM状态的。利用Thumb-2技术,cortex-m具有诸多优势。例如:

无状态切换开销,节省执行时间和指令空间

无须指定源文件中的ARM状态或Thumb状态,开发软件也更容易。

在获得最佳的代码密度和效率的同时还能很容易地达到高性能。

利用Thumb-2技术,与ARM7TDMI等经典处理器相比,Thumb指令集已经得到很大的扩展。尽管所有cortex-m处理器都支持Thumb-2技术,它们实现的ISA 子集不尽相同。

ARM架构M4和M0通用吗 arm m3 m4区别_stm32_02


ARM架构M4和M0通用吗 arm m3 m4区别_arm开发_03

1.4 模块框图

M3 M4处理器包含处理器内核、嵌套向量中断控制器、SysTick定时器以及可选的浮点单元。除此之外,处理器中还有一些内部总线系统、可选的存储器保护单元(MPU)以及支持软件调试操作的一组部件。内部总线连接可以将处理器和调试产生的传输送到设计的各个部分。

ARM架构M4和M0通用吗 arm m3 m4区别_arm开发_04


I-CODE 主要用于程序存储器,地址0x0 ~ 0x1FFF FFFF适用于取指和取向量操作,基于AMBA3.0 AHB Lite总线协议。

D-CODE 主要用于程序存储器,地址0x0 ~ 0x1FFF FFFF适用于数据和调试器访问操作,基于AMBA3.0 AHB Lite总线协议。

系统:主要用于RAM 和外设,地址0x20000000~ 0xFFFFFFFF(PPB区域除外)适用于任何一种访问,基于AMBA3.0 AHB Lite总线协议。

PPB:外部私有外设总线(PPB),用于地址0xE0040000 ~ 0xE00FFFFF范围内的私有调试部件,基于AMBA3.0 AHB Lite总线协议。

DAP:调试访问端口(DAP)接口,用于调试接口模块产生到包含系统存储器和调试部件在内的任意存储器位置的调试器访问,基于ARM CoreSight调试架构。

备注:参考ARM Cortex-M3与Cortex-M4权威指南