ARM Cortex-M3的优势

1. 三级流水线+分支预测
ARM Cortex-M3与ARM7内核一样,采用适合于微控制器应用的三级流水线,但增加了分支预测功能。
现代处理器大多采用指令预取和流水线技术,以提高处理器的指令执行速度。流水线处理器在正常执行指令时,如果碰到分支(跳转)指令,由于指令执行的顺序可能会发生变化,指令预取队列和流水线中的部分指令就可能作废,而需要从新的地址重新取指、执行,这样就会使流水线“断流”,处理器性能因此而受到影响。特别是现代C语言程序,经编译器优化生成的目标代码中,分支指令所占的比例可达10-20%,对流水线处理器的影响会的更大。为此,现代高性能流水线处理器中一般都加入了分支预测部件,就是在处理器从存储器预取指令时,当遇到分支(跳转)指令时,能自动预测跳转是否会发生,再从预测的方向进行取指,从而提供给流水线连续的指令流,流水线就可以不断地执行有效指令,保证了其性能的发挥。
ARM Cortex-M3内核的预取部件具有分支预测功能,可以预取分支目标地址的指令,使分支延迟减少到一个时钟周期。

2. 哈佛结构
从内核访问指令和数据的不同空间与总线结构,可以把处理器分为哈佛结构和普林斯顿结构(或冯.诺伊曼结构)。冯.诺伊曼结构的机器指令、数据和I/O共用一条总线,这样内核在取指时就不能进行数据读写,反之亦然。这在传统的非流水线处理器(如MCS51)上是没有什么问题的,它们取指、执行分时进行,不会发生冲突。但在现代流水线处理器上,由于取指、译码和执行是同时进行的(不是同一条指令),一条总线就会发生总线冲突,必须插入延迟等待,从而影响了系统性能。ARM7TDMI内核就是这种结构的。
而哈佛结构的处理器采用独立的指令总线和数据总线,可以同时进行取指和数据读写操作,从而提高了处理器的运行性能。ARM Cortex-M3、ARM966E、ARM926EJ、ARM1136JF等内核都采用了哈佛结构。

3. 内置嵌套向量中断控制器(NVIC)
针对业界对ARM处理器中断响应的问题,Cortex-M3首次在内核上集成了嵌套向量中断控制器(NVIC)。Cortex-M3的中断延迟只有12个时钟周期(ARM7需要24-42个周期);Cortex-M3还使用尾链技术,使得背靠背(back-to-back)中断的响应只需要6个时钟周期(ARM7需要大于30个周期)。以STM32运行在75MHz为例,中断延迟只有80ns-160ns。另外,Cortex-M3采用了基于栈的异常模式,使得芯片初始化的封装更为简单。
ARM7TDMI内核不带中断控制器,具体MCU的中断控制器是各芯片厂商自己加入的,这使得各厂商的ARM7 MCU中断控制部分都不一样,给用户使用及程序移植带来了很大麻烦。Cortex-M3内核集成NVIC,各厂商生产的基于Cortex-M3内核的MCU都具有统一的中断控制器,对用户使用各种Cortex-M3 MCU,特别是中断编程带来了很大的便利。

4. 支持位绑定操作
以前的ARM内核不支持位操作,当需要对一个变量或端口的某一位操作时,先要用逻辑与/或指令屏蔽其他的位,使位操作需要较多的指令和时钟周期。ARM Cortex-M3采用了一种特殊的方法——位绑定:把一个地址单元的32位变量中的每一位,通过一个简单的地址转换算法,映射到另一个地址空间,每一位占用一个地址,对此地址空间的操作,只有数据的最低一位是有效的,其余高31位的值被忽略。相当于把一个“横”的32位字给“竖”起来。这样对新的映射空间操作时,就可以不用屏蔽操作,优化了RAM和I/O寄存器的读写,提高了位操作的速度。
这种方法粗看起来好像损失了很多地址空间,其实对于32位的ARM处理器而言,总共可以寻址4GB的空间,而对于一个MCU来说,一般只用到几百KB的空间。所以这种处理方法丝毫不会影响一个MCU的正常使用,又大大简化了处理器的设计,可以说是一种良策。

5. 支持串行调试(SWD)
ARM处理器一般都使用JTAG调试接口,使得仿真、调试工具统一而廉价,方便了用户开发。但JTAG调试接口至少要占用芯片的5-6个引脚,这对于一些引脚较少的MCU来说,有时会对仿真调试和I/O使用带来麻烦。
ARM Cortex-M3在保持原来JTAG调试接口的基础上,还支持串行调试(SWD)。使用SWD时,只占用2个引脚,就可以进行所有的仿真和调试,节省了调试用引脚,用户就可以使用更多的引脚。
另外,Cortex-M3支持8个硬件断点(ARM7、ARM9只支持2个硬件断点),可以减少断点调试时对代码的影响,保证仿真、调试的时序准确性。

6. 内核支持低功耗模式
ARM内核已经是一个高性能、低功耗的内核,但ARM7、ARM9等内核本身只有运行/停止模式,没有其他模式。各芯片厂商只能在内核基础上,对各自加入的外设定义各种低功耗模式。Cortex-M3加入了类似于8位处理器的内核低功耗模式,支持3种功耗管理模式:通过一条指令立即睡眠;异常/中断退出时睡眠;深度睡眠。使整个芯片的功耗控制更为有效。以STM32为例,其RAM和寄存器状态保持的停机模式耗电仅为14uA,从此状态的启动时间仅为7us。
Cortex-M3的运行功耗(Active Mode)也很低。以STM32系列微控制器为例,其典型功耗约为500uA/MHz,也只是目前业界超低功耗单片机MSP430系列(约为250uA/MHz)的2倍。但MSP430是16位处理器,而STM32是32位处理器。

7. 高效的Thumb2 16/32位混合指令集
ARM7、ARM9等内核使用不同的处理器状态分别执行32位的ARM指令和16位的Thumb指令,使用状态切换指令完成ARM状态和Thumb状态的切换。Cortex-M3使用更高效的Thumb2指令集,它是一种16/32位混合编码指令,兼容Thumb指令。对于一个应用程序编译生成的Thumb2代码,以接近Thumb编码的代码尺寸,达到了接近ARM编码的运行性能。Thumb2是一种紧凑、高效的新一代指令集。
Thumb2指令集是面向高级语言的指令集,适合于C语言编程,由编译器生成目标代码,不建议直接使用Thumb2汇编语言编程。

8. 32位硬件除法和单周期乘法
以往的ARM处理器没有除法指令,在某些除法密集型应用中性能不尽如意。Cortex-M3加入了32位除法指令,弥补了这一缺陷,使Cortex-M3可以和其他通用处理器一样,完成各种数学运算操作。
Cortex-M3还改进了乘法运算部件,32结果的32位x32位乘法操作只要一个时钟周期。这一性能使得使用Cortex-M3来进行乘、乘加运算时,已逼近DSP的性能,因此特别适合一些需要简单DSP的应用领域,如电机控制、数字滤波、FFT变换等。
需要指出的是,32位的乘/除运算,对于一个8位机而言,已经是一段比较复杂的程序,而对于32位的Cortex-M3而言,只需一句指令。因此,即使二者工作主频一样,实际运行性能也不是一个数量级的。

9. 支持存储器非对齐访问
基于Cortex-M3的MCU,为提高性能,其内部存储器(Flash、RAM)都是32位编址的。这样当常量、变量是字节或半字类型时,如果处理器只支持对齐访问(以往的处理器都是如此),那么这些字节/半字类型的数据也必须被分配、占用一个32位的存储单元,这样就浪费了部分存储空间。
Cortex-M3支持存储器的非对齐访问,它可以访问存储在一个32位单元中的字节/半字类型数据,这样4个字节类型(或2个半字类型)数据可以被分配在一个32位的单元中,提高了存储器的利用率。对于一般的应用程序而言,这种技术可以节省约25%的SRAM使用量,从而可以选择SRAM较小、更廉价的MCU。

10. 定义了统一的存储器映射
ARM7、ARM9等内核没有定义存储器映射,各芯片厂商自己定义了存储器映射,这使得各厂商的MCU存储器映射都不完全一致,给用户学习使用及程序移植带来了麻烦。
Cortex-M3内核定义了统一的存储器映射,各厂商生产的基于Cortex-M3内核的微控制器芯片都具有一致的存储器映射,对用户使用各种基于Cortex-M3的 MCU以及代码在不同MCU上的移植带来了很大的便利。

11. 极高的性价比
基于Cortex-M3的微控制器相比于ARM7TDMI的微控制器,在相同的工作时钟频率下:平均性能要高约30%;代码尺寸要比ARM编码小约30%;价格一般也更低。以STM32系列Cortex-M3微控制为例,工作频率可达75MHz,而价格比STR71x系列ARM7TDMI芯片要低约30%,具有极高的性价比。
已标记关键词 清除标记
相关推荐
说明:1.本文档不包括第2章, 2.本文档整理了目录,方便阅读 目录如下: 第1章ARMCortex-M3处理器概述 1.1ARM处理器系列 1.1.1命名规则 1.1.2ARM处理器系列 1.2ARMCortex-M3处理器 1.2.1处理器组件 1.2.2Cortex-M3的层次和实现选项 1.2.3处理器内核 1.2.4嵌套向量中断控制器(NVIC) 1.2.5总线矩阵 1.2.6集成调试 1.2.7可选组件 1.2.8Cortex-M3处理器应用 1.3ARMCortex-M3指令集 1.4ARMCortex-M3优势 第2章STM32系列微控制器 2.1STM32系列微控制器简介 2.1.1STM32微控制器的主要优点 2.1.2STM32微控制器的应用 2.2STM32F101xx系列微控制器 2.2.1特点 2.2.2总体结构 2.3STM32F103xx系列微控制器 2.3.1特点 2.3.2总体结构 第3章STM32系列微控制器存储器与外设 3.1存储器和总线的结构 3.1.1系统结构 3.1.2存储器结构 3.1.3存储器映射 3.1.4启动配置 3.2电源控制 3.2.1电源供应 3.2.2电源供应管理 3.2.3低功耗模式 3.2.4电源控制寄存器 3.3复位和时钟控制 3.3.1复位 3.3.2时钟 3.3.3RCC寄存器描述 3.4通用I/O和复用I/O(GPIO和AFIO) 3.4.1GPIO功能描述 3.4.2GPIO寄存器描述 3.4.3复用功能I/O和调试配置(AFIO) 3.4.4AFIO寄存器描述 3.5中断和事件 3.5.1嵌套向量中断控制器(NVIC) 3.5.2外部中断/事件控制器(EXTI) 3.5.3EXTI寄存器 3.6DMA控制器 3.6.1简介 3.6.2主要特性 3.6.3功能描述 3.6.4DMA寄存器 3.7实时时钟(RTC) 3.7.1简介 3.7.2主要特性 3.7.3功能描述 3.7.4RTC寄存器描述 3.8备份寄存器(BKP) 3.8.1简介 3.8.2主要特性 3.8.3干扰检测 3.8.4RTC校验 3.8.5BKP寄存器描述 3.9独立的看门狗 3.9.1简介 3.9.2IWDG寄存器描述 3.10窗口看门狗(WWDG) 3.10.1简介 3.10.2主要特性 3.10.3功能描述 3.10.4如何编程看门狗的超时时间 3.10.5调试模式 3.10.6寄存器描述 3.11高级控制定时器 3.11.1简介 3.11.2主要特性 3.11.3框图 3.11.4功能描述 3.11.5TIMI寄存器描述 3.12通用定时器(TIMx) 3.12.1简介 3.12.2主要特性 3.12.3框图 3.12.4功能描述 3.12.5TIMx寄存器描述 3.13控制器局域网(bxCAN) 3.13.1简介 3.13.2主要特性 3.13.3总体描述 3.13.4运行模式 3.13.5功能描述 3.13.6中断 3.13.7寄存器访问保护 3.13.8CAN寄存器描述 3.14内部集成电路(I2C)接口 3.14.1简介 3.14.2主要特性 3.14.3总体描述 3.14.4功能描述 3.14.5中断请求 3.14.6I2C调试模式 3.14.7I2C寄存器描述 3.15串行外设接FI(SPI) 3.15.1简介 3.15.2主要特性 3.15.3功能描述 3.15.4SPI寄存器描述 3.16通用同步异步收发机(USART) 3.16.1简介 3.16.2主要特性 3.16.3总体描述 3.16.4中断请求 3.16.5USART寄存器描述 3.17USB全速设备接口 3.17.1概述 3.17.2主要特性 3.17.3结构框图 3.17.4功能描述 3.17.5编程中需要考虑的问题 3.17.6USB寄存器描述 3.18模/数转换器(ADC) 3.18.1概述 3.18.2主要特性 3.18.3引脚描述 3.18.4功能描述 3.18.5校准 3.18.6数据对齐 3.18.7基于通道的可编程的采样时间 3.18.8外部触发转换 3.18.9DMA请求 3.18.10双ADC模式 3.18.11温度传感器 3.18.12中断 3.18.13ADC寄存器描述 3.19调试支持(DBG) 3.19.1概述 3.19.2相关的ARM文档 3.19.3SWJ调试端口(串行线和JTAG) 3.19.4引脚分布和调试端口引脚 3.19.5STM32F10xJTAGTAP连接 3.19.6ID编码和锁定机制 3.19.7JTAG调试端口 3.19.8SW调试端口 第4章STM32固件库 4.1STM32固件库的定义规则 4.1.1固件库命名规则 4.1.2代码标准
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页