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