.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
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:
bl set_svc
bl disable_watchdog
bl disable_interrupt
set_svc:
mrs r0, cpsr
bic r0, r0,#0x1f
orr r0, r0,#0xd3
msr cpsr, r0
mov pc, lr
#define pWTCON 0x53000000
disable_watchdog:
ldr r0, =pWTCON
mov r1, #0x0
str r1, [r0]
mov pc, lr
//2440和6410以及210关闭中断的操作不一样
//2440
disable_interrupt:
mvn r1, #0x0 //mvn取反传送,r1=0x1
ldr r0, =0x4a000008 //0x4a000008为INTMSK寄存器的地址
str r1, [r0]
mov pc, lr
//6410的使能中断和屏蔽中断用的是不同的寄存器
disable_interrupt:
mvn r1,#0x0
ldr r0,=0x71200014 //VIC0INTENCLEAR 寄存器地址
str r1,[r0]
ldr r0,=0x71300014 //
VIC1INTENCLEAR寄存器地址
str r1,[r0]
mov pc, lr
//210和6410一样,使能中断和屏蔽中断用的是不同的寄存器
disable_interrupt:
mvn r1,#0x0
ldr r0,=0xf2000014
str r1,[r0]
ldr r0,=0xf2100014
str r1,[r0]
ldr r0,=0xf2200014
str r1,[r0]
ldr r0,=0xf2300014
str r1,[r0]
mov pc, lr