ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础
注:本文資料全部來源于網(wǎng)絡(luò)或書籍,同時加上個人理解。若有侵權(quán),告知即刪。若有錯誤,留言商討。
1、寄存器:
總共有37個寄存器,最多可以有17個活動寄存器(16個數(shù)據(jù)寄存器,2個狀態(tài)寄存器:CPSR和SPSR)
R13:堆棧指針:指向當前處理器模式的堆棧棧頂
R14:鏈接寄存器,保存子程序的返回地址。【當執(zhí)行子程序調(diào)用指令(BL)時,R14可得到R15(程序計數(shù)器PC)的備份】
R15:程序技術(shù)器,處理器下一條要取出的指令地址。【ARM狀態(tài)下,指令4字節(jié)對齊,位[1:0]為0。位[31:2]保存PC】
【注】快速中斷的r8-r12是分組寄存器,r13-r14每種模式都有自己的分組寄存器。r15沒有分組寄存器。用戶模式和系統(tǒng)模式?jīng)]有分組寄存器。
2、當前程序狀態(tài)寄存器CPSR:
3、處理器模式:
除了用戶模式外,每一種模式可以改寫cpsr中的模式位來改變。當一個異常或中斷發(fā)生的時候cpsr寄存器被保存到相應(yīng)模式的spsr寄存器中,但是當用戶程序改寫cpsr寄存器切換模式的時候,cpsr不會被自動保存。系統(tǒng)上電:從管理模式開始,ARM指令狀態(tài)。
- 除了USR和SYS外都是異常模式
- 除了USR外都是特權(quán)模式?, 特權(quán)模式可以通過直接修改CPSR中相應(yīng)的位來切換到USR,但是USR不能直接修改CPSR,只能通過指令,
- OS的內(nèi)核態(tài)程序工作在SVC模式, 用戶態(tài)程序工作在USR模式
- ARM的CPU復位就處于SVC模式,執(zhí)行完啟動代碼后就需要切換到USR模式
?
4、Thumb指令
指令的操作數(shù)仍然是32位,尋址地址是32位。
該狀態(tài)下,讀取R15(PC)位0為0,位31-1保存了程序計數(shù)器的地址。寫入R15時,位0被忽略,位31-1保存了程序計數(shù)器要寫入的值。即:PC的位0一直保持為0,前面31位保存了下一條指令的地址。
ARM指令:字對齊,地址的最后兩位為0;thumb指令:半字對齊,地址的最后一位為0。【因此最后一位不可能是有用地址】
可以使用R0-R7寄存器。有些指令還可以使用PC、lr、sp寄存器。
【解釋】:BX跳轉(zhuǎn)到<Rm>,最后一位為0時,表示thumb指令的地址。于是編譯器自動加上狀態(tài)切換指令、并且和0xfffffffe進行與操作。然后得到真正的指令地址,并復制給PC寄存器。
【加1操作,由編譯器完成。去1 -- 可能是硬件自動完成,并不產(chǎn)生指令】
arm與thumb間的切換
??1,由arm狀態(tài)切換到thumb
狀態(tài)將寄存器的最低位設(shè)置為1
? ? ? ?BX指令:R0[0]=1,則執(zhí)行BX? R0指令將進入thumb狀態(tài)
??2,由thumb狀態(tài)切換到ARM狀態(tài)
寄存器最低位設(shè)置為0
? ? BX指令:R0[0]=0,則執(zhí)行BX? R0指令將進入arm狀態(tài)
當處理器進行異常處理時,則從異常向量地址開始執(zhí)行,將自動進入ARM狀態(tài)。
??????? 注意:ARM處理器復位后開始執(zhí)行代碼時總是只處于ARM狀態(tài);
????????????????? Cortex-M3只有Thumb-2狀態(tài)和調(diào)試狀態(tài);
????????????????? 由于Thumb-2具有16位/32位指令功能,因此有了thumb-2就無需Thumb了。
????????????????? 另外,具有Thumb-2技術(shù)的ARM處理器也無需再ARM狀態(tài)和Thumb-2狀態(tài)間進行切換了,因為thumb-2具有32位指令功能。
? ??總的說,arm狀態(tài)與Thumb狀態(tài)的本質(zhì)區(qū)別就是指令的位數(shù)不同,arm是32位的指令狀態(tài),而thumb是16位 的指令狀態(tài),而thumb-2狀態(tài)是arm狀態(tài)和thumb狀態(tài)的結(jié)合和優(yōu)化。
?
總結(jié)
以上是生活随笔為你收集整理的ARM嵌入式系统开发:软件设计与优化--第二章ARM处理器基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MEMS电容式加速度传感器(简介)-传感
- 下一篇: 网络传输介质介绍