📄 init.s
字号:
;/****************************************************************************/
;/* */
;/* Copyright (C) 2006 Oki Electric Industry Co., LTD. */
;/* */
;/* System Name : ML675050 */
;/* Module Name : Flash Memory Write Utility flash module */
;/* File Name : init.s */
;/* Revision : 01.00 */
;/* Date : 2006/03/20 */
;/* */
;/****************************************************************************/
IF {ARMASM_VERSION} >= 200000
PRESERVE8
ENDIF
AREA Init, CODE
INCLUDE define.s ; common definitions
; locations of various things in our memory system
USR_Stack EQU RAM_Limit ; top of USR stack
SVC_Stack EQU USR_Stack-1024 ; top of SVC stack
; --- Define entry point
ENTRY
; set up the SVC stack pointer last and return to SVC mode
MOV R0, #Mode_SVC:OR:I_Bit:OR:F_Bit ; no interrupts
MSR CPSR_c, R0
LDR R13, =SVC_Stack ; set SVC mode STACK.
; --- initialize memory required by C code
IMPORT |Image$$RO$$Limit| ; end of ROM code (=start of ROM data)
IMPORT |Image$$RW$$Base| ; base of RAM to initialize
IMPORT |Image$$ZI$$Base| ; base and limit of area
IMPORT |Image$$ZI$$Limit| ; to zero initialize
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 initialized data
CMP r0, r1 ; check that they are different
BEQ %F1
0 CMP r1, r3 ; copy init data
LDRCC r2, [r0], #4
STRCC r2, [r1], #4
BCC %B0
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 %B2
; --- now change to user mode and set up user mode stack.
MOV R0, #Mode_USR:OR:F_Bit:OR:I_Bit
MSR CPSR_c, R0
LDR sp, =USR_Stack ; set USR mode stack.
; --- now enter the C code
IMPORT C_Entry
LDR r0, =C_Entry
MOV lr, pc
BX r0 ; branch to C_Entry function.
END_LOOP
B END_LOOP
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -