📄 init.txt
字号:
.global __main /* defined to ensure that C runtime system */
__main: /* is not linked in */
# ENTRY
__ENTRY:
# --- Setup interrupt / exception vectors
B Reset_Handler
B Undefined_Handler
B SWI_Handler
B Prefetch_Handler
B Abort_Handler
NOP /* Reserved vector */
B IRQ_Handler
B FIQ_Handler
/*==========================================================*/
/* The Default Exception Handler Vector Entry Pointer Setup */
/*==========================================================*/
FIQ_Handler:
SUB sp, sp, #4
STMFD sp!, {r0}
LDR r0, =SystemFiqHandler
STR r0, [sp, #4]
LDMFD sp!, {r0, pc}
IRQ_Handler:
SUB sp, sp, #4
STMFD sp!, {r0}
LDR r0, =SystemIrqHandler
STR r0, [sp, #4]
LDMFD sp!, {r0, pc}
Prefetch_Handler:
SUB sp, sp, #4
STMFD sp!, {r0}
LDR r0, =SystemPrefetchHandler
STR r0, [sp, #4]
LDMFD sp!, {r0, pc}
Abort_Handler:
SUB sp, sp, #4
STMFD sp!, {r0}
LDR r0, =SystemAbortHandler
STR r0, [sp, #4]
LDMFD sp!, {r0, pc}
Undefined_Handler:
SUB sp, sp, #4
STMFD sp!, {r0}
LDR r0, =SystemUndefinedHandler
STR r0, [sp, #4]
LDMFD sp!, {r0, pc}
SWI_Handler:
SUB sp, sp, #4
STMFD sp!, {r0}
LDR r0, [lr, #-4]
BIC r0, r0, #0xff000000
CMP r0, #0xff
BEQ SWI_RET
LDR r0, =SystemSwiHandler
STR r0, [sp, #4]
LDMFD sp!, {r0, pc}
SWI_RET:
mov pc, lr
/*==========================================================*/
/* AREA Main, CODE, READONLY */
/* The Reset Entry Point */
/*==========================================================*/
.global Reset_Handler
Reset_Handler: /* Reset Entry Point */
LDR r1, =IntMask
LDR r0, =0xFFFFFFFF
STR r0, [r1]
/*===================================== */
/* LED Display */
/*===================================== */
LDR r1, =IOPMODE
LDR r0, =0xFF
STR r0, [r1]
LDR r1, =IOPDATA
LDR r0, =0x55
STR r0, [r1]
swi 0xff ;/* Call SWI Vector */
LDR r1, =IOPDATA
LDR r0, =0x33
STR r0, [r1]
/*=====================================*/
/* Initialise STACK */
/*=====================================*/
INITIALIZE_STACK:
MRS r0, cpsr
BIC r0, r0, #LOCKOUT | MODE_MASK /*0xC0 | 0x1F*/
ORR r2, r0, #USR_MODE
ORR r1, r0, #LOCKOUT | FIQ_MODE /*0xC0 | 0x11*/
MSR cpsr_cf, r1
MSR spsr_cf, r2
LDR sp, =FIQ_STACK
ORR r1, r0, #LOCKOUT | IRQ_MODE /*0xC0 | 0x12*/
MSR cpsr_cf, r1
MSR spsr_cf, r2
LDR sp, =IRQ_STACK
ORR r1, r0, #LOCKOUT | ABT_MODE /*0xC0 | 0x17*/
MSR cpsr_cf, r1
MSR spsr_cf, r2
LDR sp, =ABT_STACK
ORR r1, r0, #LOCKOUT | UDF_MODE /*0xC0 | 0x1B*/
MSR cpsr_cf, r1
MSR spsr_cf, r2
LDR sp, =UDF_STACK
ORR r1, r0, #LOCKOUT | SUP_MODE /*0xC0 | 0x13*/
MSR cpsr_cf, r1
MSR spsr_cf, r2
LDR sp, =SUP_STACK /* Change CPSR to SVC mode */
/*=====================================*/
/* Initialise memory required by C code*/
/*=====================================*/
.extern Image_RW_Base /* Base of RAM to initialise */
.extern Image_ZI_Base /* Base and limit of area */
.extern Image_ZI_Limit /* to zero initialise */
LDR r3, =Image_ZI_Base /* Zero init base => top of initialised data */
LDR r1, =Image_ZI_Limit /* Top of zero init segment */
MOV r2, #0
LOOP2:
CMP r3, r1 /* Zero init */
STRCC r2, [r3], #4
BCC LOOP2
/*==================================================== */
/* Now change to user mode and set up user mode stack. */
/*==================================================== */
MRS r0, cpsr
BIC r0, r0, #LOCKOUT | MODE_MASK
ORR r1, r0, #USR_MODE
MSR cpsr_cf, r0
LDR sp, =USR_STACK
/* Call C_Entry application routine with a pointer to the first */
/* available memory address after ther compiler's global data */
/* This memory may be used by the application. */
/*=========================== */
/* Now we enter the C Program */
/*=========================== */
.extern C_Entry
BL C_Entry
/*=========================================== */
/* Exception Vector Function Definition */
/* Consist of function Call from C-Program. */
/*=========================================== */
SystemUndefinedHandler:
.extern ISR_UndefHandler
STMFD sp!, {r0-r12}
B ISR_UndefHandler
LDMFD sp!, {r0-r12, pc}^
SystemSwiHandler:
.extern ISR_SwiHandler
STMFD sp!, {r0-r12,lr}
LDR r0, [lr, #-4]
BIC r0, r0, #0xff000000
CMP r0, #0xff
BEQ MakeSVC
B ISR_SwiHandler
LDMFD sp!, {r0-r12, pc}^
MakeSVC:
MRS r1, spsr
BIC r1, r1, #MODE_MASK
ORR r2, r1, #SUP_MODE
MSR spsr_cf, r2
LDMFD sp!, {r0-r12, pc}^
SystemPrefetchHandler:
.extern ISR_PrefetchHandler
STMFD sp!, {r0-r12, lr}
B ISR_PrefetchHandler
LDMFD sp!, {r0-r12, lr}
;ADD sp, sp, #4
SUBS pc, lr, #4
SystemAbortHandler:
.extern ISR_AbortHandler
STMFD sp!, {r0-r12, lr}
B ISR_AbortHandler
LDMFD sp!, {r0-r12, lr}
;ADD sp, sp, #4
SUBS pc, lr, #8
SystemReserv:
SUBS pc, lr, #4
SystemIrqHandler:
.extern ISR_IrqHandler
STMFD sp!, {r0-r12, lr}
BL ISR_IrqHandler
LDMFD sp!, {r0-r12, lr}
SUBS pc, lr, #4
SystemFiqHandler:
.extern ISR_FiqHandler
STMFD sp!, {r0-r7, lr}
BL ISR_FiqHandler
LDMFD sp!, {r0-r7, lr}
SUBS pc, lr, #4
/****************************************************/
/* AREA SYS_STACK, NOINIT */
/****************************************************/
.data
.SPACE USR_STACK_SIZE
USR_STACK:
.SPACE UDF_STACK_SIZE
UDF_STACK:
.SPACE ABT_STACK_SIZE
ABT_STACK:
.SPACE IRQ_STACK_SIZE
IRQ_STACK:
.SPACE FIQ_STACK_SIZE
FIQ_STACK:
.SPACE SUP_STACK_SIZE
SUP_STACK:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -