版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/AaricYang/article/details/81840614
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