📄 vector.s
字号:
;//***************************************************************
;// ARM BOOT ROUTE VER1.0 for NXP_ARM release
;// bjwork2007@gmail.com
;// chenjun @ 2008-7-19
;//***************************************************************
INCLUDE NXP_ARM.s
CODE32
AREA boot, CODE, READONLY
GBLS MainEntry
MainEntry SETS "main"
IMPORT $MainEntry
IMPORT UDF_INS_VECTOR
IMPORT SWI_SVC_VECTOR
IMPORT INS_ABT_VECTOR
IMPORT DAT_ABT_VECTOR
IMPORT IRQ_SVC_VECTOR
IMPORT FIQ_SVC_VECTOR
ENTRY
ResetEntry
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 76151151
LDR PC, IRQ_Addr
LDR PC, FIQ_Addr
ResetAddr DCD SYS_RST_HANDLER-0x020f0000
UndefinedAddr DCD UDF_INS_HANDLER-0x020f0000
SWI_Addr DCD SWI_SVC_HANDLER-0x020f0000
PrefetchAddr DCD INS_ABT_HANDLER-0x020f0000
DataAbortAddr DCD DAT_ABT_HANDLER-0x020f0000
Nouse DCD 0
IRQ_Addr DCD IRQ_SVC_HANDLER-0x020f0000
FIQ_Addr DCD FIQ_SVC_HANDLER-0x020f0000
UDF_INS_HANDLER
stmfd sp!, {r0-r3, lr}
ldr r0, =UDF_INS_VECTOR
mov lr, pc
ldr pc, [r0]
ldmfd sp!, {r0-r3, pc}^
SWI_SVC_HANDLER
stmfd sp!, {r0-r3, lr}
ldr r0, =SWI_SVC_VECTOR
mov lr, pc
ldr pc, [r0]
ldmfd sp!, {r0-r3, pc}^
INS_ABT_HANDLER
sub lr, lr, #4
stmfd sp!, {r0-r3, lr}
ldr r0, =INS_ABT_VECTOR
mov lr, pc
ldr pc, [r0]
ldmfd sp!, {r0-r3, pc}^
DAT_ABT_HANDLER
sub lr, lr, #4
stmfd sp!, {r0-r3, lr}
ldr r0, =DAT_ABT_VECTOR
mov lr, pc
ldr pc, [r0]
ldmfd sp!, {r0-r3, pc}^
IRQ_SVC_HANDLER
ldr r0, =IRQ_SVC_VECTOR
ldr pc, [r0]
FIQ_SVC_HANDLER
ldr r0, =IRQ_SVC_VECTOR
ldr pc, [r0]
SYS_RST_HANDLER
;********* set ARM working at SVC mode | disable FIQ and IRQ ***********
;//disable Int
mrs r0, cpsr
bic r0, r0, #ModeMask
orr r0, r0, #(SVC :OR: I :OR: F)
msr cpsr_c, r0
IMPORT InitCPU
bl InitCPU
adr r0, ResetEntry
ldr r1, BaseOfROM
cmp r0, r1
ldreq r0, TopOfROM
beq InitRamData
ldr r2, =CopyProcBeg
sub r1, r2, r1
add r0, r0, r1
ldr r3, =CopyProcEnd
0
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0
ldr r3, TopOfROM
ldr pc, =CopyProcBeg
CopyProcBeg
0
ldmia r0!, {r4-r11}
stmia r2!, {r4-r11}
cmp r2, r3
bcc %B0
CopyProcEnd
sub r1, r2, r3
sub r0, r0, r1
InitRamData
ldr r2, BaseOfBSS
ldr r3, BaseOfZero
0
cmp r2, r3
ldrcc r1, [r0], #4
strcc r1, [r2], #4
bcc %B0
mov r0, #0
ldr r3, EndOfBSS
1
cmp r2, r3
strcc r0, [r2], #4
bcc %B1
ldr pc, GotoMain
GotoMain DCD $MainEntry
;***********************************************
IMPORT |Image$$RO$$Base| ; ROM code start
IMPORT |Image$$RO$$Limit| ; RAM data starts after ROM program
IMPORT |Image$$RW$$Base| ; Pre-initialised variables
IMPORT |Image$$ZI$$Base| ; uninitialised variables
IMPORT |Image$$ZI$$Limit| ; End of variable RAM space
BaseOfROM DCD |Image$$RO$$Base|
TopOfROM DCD |Image$$RO$$Limit|
BaseOfBSS DCD |Image$$RW$$Base|
BaseOfZero DCD |Image$$ZI$$Base|
EndOfBSS DCD |Image$$ZI$$Limit|
EXPORT BaseOfROM
EXPORT TopOfROM
EXPORT BaseOfBSS
EXPORT BaseOfZero
EXPORT EndOfBSS
;***********************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -