|
很感谢大家的指点,经过几天的摸索,我探出了点眉目,各位看了有问题请指出来,如果正确那也对正遇上我这种问题的兄弟们一点帮助:以下都为LPC2200为基础,FLASH为BANK0(0x80000000),RAM为BANK1(0X81000000)
1.中断向量表
;中断向量表
Reset
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0xb9205f80
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
ResetAddr DCD ResetInit
UndefinedAddr DCD 0x81000004
SWI_Addr DCD 0x81000008
PrefetchAddr DCD 0x8100000c
DataAbortAddr DCD 0x81000010
Nouse DCD 0
IRQ_Addr DCD 0x81000018
FIQ_Addr DCD 0x8100001c
2.BOOTLOAD的ADS中我为了怕整理RW麻烦就没用分散加载了,把RO写了0X80000000,RW写了0X81F00000,IIMAGE 入口地址0X80000000,第一步拷贝我只是做个试验,所以就拷贝固定大小的代码到RAM了
ldr r0,=STARADDR;0x80000000
ldr r1,=RAMADDRS;0x81000000
ldr r2,=CODELEN;0x80010000代码结尾地址
copy_loop
ldmia r0!, {r3-r10}
stmia r1!, {r3-r10}
cmp r0, r2
ble copy_loop
3然后跳转
ldr pc,=main+0x1000000
4.在应用程序中的中断,因为向量地址在0XFFFFF030,所以需要动一下
;中断向量表
Reset
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0xb9205f80
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
ResetAddr DCD ResetInit
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler
。。。。。。
;中断
IRQ_Handler
STMFD SP!, {R0-R3, LR}
mov r0,#0x020
ldr pc,[r0,#-0x0ff0]
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4
。。。。。。。
请各位大侠指点指点,有错可要一定指出哟,谢谢! |
|