色偷偷偷久久伊人大杳蕉,色爽交视频免费观看,欧美扒开腿做爽爽爽a片,欧美孕交alscan巨交xxx,日日碰狠狠躁久久躁蜜桃

x
x

ARM Cortex-M處理器入門:ARM Cortex-M 處理器家族介紹和比較

發(fā)布時間:2017-4-19 14:42    發(fā)布者:eechina
關(guān)鍵詞: Cortex-M , ARM
作者:Joseph Yiu, 高級嵌入式技術(shù)經(jīng)理, ARM
William Gao, ARM 中國應(yīng)用工程師與Gabriel Wang,ARM中國嵌入式應(yīng)用工程師對于本文中文版亦有幫助

概要

ARM Cortex-M處理器家族現(xiàn)在有8款處理器成員。在本文中,我們會比較Cortex-M系列處理器之間的產(chǎn)品特性,重點講述如何根據(jù)產(chǎn)品應(yīng)用選擇正確的Cortex-M處理器。本文中會詳細(xì)的對照Cortex-M 系列處理器的指令集和高級中斷處理能力,以及 SoC系統(tǒng)級特性,調(diào)試和追蹤功能和性能的比較。

1    簡介

今天, ARM Cortex-M 處理器家族有8款處理器成員。除此之外,ARM的產(chǎn)品系列還有很多其他的處理器成員。對很多初學(xué)者,甚至某些芯片設(shè)計經(jīng)驗豐富但是不熟悉ARM系列處理器的設(shè)計者來說,也是很容易混淆這些產(chǎn)品的。不同的ARM 處理器有不同的指令集,系統(tǒng)功能和性能。本文會深入展現(xiàn)Cortex-M系列處理器之間的關(guān)鍵區(qū)別,以及它們和ARM其他系列處理器的不同。


1.1    ARM處理器家族

多年來, ARM已經(jīng)研發(fā)了相當(dāng)多的不同的處理器產(chǎn)品。 如下圖中(圖1): ARM 處理器產(chǎn)品分為經(jīng)典ARM處理器系列和最新的Cortex處理器系列。并且根據(jù)應(yīng)用范圍的不同,ARM處理器可以分類成3個系列。

Application Processors(應(yīng)用處理器)–面向移動計算,智能手機,服務(wù)器等市場的的高端處理器。這類處理器運行在很高的時鐘頻率(超過1GHz),支持像Linux,Android,MS Windows和移動操作系統(tǒng)等完整操作系統(tǒng)需要的內(nèi)存管理單元(MMU)。 如果規(guī)劃開發(fā)的產(chǎn)品需要運行上述其中的一個操作系統(tǒng),你需要選擇ARM 應(yīng)用處理器.

Real-time Processors (實時處理器)–面向?qū)崟r應(yīng)用的高性能處理器系列,例如硬盤控制器,汽車傳動系統(tǒng)和無線通訊的基帶控制。多數(shù)實時處理器不支持MMU,不過通常具有MPU、Cache和其他針對工業(yè)應(yīng)用設(shè)計的存儲器功能。實時處理器運行在比較高的時鐘頻率(例如200MHz 到 >1GHz ),響應(yīng)延遲非常低。雖然實時處理器不能運行完整版本的Linux和Windows操作系統(tǒng), 但是支持大量的實時操作系統(tǒng)(RTOS)。

Microcontroller Processors(微控制器處理器)–微控制器處理器通常設(shè)計成面積很小和能效比很高。通常這些處理器的流水線很短,最高時鐘頻率很低(雖然市場上有此類的處理器可以運行在200Mhz之上)。 并且,新的Cortex-M處理器家族設(shè)計的非常容易使用。因此,ARM 微控制器處理器在單片機和深度嵌入式系統(tǒng)市場非常成功和受歡迎。


圖 1: 處理器家族

表1總結(jié)了三個處理器系列的主要特征。

 Application  processorsReal-time  processorsMicrocontroller  processors
設(shè)計特點高時鐘頻率,長流水線,高性能,對媒體處理支持(NEON指令集擴展) 高時鐘頻率,較長的流水線,高確定性(中斷延遲低)通常較短的流水線,超低功耗
,
系統(tǒng)特性內(nèi)存管理單元 (MMU),  cache memory,內(nèi)存保護(hù)單元 (MPU), cache memory, 緊耦合內(nèi)存 (TCM)內(nèi)存保護(hù)單元(MPU), 嵌套向量中斷控制器 (NVIC), 喚醒中斷控制器 (WIC), 最新ARM TrustZone® 安全擴展.
ARM TrustZone® 安全擴展
目標(biāo)市場移動計算,智能手機,高能效服務(wù)器,高端微處理器工業(yè)微控制器,汽車電子,硬盤控制器,基帶微控制器,深度嵌入系統(tǒng)(例如,傳感器,MEMS,混合信號IC,  IoT)
表 1: 處理器特性總結(jié)

1.2    Cortex-M 處理器家族

Cortex-M處理器家族更多的集中在低性能端,但是這些處理器相比于許多微控制器使用的傳統(tǒng)處理器性能仍然很強大。例如,Cortex-M4和Cortex-M7處理器應(yīng)用在許多高性能的微控制器產(chǎn)品中,最大的時鐘頻率可以達(dá)到400Mhz。

當(dāng)然,性能不是選擇處理器的唯一指標(biāo)。在許多應(yīng)用中,低功耗和成本是關(guān)鍵的選擇指標(biāo)。因此,Cortex-M處理器家族包含各種產(chǎn)品來滿足不同的需求:

處理器描述
Cortex-M0面向低成本,超低功耗的微控制器和深度嵌入應(yīng)用的非常小的處理器(最小12K門電路
Cortex-M0+針對小型嵌入式系統(tǒng)的最高能效的處理器,與Cortex-M0處理器接近的尺寸大小和編程模式,但是具有擴展功能,如單周期I/O接口和向量表重定位功能
Cortex-M1針對FPGA設(shè)計優(yōu)化的小處理器,利用FPGA上的存儲器塊實現(xiàn)了緊耦合內(nèi)存(TCM)。和Cortex-M0有相同的指令集
Cortex-M3針對低功耗微控制器設(shè)計的處理器,面積小但是性能強勁,支持可以處理器快速處理復(fù)雜任務(wù)的豐富指令集。具有硬件除法器和乘加指令(MAC).并且,M3支持全面的調(diào)試和跟蹤功能,使軟件開發(fā)者可以快速的開發(fā)他們的應(yīng)用
Cortex-M4不但具備Cortex-M3的所有功能,并且擴展了面向數(shù)字信號處理(DSP)的指令集,比如單指令多數(shù)據(jù)指令(SMID)和更快的單周期MAC操作。此外,它還有一個可選的支持IEEE754浮點標(biāo)準(zhǔn)的單精度浮點運算單元
Cortex-M7針對高端微控制器和數(shù)據(jù)處理密集的應(yīng)用開發(fā)的高性能處理器。具備Cortex-M4支持的所有指令功能,擴展支持雙精度浮點運算,并且具備擴展的存儲器功能,例如Cache和緊耦合存儲器(TCM)
Cortex-M23面向超低功耗,低成本應(yīng)用設(shè)計的小尺寸處理器,和Cortex-M0相似,但是支持各種增強的指令集和系統(tǒng)層面的功能特性。M23還支持TrustZone安全擴展
Cortex-M33主流的處理器設(shè)計,與之前的Cortex-M3和Cortex-M4處理器類似,但系統(tǒng)設(shè)計更靈活,能耗比更高效,性能更高。M33還支持TrustZone安全擴展
表 2: Cortex-M 處理器家族

不同于老的經(jīng)典ARM處理器(例如,ARM7TDMI, ARM9), Cortex-M處理器有一個非常不同的架構(gòu)。例如:
-    僅支持ARM Thumb®指令,已擴展到同時支持16位和32位指令Thumb-2版本
-    內(nèi)置的嵌套向量中斷控制負(fù)責(zé)中斷處理,自動處理中斷優(yōu)先級,中斷屏蔽,中斷嵌套和系統(tǒng)異常處理。
-    中斷處理函數(shù)可以使用標(biāo)準(zhǔn)的C語言編程,嵌套中斷處理機制避免了使用軟件判斷哪一個中斷需要響應(yīng)處理。同時,中斷響應(yīng)速度是確定性的,低延遲的
-    向量表從跳轉(zhuǎn)指令變?yōu)橹袛嗪拖到y(tǒng)異常處理函數(shù)的起始地址。
-    寄存器組和某些編程模式也做了改變。

這些變化意味著許多為經(jīng)典ARM處理器編寫的匯編代碼需要修改,老的項目需要修改和重新編譯才能遷移到Cortex-M的產(chǎn)品上。軟件移植具體的細(xì)節(jié)記錄在ARM文檔:

ARM Cortex-M3 Processor Software Development for ARM7TDMI Processor Programmers
http://www.arm.com/files/pdf/Cortex-M3_programming_for_ARM7_developers.pdf

1.3    Cortex-M系列處理器的共同特性

Cortex-M0, M0+, M3, M4 and M7之間有很多的相似之處,例如:
-    基本編程模型  (章節(jié) 3.1)
-    嵌套向量中斷控制器(NVIC)的中斷響應(yīng)管理
-    架構(gòu)設(shè)計的休眠模式:睡眠模式和深度睡眠模式 (章節(jié) 4.1)
-    操作系統(tǒng)支持特性 (章節(jié) 3.3)
-    調(diào)試功能 (章節(jié) 6)
-    易用性

例如,嵌套向量中斷控制器是內(nèi)置的中斷控制器


圖 2: Cortex-M處理器的嵌套向量中斷控制器

支持許多外圍設(shè)備的中斷輸入,一個不可屏蔽的中斷請求,一個來自內(nèi)置時鐘(SysTick)的中斷請求(見章節(jié) 3.3)和一定數(shù)量的系統(tǒng)異常請求。NVIC處理這些中斷和異常的優(yōu)先級和屏蔽管理。

NVIC以及異常處理模型的更多的內(nèi)容在章節(jié)3.2描述。其他Cortex-M處理器間的異同點會在本文的其余部分講解。

2    Cortex-M處理器指令集

2.1    指令集簡介

大多數(shù)情況下,應(yīng)用程序代碼可以用C或其他高級語言編寫。但是,對Cortex-M 處理器支持指令集的基本了解有助于開發(fā)者針對具體應(yīng)用選擇合適的Cortex-M處理器。指令集(ISA)是處理器架構(gòu)的一部分,Cortex-M處理器可以分為幾個架構(gòu)規(guī)范

架構(gòu)描述
ARMv6-MCortex-M0,  Cortex-M0+ 和 Cortex-M1支持的架構(gòu)
ARMv7-MCortex-M3,  Cortex-M4 和 Cortex-M7支持的架構(gòu).ARMv7-M擴展的DSP類型指令(SMID)也被稱為ARMv7E-M.
ARMv8-M這個架構(gòu)進(jìn)一步分為:
Baseline子規(guī)范–  Cortex-M23對應(yīng)的架構(gòu)
Mainline子規(guī)范–  Cortex-M33對應(yīng)的架構(gòu)
For more  information about ARMv8-M architecture, please see in  ARMv8-M關(guān)于ARMv8-M架構(gòu)的更多信息,請參見ARMv8-M 的ARMv8-M Architecture Technical Overview  [url]https://community.arm.com/docs/DOC-10896[/url]
表 3: Cortex-M 處理器ARM架構(gòu)規(guī)范的規(guī)范

所有的Cortex-M 處理器都支持Thumb指令集。整套Thumb指令集擴展到Thumb-2版本時變得相當(dāng)大。但是,不同的Cortex-M處理器支持不同的Thumb 指令集的子集,如圖3所示




圖 3: Cortex-M 處理器的指令集

2.2    Cortex-M0/M0+/M1指令集

Cortex-M0/M0+/M1處理器基于ARMv6-M架構(gòu)。這是一個只支持56條指令的小指令集,大部分指令是16位指令,如圖3所示只占很小的一部分。但是,此類處理器中的寄存器和處理的數(shù)據(jù)長度是32位的。對于大多數(shù)簡單的I/O控制任務(wù)和普通的數(shù)據(jù)處理,這些指令已經(jīng)足夠了。這么小的指令集可以用很少的電路門數(shù)來實現(xiàn)處理器設(shè)計,Cortex-M0 和 Cortex-M0+最小配置僅僅12K門。然而,其中的很多指令無法使用高位寄存器(R8 到R12), 并且生成立即數(shù)的能力有限。這是平衡了超低功耗和性能需求的結(jié)果。

2.3    Cortex-M3指令集

Cortex-M3處理器是基于ARMv7-M架構(gòu)的處理器,支持更豐富的指令集,包括許多32位指令,這些指令可以高效的使用高位寄存器。另外,M3還支持:
•    查表跳轉(zhuǎn)指令和條件執(zhí)行(使用IT指令)
•    硬件除法指令
•    乘加指令(MAC)
•    各種位操作指令

更豐富的指令集通過幾種途徑來增強性能;例如,32位Thumb指令支持了更大范圍的立即數(shù),跳轉(zhuǎn)偏移和內(nèi)存數(shù)據(jù)范圍的地址偏移。支持基本的DSP操作(例如,支持若干條需要多個時鐘周期執(zhí)行的MAC指令,還有飽和運算指令)。最后,這些32位指令允許用單個指令對多個數(shù)據(jù)一起做桶型移位操作。

支持更豐富的指令導(dǎo)致了更大的面積成本和更高的功耗。典型的微控制器,Cortex-M3的電路門數(shù)是Cortex-M0 和 Cortex-M0+兩倍還多。但是,處理器的面積只是大多數(shù)現(xiàn)代微控制器的很小的一部分,多出來的面積和功耗經(jīng)常不那么重要。

2.4    Cortex-M4指令集

Cortex-M4在很多地方和Cortex-M3相同:流水線,編程模型。Cortex-M4支持Cortex-M3的所有功能,并額外支持各種面向DSP應(yīng)用的指令,像SIMD, 飽和運算指令,一系列單周期MAC指令(Cortex-M3只支持有限條MAC指令,并且是多周期執(zhí)行的),和可選的單精度浮點運算指令。

Cortex-M4的SIMD操作可以并行處理兩個16位數(shù)據(jù)和4個8位數(shù)據(jù)。例如,圖4展示的QADD8 和 QADD16 操作:
            

圖 4: SIMD指令例子: QADD8 and QADD16

The uses of SIMD enable much faster computation of 16-bit and 8-bit data in certain DSP operations as the calculation can be parallelized. However, in general programming, C compilers are unlikely to utilize the SIMD capability. That is why the typical benchmark results of the Cortex-M3 and Cortex-M4. However, the internal data path of the Cortex-M4 is different from Cortex-M3, which enable faster operations in a few cases (e.g. single cycle MAC, and allow write back of two registers in a single cycle).在某些DSP運算中,使用SIMD可以加速更快計算16位和8位數(shù)據(jù),因為這些運算可以并行處理。但是,一般的編程中,C編譯器并不能充分利用SIMD運算能力。這是為什么Cortex-M3 和 Cortex-M4典型benchmark的分?jǐn)?shù)差不多。然而,Cortex-M4的內(nèi)部數(shù)據(jù)通路和Cortex-M3的不同,某些情況下Cortex-M4可以處理的更快(例如,單周期MAC,可以在一個周期中寫回到兩個寄存器)。

2.5    Cortex-M7指令集

Cortex-M7支持的指令集和Cortex-M4相似,添加了:
•    浮點數(shù)據(jù)架構(gòu)是基于FPv5的,而不是Cortex-M4的FPv4,所以Cortex-M7支持額外浮點指令
•    可選的雙精度浮點數(shù)據(jù)處理指令
•    支持緩存數(shù)據(jù)預(yù)取指令(PLD)

Cortex-M7的流水線和Cortex-M4的非常不同。Cortex-M7是6級雙發(fā)射流水線,可以獲得更高的性能。多數(shù)為Cortex-M4設(shè)計的軟件可以直接運行在Cortex-M7上。但是,為了充分利用流水線差異來達(dá)到最好的優(yōu)化,軟件需要重新編譯,并且在許多情況下,軟件需要一些小的升級,以充分利用像Cache這樣的新功能。

2.6    Cortex-M23指令集

Cortex-M23的指令集是基于ARMv8-M的Baseline子規(guī)范,它是ARMv6-M的超集。擴展的指令包括:
•    硬件除法指令
•    比較和跳轉(zhuǎn)指令,32位跳轉(zhuǎn)指令
•    支持TrustZone安全擴展的指令
•    互斥數(shù)據(jù)訪問指令(通常用于信號量操作)
•    16位立即數(shù)生成指令
•    載入獲取及存儲釋放指令(支持C11)

在某些情況下,這些增強的指令集可以提高處理器性能,并且對包含多個處理器的SoC設(shè)計有用(例如,互斥訪問對多處理器的信號量處理有幫助)

2.7    I Cortex-M33指令集

因為Cortex-M33設(shè)計是非?膳渲玫,某些指令也是可選的。例如:
•    DSP指令(Cortex-M4 和Cortex-M7支持的)是可選的
•    單精度浮點運算指令是可選的,這些指令是基于FPv5的,并且比Cortex-M4多幾條。
: Cortex-M33也支持那些ARMv8-M Mainline引入的新指令:
•    支持TrustZone安全擴展的指令
•    載入獲取及存儲釋放指令(支持C11)

2.8    指令集特性比較總結(jié)

ARMv6-M, ARMv7-M 和 ARMv8-M架構(gòu)有許多指令集功能特點, 很難介紹到所有的細(xì)節(jié)。但是,下面的表格(表4)總結(jié)了那些關(guān)鍵的差異。

 Cortex-M0/M0+Cortex-M1Cortex-M3Cortex-M4Cortex-M7Cortex-M23Cortex-M33
ArchitectureARMv6-MARMv6-MARMv7-MARMv7E-MARMv7E-MARMv8-M BaselineARMv8-M Mainline
v4T,v5T, v6-M Thumb ISAYYYYYYY
v7-M Thumb ISA--YYY-Y
Low power / Sleep mode : WFE, WFI, SEVYExecute as NOPYYYYY
Single cycle Multiply (32-bit result)YYYYYYY
Bit field processing--YYY-Y
Hardware divide (integer)--YYYYY
Unaligned data access--YYY-Y
Table branch--YYY-Y
Conditional execution (IT)--YYY-Y
Compare & branch (CBZ, CBNZ)--YYYYY
Floating point---Single precision  (optional)Single precision  / Single + double precision (optional)-Single precision  (optional)
MAC--Y (multi-cycle,  limited)Y (single cycle)Y (single cycle)-Y (single cycle)
SIMD---YY-Y
Saturation--USAT, SSAT onlyYY-Y
Exclusive access--YYYYY
Load acquire, store release-----YY
Memory barrierYYYYYYY
SVCYOptionalYYYYY
TrustZone support-----YY
表 4: 指令集特性總結(jié)

Cortex-M處理器指令集的最重要的特點是向上兼容。Cortex-M3的指令是Cortex-M0/M0+/M1的超集。所以,理論上講,如果存儲空間分配是一致的,運行在Cortex-M0/M0+/M1上的二進(jìn)制文件可以直接運行在Cortex-M3上。同樣的原理也適用于Cortex-M4/M7和其他的Cortex-M處理器;Cortex-M0/M0+/M1/M3支持的指令也可以運行在Cortex-M4/M7上。

雖然Cortex-M0/M0+/M1/M3/M23處理器沒有浮點運算單元配置選項,但是處理器仍然可以利用軟件來做浮點數(shù)據(jù)運算。這也適用于基于Cortex-M4/M7/M33但是沒有配置浮點運算單元的產(chǎn)品。在這種情況下,當(dāng)程序中使用了浮點數(shù),編譯工具包會在鏈接階段插入需要的運行軟件庫。軟件模式的浮點運算需要更長的運行時間,并且會略微的增加代碼大小。但是,如果浮點運算不是頻繁使用的,這種方案是適合這種應(yīng)用的。

3    架構(gòu)特性


3.1    編程模型

Cortex-M處理器家族的編程模型是高度一致的。例如所有的Crotex-M處理器都支持R0到R15,PSR, CONTROL 和 PRIMASK。兩個特殊的寄存器— FAULTMASK 和 BASEPRI—只有Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33支持;浮點寄存器組和FPSCR(浮點狀態(tài)和控制寄存器)寄存器,是Cortex-M4/M7/M33可選的浮點運算單元使用的。


圖 5: 編程模型

BASEPRI寄存器允許程序阻止指定優(yōu)先級或者低的優(yōu)先級中斷和異常。對ARMv7-M來說這是很重要的,因為Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33有大量的優(yōu)先級等級,而ARMv6-M 和 ARMv8-M Baseline只有有限的4個優(yōu)先等級。FAULTMASK通常用在復(fù)雜的錯誤處理上(查看章節(jié)3.4)

非特權(quán)級別的實現(xiàn)對ARMv6-M處理器是可選的,對ARMv7-M 和ARMv8-M處理器一直支持的。對Cortex-M0+處理器,它是可選的, Cortex-M0 and Cortex-M1不支持這個功能。這意味著在各種Cortex-M處理器的CONTROL 寄存器是稍微不同的。FPU的配置也會影響到CONTROL寄存器,如圖6所示。


圖 6:  CONTROL 寄存器

另外一個編程模型之間的不同是PSR寄存器(程序狀態(tài)寄存器)的細(xì)節(jié)。所有的Cortex-M處理器,PSR寄存器都被再分成應(yīng)用程序狀態(tài)寄存器(APSR),執(zhí)行程序狀態(tài)寄存器(EPSR)和中斷程序狀態(tài)寄存器(IPSR)。 ARMv6-M 和 ARMv8-M Baseline系列的處理器不支持APSR的Q位和EPSR的ICI/IT位。ARMv7E-M系列 ( Cortex-M4, Cortex-M7) 和ARMv8-M Mainline (配置了DSP擴展的Cortex-M33 )支持GE位。另外,ARMv6-M系列處理器IPSR的中斷號數(shù)字范圍很小,如圖7所示。


圖 7: PSR 差異

請注意Cortex-M的編程模型和ARM7TDMI等這些經(jīng)典的ARM處理器是不一樣的。除了寄存器組不同外,經(jīng)典ARM處理器中“模式”和“狀態(tài)”的定義與Cortex-M中的也是不同的。Cortex-M只有兩個模式:線程模式(Thread)和管理者模式(Handler),并且Cortex-M處理器一直運行在Thumb狀態(tài)(不支持ARM指令)

3.2    異常處理模型和嵌套向量中斷控制器NVIC

所有的Cortex-M處理器都包含了NVIC模塊,采用同樣的異常處理模型。如果一個異常中斷發(fā)生,它的優(yōu)先等級高于當(dāng)前運行等級,并且沒有被任何的中斷屏蔽寄存器屏蔽,處理器會響應(yīng)這個中斷/異常,把某些寄存器入棧到當(dāng)前的堆棧上。這種堆棧機制下,中斷處理程序可以編寫為一個普通的C函數(shù),許多小的中斷處理函數(shù)可以立即直接響應(yīng)工作而不需要額外的堆棧處理花銷。

一些ARMv7-M/ARMv8-M Mainline系列的處理器使用的中斷和系統(tǒng)異常并不被ARMv6-M/ARMv8-M Baseline的產(chǎn)品支持,如圖8. 例如,Cortex-M0, M0+ 和M1的中斷數(shù)被限制在32個以下,沒有調(diào)試監(jiān)測異常,錯誤異常也只限于HardFault(錯誤處理細(xì)節(jié)請參看章節(jié)3.4)。相比之下,Cortex-M23, Cortex-M3, Cortex-M4 和Cortex-M7處理器可以支持到多達(dá)240個外圍設(shè)備中斷。Cortex-M33支持最多480個中斷。

另外一個區(qū)別是可以使用的優(yōu)先等級數(shù)量:

ARMv6-M 架構(gòu) - ARMv6-M支持2級固定的(NMI 和 HardFault)和4級可編程的(由每個優(yōu)先等級寄存器的兩個位表示)中斷/異常優(yōu)先級。這對大多數(shù)的微控制器應(yīng)用來說足夠了。

ARMv7-M 架構(gòu) - ARMv7-M系列處理器的可編程優(yōu)先級等級數(shù)范圍,根據(jù)面積的限制,可以配置成8級(3位)到256級(8位)。ARMv7-M處理器還有一個叫做中斷優(yōu)先級分組的功能,可以把中斷優(yōu)先級寄存器再進(jìn)一步分為組優(yōu)先級和子優(yōu)先級,這樣可以詳細(xì)地制定搶占式優(yōu)先級的行為。

ARMv8-M Baseline – 類似 ARMv6-M,M23也有2位的優(yōu)先級等級寄存器。借助可選的TrustZone安全擴展組件,安全軟件可以把非安全環(huán)境中的中斷的優(yōu)先等級轉(zhuǎn)換到優(yōu)先等級區(qū)間的下半?yún)^(qū),這就保證了安全環(huán)境中的某些中斷/異?偸潜确前踩h(huán)境中的優(yōu)先級要高。

ARMv8-M Mainline – 類似于 ARMv7-M。 可以支持8到256個中斷優(yōu)先等級和中斷優(yōu)先級分組。還支持ARMv8-M Baseline具有的優(yōu)先等級調(diào)整功能。


圖 8: Cortex-M 處理器異常中斷類型

所有的Cortex-M處理器在異常處理是都要依靠向量表。向量表保存著異常處理函數(shù)的起始地址(如圖8所示)。向量表的起始地址由名為向量表偏移寄存器(VTOR)決定。

•    Cortex-M0+, Cortex-M3 and Cortex-M4 processors: by default the vector table is located in the starting of the memory map (address 0x0). Cortex-M0+, Cortex-M3 and Cortex-M4: 向量表默認(rèn)放在存儲空間的起始地址(地址 0x0)。
•    In Cortex-M7, Cortex-M23 and Cortex-M33 processors: the default value for VTOR is defined by chip designers. Cortex-M23 and Cortex-M33 processors can have two separated vector tables for Secure and Non-secure exceptions/interrupts. Cortex-M7, Cortex-M23 and Cortex-M33:VTOR的初始值由芯片設(shè)計者定義。Cortex-M23 and Cortex-M33處理器面向安全和非安全的異常/中斷有兩個獨立的向量表。
•    Cortex-M0 and Cortex-M1 does not implement programmable VTOR and vector table starting address is always 0x00000000. Cortex-M0 and Cortex-M1沒有實現(xiàn)可編程的VTOR,向量表起始地址一直為0x00000000。
Cortex-M0+ 和 Cortex-M23處理器的VTOR是可選項。如果VTOR被實現(xiàn)了,向量表的起始地址可以通過設(shè)置VTOR來改變,這個功能對下列情況有用:
•    重定位向量表到SRAM來實現(xiàn)動態(tài)改變異常處理函數(shù)入口點
•    重定位向量表到SRAM來實現(xiàn)更快的向量讀取(如果flash存儲器很慢)
•    重定位向量表到ROM不同位置(或者Flash),不同的程序運行階段可以有不同的異常處理程序

不同的Cortex-M處理器之間的NVIC編程模型也有額外的不同。差異點總結(jié)在表 5中:

 Cortex-M0Cortex-M0+Cortex-M1Cortex-M3/M4/M7Cortex-M23Cortex-M33
Number of InterruptsUp to 32Up to 32Up to 32Up to  240Up  to 240Up to 480
NMIYYYYYY
SysTickY (optional)Y (optional)Y (optional)YY (optional)Y
Fault handlers1 (HardFault)1 (HardFault)1 (HardFault)
4
1 (HardFault)
4
VTOR-Y (optional)-YY (optional)Y
Dbg Monitor---Y-Y
Programmable priority levels
4
4
4
8 to  256
4
8 to 256
Software trigger interrupt register---Y-Y
Interrupt Active status---YYY
Register accesses32-bit32-bit32-bit8/16/32-bit32-bit8/16/32-bit
Dynamic priority change---YYY
表 5: NVIC 編程模型和特性差異

大部分情況下,對NVIC的中斷控制特性的操作都是通過CMSIS-CORE提供的APIs處理的,他們在微控制器廠商提供的設(shè)備驅(qū)動程序庫里。對Cortex-M3/M4/M7/M23/M33處理器,即使中斷被使能了,它的優(yōu)先級也可以被改變。ARMv6-M處理器不支持動態(tài)優(yōu)先等級調(diào)整,當(dāng)你需要改變中斷優(yōu)先等級是,需要暫時的關(guān)掉這個中斷。

3.3    操作系統(tǒng)支持特性

Cortex-M處理器架構(gòu)在設(shè)計時就考慮到了操作系統(tǒng)的支持。針對操作系統(tǒng)的特性有:
•    影子堆棧指針
•    系統(tǒng)服務(wù)調(diào)用(SVC)和可掛起系統(tǒng)調(diào)用(PenSV)異常
•    SysTick – 24位遞減計時器,為操作系統(tǒng)的計時和任務(wù)管理產(chǎn)生周期性的異常中斷
•    Cortex-M0+/M3/M4/M7/M23/M33支持的非特權(quán)執(zhí)行和存儲保護(hù)單元(MPU)

系統(tǒng)服務(wù)調(diào)用(SVC)異常由SVC指令觸發(fā),他可以讓運行在非特權(quán)狀態(tài)的應(yīng)用任務(wù)啟動特權(quán)級的操作系統(tǒng)服務(wù)?蓲炱鹣到y(tǒng)調(diào)用異常在操作系統(tǒng)中像上下文切換這樣的非關(guān)鍵操作的調(diào)度非常有幫助。

為了能把Cortex-M1放到很小的FPGA器件中,所有用來支持操作系統(tǒng)的特性對Cortex-M1都是可選的。對Cortex-M0, Cortex-M0+ 和Cortex-M23處理器,系統(tǒng)時鐘SysTick是可選的。

通常,所有的Cortex-M處理器都支持操作系統(tǒng)。執(zhí)行在Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33的應(yīng)用可以運行在非特權(quán)運行狀態(tài),并且可以同時利用可選的存儲器管理單元(MPU)以避免內(nèi)存非法訪問。這可以增強系統(tǒng)的魯棒性。

3.4    TrustZone安全擴展

近幾年來, 物聯(lián)網(wǎng)(IoT)成為了嵌入式系統(tǒng)開發(fā)者們的熱門話題。IoT系統(tǒng)產(chǎn)品變得更加復(fù)雜,上市時間的壓力也與日俱增。嵌入式系統(tǒng)產(chǎn)品需要更好的方案來保證系統(tǒng)的安全,但是同時又要方便軟件開發(fā)者開發(fā)。傳統(tǒng)的方案是通過把軟件分成特權(quán)和非特權(quán)兩部分解決的,特權(quán)級軟件利用MPU防止非特權(quán)的應(yīng)用訪問包含安全敏感信息在內(nèi)的的關(guān)鍵的系統(tǒng)資源。這種方案對一些IoT系統(tǒng)非常適合,但是在一些情況下,只有兩層劃分是不夠的。特別是那些包含很多復(fù)雜特權(quán)級別的軟件組件的系統(tǒng),特權(quán)級的代碼的一個缺陷就可以導(dǎo)致黑客徹底的控制這個系統(tǒng)。

ARMv8-M架構(gòu)包含了一個叫做TrustZone的安全擴展,TrustZone導(dǎo)入了安全和非安全狀態(tài)的正交劃分。

•    普通應(yīng)用是非安全態(tài)
•    軟件組件和安全相關(guān)的資源(例如,安全存儲,加密加速器,正隨機數(shù)發(fā)生器(TRNG))處在安全狀態(tài)。


圖 9: 安全狀態(tài)和非安全狀態(tài)的隔離

非安全狀態(tài)的軟件只能訪問非安全狀態(tài)的存儲空間和外圍設(shè)備,安全軟件可以訪問兩種狀態(tài)下的所有資源。

用這種方案,軟件開發(fā)者可以用以往的方式開發(fā)非安全環(huán)境下的應(yīng)用程序。同時,他們可以借助芯片廠商提供的安全通訊軟件庫執(zhí)行安全物聯(lián)網(wǎng)連接。并且即使運行在非安全環(huán)境的特權(quán)級的程序有漏洞,TrustZone安全機制可以阻止黑客控制整個設(shè)備,限制了攻擊的影響,還可以實現(xiàn)系統(tǒng)遠(yuǎn)程恢復(fù)。此外,ARMv8-M架構(gòu)也引入了堆棧邊界檢查和增強的MPU設(shè)計,促使額外安全措施的采用。

安全架構(gòu)定義也擴展到了系統(tǒng)級別,每個中斷都可以被設(shè)置為安全或者非安全屬性。中斷異常處理程序也會自動保存和恢復(fù)安全環(huán)境中的寄存器數(shù)據(jù)以防止安全信息泄露。所以,TrustZone安全擴展讓系統(tǒng)能夠支持實時系統(tǒng)的需求,為IoT應(yīng)用提供了堅實的安全基礎(chǔ),并且容易讓軟件開發(fā)在此技術(shù)上開發(fā)應(yīng)用程序。

TrustZone模塊對Cortex-M23 and Cortex-M33處理器是可選的。關(guān)于ARMv8-M TrustZone更多的信息請查找The Next Steps in the Evolution of Embedded Processors for the Smart Connected Era。更多的TrustZone的資源請查看community.arm.com網(wǎng)站上的“TrustZone for ARMv8-M Community”。

3.5    錯誤處理

ARM處理器和其他架構(gòu)的微控制器的一個區(qū)別是錯誤處理能力。當(dāng)錯誤被檢測到時,一個錯誤異常處理程序被觸發(fā)去執(zhí)行恰當(dāng)?shù)奶幚。觸發(fā)錯誤的情況可能是:
•    未定義的指令(例如,F(xiàn)lash存儲器損壞)
•    訪問非法地址空間(例如,堆棧指針崩潰)或者M(jìn)PU非法訪問
•    非法操作(例如,當(dāng)處理器已經(jīng)在優(yōu)先級高于SVC的中斷中試圖觸發(fā)SVC異常)

錯誤處理機制使嵌入式系統(tǒng)能夠更快的響應(yīng)各種問題。否則,如果系統(tǒng)死機了,看門狗定時需要非常長的時間重啟系統(tǒng)。

ARMv6-M架構(gòu)中,所有的錯誤事件都會觸發(fā)HardFault處理程序,它的優(yōu)先級是-1(優(yōu)先級比所有的可編程異常都高,但是僅低于非屏蔽中斷NMI)。 所有的錯誤事件都被認(rèn)為是不可恢復(fù)的,通常我們在HardFault處理程序中僅運行錯誤報告然后進(jìn)一步觸發(fā)自動復(fù)位。

ARMv8-M Baseline架構(gòu)和ARMv6-M類似,只有一個錯誤異常(HardFault)。但是ARMv8-M Baseline的HardFault優(yōu)先級可以是-1或者當(dāng)實現(xiàn)了TrustZone安全擴展時優(yōu)先級是-3.

ARMv7-M 和 ARMv8-M Mainline產(chǎn)品除了HardFault還有幾個可配置的錯誤異常:
•    Memmanage(內(nèi)存管理錯誤)
•    總線錯誤(總線返回錯誤的響應(yīng))
•    用法錯誤(未定義指令或者其他的非法操作)
•    SecureFault(只用ARMv8-M Mainline產(chǎn)品支持,處理TrustZone安全擴展中的安全非法操作)

這些異常的優(yōu)先級可以編程改變,可以單獨的打開和關(guān)掉。如果需要,它們也可以利用FAULTMASK寄存器把它們的優(yōu)先級提高到和HardFault相同的級別。ARMv7-M 和 ARMv8-M Mainline產(chǎn)品還有幾個錯誤狀態(tài)寄存器可以提供關(guān)于觸發(fā)錯誤異常事件的線索和錯誤地址的寄存器,用來確定觸發(fā)這個錯誤異常的訪問地址,使調(diào)試更加容易。

ARMv7-M 和 ARMv8-M Mainline產(chǎn)品子規(guī)范中額外的錯誤處理程序提供了靈活的錯誤處理能力,錯誤狀態(tài)寄存器讓錯誤事件的定位和調(diào)試更加容易。很多商業(yè)開發(fā)套件中的調(diào)試器已經(jīng)內(nèi)嵌了使用錯誤狀態(tài)寄存器來診斷錯誤事件的功能。此外,錯誤處理程序可以在運行時做一些修復(fù)工作。

 ARMv6-M (Cortex-M0,  Cortex-M0+, Cortex-M1)ARMv7-M (Cortex-M3, Cortex-M4, Cortex-M7) and  ARMv8-M Mainline (Cortex-M33)
and ARMv8-M Baseline (Cortex-M23)
HardFaultYY
MemManage-Y
Usage Fault-Y
Bus Fault-Y
SecureFault-ARMv8-M Mainline  only
Fault Status Registers-  (one Debug FSR for debug only)Y
Fault Address Register-Y
表 6: 錯誤處理特性比較總結(jié)

4    系統(tǒng)特性

4.1    低功耗

低功耗是Cortex-M處理器的一個關(guān)鍵優(yōu)點。低功耗是其架構(gòu)的組成部分:
•    WFI和WFE指令
•    架構(gòu)級的休眠模式定義

此外,Cortex-M支持許多其他的低功耗特性:
•    休眠和深度休眠模式:架構(gòu)級支持的特性,通過設(shè)備特定的功耗管理寄存器可以進(jìn)一步擴展。
•    Sleep-on-exit模式:中斷驅(qū)動的應(yīng)用的低功耗技術(shù)。開啟設(shè)置后,當(dāng)異常處理程序結(jié)束并且沒有其他等待處理的異常中斷時,處理器自動進(jìn)入到休眠模式。這樣避免了額外的線程模式中指令的執(zhí)行從而省電,并且減少了不必要的堆棧讀寫操作。
•    喚醒中斷控制器(WIC):一個可選的特性,在特定的低功耗狀態(tài),由一個獨立于處理器的小模塊偵測中斷情況。例如,在狀態(tài)保留功耗管理(SRPG)設(shè)計中,當(dāng)處理器被關(guān)電的設(shè)計。
•    時鐘關(guān)閉和架構(gòu)級時鐘關(guān)閉:通過關(guān)閉處理器的寄存器或者子模塊的時鐘輸入來省電
所有這些特性都被Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33支持。此外,各種低功耗設(shè)計技術(shù)被用來降低處理器功耗。

因為更少的電路,Cortex-M0 and Cortex-M0+處理器比Cortex-M3, Cortex-M4 和 Cortex-M7功耗低。此外,Cortex-M0+額外優(yōu)化減少了程序存。ɡ缣D(zhuǎn)備份)來保持系統(tǒng)層級的低功耗。

Cortex-M23沒有Cortex-M0 和 Cortex-M0+那么小,但是在相同的配置下,仍然和Cortex-M0+能效一樣。
由于更好性能和低功耗優(yōu)化,在相同配置下,Cortex-M33比Cortex-M4能效比更好。

4.2    Bit-band feature位段

Cortex-M3 和Cortex-M4處理器支持一個叫做位段的可選功能,允許有兩段通過位段別名地址實現(xiàn)可以位尋址的1MB的地址空間(一段在從地址0x20000000起始的SRAM空間。另一段是從地址0x40000000起始的外圍設(shè)備空間)。Cortex-M0, M0+ 和 Cortex-M1不支持位段(bit-band)功能,但是可以利用ARM Cortex-M系統(tǒng)設(shè)計套件(CMSDK)中的總線級組件在系統(tǒng)層面實現(xiàn)位段(bit-band)功能。Cortex-M7不支持位段(bit-band),因為M7的Cache功能不能與位段一塊使用(Cache控制器不知道內(nèi)存空間的別名地址)。

ARMv8-M的TrustZone 不支持位段, 這是由于位段別名需要的兩個不同的地址可能會在不同的安全域中。對于這些系統(tǒng),外圍設(shè)備數(shù)據(jù)的位操作反而可以在外圍設(shè)備層面處理(例如,通過添加位設(shè)置和清除寄存器)。

4.3    存儲器保護(hù)單元(MPU)

除了Cortex-M0, 其他的Cortex-M處理器都有可選的MPU來實現(xiàn)存儲空間訪問權(quán)限和存儲空間屬性或者存儲區(qū)間的定義。運行實時操作系統(tǒng)的嵌入式系統(tǒng), 操作系統(tǒng)會每個任務(wù)定義存儲空間訪問權(quán)限和內(nèi)存空間配置來保證每個任務(wù)都不會破壞其他的任務(wù)或者操作系統(tǒng)內(nèi)核的地址空間。Cortex-M0+, Cortex-M3 和 Cortex-M4都有8個可編程區(qū)域空間和非常相似的編程模型。主要的區(qū)別是Cortex-M3/M4的MPU允許兩級的存儲空間屬性(例如,系統(tǒng)級cache類型),Cortex-M0+僅支持一級。Cortex-M7的MPU可以配置成支持8個或者16個區(qū)域,兩級的存儲空間屬性。Cortex-M0 和 Cortex-M1不支持MPU.

Cortex-M23 和 Cortex-M33也支持MPU選項,如果實現(xiàn)了TrustZone安全擴展(一個用于安全軟件程序,另一個用于非安全軟件程序)可以有最多兩個MPU。

4.4    單周期I/O接口

單周期I/O接口是Cortex-M0+處理器獨特的功能,這使Cortex-M0+可以很快的運行I/O控制任務(wù)。Cortex-M大多數(shù)的處理器的總線接口是基于AHB Lite或者AHB 5協(xié)議的,這些接口都是流水實現(xiàn)總線協(xié)議,運行在高時鐘頻率。但是,這意味著每個傳輸需要兩個時鐘周期。單時鐘周期I/O接口添加了額外的簡單的非流水線總線接口,連接到像GPIO(通用輸入輸出)這樣的一部分設(shè)備特定的外設(shè)上。結(jié)合單周期I/O和Cortex-M0+天然比較低的跳轉(zhuǎn)代價(只有兩級流水線),許多I/O控制操作都會比大多數(shù)其他微控制器架構(gòu)的產(chǎn)品運行的更快。

5    性能考慮


5.1    通用數(shù)據(jù)處理能力

在通用微控制器市場,benchmark數(shù)據(jù)經(jīng)常用來衡量微控制器的性能,表7是Cortex-M處理器常用benchmark測試的性能數(shù)據(jù):

 Dhrystone  DMIPS/MHz (v2.1) – officialDhrystone  DMIPS/MHz (v2.1) – full optimizationCoremark/MHz  (v1.0)
Cortex-M0
0.84
1.21
2.33
Cortex-M0+
0.94
1.31
2.42
Cortex-M3
1.25
1.89
3.32
Cortex-M4
1.25
1.95
3.4
Cortex-M7
2.14
2.55
5.01
Cortex-M23
0.98
-
2.5
Cortex-M33
1.5
-
3.86
表 7: Cortex-M處理器常用benchmakr的性能分?jǐn)?shù)
(來源:CoreMark.org 網(wǎng)站 and ARM 網(wǎng)站)

關(guān)于Dhrystone需要注意的是用來測試的Dhrystone是由官方源程序在沒有啟用inline and 和multi-file compilation編譯選項的情況編譯出來的(官方分?jǐn)?shù))。但是,很多微控制器廠商引用的是完全優(yōu)化編譯的Dhrystone測試出來的數(shù)據(jù)。

但是,benchmark工具的性能測試數(shù)據(jù)可能無法準(zhǔn)確反應(yīng)你的應(yīng)用能達(dá)到的性能。例如,單周期I/O接口和DSP應(yīng)用中使用SIMD,或者Cortex-M4/M7中使用FPU的加速效果并沒有在這些測試數(shù)據(jù)中體現(xiàn)出來。

通常,Cortex-M3 和 Cortex-M4由于以下原因提供了更高的數(shù)據(jù)處理性能:
•    更豐富的指令集
•    哈佛總線架構(gòu)
•    寫緩存(單周期寫操作)
•    跳轉(zhuǎn)目標(biāo)的預(yù)測取指

Cortex-M33也是基于哈佛總線的架構(gòu),有豐富的指令集。但是不像Cortex-M3 和 Cortex-M4,Cortex-M33處理器流水線是重新設(shè)計的高效流水線,支持有限的指令雙發(fā)射(可以在一個時鐘周期中執(zhí)行最多兩條指令)。

Cortex-M7支持更高的性能,這是因為M7擁有雙發(fā)射六級流水線并支持分支預(yù)測。而且,通過支持指令和數(shù)據(jù)Cache,和即便使用慢速內(nèi)存(例如,嵌入式Flash)也能避免性能損失的緊耦合內(nèi)存,來實現(xiàn)更高的系統(tǒng)級性能。

但是,某些I/O操作密集的任務(wù)在Cortex-M0+上運行更快,這是因為:
•    更短的流水線(跳轉(zhuǎn)只需要兩個周期)
•    單周期I/O端口
當(dāng)然也有設(shè)備相關(guān)的因素。例如,系統(tǒng)級設(shè)計,內(nèi)存的速度也會影響到系統(tǒng)的性能。

你自己的應(yīng)用程序經(jīng)常是你需要的最好的benchmark。CoreMark分?jǐn)?shù)是另外一個處理器兩倍的處理器并不意味著執(zhí)行你的應(yīng)用也快一倍。對I/O密集操作的應(yīng)用來說,設(shè)備相關(guān)的系統(tǒng)級架構(gòu)對性能有巨大的影響。

5.2    中斷延遲

性能相關(guān)的另外一個指標(biāo)是中斷延遲。這通常用從中斷請求到中斷服務(wù)程序第一條指令執(zhí)行的時鐘周期數(shù)來衡量。表8列出了Cortex-M處理器在零等待內(nèi)存系統(tǒng)條件下的中斷延遲比較。

 Interrupt latency  (number of clock cycles)
Cortex-M0
16
Cortex-M0+
15
Cortex-M23
15
Cortex-M3
12
Cortex-M4
12
Cortex-M7Typically 12,  worst case 14
Cortex-M33
12
表 8: 零等待內(nèi)存系統(tǒng)條件下的中斷延遲比較

事實上,真正的中斷延遲受到內(nèi)存系統(tǒng)等待狀態(tài)的影響。例如,許多運行頻率超過100Mhz的微控制器搭配的是非常慢的Flash存儲器(例如30到50MHz)。雖然使用了Flash訪問加速硬件來提高性能,中斷延遲仍然受到Flash存儲系統(tǒng)等待狀態(tài)的影響。所以完全有可能運行在零等待內(nèi)存系統(tǒng)Cortex-M0/M0+系統(tǒng)比Cortex-M3/M4/M7有更短的中斷延遲。

當(dāng)評估性能的時候,不要忘記把中斷處理程序的執(zhí)行時間考慮在內(nèi)。某些8位或者16位處理器架構(gòu)可能中斷延遲很短,但是會花費數(shù)倍的時鐘周期完成中斷處理。非常短的中斷響應(yīng)時間和很短的中斷處理時間才是實際有效的。

6    調(diào)試和跟蹤特性

6.1    調(diào)試和跟蹤特性簡介

不同Cortex-M處理器之間有若干區(qū)別?偨Y(jié)在表9中。

 Cortex-M0/M1Cortex-M0+Cortex-M3/M4Cortex-M7Cortex-M23Cortex-M33
Protocol of debug connectionJTAG / Serial  WireJTAG / Serial  WireJTAG / Serial  Wire / bothJTAG / Serial  WireJTAG / Serial  WireJTAG / Serial  Wire
Protocol of trace connection--Trace port (4 pin  data + clock) / Serial Wire Viewer (SWV, one pin)Trace port (4 pin  data + clock) / Serial Wire Viewer (SWV, 1 pin)Trace port (4 pin  data + clock) / Serial Wire Viewer (SWV, 1 pin)Trace port (4 pin  data + clock) / Serial Wire Viewer (SWV, 1 pin)
Hardware Breakpoint comparatorsUp to 4Up to 4Up to 8 (6 for  instruction addresses, 2 literal addresses)Up to 8 (all for  instruction addresses)Up to 4Up to 8 (all for  instruction addresses)
Software breakpoint (bkpt instruction)YYYYYY
Data Watchpoint comparatorsUp to 2Up to 2Up to 4Up to 4Up to 4Up to 4
Instruction Trace-Limited history  using MTBETM trace with  unlimited historyETM trace with  unlimited historyETM / MTBETM / MTB
Data Trace--Selective data  trace using DWTSelective data  trace using DWT, full data trace via ETM (optional)-Selective data  trace using DWT
Event & profiling Trace--Using DWTUsing DWT-Using DWT
Instrumentation (Software) trace--Instrumentation  Trace Macrocell (ITM)Instrumentation  Trace Macrocell (ITM)-Instrumentation  Trace Macrocell (ITM)
Trace timestamp--YYY (ETM)Y
On the fly memory accessesYYYYYY
Debug using software agent (Debug monitor)--YY-Y
Multi-core debug synchronizationYYYYYY
PC samplingY (via debug  connection)Y (via debug  connection)Y (via debug  connection or by trace)Y (via debug  connection or by trace)Y (via debug  connection)Y (via debug  connection or by trace)
表9: 調(diào)試和跟蹤特性比較

Cortex-M處理器的調(diào)試架構(gòu)是基于ARM CoreSight調(diào)試架構(gòu)設(shè)計的,它是個非常容易擴展的架構(gòu),支持多處理器系統(tǒng)。

表9列出的是典型設(shè)計需要考慮的。在CoreSight架構(gòu)下,調(diào)試接口和跟蹤接口模塊是和處理器分離的。因此你采用的設(shè)備的調(diào)試和跟蹤連接和表9的可能不一樣。也可能通過添加一些額外的CoreSight調(diào)試組件來增加一些調(diào)試特性。

6.2    Debug connections調(diào)試接口

調(diào)試接口可以讓調(diào)試者實現(xiàn)
-    訪問控制調(diào)試和跟蹤特性的寄存器。
-    訪問內(nèi)存空間。對Cortex-M系列處理器,及時當(dāng)處理器運行時也可以執(zhí)行內(nèi)存空間訪問。這被稱作實時內(nèi)存訪問。
-    訪問處理器核心寄存器。這只能當(dāng)處理器停止的時候才可以操作。
-    訪問Cortex-M0處理器中微跟蹤緩存(MTB)生成的跟蹤歷史記錄。
另外,調(diào)試接口也會用作:
-    Flash 編程

Cortex-M系列處理器可以選擇傳統(tǒng)的4到5個引腳(TDI, TDO, TCK, TMS 和可選的 nTRST)的JTAG接口,或者選擇新的只需要兩個引腳的串行調(diào)試協(xié)議接口,串行調(diào)試接口對有限數(shù)目引腳的設(shè)備是非常適合的。


圖 10: 串口線或者JTAG調(diào)試接口allows access to processor’s debug features and memory space including peripherals

串行線調(diào)試協(xié)議接口可以處理JTAG支持的所有特性,支持奇偶校驗。串行調(diào)試協(xié)議被ARM工具廠商廣泛的采用,許多調(diào)試適配器兩種協(xié)議都支持,串行線型號共享調(diào)試接口上TCK和TMS針腳。

6.3    跟蹤接口

跟蹤接口讓調(diào)試者可以在程序執(zhí)行時實時的(很小的延時)收集程序運行的信息。收集的信息可以是Cortex-M3/M4/M7/M33支持的嵌入式跟蹤單元(ETM)生成的程序指令流信息(指令跟蹤),可以是數(shù)據(jù)跟蹤單元(DWT)生成的數(shù)據(jù)/事件/性能分析信息,或者是軟件控制數(shù)據(jù)跟蹤單元(ITM)生成的信息。

有兩種類型的跟蹤接口可用:
-    跟蹤端口(Trace port)– 多個數(shù)據(jù)線加上時鐘信號線。比SWV有更高的跟蹤帶寬,可以支持SWV的所有跟蹤類型加上指令跟蹤。Cortex-M3/M4/M7或者 Cortex-M33的設(shè)備上,跟蹤端口通常有4個數(shù)據(jù)線和一個時鐘線。(圖11)
-    串行監(jiān)視器(SWV)– 單引腳線跟蹤接口,可以選擇性的支持?jǐn)?shù)據(jù)跟蹤,事件跟蹤,性能分析和測量跟蹤。(圖 12)


圖 11: Trace port 支持指令跟蹤和其他跟蹤功能必要的帶寬

跟蹤接口提供了在處理器運行的時候獲取大量有用信息的能力。例如嵌入式跟蹤單元(ETM)可以獲取指令運行歷史記錄,數(shù)據(jù)跟蹤單元(ITM)讓軟件產(chǎn)生消息(例如,通過printf)并利用Trace接口獲取。另外,Cortex-M3/M4/M7/M33支持?jǐn)?shù)據(jù)跟蹤單元(DWT)模塊。

-    可選的數(shù)據(jù)跟蹤:內(nèi)存地址的信息(例如,地址,數(shù)據(jù)和時間戳的組合)可以在處理器訪問這個地址的時候采集
-    性能分析跟蹤:CPU在不同操作任務(wù)使用的時鐘周期數(shù)(例如,內(nèi)存訪問,休眠)
-    事件跟蹤:提供服務(wù)器響應(yīng)的中斷/異常的運行時間和歷史


圖 12: Serial wire viewer 提供了低成本,少引腳的跟蹤方案

這些跟蹤特性被各種工具廠商廣泛采用,采集的信息也被以各種方式直觀的展現(xiàn)出來。例如DWT獲取的數(shù)據(jù)可以在Keil µVision調(diào)試器中以波形的方式展現(xiàn)出來(Keil微控制器開發(fā)工具的一部分)如圖 13所示。


Figure 13: Keil µVision 調(diào)試器的邏輯分析器

雖然Cortex-M0 和 Cortex-M0+不支持跟蹤接口,Cortex-M0+支持叫做微跟蹤緩存的特性(MTB,圖14)。MTB讓用戶分配一小塊系統(tǒng)SRAM作為存儲指令的緩存,通常設(shè)置為循環(huán)緩存,這樣可以抓取最新的指令執(zhí)行歷史并在調(diào)試器上顯示出來。

這個MTB跟蹤特性也被Cortex-M23 and Cortex-M33支持。


圖 14: Cortex-M0+/M23/M33 的MTB提供了低成本指令跟蹤方案

7    基于Cortex-M處理器的產(chǎn)品開發(fā)

7.1    為什么Cortex-M系列處理器容易使用

雖然Cortex-M系列處理器有非常多的特性,但是很容易使用的。例如,差不多所有的開發(fā)都可以用像C語言這樣的高級編程語言。雖然,基于Cortex-M系列處理器產(chǎn)品都大不相同(例如,有不同大小的內(nèi)存,不同的外設(shè),性能和封裝等等),架構(gòu)的一致性讓開發(fā)者一旦對他們其中的一塊有開發(fā)經(jīng)驗,就很容易開始使用新的Cortex-M處理器。

為了實現(xiàn)更容易的軟件開發(fā),更好的軟件重用性和可移植性,ARM開發(fā)了CMSIS-CORE,這兒CMSIS表示Cortex-Microcontroller Software Interface Standard,CMSIS-CORE通過一組APIs為處理器的各種特性像終端管理控制提供了一個標(biāo)準(zhǔn)的硬件抽象層(HAL), CMSIS-CORE集成在各種微處理器廠商提供的設(shè)備驅(qū)動程序庫里,被各種開發(fā)工具套件支持。

除了CMSIS-CORE, CMSIS還包含一個DSP軟件庫(CMSIS-DSP)。這個庫提供了為Cortex-M4 和 Cortex-M7優(yōu)化過的各種DSP函數(shù),當(dāng)然也支持其他的Cortex-M系列處理器。CMSIS-CORE 和 CMSIS-DSP庫都是免費的,可以從GitHub (CMSIS 4, CMSIS 5)下載到,并被許多工具廠商支持。

7.2    處理器選擇

對大多數(shù)微控制器用戶來說,微控制器設(shè)備的選擇標(biāo)準(zhǔn)主要取決于成本和外設(shè)的支持情況。但是,你們中間的很多人可能是為下個芯片產(chǎn)品選擇處理器核心芯片設(shè)計者,這種情況下,處理器 本身會是考慮的焦點。

明顯的,在這樣的情況下,性能,芯片面積,功耗和成本會是至關(guān)重要的因素。同時,還有各種其他的因素需要考慮。例如,如果你在開發(fā)一款互聯(lián)網(wǎng)連接產(chǎn)品,你也許需要選擇有TrustZone安全擴展和MPU的處理器,這樣你可以用TrustZone保護(hù)關(guān)鍵的安全特性數(shù)據(jù),運行某些任務(wù)在非特權(quán)級別并用MPU來保護(hù)內(nèi)存空間。另一方面,如果你需要在某些方面認(rèn)證你的產(chǎn)品,Cortex-M23, Cortex-M33, Cortex-M3, Cortex-M4 和 Cortex-M7支持的ETM生成的指令跟蹤會對代碼覆蓋率認(rèn)證非常有幫助。

在其他的芯片設(shè)計領(lǐng)域,如果你正在設(shè)計可以運行在能量采集設(shè)備供電的小傳感器,那么Cortex-M23 和 Cortex-M0+會是最好的選擇,因為他們非常小并且做了最先進(jìn)的功耗優(yōu)化。

7.3    生態(tài)系統(tǒng)

使用ARM Cortex-M系列處理器的關(guān)鍵優(yōu)勢之一是廣泛的成熟設(shè)備,開發(fā)工具鏈和軟件庫的支持。目前有
-    超過15家微控制器廠商正在銷售基于ARM Cortex-M系列內(nèi)核的微控制器產(chǎn)品
-    超過10種開發(fā)套件支持ARM Cortex-M系列處理器
-    40多家操作系統(tǒng)廠商的操作系統(tǒng)支持Cortex-M系列處理器

這給了你大量選擇,讓你可以獲得適合目標(biāo)應(yīng)用的最好的設(shè)備,開發(fā)工具和中間件組合。

8    總結(jié)


性能,特性和芯片面積,功耗之間總是需要平衡。為此,ARM開發(fā)了各種Cortex-M處理器,擁有不同級別的指令集特性,性能,系統(tǒng)和調(diào)試特性。本文介紹了Cortex-M處理器家族各種異同。

雖然存在這差別,但架構(gòu)的一致性和CMSIS-CORE標(biāo)準(zhǔn)化的APIs都讓Cortex-M系列處理器軟件有更好的移植性和可重用性。同時,Cortex-M系列處理器非常方便使用。因此,Cortex-M系列處理器很快成為微控制器市場的最受歡迎的32位處理器架構(gòu)。

額外的資源

Cortex-M系列處理器產(chǎn)品信息可以查找https://developer.arm.com/products/processors/cortex-m
一系列有用的Cortex-M資源存在下面的網(wǎng)址https://community.arm.com/proces ... /cortex-m-resources

關(guān)于ARMv8-M TrustZone的其他的有用的資源可以查找ARM社區(qū)(community.arm.com)的“TrustZone for ARMv8-M Community”。ARM社區(qū)是為開發(fā)者和開發(fā)工具廠商,產(chǎn)品方案商之間提供的一個免費的,開放的,非正式的交流區(qū)

本文中出現(xiàn)的商標(biāo)是ARM有限公司(或其子公司)在歐盟和/或其他地方注冊的/或未注冊的商標(biāo)。保留所有權(quán)利。文中所有其他標(biāo)志可能是其他所有人的商標(biāo)。欲了解更多信息,請訪問arm.com/about/trademarks。

本文地址:http://m.54549.cn/thread-361479-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時間更正或刪除。
bijinyi 發(fā)表于 2018-6-1 10:47:47
學(xué)習(xí)了!
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表