ARM Cortex-M處理器家族發展至今(2016),已有5代産品,分别是CM0/CM0+、CM1、CM3、CM4、CM7
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是ARM Cortex-M功能子產品。
ARM Cortex-M處理器家族發展至今(2016),已有5代産品,分别是CM0/CM0+、CM1、CM3、CM4、CM7。
為了能做到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也是正常的。)
由于CM1主要是用在FPGA産品中,故下面對比忽略CM1。我們知道CM處理器是向下相容的,故CM功能子產品是随着版本的更新而逐漸增加的,我們逐漸從最低版本開始對比。

先來聊聊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協定)。
前面比較完了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。
前面比較完了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)。
前面比較完了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等常用術語解析
文章會同時釋出到我的 部落格園首頁、CSDN首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。