📄 app_init0.s
字号:
/***********************************************************************
* MODULE: app_init0.s
* Description: application start assembly routines
* Runtime Env: ARM7TDMI
* Company: ESPD-inc
* Change History:
* 09-18-01 Create (Yadong Wang)
***********************************************************************/
.include "samsung4510.a"
.text
/***********************************************************************
* step2 - Setup interrupt / exception vectors
***********************************************************************/
_start:
B =Reset_Handler
B =SystemUndefinedHandler
B =SystemSwiHandler
B =SystemPrefetchHandler
B =SystemAbortHandler
nop
B =SystemIrqHandler
B =SystemFiqHandler
SystemUndefinedHandler:
B =SystemUndefinedHandler
SystemSwiHandler:
B =SystemSwiHandler
SystemPrefetchHandler:
B =SystemSwiHandler
SystemAbortHandler:
B =SystemAbortHandler
SystemIrqHandler:
B =SystemIrqHandler
SystemFiqHandler:
B =SystemFiqHandler
Reset_Handler:
/***********************************************************************
* step3 - Mask off all IRQ sources
***********************************************************************/
LDR r1, =IntMask
LDR r0, =0x3FFFFF
STR r0, [r1]
/***********************************************************************
* step4 - Initialise system stack for different processor modes
***********************************************************************/
.if 0
INITIALIZE_STACK:
MRS r0, cpsr
BIC r0, r0, #LOCKOUT | MODE_MASK
ORR r2, r0, #USR_MODE
ORR r1, r0, #LOCKOUT | FIQ_MODE
MSR cpsr_c, r1 /* change to FIQ MODE */
MSR spsr_c, r2 /* set the SPSR under FIQ */
LDR sp, =FIQ_STACK /* set SP (R13) under FIQ */
ORR r1, r0, #LOCKOUT | IRQ_MODE
MSR cpsr_c, r1 /* change to IRQ MODE */
MSR spsr_c, r2 /* set the SPSR under IRQ */
LDR sp, =IRQ_STACK /* set SP (R13) under IRQ */
ORR r1, r0, #LOCKOUT | ABT_MODE
MSR cpsr_c, r1 /* change to ABORT MODE */
MSR spsr_c, r2 /* set the SPSR under ABORT */
LDR sp, =ABT_STACK /* set SP (R13) under ABORT */
ORR r1, r0, #LOCKOUT | UDF_MODE
MSR cpsr_c, r1 /* change to Undefine MODE */
MSR spsr_c, r2 /* set the SPSR under Undefine */
LDR sp, =UDF_STACK /* set SP (R13) under Undefine */
ORR r1, r0, #LOCKOUT | SUP_MODE
MSR cpsr_c, r1 /* change to Superuser MODE */
MSR spsr_c, r2 /* set the SPSR under super */
LDR sp, =SUP_STACK /* set SP (R13) under super */
.endif
/***********************************************************************
* step5 - System Config Regsiter
* Enable Catch
* Enable write buffer
* use all internal 8K SRAM as catch
***********************************************************************/
LDR r0, =0x3FF0000
LDR r1, [r0]
BIC r1,r1,#0x30
ORR r1,r1,#0x10|0x06
STR r1, [r0]
/***********************************************************************
* step6 - Copy Data and zero bss
***********************************************************************/
.if 0
IMPORT |Image$$RO$$Limit| /* End of ROM code (=start of ROM data) */
IMPORT |Image$$RW$$Base| ; Base of RAM to initialise
IMPORT |Image$$ZI$$Base| ; Base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialise
LDR r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
LDR r1, =|Image$$RW$$Base| ; and RAM copy
LDR r3, =|Image$$ZI$$Base| ; Zero init base => top of initialised data
CMP r0, r1 ; Check that they are different
BEQ %1
0 CMP r1, r3 ; Copy init data
LDRCC r2, [r0], #4
STRCC r2, [r1], #4
BCC %0
1 LDR r1, =|Image$$ZI$$Limit| ; Top of zero init segment
MOV r2, #0
2 CMP r3, r1 ; Zero init
STRCC r2, [r3], #4
BCC %2
.endif
/***********************************************************************
* step7 - Now change to user mode and set up user mode stack.
***********************************************************************/
.if 0
MRS r0, cpsr
BIC r0, r0, #LOCKOUT /*;| MODE_MASK */
/* ORR r1, r0, #SUP_MODE ;#USR_MODE*/
MSR cpsr_cf, r0
LDR sp, =SUP_STACK /*;=USR_STACK*/
.endif
/***********************************************************************
* step8 - Enter the C program, never return
***********************************************************************/
.extern app_init1
BL app_init1
/* toggle P12 Pin */
ldr r0, =0x3ff7004
ldr r1, =0x01000000
str r1, [r0]
ldr r0, =0x3ff8004
ldr r1, =0x10000000
str r1, [r0]
ldr r0, =0x3ff5000
ldr r1, =0x00000001
str r1, [r0]
ldr r0, =0x3ff5008
loop:
ldr r1, =0x00000001
str r1, [r0]
ldr r1, =0x00000000
str r1, [r0]
b loop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -