豹哥嵌入式讲堂:ARM知识概要杂辑(3)- Cortex-M处理器功能模块



  ARM Cortex-M处理器家族发展至今(2016),已有5代产品,分别是CM0/CM0+、CM1、CM3、CM4、CM7,关于其发展历史可参考我的另外两篇博客:ARM内核体系架构编年史(精简版)扒一扒ARM Cortex-M各版本的第一款MCU

1.Cortex-M兼容特性

  为了能做到Cortex-M软件重用,ARM公司在设计Cortex-M处理器时为其赋予了处理器向下兼容软件二进制向上兼容特性。

  首先看什么是二进制兼容,这个特性主要是针对软件而言,这里指的是当某软件(程序)依赖的头文件或库文件分别升级时,软件功能不受影响。要做到二进制兼容,被软件所依赖的头文件或库文件升级时必须是二进制兼容的。

  那么什么又是向上兼容,向上兼容又叫向前兼容,指的是在较低版本处理器上编译的软件可以在较高版本处理器上执行。

  跟向上兼容相对的另一个概念叫向下兼容,向下兼容又叫向后兼容,指的是较高版本处理器可以正确运行在较低版本处理器上编译的软件。

  所以其实既可以用向上兼容,也可以用向下兼容来形容Cortex-M特性,只不过描述的主语不一样,我们可以说Cortex-M程序是向上兼容的,也可以说Cortex-M处理器是向下兼容的。

  具体到Cortex-M处理器时,这个兼容特性表现为:

  • 从处理器角度看:CM0指令集和功能模块是最精简的,CM7指令集和功能模块是最丰富的。不存在低版本处理器上存在的特性是高版本处理器所没有的。
  • 从软件角度来看:CMSIS提供的头文件和功能函数是二进制向上兼容的,比如某CM0软件App使用的是core_cm0.h头文件,而这个App要在CM7上运行时,不需要使用core_cm7.h再重新编译一次(当然使用新头文件编译后的App也是正常的。)

2.Cortex-M功能模块差异

  由于CM1主要是用在FPGA产品中,故下面对比忽略CM1。我们知道CM处理器是向下兼容的,故CM功能模块是随着版本的升级而逐步增加的,我们逐步从最低版本开始对比。

2.1 CM0 vs CM0+

  先来聊聊CM0与CM0+,从最基准的CM0模块看起:

  • ARMv6-M CPU内核:ARM公司于2007年推出的内核。冯·诺依曼体系结构,3级流水线,支持大部分Thumb和小部分Thumb-2指令集,所有指令一共57条。此外还内嵌32-bit返回结果的硬件乘法器。
  • NVIC嵌套向量中断控制器:用于CPU在正常Run模式下中断管理。最大支持32个外部中断,外部中断可设4级抢占优先级(2bit)。
  • WIC唤醒中断控制器:用于CPU在低功耗Sleep模式下中断管理。
  • AHB-Lite总线:一条32bit AMBA-3标准的高性能system总线负责所有Flash、SRAM指令和数据存取。
  • 调试模块:0-4个硬件断点Breakpoint,0-2个数据监测点Watchpoint。
  • DAP调试接口:通过DAP模块支持JTAG和SWD接口。

  那么CM0+到底改进了什么?

  • ARMv6-M CPU内核:流水线改为2级(很多8bit MCU都是2级流水线,主要用于降低功耗)
  • NVIC嵌套向量中断控制器:增加了VTOR即中断重定向功能。

  那么CM0+到底增加了什么?

  • MPU存储器保护单元:提供硬件方式管理和保护内存,控制访问权限,最大可将内存分为8*8个region。内存越权访问,将返回MemManage Fault。
  • MTB片上跟踪单元:用户体验更好的的跟踪调试,优化的异常捕获机制,可以更快地定位bug。
  • Fast I/O:可单周期访问的快速I/O口,更易于Bit-banging(比如GPIO模拟SPI、IIC协议)。

2.2 CM0+ vs CM3

  前面比较完了CM0与CM0+,再来看看CM3比CM0+增强在了哪里:

  那么CM3到底改进了什么?

  • ARMv7-M CPU内核:ARM公司于2004年推出的内核。哈佛体系结构,3级流水线+分支预测,支持全部的Thumb和Thumb-2指令集。内嵌32-bit硬件乘法器可返回64-bit运算结果,且新增32-bit硬件除法器。
  • NVIC嵌套向量中断控制器:最大支持240个外部中断,中断优先级可分组(抢占优先级、响应优先级),8bit优先级设置(最大128级抢占优先级(对应最小2级响应优先级),最大256级响应优先级(对应无抢占优先级))。
  • 3x AHB-Lite总线:除了原system总线负责SRAM存取外,还新增两条ICode、DCode总线分别完成Flash上指令和数据存取。
  • 调试模块:0-8个硬件断点Breakpoint,0-4个数据监测点Watchpoint。
  • ITM/ETM跟踪单元:ITM更好地支持printf风格debug,ETM提供实时指令和数据跟踪。

  那么CM3到底增加了什么?

  额,CM3相比CM0+并没有增加什么独有模块,反倒是少了Fast I/O Port。

2.3 CM3 vs CM4

  前面比较完了CM0+与CM3,再来看看CM4比CM3增强在了哪里:

  那么CM4到底改进了什么?

  • ARMv7E-M CPU内核:增加了DSP相关指令支持。

  那么CM4到底增加了什么?

  • DSP数字信号处理单元:新增支持单周期16/32-bit MAC、dual 16-bit MAC, 8/16-bit SIMD算法的数字信号处理单元。
  • FPU浮点运算单元:新增单精度(float型)兼容IEEE-754标准的浮点运算单元(VFPv4-SP)。

2.4 CM4 vs CM7

  前面比较完了CM3与CM4,再来看看CM7比CM4增强在了哪里:

  那么CM7到底改进了什么?

  • ARMv7E-M CPU内核:6级流水线+分支预测。
  • 2x AHB-Lite总线:精简为2条AHB总线,其中AHB-P外设接口完成原来system总线功能, AHB-S从属接口负责外部总线控制器(如DMA)功能以及与TCM接口功能。
  • MPU存储器保护单元:最大可将内存分为16*8个region。
  • FPU浮点运算单元:新增双精度(double型)兼容IEEE-754标准的浮点运算单元(VFPv5)。

  那么CM7到底增加了什么?

  • I/D-Cache缓存区:即是我们通常理解的L1 Cache,每个Cache大小为4-64KB。
  • I/D-TCM紧密耦合存储器:紧密的与处理器内核相耦合的RAM,提供与Cache相当的性能,但比Cache更具确定性,memory最大均为16MB。
  • ECC特性:对L1 Cache提供错误校正和恢复功能,提高系统的可靠性。
  • AXI-M总线:基于AMBA 4的64bit AXI总线,用于支持挂在系统上的L2 memory。

参考资料

[1]. 维基百科ARM Cortex-M

[2]. Cortex系列M0-4简单对比

[3]. 使用MTB模块快速跟踪定位Cortex-M0+指令执行状态

[4]. Cortex-M0+单周期GPIO的使用方法

[5]. ARM Cortex-M4和Cortex-M0+中断优先级及嵌套抢占问题

[6]. STM32中断优先级概念

[7]. 基于ARM Cortex-M3核的SoC架构设计及性能分析

[8]. ARM调试CoreSight、ETM、PTM、ITM、HTM、ETB等常用术语解析

原文地址:https://www.cnblogs.com/henjay724/p/8408904.html

时间: 2024-10-02 22:41:01

豹哥嵌入式讲堂:ARM知识概要杂辑(3)- Cortex-M处理器功能模块的相关文章

豹哥嵌入式讲堂:ARM知识概要杂辑(1)- 内核架构编年史

众所周知,ARM公司是一家微处理器行业的知名企业,ARM公司本身并不靠自有的设计来制造或出售CPU,而是将处理器架构授权给有兴趣的厂家.这些厂家基本涵盖了全球领先的知名半导体企业.软件和OEM厂商:TI, NXP, ST, Infineon, ADI, Cypress:Atollic,IAR system,FreeRTOS,SEGGER等. 1.ARM内核体系架构历史 ARM是Advanced RISC Machines的缩写.ARM架构是一个32位精简指令集(RISC)处理器架构,其广泛地使用

豹哥嵌入式讲堂:ARM知识概要杂辑(4)- Cortex-M处理器性能指标

1.处理器的性能指标 用于评价CPU的性能指标非常多,不同的性能侧重点下的测试标准可能得出的指标值不同,下面介绍嵌入式行业广泛使用的两个经典的测试标准. 1.1 Dhrystone标准 Dhrystone是由Reinhold P. Weicker在1984年提出来的一个基准测试程序,其主要目的是测试处理器的整数运算和逻辑运算的性能. Dhrystone程序最初用Ada语言发布,后来Rick Richardson为Unix开发了用C语言编写的Version 1.1,这个版本也成功的推动了Dhrys

豹哥嵌入式讲堂:ARM开发之文件详解(3)- project文件

大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的project文件. 前面两节课里,豹哥分别给大家介绍了嵌入式开发中的两种典型input文件:source文件.linker文件.豹哥要再次提问了,还有没有input文件呢?答案确实是有,但这次真的是有且仅有了,本文要介绍的主角project文件也属于半个input文件.为什么说是半个?因为project文件不仅包含开发者指定的input信息,还包含很多其他辅助调试的input/output信息,算是嵌入式开发中承前启后的

豹哥嵌入式讲堂:ARM Cortex-M开发之文件详解(7)- 反汇编文件(.s/.lst/.dump)

大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的反汇编文件(.s, .lst, .dump). 豹哥在第四.五.六节课分别介绍了编译器/链接器生成的3种output文件(relocatable.map.exectuable文件),这3种文件都是侧重的代码经过汇编/链链接后的二进制数据在存储中分布情况.如果想知道二进制数据对应的机器码具体是什么意思应该怎么办?豹哥今天要介绍的反汇编文件会给你答案. 一.标准汇编源文件 使用IAR进行编译的时候会在D:\myProject\

豹哥嵌入式讲堂:ARM Cortex-M开发之文件详解(8)- 镜像文件(.bin/.hex/.s19)

大家好,我是豹哥,猎豹的豹,犀利哥的哥.今天豹哥给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是豹哥<ARM Cortex-M开发之文件详解>主题系列的最后一节课(突然有点不舍,要告别的感觉,咳咳,让豹哥整理下情绪先).今天豹哥主要讲的是工程开发最终的output文件,即image文件.image文件也叫镜像文件,这个文件主要包含的是只有芯片能够解释执行的二进制机器码数据,这些数据其实在前面介绍的relocatable.list.executable

嵌入式Linux基础知识

一.构建嵌入式开发环境 1.编译bootloader并烧写到板子中---uboot, 可以自己定制bootloader and logo 2.编译file system 并烧写--内嵌APP 3.编译linux kernel----定制drivers and logo 4.编译APP 5.编译file system 备份---内嵌APP 6.安装交叉编译工具 7.安装调试工具 二.嵌入式编程基础知识 一般的c/c++文件要变成可执行文件需要经过预处理.编译.汇编.和连接等4个步骤 1)预处理 以

嵌入式Linux ARM汇编(六)——GNU ARM汇编编程

嵌入式Linux ARM汇编(六)--GNU ARM汇编编程 不同的汇编器对汇编语言的语法要求不一样.目前常用的ARM汇编环境有以下两种: A.ARM ASM:ARM公司的汇编器,适合在Windows平台下使用 B.GNU ARM ASM:GNU交叉编译工具链中的汇编器,适合于Linux开发平台. GNU汇编器是GNU工具集的一部分,用于将汇编语言文件转化为二进制obj文件.GNU汇编器针对的是多种处理器架构,这意味着GNU汇编器的语法不同于ARM工具链的汇编器. 一.GUN ARM汇编指令格式

嵌入式Linux ARM汇编(七)——C语言与ARM汇编混合编程

嵌入式Linux ARM汇编(七)--C语言与ARM汇编混合编程 在嵌入式系统开发中,目前使用的主要编程语言是C和汇编.在大规模的嵌入式软件中,例如含有OS,大部分的代码都是用C编写的,主要是因为C语言的结构比较好,便于人的理解,而且有大量的支持库.但是很多地方还是要用到汇编语言,例如开机时硬件系统的初始化,包括CPU状态的设定,中断的使能,主频的设定,以及RAM的控制参数及初始化,一些中断处理方面也可能涉及汇编.另外一个使用汇编的地方就是一些对性能非常敏感的代码块,这是不能依靠C编译器的生成代

嵌入式wince基础知识

因项目需要,用到手持设备的开发,手持设备搭载的是wince系统,之前多多少少接触过嵌入式编程,一直以为自己的处女开发是在Linux,没想到还是没逃出微软的“魔掌”,不开心归不开心,项目还得继续,先学习嵌入式wince的基本知识吧,为以后的开发打好基础. 什么是嵌入式系统 我现在觉得有些概念经过一段时间的沉淀,进进出出大脑多次,就能体会到一点点的不一样的味道,就像嵌入式系统,之前看一些定义,一点感觉都没有,理解不能,囫囵吞枣的感觉不好,现在有一些时间了,也接触过几个小项目,慢慢的就觉得嵌入式系统就