📄 init.s
字号:
AREA Init,CODE,READONLY
;Pre-defined constants
USERMODE EQU 0x10
FIQMODE EQU 0x11
IRQMODE EQU 0x12
SVCMODE EQU 0x13
ABORTMODE EQU 0x17
UNDEFMODE EQU 0x1b
MODEMASK EQU 0x1f
NOINT EQU 0xc0
HAVEINT EQU 0x00
GPIO_AFG EQU 0xFFF83000 ;/* configuration Register */
GPIO_DIR EQU 0xFFF83004 ;/* direction Register */
GPIO_DATAOUT EQU 0xFFF83008 ;/* GPIO data output Register */
GPIO_DATAIN EQU 0xFFF8300C ;/* GPIO data input Register */
DEBNCE_CTRL EQU 0xFFF83010 ;/* debounce control Register */
KEEP
ENTRY
EXPORT Reset_Handler
;****************************************************
;* Initialize stacks *
;****************************************************
Reset_Handler
mrs r0,cpsr
bic r0,r0,#MODEMASK
orr r1,r0,#UNDEFMODE|NOINT
msr cpsr_cxsf,r1 ;UndefMode
ldr sp,=UndefStack
orr r1,r0,#ABORTMODE|NOINT
msr cpsr_cxsf,r1 ;AbortMode
ldr sp,=AbortStack
orr r1,r0,#IRQMODE|NOINT
msr cpsr_cxsf,r1 ;IRQMode
ldr sp,=IRQStack
orr r1,r0,#FIQMODE|NOINT
msr cpsr_cxsf,r1 ;FIQMode
ldr sp,=FIQStack
orr r1,r0,#SVCMODE|NOINT
msr cpsr_cxsf,r1 ;SVCMode
ldr sp,=SVCStack
;********************************************************
;* Copy and paste RW data/zero initialized data *
;********************************************************
orr r1,r0,#USERMODE
bic r1,r1,#0xc0
msr cpsr_cxsf,r1 ;SVCMode
ldr sp,=UserStack
;********************************************************
;* Copy and paste RW data/zero initialized data *
;********************************************************
IMPORT |Image$$RO$$Limit| ; End of ROM code
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
IMPORT main ; The main entry of mon program
LDR r0, =|Image$$RO$$Limit| ; pointer to ROM data
LDR r1, =|Image$$RW$$Base| ; RAM copy
LDR r3, =|Image$$ZI$$Base|
;Zero init base => top of initialised data
CMP r0, r1 ; Check that they are different
BEQ %F1
0
CMP r1, r3 ; Copy init data
LDRCC r2, [r0], #4 ;--> LDRCC r2, [r0] + ADD r0, r0, #4
STRCC r2, [r1], #4 ;--> STRCC r2, [r1] + ADD r1, 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
BL main ; jump to C program
B .
ALIGN
AREA RamData, DATA, READWRITE
^ (0x400000-0x600) ;
UserStack # 256 ;c1(c7)ffa00
SVCStack # 256 ;c1(c7)ffb00
UndefStack # 256 ;c1(c7)ffc00
AbortStack # 256 ;c1(c7)ffd00
IRQStack # 256 ;c1(c7)ffe00
FIQStack # 0 ;c1(c7)fff00
END
;+++++++++++++++++++++++++++++++++++++++++++++++++=
; LDR r0, =GPIO_AFG
; LDR r1, =0x00000014
; STR r1, [r0]
;//enable uart port ,others is GPIO
; LDR r0, =GPIO_DIR
; LDR r1, =0xffe33ffe
; STR r1, [r0]
; LDR r0, =DEBNCE_CTRL
; LDR r1, =0
; STR r1, [r0]
;//disable debug mode
; LDR r0, =GPIO_DATAOUT
;1234
; LDR r1, =0
; STR r1, [r0]
; LDR r1, =0xFFFFFFFF
; STR r1, [r0]
; B %1234
;+++++++++++++++++++++++++++++++++++++++++++++++++=
; IMPORT __main
; B __main ; jump to C program
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -