Cortex-M3 内部寄存器
寄存器組
R0-R12
R0-R12,通用寄存器;?
R0-R12都是32位通用寄存器,用于數(shù)據(jù)操作;但是絕大多數(shù)16位Thumb指令只能訪問(wèn)R0-R7,而32位Thumb指令可以訪問(wèn)所有寄存器;
R13
R13,SP,堆棧指針;?
Cortex-M3有兩個(gè)堆棧指針,它們是Banked,任一時(shí)刻只能使用其中一個(gè);當(dāng)引用R13/SP時(shí),引用的是當(dāng)前正在使用的那一個(gè),另一個(gè)必須使用MRS/MSR指令來(lái)訪問(wèn);?
- 主堆棧指針MSP:復(fù)位后缺省堆棧指針,用于操作系統(tǒng)內(nèi)核操作和異常處理例程;?
- 進(jìn)程堆棧指針PSP:由用戶的應(yīng)用程序代碼使用;?
堆棧指針的最低兩位永遠(yuǎn)為0,這意味著堆棧總是4字節(jié)對(duì)齊的;
R14
R14,LR,鏈接寄存器;?
當(dāng)調(diào)用子程序時(shí),由R14存儲(chǔ)返回地址;如果子程序多于1級(jí),則需要把前一級(jí)的R14壓入堆棧;
R15
R15,PC,程序計(jì)數(shù)器寄存器?
讀PC值,返回的是當(dāng)前指令地址+4;如果修改它,就能改變程序的執(zhí)行流;?
在分支時(shí),無(wú)論直接寫PC,還是使用分支指令,都必須保證加載到PC的數(shù)值是奇數(shù)(LSB=1),用以表明是在Thumb狀態(tài)下執(zhí)行,如果為0,將產(chǎn)生fault;
特殊功能寄存器
特殊功能寄存器必須通過(guò)MRS/MSR指令操作;
程序狀態(tài)寄存器
程序狀態(tài)寄存器(PSRs或xPSR)在內(nèi)部可分為3個(gè)子狀態(tài)寄存器:?
- 應(yīng)用程序PSR(APSR)?
- 中斷號(hào)PSR(IPSR)?
- 執(zhí)行PSR(EPSR)?
通過(guò)MRS/MSR指令,這3個(gè)PSR可以單獨(dú)訪問(wèn),也可組合訪問(wèn):?
- PSR = APSR + IPSR + EPSR?
- IAPSR = IPSR + APSR?
- IEPSR = IPSR + EPSR?
- EAPSR = EPSR + APSR
| APSR | N | Z | C | V | Q | ? | ? | ? | ? | ? | ? | ? |
| IPSR | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | Exception Number |
| EPSR | ? | ? | ? | ? | ? | ICI/IT | T | ? | ? | ICI/IT | ? | ? |
中斷屏蔽寄存器
PRIMASK
這個(gè)寄存器只有一個(gè)位,置1后,將關(guān)閉所有可屏蔽中斷的異常,只剩NMI和硬fault,默認(rèn)值為0;?
操作指令:
- 1
- 2
- 3
- 4
FAULTMASK
這個(gè)寄存器也只有一位,置1后,屏蔽除NMI外的所有異常(包括硬fault),默認(rèn)值為0;?
操作指令:
- 1
- 2
- 3
- 4
BASEPRI
這個(gè)寄存器有9位,它定義了被屏蔽優(yōu)先級(jí)的閾值;當(dāng)它被設(shè)定為某個(gè)值后,所有優(yōu)先級(jí)號(hào)大于等于此值得中斷都被關(guān)閉,若設(shè)為0,則不關(guān)閉任何中斷,默認(rèn)值為0;
MRS R0, BASEPRI ; R0=BASEPRI MSR BASEPRI, R0 ; BASEPRI=R0- 1
- 2
控制寄存器(CONTROL)
- CONTROL[1]:為0表示選擇MSP,為1表示選擇PSP;
- CONTROL[0]:為0表示特權(quán)級(jí)的線程模式,為1表示用戶級(jí)的線程模式;
總結(jié)
以上是生活随笔為你收集整理的Cortex-M3 内部寄存器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: FreeRTOS 临界区总结
- 下一篇: lwip之数据收发流程_3