日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

21.核心初始化之svc模式

發布時間:2023/12/19 综合教程 31 生活家
生活随笔 收集整理的這篇文章主要介紹了 21.核心初始化之svc模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

21.核心初始化之svc模式

要設置系統工作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:

breset

ldrpc, _undefined_instruction

ldrpc, _software_interrupt

ldrpc, _prefetch_abort

ldrpc, _data_abort

ldrpc, _not_used

ldrpc, _irq

ldrpc, _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

總結

以上是生活随笔為你收集整理的21.核心初始化之svc模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。