要設置系統工作svc特權模式,從前面的學習知道這需要設置CPSR程序狀態寄存器。
在ARM Architecture Reference Manual.pdf文檔中,2.Programmers' Model的2.5.Program status register。
可以看到CPSR的最后五位:M[4:0],就是來設置系統工作的系統模式。
接下來就是把CPSR的最后五位設置為0b10011,就是完成了設置系統的SVC模式。
實現的思路是:
取得這五位
清零,使用bic位清零指令。
置第0,1,4位為1,即可,使用orr位或指令。
要取得CPSR的后五位,由于是操作CPSR/SPSR,不能像操作一般的寄存器一樣,直接操作,需要將CPSR/SPSR寄存器的值取出再進行相應的操作。取出的指令:mrs。最后是存入:msr。這樣就完成了修改操作。
修改的代碼:
上面的操作就能夠實現把cpsr的末尾5位設置為0b10011。完成了設置系統工作在SVC模式。
我們做這些操作的時候,一般都是參考uboot里的設置來操作的。看看uboot里是怎么設置的:
可以看到OK6410的uboot里是設置為0xd3的,0xd3的二進制:
看到uboot里,還把[6][7]位設置為了1,看看這兩位的功能,是設置中斷的,uboot把中斷和快中斷都關閉了。
由于uboot是老大,所以,這里也改為了0xd3,2440,6410,210都是一樣的操作。最后start.S的代碼是:
.text
.global _start
_start:
b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
_undefined_instruction: .word undefined_instruction
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word fiq
undefined_instruction:
nop
software_interrupt:
nop
prefetch_abort:
nop
data_abort:
nop
not_used:
nop
irq:
nop
fiq:
nop
reset:
bl set_svc
set_svc:
mrs r1,cpsr
bic r1,#0x1f @clear r1的后五位,
@即是清除cpsr的后五位
orr r1,r1,#0xd3 @0b10011=0x13
msr cpsr,r1
上一篇:22.核心初始化之看門狗
下一篇:20.核心初始化之異常向量表
設計資源 培訓 開發板 精華推薦
- LT1170CQ、12V/5A 負至正降壓-升壓轉換器的典型應用
- 使用 ROHM Semiconductor 的 BD5352 的參考設計
- DK-DEV-3SL150NES,Stratix III 開發板為低功耗開發和原型設計提供硬件平臺
- LTC6990IDCB#TRMPBF 光到頻率轉換器的典型應用。 fOUT 至 -1.4kHz 每微安光電二極管電流 IPD
- AM1D-1505S-RZ 5V 1W DC-DC 轉換器的典型應用
- AM1/4S-2424SH30Z 24V 0.25 瓦 DC-DC 轉換器的典型應用
- TC1016/17EV,用于 TC1017 LDO 線性穩壓器的評估板
- 溫濕度傳感器模塊(原理圖+程序+說明文檔).rar
- 80元用主機散熱風扇改裝焊接排煙風機
- AM1G-0509DZ ±9V 1 瓦 DC-DC 轉換器的典型應用