📄 init.s
字号:
;Copyright Spreadtrum 2005, All rights reserved.
;2005-11-11
;
;This is the example of reset handler.
;It mainly does the flowing operations:
;1. Initializes stack pointers and interrupt for each mode.
;2. Branch to __main in C library.(__main initializes C lib and calls main()).
;
;On reset, the ARM core starts up in supervistor(SVC) mode,
; in ARM state, with IRQ and FIQ disabled.
;
;
;
;Import __main.
IMPORT __main
;
;
;Export reset handler.
EXPORT SCI_HandleReset
;
;Const data define.
USER_MODE EQU 0xD0
FIQ_MODE EQU 0x11
IRQ_MODE EQU 0x12
SVC_MODE EQU 0x13
ABT_MODE EQU 0xD7
UND_MODE EQU 0xDB
SYS_MODE EQU 0xDF
I_Bit EQU 0x80 ; When I bit is set, IRQ is disabled
F_Bit EQU 0x40 ; When F bit is set, FIQ is disabled
;Disable IRQ
INT_IRQ_DISABLE_ADDR EQU 0x8000000C
INT_IRQ_DISABLE_VALUE EQU 0xFFFFFFFF
;
;Disable FIQ
INT_FIQ_DISABLE_ADDR EQU 0x8000002C
INT_FIQ_DISABLE_VALUE EQU 0xFFFFFFFF
;
;Set external memory access time to max value.
EXT_MEM_CTL0_ADDR EQU 0x20000000
EXT_MEM_CTL0_VALUE EQU 0x08026708
;
;
;System RAM locations
RAM_Limited EQU 0x04080000
FIQ_STACK EQU RAM_Limited
IRQ_STACK EQU FIQ_STACK - 256
ABT_STACK EQU IRQ_STACK - 256
UND_STACK EQU ABT_STACK - 256
SYS_STACK EQU UND_STACK - 256
SVC_STACK EQU SYS_STACK - 256
AREA ResetHandler, CODE, READONLY
CODE32
ENTRY
SCI_HandleReset
;
;Disable IRQ
LDR R0, =INT_IRQ_DISABLE_ADDR
LDR R1, =INT_IRQ_DISABLE_VALUE
STR R1, [R0]
;
;Disable FIQ
LDR R0, =INT_FIQ_DISABLE_ADDR
LDR R1, =INT_FIQ_DISABLE_VALUE
STR R1, [R0]
;
;Set external memory access time to max value.
LDR R0, =EXT_MEM_CTL0_ADDR
LDR R1, =EXT_MEM_CTL0_VALUE
STR R1, [R0]
;
;Initializes stack pointers and interrupt for each mode.
;Disable IRQ and FIQ
;
;FIQ Mode
MSR CPSR_c, #FIQ_MODE:OR:I_Bit:OR:F_Bit
LDR SP, =FIQ_STACK
;
;IRQ Mode
MSR CPSR_c, #IRQ_MODE:OR:I_Bit:OR:F_Bit
LDR SP, =IRQ_STACK
;
;ABT Mode
MSR CPSR_c, #ABT_MODE
LDR SP, =ABT_STACK
;
;UND Mode
MSR CPSR_c, #UND_MODE
LDR SP, =UND_STACK
;
;SYS Mode
MSR CPSR_c, #SYS_MODE
LDR SP, =SYS_STACK
;
;SVC Mode
MSR CPSR_c, #SVC_MODE:OR:I_Bit:OR:F_Bit
LDR SP, =SVC_STACK
;
;Branch to __main in C library.(__main initializes C lib and calls main()).
B __main
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -