ARM裸板 軟體中斷分析及示例

2021-10-02 10:33:30 字數 1813 閱讀 6815

2.swi中軟處理過程

3.取出swi指令中的值

如何切換?發生異常即可

/************************************=異常向量表****************************************===*/

_start:

b reset //vector 0: reset(0位址對應reset)

ldr pc, und_addr //vector 4: und (發生未定義指令異常,則進入「處理未定義異常函式」)絕對跳轉,跳轉至sdram中

ldr pc, swi_addr //vector 8: swi

und_addr:

.word do_und //存放位址,確保這一位址存放在記憶體的前4k中

swi_addr:

.word do_swi

/*******************************===處理軟中斷異常****************************************=*/

do_swi:

/*執行到這裡之前:

*2.spsr_svc儲存被中斷模式cpsr

*3.cpsr的[m4:m0]=[10011],進入到svc模式

*4.跳到0x08的模式執行程式,即跳到`b do_swi`這一指令

*//* 1.sp_svc 設定棧,因為後面函式需要棧 */

ldr sp,

=0x33e00000

/* 2.儲存現場 */

/* lr是異常處理完後的返回位址,也需要儲存 */

s***b sp!

,//在swi異常處理函式總有可能需要用到r0~r12,因此先儲存下來

mov r4,lr //將lr存放在r4中,呼叫c函式不會破壞r4

/* 3.處理swi異常 */

mrs r0,cpsr //把cpsr的值放入r0

ldr r1,

=swi_string

bl printexception

sub r0,r4,#4

bl printswival

/* 4.恢復現場 */

ldmia sp,

^//將lr的值賦給pc ,`^`會把spsr的值恢復到cpsr中

swi_string:

.string "swi exception"

.align 4

//確保4位元組對齊

ldr sp,

=0x33e00000

s***b sp!

,` //在swi異常處理函式總有可能需要用到r0~r12,因此先儲存下來

mrs r0,cpsr //把cpsr的值放入r0
、預先增加(increment before)、過後減少(decrement after)、。

ldmia sp,

^

用r0 = r4-4

傳給列印函式

ARM裸板 ARM模式 異常與狀態

3.arm的7種模式 mode 4.arm的2種狀態 state 5.異常的處理流程 6.程式以thumb指令集執行 2.中斷方式 常見的異常有 system sys a privileged user mode for the operating system irq irq used for g...

ARM裸板驅動開發之序列通訊協議

最新打算學習基於核心驅動開發方面的知識,在看書的過程中發現,除了要遵循核心的開發規則外,具體實現部分和裸機開發差異不大,由於研究生期間做過微控制器的開發,但畢竟arm裸機開發要比微控制器開發更複雜的多,因此打算從裸機開發開始重新學習一遍。接下來就三星的s3c2440a為平台開始接下來的學習過程,該晶...

ARM裸板程式中為什麼要使用重定位

重定位一般有兩個目的 程式檔案過大,這時候需要把超出儲存器 norflash或sram 部分的 放到 也即重定位 sdram中去執行 程式燒寫在norflash並且使用了全域性變數。這篇文章著重解析第二個目的,對於第乙個目的後續有時間再寫。如果你的程式是燒寫在norflash中,並且程式裡使用了全域...