1. cortex-m 處理器的體系架構(gòu)與指令集
本文僅討論 cortex-m0/m0+/m3/m4/m7 armv8架構(gòu)暫不討論
- cortex-m0/m0+/m1 基于ARMv6-M架構(gòu)
- cortex-m3基于ARMv7-M架構(gòu)(ARMv7-M隨cortex-m3處理器一起發(fā)布)
-
cortex-m4/m7基于ARMv7E-M架構(gòu)(ARMv7-M隨cortex-m4處理器一起發(fā)布)
- corte-m處理器都支持Thumb-2指令集(既支持16位指令,也支持32位指令)。
- 上圖是ARMv6-M,ARMv7-M,ARMv7E-M所有指令,上圖也能看出所支持指令的長(zhǎng)度。
- cortex-m1處理器一般用于FPGA,針對(duì)FPGA進(jìn)行了優(yōu)化
2. cortex-m內(nèi)核寄存器
2.1 cortex-m0, cortex-m0+寄存器
2.2 cortex-m3, cortex-m4, cortex-m7 寄存器
2.3 PRIMASK、FAULTMASK和BASEPRI寄存器
- PRIMASK:寄存器有1個(gè)bit生效,可屏蔽所有 可配置優(yōu)先級(jí)的異常 ,即屏蔽除 Reset(-3), NMI(-2), HardFault(-2) 外的所有中斷。
- FAULTMASK:寄存器有1個(gè)bit生效,屏蔽除 Reset(-3), NMI(-2) 外的所有中斷。
-
BASEPRI:可屏蔽優(yōu)先級(jí) 小于或等于 BASEPRI配置值的中斷或異常。BASEPRI位寬是可配置的(微控制器設(shè)計(jì)廠商可配置,非軟件可配置),一般是3bit 或 4bit。
2.4 SP寄存器
SP寄存器在物理實(shí)現(xiàn)上有兩個(gè),分別是MSP 和 PSP,通過SP這個(gè)名字訪問的可能是不同的物理存儲(chǔ),當(dāng)然也可以直接在匯編中使用MSP 和 PSP。
- MSP:Main Stack Pointer(主棧指針),Handler mode(處理異常或中斷)使用MSP,Thread mode可以選擇使用MSP或PSP(通過CONTROL寄存器選擇)
- PSP:Process Stack Pointer(線程棧指針),在Thread mode下可由CONTROL寄存器配置使用PSP.
3. PSR 寄存器
因?yàn)橹С值闹噶畈煌?,所以不同處理器的PSR寄存器會(huì)略有不同
3.1 cortex-m0, cortex-m0+(ARMv6-M)
3.2 cortex-m3(ARMv7-M)
3.3 cortex-m4,cortex-m7(ARMv7E-M)
- GE[3:0]:大于或等于標(biāo)志
- ICI:Interruptible-continuable instruction(中斷繼續(xù)指令),如LDM指令,STM指令均需要多個(gè)時(shí)鐘周期,且是可被中斷的, ICI只要作用是記錄中斷位置。
- IT:用于If-Then指令(IT指令,在此處暫不展開討論IT指令)。
- T:指示處于ARM狀態(tài)還是Thumb狀態(tài),cortex-m處理器只支持Thumb狀態(tài),所以此位一直為1。
3.4 ISR_NUMBER
-
cortex-m0/m0+的ISR_NUMBER
-
cortex-m3/m4/m7的ISR_NUMBER
-
總結(jié)
-
cortex-m3/m4/m7相比cortex-m0/m0+ 增加了如下異常
- MemManage
- BusFault
- UsageFault
- Reserved for Debug
- cortex-m3/m4/m7相比cortex-m0/m0+ IRQ中斷數(shù)量由32個(gè)擴(kuò)展到了240個(gè)
- systick在cortex-m0/m0+ 中是可選實(shí)現(xiàn)的,systick 在 cortex-m3/m4/m7中是必須實(shí)現(xiàn)的。
-
cortex-m3/m4/m7相比cortex-m0/m0+ 增加了如下異常
4. cortex-m處理器模式與特權(quán)級(jí)
4.1 cortex-m處理器特權(quán)級(jí)
cortex-m處理器分為兩個(gè)特權(quán)級(jí):
-
Unprivileged(非特權(quán)級(jí))
- 不能使用MRS,MSR,CPS(開關(guān)中斷) 指令。
- 不能訪問systick、NVIC、SCB等
- 對(duì)MPU保護(hù)的資源訪問受限
注:cortex-m0不支持非特權(quán)模式(CONTROL沒有對(duì)應(yīng)的配置位)。cortex-m0+ 可選的支持非特權(quán)模式。cortex-m3/m4/m7強(qiáng)制支持非特權(quán)模式。
-
Privileged(特權(quán)):
- 所有指令,所有資源均可訪問。
4.2 cortex-m0/m0+處理器寄存器訪問的特權(quán)級(jí)
- cortex-m0只支持特權(quán)級(jí)(不支持非特權(quán)級(jí)),所有的寄存器都只能在特權(quán)級(jí)下訪問。
- cortex-m0+可已選擇支持特權(quán)級(jí),也可以選擇不支持特權(quán)級(jí)。
<<DUI0662B_cortex_m0p_r0p1_dgug>> 文檔中并沒有對(duì)各個(gè)寄存器中訪問的特權(quán)級(jí)進(jìn)行描述,歡迎大家補(bǔ)充,或后續(xù)我找一下其他資料或?qū)崪y(cè)一下再補(bǔ)充。
4.3 cortex-m3/m4/m7處理器寄存器訪問的特權(quán)級(jí)
- cortex-m3/m4 存器訪問的特權(quán)級(jí)
- cortex-m7 存器訪問的特權(quán)級(jí)
- 由上面兩個(gè)表可以看出cortex-m7 和 cortext-m3/m4 僅在 MSP的訪問權(quán)限上存在區(qū)別。
4.4 cortex-m處理器模式
-
Thread mode:線程模式(沒有進(jìn)行中斷處理)
- 可配置特權(quán)模式或者非特權(quán)模式 ,CONTROL寄存器配置,。
- 可配置使用MSP或者PSP,CONTROL寄存器配置。
注:在Thread mode下,cortex-m0只支持特權(quán)模式(CONTROL寄存器沒有相關(guān)的配置位),cortex-m0+可選支持非特權(quán)模式,cortex-m3/m4/m7既支持特權(quán)模式,也支持非特權(quán)模式。
-
Handler mode:處理模式
- 一定處于特權(quán)模式
- 使用MSP
4.5 cortex-m處理器模式和特權(quán)級(jí)切換簡(jiǎn)析
- 下表是寄存器的初始值,通過寄存器的初始值我們可以得出很多結(jié)論
4.5.1 CONTROL寄存器的初始值
CONTROL寄存器的初始值為全0,我們可以得出如下結(jié)論:
- 針對(duì)cortex-m0或cortex-m0+(不支持非特權(quán)級(jí)) ,表征在初始狀態(tài)下使用MSP
- 針對(duì)cortex-m0+(支持非特權(quán)級(jí))/m4/m7,表征在初始狀態(tài)下使用MSP且處于特權(quán)模式。
cortex-m4/m7在 CONTROL寄存器中增加了FPCA位用于指示中斷發(fā)生時(shí)上下文中有沒有浮點(diǎn)運(yùn)算,用于指示中斷發(fā)生時(shí)的硬件壓棧,這與cortex-m的異常處理有關(guān),在此暫不展開,后續(xù)會(huì)專門寫一篇文章來分析cortex-m的異常處理。
4.5.2 PSR寄存器的初始值
- PSR寄存器的初始為0x01000000, 即T位為1表示處于thumb狀態(tài)(cortex-m只支持Thumb狀態(tài)),ISR_NUMBER 為零表示處于Thread mode
4.5.3 PRIMASK,F(xiàn)AULTMASK,BASEPRI寄存器的初始值
PRIMASK,F(xiàn)AULTMASK,BASEPRI寄存器的初始值都為0,便是不屏蔽任何中斷。
4.5.4 MSP PSP PC寄存器的初始值
初始狀態(tài)下棧指針使用MSP , 不關(guān)心PSP的初始值,MSP PC寄存器的初始值比較特殊,上電或復(fù)位后,硬件會(huì)將向量表中的第一個(gè)字放入MSP中,將向量表中的第二個(gè)字放入PC中,又因?yàn)閺?fù)位狀態(tài)下VTOR 寄存器的初始值為0,所以硬件會(huì)到0地址處找向量表,軟件要保證0地址出有向量表。
4.5.5 LR寄存器的初始值
LR寄存器的初始值是0xFFFFFFFF,這是一個(gè)非法值,函數(shù)調(diào)用不會(huì)在這里返回。文章來源:http://www.zghlxwxcb.cn/news/detail-794330.html
4.5.6 總結(jié)
結(jié)合通過上述描述,我畫了一張圖描述狀態(tài)和特權(quán)級(jí)的切換,比較好理解,便不過多贅述。文章來源地址http://www.zghlxwxcb.cn/news/detail-794330.html
到了這里,關(guān)于arm cortex-m 架構(gòu)簡(jiǎn)述的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!