天天看點

設定系統工作在SVC模式---嵌入式回歸第七篇

從上篇博文可以看到uboot開機第一件事就是設定系統為SVC模式。

還是這張熟悉的圖表:

設定系統工作在SVC模式---嵌入式回歸第七篇

ARM處理器有七種工作模式,對于uboot模式而已,系統工作在SVC模式,可以操作更多的資源。

通過設定程式狀态寄存器CPSR15(這個可以根據手冊查到):

設定系統工作在SVC模式---嵌入式回歸第七篇

這裡我們要設定M[4:0]這個字段來讓系統工作在SVC模式。那麼要怎麼設定呢?這裡還是看之前部落格裡面的一張圖

設定系統工作在SVC模式---嵌入式回歸第七篇

可以看到這5位要設定成10011,即把GPSR15寄存器最後5位設定成10011.

第一步: 将這5位全部清零 bic指令

第二步: 在給某些位置1 orr指令

同時這裡會用到msr指令 和 mrs指令

原因: 因為在通路CPSR/SPSR這兩個寄存器時 ,先要把寄存器導入到通用寄存器當中做相應修改然後再寫入,而不能直接修改GPSR/SPSR這兩個寄存器。

msr: 将通用寄存器的值寫入CPSR或者SPSR寄存器

mrs: 将CPSR寄存器的值導入到通用寄存器中

這裡貼上代碼:

set_svc:
		mrs r0, cpsr
		bic r0, r0, #0x1f
		orr r0, r0, #0xd3
		msr cpsr, r0
		mov pc, lr
           

針對上一篇博文這裡隻需要修改start.S檔案, 因為一上電程式将跳到reset标号處執行,這裡講reset标号處下的代碼也稍作修改

reset:
		bl set_svc