Cortex-M處理器
Cortex-M是愛特梅爾公司發(fā)布的全新Atmel SAM D20微控制器,采用的是是全球微控制器標準。
Cortex-M 處理器家族
Cortex-M處理器家族更多的集中在低性能端,但是這些處理器相比于許多微控制器使用的傳統(tǒng)處理器性能仍然很強大。例如,Cortex-M4和Cortex-M7處理器應用在許多高性能的微控制器產(chǎn)品中,最大的時鐘頻率可以達到400Mhz。
當然,性能不是選擇處理器的唯一指標。在許多應用中,低功耗和成本是關(guān)鍵的選擇指標。因此,Cortex-M處理器家族包含各種產(chǎn)品來滿足不同的需求:
Cortex-M系列處理器的共同特性
Cortex-M0, M0+, M3, M4 and M7之間有很多的相似之處,例如:
- 基本編程模型
- 嵌套向量中斷控制器(NVIC)的中斷響應管理
- 架構(gòu)設計的休眠模式:睡眠模式和深度睡眠模式
- 操作系統(tǒng)支持特性
- 調(diào)試功能
- 易用性
例如,嵌套向量中斷控制器是內(nèi)置的中斷控制器
支持許多外圍設備的中斷輸入,一個不可屏蔽的中斷請求,一個來自內(nèi)置時鐘(SysTick)的中斷請求和一定數(shù)量的系統(tǒng)異常請求。NVIC處理這些中斷和異常的優(yōu)先級和屏蔽管理。
NVIC以及異常處理模型的更多的內(nèi)容在章節(jié)3.2描述。其他Cortex-M處理器間的異同點會在本文的其余部分講解。
Cortex-M系列處理器架構(gòu)特性
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通常用在復雜的錯誤處理上(查看章節(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)寄存器)的細節(jié)。所有的Cortex-M處理器,PSR寄存器都被再分成應用程序狀態(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指令)。
2、異常處理模型和嵌套向量中斷控制器NVIC
所有的Cortex-M處理器都包含了NVIC模塊,采用同樣的異常處理模型。如果一個異常中斷發(fā)生,它的優(yōu)先等級高于當前運行等級,并且沒有被任何的中斷屏蔽寄存器屏蔽,處理器會響應這個中斷/異常,把某些寄存器入棧到當前的堆棧上。這種堆棧機制下,中斷處理程序可以編寫為一個普通的C函數(shù),許多小的中斷處理函數(shù)可以立即直接響應工作而不需要額外的堆棧處理花銷。
一些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(錯誤處理細節(jié)請參看章節(jié)3.4)。相比之下,Cortex-M23, Cortex-M3, Cortex-M4 和Cortex-M7處理器可以支持到多達240個外圍設備中斷。Cortex-M33支持最多480個中斷。
另外一個區(qū)別是可以使用的優(yōu)先等級數(shù)量:
ARMv6-M 架構(gòu) - ARMv6-M支持2級固定的(NMI 和 HardFault)和4級可編程的(由每個優(yōu)先等級寄存器的兩個位表示)中斷/異常優(yōu)先級。這對大多數(shù)的微控制器應用來說足夠了。
ARMv7-M 架構(gòu) - ARMv7-M系列處理器的可編程優(yōu)先級等級數(shù)范圍,根據(jù)面積的限制,可以配置成8級(3位)到256級(8位)。ARMv7-M處理器還有一個叫做中斷優(yōu)先級分組的功能,可以把中斷優(yōu)先級寄存器再進一步分為組優(yōu)先級和子優(yōu)先級,這樣可以詳細地制定搶占式優(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: 向量表默認放在存儲空間的起始地址(地址 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的初始值由芯片設計者定義。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)了,向量表的起始地址可以通過設置VTOR來改變,這個功能對下列情況有用:
· 重定位向量表到SRAM來實現(xiàn)動態(tài)改變異常處理函數(shù)入口點
· 重定位向量表到SRAM來實現(xiàn)更快的向量讀?。ㄈ绻鹒lash存儲器很慢)
· 重定位向量表到ROM不同位置(或者Flash),不同的程序運行階段可以有不同的異常處理程序
不同的Cortex-M處理器之間的NVIC編程模型也有額外的不同。差異點總結(jié)在表 5中:
表 5: NVIC 編程模型和特性差異
大部分情況下,對NVIC的中斷控制特性的操作都是通過CMSIS-CORE提供的APIs處理的,他們在微控制器廠商提供的設備驅(qū)動程序庫里。對Cortex-M3/M4/M7/M23/M33處理器,即使中斷被使能了,它的優(yōu)先級也可以被改變。ARMv6-M處理器不支持動態(tài)優(yōu)先等級調(diào)整,當你需要改變中斷優(yōu)先等級是,需要暫時的關(guān)掉這個中斷。
3、操作系統(tǒng)支持特性
Cortex-M處理器架構(gòu)在設計時就考慮到了操作系統(tǒng)的支持。針對操作系統(tǒng)的特性有:
影子堆棧指針
系統(tǒng)服務調(diào)用(SVC)和可掛起系統(tǒng)調(diào)用(PenSV)異常
SysTick – 24位遞減計時器,為操作系統(tǒng)的計時和任務管理產(chǎn)生周期性的異常中斷
Cortex-M0+/M3/M4/M7/M23/M33支持的非特權(quán)執(zhí)行和存儲保護單元(MPU)
系統(tǒng)服務調(diào)用(SVC)異常由SVC指令觸發(fā),他可以讓運行在非特權(quán)狀態(tài)的應用任務啟動特權(quán)級的操作系統(tǒng)服務。可掛起系統(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的應用可以運行在非特權(quán)運行狀態(tài),并且可以同時利用可選的存儲器管理單元(MPU)以避免內(nèi)存非法訪問。這可以增強系統(tǒng)的魯棒性。
4、TrustZone安全擴展
近幾年來, 物聯(lián)網(wǎng)(IoT)成為了嵌入式系統(tǒng)開發(fā)者們的熱門話題。IoT系統(tǒng)產(chǎn)品變得更加復雜,上市時間的壓力也與日俱增。嵌入式系統(tǒng)產(chǎn)品需要更好的方案來保證系統(tǒng)的安全,但是同時又要方便軟件開發(fā)者開發(fā)。傳統(tǒng)的方案是通過把軟件分成特權(quán)和非特權(quán)兩部分解決的,特權(quán)級軟件利用MPU防止非特權(quán)的應用訪問包含安全敏感信息在內(nèi)的的關(guān)鍵的系統(tǒng)資源。這種方案對一些IoT系統(tǒng)非常適合,但是在一些情況下,只有兩層劃分是不夠的。特別是那些包含很多復雜特權(quán)級別的軟件組件的系統(tǒng),特權(quán)級的代碼的一個缺陷就可以導致黑客徹底的控制這個系統(tǒng)
ARMv8-M架構(gòu)包含了一個叫做TrustZone的安全擴展,TrustZone導入了安全和非安全狀態(tài)的正交劃分。
普通應用是非安全態(tài)
軟件組件和安全相關(guān)的資源(例如,安全存儲,加密加速器,正隨機數(shù)發(fā)生器(TRNG))處在安全狀態(tài)。
圖 9: 安全狀態(tài)和非安全狀態(tài)的隔離
非安全狀態(tài)的軟件只能訪問非安全狀態(tài)的存儲空間和外圍設備,安全軟件可以訪問兩種狀態(tài)下的所有資源。
用這種方案,軟件開發(fā)者可以用以往的方式開發(fā)非安全環(huán)境下的應用程序。同時,他們可以借助芯片廠商提供的安全通訊軟件庫執(zhí)行安全物聯(lián)網(wǎng)連接。并且即使運行在非安全環(huán)境的特權(quán)級的程序有漏洞,TrustZone安全機制可以阻止黑客控制整個設備,限制了攻擊的影響,還可以實現(xiàn)系統(tǒng)遠程恢復。此外,ARMv8-M架構(gòu)也引入了堆棧邊界檢查和增強的MPU設計,促使額外安全措施的采用。
安全架構(gòu)定義也擴展到了系統(tǒng)級別,每個中斷都可以被設置為安全或者非安全屬性。中斷異常處理程序也會自動保存和恢復安全環(huán)境中的寄存器數(shù)據(jù)以防止安全信息泄露。所以,TrustZone安全擴展讓系統(tǒng)能夠支持實時系統(tǒng)的需求,為IoT應用提供了堅實的安全基礎,并且容易讓軟件開發(fā)在此技術(shù)上開發(fā)應用程序。
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”
系統(tǒng)特性
1、低功耗
低功耗是Cortex-M處理器的一個關(guān)鍵優(yōu)點。低功耗是其架構(gòu)的組成部分:
? WFI和WFE指令
? 架構(gòu)級的休眠模式定義
此外,Cortex-M支持許多其他的低功耗特性:
? 休眠和深度休眠模式:架構(gòu)級支持的特性,通過設備特定的功耗管理寄存器可以進一步擴展。
? Sleep-on-exit模式:中斷驅(qū)動的應用的低功耗技術(shù)。開啟設置后,當異常處理程序結(jié)束并且沒有其他等待處理的異常中斷時,處理器自動進入到休眠模式。這樣避免了額外的線程模式中指令的執(zhí)行從而省電,并且減少了不必要的堆棧讀寫操作。
? 喚醒中斷控制器(WIC):一個可選的特性,在特定的低功耗狀態(tài),由一個獨立于處理器的小模塊偵測中斷情況。例如,在狀態(tài)保留功耗管理(SRPG)設計中,當處理器被關(guān)電的設計。
? 時鐘關(guān)閉和架構(gòu)級時鐘關(guān)閉:通過關(guān)閉處理器的寄存器或者子模塊的時鐘輸入來省電
所有這些特性都被Cortex-M0, Cortex-M0+, Cortex-M3, Cortex-M4, Cortex-M7, Cortex-M23 和 Cortex-M33支持。此外,各種低功耗設計技術(shù)被用來降低處理器功耗。
因為更少的電路,Cortex-M0 and Cortex-M0+處理器比Cortex-M3, Cortex-M4 和 Cortex-M7功耗低。此外,Cortex-M0+額外優(yōu)化減少了程序存取(例如跳轉(zhuǎn)備份)來保持系統(tǒng)層級的低功耗。
Cortex-M23沒有Cortex-M0和 Cortex-M0+那么小,但是在相同的配置下,仍然和Cortex-M0+能效一樣。
由于更好性能和低功耗優(yōu)化,在相同配置下,Cortex-M33比Cortex-M4能效比更好。
2、 Bit-band feature位段
Cortex-M3 和Cortex-M4處理器支持一個叫做位段的可選功能,允許有兩段通過位段別名地址實現(xiàn)可以位尋址的1MB的地址空間(一段在從地址0×20000000起始的SRAM空間。另一段是從地址0×40000000起始的外圍設備空間)。Cortex-M0, M0+ 和 Cortex-M1不支持位段(bit-band)功能,但是可以利用ARM Cortex-M系統(tǒng)設計套件(CMSDK)中的總線級組件在系統(tǒng)層面實現(xiàn)位段(bit-band)功能。Cortex-M7不支持位段(bit-band),因為M7的Cache功能不能與位段一塊使用(Cache控制器不知道內(nèi)存空間的別名地址)。
ARMv8-M的TrustZone 不支持位段,這是由于位段別名需要的兩個不同的地址可能會在不同的安全域中。對于這些系統(tǒng),外圍設備數(shù)據(jù)的位操作反而可以在外圍設備層面處理(例如,通過添加位設置和清除寄存器)。
3、存儲器保護單元(MPU)
除了Cortex-M0, 其他的Cortex-M處理器都有可選的MPU來實現(xiàn)存儲空間訪問權(quán)限和存儲空間屬性或者存儲區(qū)間的定義。運行實時操作系統(tǒng)的嵌入式系統(tǒng),操作系統(tǒng)會每個任務定義存儲空間訪問權(quán)限和內(nèi)存空間配置來保證每個任務都不會破壞其他的任務或者操作系統(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、單周期I/O接口
單周期I/O接口是Cortex-M0+處理器獨特的功能,這使Cortex-M0+可以很快的運行I/O控制任務。Cortex-M大多數(shù)的處理器的總線接口是基于AHB Lite或者AHB 5協(xié)議的,這些接口都是流水實現(xiàn)總線協(xié)議,運行在高時鐘頻率。但是,這意味著每個傳輸需要兩個時鐘周期。單時鐘周期I/O接口添加了額外的簡單的非流水線總線接口,連接到像GPIO(通用輸入輸出)這樣的一部分設備特定的外設上。結(jié)合單周期I/O和Cortex-M0+天然比較低的跳轉(zhuǎn)代價(只有兩級流水線),許多I/O控制操作都會比大多數(shù)其他微控制器架構(gòu)的產(chǎn)品運行的更快。
調(diào)試和跟蹤特性
不同Cortex-M處理器之間有若干區(qū)別??偨Y(jié)在表9中。
Cortex-M處理器的調(diào)試架構(gòu)是基于ARM CoreSight調(diào)試架構(gòu)設計的,它是個非常容易擴展的架構(gòu),支持多處理器系統(tǒng)。
表9列出的是典型設計需要考慮的。在CoreSight架構(gòu)下,調(diào)試接口和跟蹤接口模塊是和處理器分離的。因此你采用的設備的調(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系列處理器,及時當處理器運行時也可以執(zhí)行內(nèi)存空間訪問。這被稱作實時內(nèi)存訪問。
- 訪問處理器核心寄存器。這只能當處理器停止的時候才可以操作。
- 訪問Cortex-M0處理器中微跟蹤緩存(MTB)生成的跟蹤歷史記錄。
另外,調(diào)試接口也會用作:
- Flash 編程
Cortex-M系列處理器可以選擇傳統(tǒng)的4到5個引腳(TDI, TDO, TCK, TMS 和可選的 nTRST)的JTAG接口,或者選擇新的只需要兩個引腳的串行調(diào)試協(xié)議接口,串行調(diào)試接口對有限數(shù)目引腳的設備是非常適合的。
串行線調(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的設備上,跟蹤端口通常有4個數(shù)據(jù)線和一個時鐘線。(圖11)
- 串行監(jiān)視器(SWV)–單引腳線跟蹤接口,可以選擇性的支持數(shù)據(jù)跟蹤,事件跟蹤,性能分析和測量跟蹤。(圖 12)
跟蹤接口提供了在處理器運行的時候獲取大量有用信息的能力。例如嵌入式跟蹤單元(ETM)可以獲取指令運行歷史記錄,數(shù)據(jù)跟蹤單元(ITM)讓軟件產(chǎn)生消息(例如,通過printf)并利用Trace接口獲取。另外,Cortex-M3/M4/M7/M33支持數(shù)據(jù)跟蹤單元(DWT)模塊。
- 可選的數(shù)據(jù)跟蹤:內(nèi)存地址的信息(例如,地址,數(shù)據(jù)和時間戳的組合)可以在處理器訪問這個地址的時候采集
- 性能分析跟蹤:CPU在不同操作任務使用的時鐘周期數(shù)(例如,內(nèi)存訪問,休眠)
- 事件跟蹤:提供服務器響應的中斷/異常的運行時間和歷史
這些跟蹤特性被各種工具廠商廣泛采用,采集的信息也被以各種方式直觀的展現(xiàn)出來。例如DWT獲取的數(shù)據(jù)可以在Keil μVision調(diào)試器中以波形的方式展現(xiàn)出來(Keil微控制器開發(fā)工具的一部分)如圖 13所示。
雖然Cortex-M0 和 Cortex-M0+不支持跟蹤接口,Cortex-M0+支持叫做微跟蹤緩存的特性(MTB,圖14)。MTB讓用戶分配一小塊系統(tǒng)SRAM作為存儲指令的緩存,通常設置為循環(huán)緩存,這樣可以抓取最新的指令執(zhí)行歷史并在調(diào)試器上顯示出來。
這個MTB跟蹤特性也被Cortex-M23 and Cortex-M33支持。
總結(jié)
性能,特性和芯片面積,功耗之間總是需要平衡。為此,ARM開發(fā)了各種Cortex-M處理器,擁有不同級別的指令集特性,性能,系統(tǒng)和調(diào)試特性。本文介紹了Cortex-M處理器家族各種異同。
雖然存在這差別,但架構(gòu)的一致性和CMSIS-CORE標準化的APIs都讓Cortex-M系列處理器軟件有更好的移植性和可重用性。同時,Cortex-M系列處理器非常方便使用。因此,Cortex-M系列處理器很快成為微控制器市場的最受歡迎的32位處理器架構(gòu)。
評論