arm架構指導手冊下載地址:
鏈接:https://pan.baidu.com/s/1K7wlX3sxNTeJ9Z-tazcVcg 密碼:3xii
2440芯片手冊下載地址:
鏈接:https://pan.baidu.com/s/10QXymx0Em3d1XCmf_o2_zA 密碼:o69o
ARM920T內核指導手冊:
鏈接:https://pan.baidu.com/s/1mWz7g-xYsPbHAfjkHda2gw 密碼:9a0l
1. 設置異常向量表
arm處理器共有7種異常,其對應的向量地址如下表所示(arm架構指導手冊第54頁)。
.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
bl disable_watchdog
bl disable_interrupt
bl disable_mmu
2. svc模式
svc模式對應的編碼如下圖所示(arm架構指導手冊41頁)。通過設置狀態寄存器,可以改變處理器工作模式。
狀態寄存器的介紹如下圖(arm架構指導手冊49頁)。該寄存器的0-4位用來設置處理器工作模式。
set_svc:
mrs r0, cpsr
bic r0, r0, #0x1f
orr r0, r0, #0xd3
msr cpsr, r0
mov pc, lr
3. 關閉看門狗
watchdog可以通過WTCON寄存器控制,如下圖所示(2440芯片手冊462頁)。
#define pWTCON 0x53000000
disable_watchdog:
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
mov pc, lr
4. 關閉中斷
中斷屏蔽寄存器的介紹如下圖所示(2440芯片手冊389頁)。
disable_interrupt:
mvn r1, #0x0
ldr r0, =0x4a000008
str r1, [r0]
mov pc, lr
5. 關閉mmu和cache
cache操作寄存器7的介紹如下圖(ARM920T內核指導手冊43頁)。
控制寄存器1的介紹如下圖(ARM920T內核指導手冊37頁),用於禁止mmu和i/d cache。
disable_mmu:
mcr p15,0,r0,c7,c7,0
mrc p15,0,r0,c1,c0,0
bic r0, r0, #0x00000007
mcr p15,0,r0,c1,c0,0
mov pc, lr