1.异常有七个
异常向量表 缺少00000014
使用装载命令
.text
.global _start
_start:
b reset
ldr pc, _undifined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used;异常向量表 缺少00000014
ldr pc, _irq
ldr pc, _fiq
_undifined_instruction: .word undifined_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 reset
undifined_instruction:
nop
software_interrupt:
nop
prefetch_abort:
nop
data_abort:
nop
not_used:
nop
irq:
nop
fiq:
nop
reset:
2.选为svc模式
在reset 处理那里加一段程序 bl set_svc
set_svc:
mrs r0, cpsr
bic r0, r0,#0x1f
orr r0, r0,#0xd3;设置为svc模式
msr cpsr, r0
mov pc, lr
3.关闭看门狗
喂狗主要是给WTDT加新数
关闭主要是对wtcon寄存器置零
调用函数 放rest bl disable_watchdog
#define pWTCON 0x7e004000
disable_watchdog:
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
mov pc, lr
4.关闭中断
第一去关闭中断cpsr
第二去屏蔽寄存器mask
disable_interrupt:
mvn r1,#0x0
ldr r0,=0x71200014
str r1,[r0]
ldr r0,=0x71300014
str r1,[r0]
mov pc, lr
5.关闭mmu和cache
什么是cache:也是一种存贮器,存放一些数据拷贝 访问速度快
什么是mmu:mmu完成虚拟内存到物理内存的转换
在初始化时最好关掉
关闭步骤:使icahe和dcahe失效 mcr p15,0,r0,c7,c7,
1.关闭cahe和mmu mrc p15,0,r0,c1,c0,0//读写要求
bic r0,r0,#0x00000007
mcr p15,0,r0,c1,c0,0
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
点击下载本课代码