當(dāng)前位置:首頁 > 嵌入式 > 嵌入式硬件
[導(dǎo)讀]Cortex-M處理器家族的編程模型是高度一致的。例如所有的Crotex-M處理器都支持R0到R15,PSR, CONTROL 和 PRIMASK。兩個(gè)特殊的寄存器— FAULTMASK 和 BASEPRI—只有Cortex-M3, Cortex-M4, Cortex-M7 和 Cortex-M33支持;浮點(diǎn)寄存器組和FPSCR(浮點(diǎn)狀態(tài)和控制寄存器)寄存器,是Cortex-M4/M7/M33可選的浮點(diǎn)運(yùn)算單元使用的。

Cortex-M是愛特梅爾公司發(fā)布的全新Atmel® SAM D20微控制器,采用的是是全球微控制器標(biāo)準(zhǔn)。微控制器處理器通常設(shè)計(jì)成面積很小和能效比很高。通常這些處理器的流水線很短,最高時(shí)鐘頻率很低(雖然市場上有此類的處理器可以運(yùn)行在200Mhz之上)。 并且,新的Cortex-M處理器家族設(shè)計(jì)的非常容易使用。因此,ARM 微控制器處理器在單片機(jī)和深度嵌入式系統(tǒng)市場非常成功和受歡迎。

本文主要介紹的是Cortex-M處理器架構(gòu)特性,分別從編程模型、異常處理模型和嵌套向量中斷控制器NVIC、操作系統(tǒng)支持特性、TrustZone安全擴(kuò)展及錯(cuò)誤處理等幾個(gè)方面來詳細(xì)解析,具體的跟隨小編一起來了解一下。

一、編程模型

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

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

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

另外一個(gè)編程模型之間的不同是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擴(kuò)展的Cortex-M33 )支持GE位。另外,ARMv6-M系列處理器IPSR的中斷號數(shù)字范圍很小,如圖所示。

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

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

所有的Cortex-M處理器都包含了NVIC模塊,采用同樣的異常處理模型。如果一個(gè)異常中斷發(fā)生,它的優(yōu)先等級高于當(dāng)前運(yùn)行等級,并且沒有被任何的中斷屏蔽寄存器屏蔽,處理器會響應(yīng)這個(gè)中斷/異常,把某些寄存器入棧到當(dāng)前的堆棧上。這種堆棧機(jī)制下,中斷處理程序可以編寫為一個(gè)普通的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個(gè)以下,沒有調(diào)試監(jiān)測異常,錯(cuò)誤異常也只限于HardFault(錯(cuò)誤處理細(xì)節(jié)請參看章節(jié)3.4)。相比之下,Cortex-M23, Cortex-M3, Cortex-M4 和Cortex-M7處理器可以支持到多達(dá)240個(gè)外圍設(shè)備中斷。Cortex-M33支持最多480個(gè)中斷。

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

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

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

ARMv8-M Baseline – 類似 ARMv6-M,M23也有2位的優(yōu)先級等級寄存器。借助可選的TrustZone安全擴(kuò)展組件,安全軟件可以把非安全環(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個(gè)中斷優(yōu)先等級和中斷優(yōu)先級分組。還支持ARMv8-M Baseline具有的優(yōu)先等級調(diào)整功能。

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

1、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)。

2、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è)計(jì)者定義。Cortex-M23 and Cortex-M33處理器面向安全和非安全的異常/中斷有兩個(gè)獨(dú)立的向量表。

3、Cortex-M0 and Cortex-M1 does not implement programmable VTOR and vector table starTIng address is always 0x00000000. Cortex-M0 and Cortex-M1沒有實(shí)現(xiàn)可編程的VTOR,向量表起始地址一直為0x00000000。

Cortex-M0+ 和 Cortex-M23處理器的VTOR是可選項(xiàng)。如果VTOR被實(shí)現(xiàn)了,向量表的起始地址可以通過設(shè)置VTOR來改變,這個(gè)功能對下列情況有用:

1、重定位向量表到SRAM來實(shí)現(xiàn)動態(tài)改變異常處理函數(shù)入口點(diǎn)

2、重定位向量表到SRAM來實(shí)現(xiàn)更快的向量讀取(如果flash存儲器很慢)

3、重定位向量表到ROM不同位置(或者Flash),不同的程序運(yùn)行階段可以有不同的異常處理程序

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

大部分情況下,對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)先等級是,需要暫時(shí)的關(guān)掉這個(gè)中斷。

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

Cortex-M處理器架構(gòu)在設(shè)計(jì)時(shí)就考慮到了操作系統(tǒng)的支持。針對操作系統(tǒng)的特性有:

影子堆棧指針

系統(tǒng)服務(wù)調(diào)用(SVC)和可掛起系統(tǒng)調(diào)用(PenSV)異常

SysTIck – 24位遞減計(jì)時(shí)器,為操作系統(tǒng)的計(jì)時(shí)和任務(wù)管理產(chǎn)生周期性的異常中斷

Cortex-M0+/M3/M4/M7/M23/M33支持的非特權(quán)執(zhí)行和存儲保護(hù)單元(MPU)

系統(tǒng)服務(wù)調(diào)用(SVC)異常由SVC指令觸發(fā),他可以讓運(yùn)行在非特權(quán)狀態(tài)的應(yīng)用任務(wù)啟動特權(quán)級的操作系統(tǒng)服務(wù)。可掛起系統(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)時(shí)鐘SysTick是可選的。

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

四、TrustZone安全擴(kuò)展

近幾年來, 物聯(lián)網(wǎng)(IoT)成為了嵌入式系統(tǒng)開發(fā)者們的熱門話題。IoT系統(tǒng)產(chǎn)品變得更加復(fù)雜,上市時(shí)間的壓力也與日俱增。嵌入式系統(tǒng)產(chǎn)品需要更好的方案來保證系統(tǒng)的安全,但是同時(shí)又要方便軟件開發(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)級的代碼的一個(gè)缺陷就可以導(dǎo)致黑客徹底的控制這個(gè)系統(tǒng)

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

普通應(yīng)用是非安全態(tài)

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

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

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

安全架構(gòu)定義也擴(kuò)展到了系統(tǒng)級別,每個(gè)中斷都可以被設(shè)置為安全或者非安全屬性。中斷異常處理程序也會自動保存和恢復(fù)安全環(huán)境中的寄存器數(shù)據(jù)以防止安全信息泄露。所以,TrustZone安全擴(kuò)展讓系統(tǒng)能夠支持實(shí)時(shí)系統(tǒng)的需求,為IoT應(yīng)用提供了堅(jiān)實(shí)的安全基礎(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”,

五、錯(cuò)誤處理

ARM處理器和其他架構(gòu)的微控制器的一個(gè)區(qū)別是錯(cuò)誤處理能力。當(dāng)錯(cuò)誤被檢測到時(shí),一個(gè)錯(cuò)誤異常處理程序被觸發(fā)去執(zhí)行恰當(dāng)?shù)奶幚?。觸發(fā)錯(cuò)誤的情況可能是:

未定義的指令(例如,F(xiàn)lash存儲器損壞)

訪問非法地址空間(例如,堆棧指針崩潰)或者M(jìn)PU非法訪問

非法操作(例如,當(dāng)處理器已經(jīng)在優(yōu)先級高于SVC的中斷中試圖觸發(fā)SVC異常)

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

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

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

ARMv7-M 和 ARMv8-M Mainline產(chǎn)品除了HardFault還有幾個(gè)可配置的錯(cuò)誤異常:

1、Memmanage(內(nèi)存管理錯(cuò)誤)

2、總線錯(cuò)誤(總線返回錯(cuò)誤的響應(yīng))

3、用法錯(cuò)誤(未定義指令或者其他的非法操作)

4、SecureFault(只用ARMv8-M Mainline產(chǎn)品支持,處理TrustZone安全擴(kuò)展中的安全非法操作)

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

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

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉