📄 init.s
字号:
AREA Init, CODE, READONLY
CODE32
GET snds.s
ENTRY
LDR PC, =ResetInit
LDR PC, =Undefine
LDR PC, =SWI_handler
LDR PC, =Pretch_handler
LDR PC, =Data_Pretch
LDR PC, =Reserved
LDR PC, =IRQ_Handler
LDR PC, =FIQ_Handler
IMPORT main
;IMPORT IRQ_wait
Undefine
BL Undefine
SWI_handler ; SVC模式
STMFD SP!, {R0-R12, LR}
MRS R0, SPSR
STMFD SP!, {R0}
;BL main
LDMFD SP!, {R0}
MSR SPSR_cxsf, R0
LDMFD SP!, {R0-R12, LR}
SUBS PC, LR, #4
Pretch_handler
B Pretch_handler
Data_Pretch
B Data_Pretch
Reserved
B Reserved
IRQ_Handler
STMFD SP!, {R0-R12, LR}
MRS R9, SPSR
STMFD SP!, {R9}
; BL IRQ_wait
LDMFD SP!, {R9}
LDMFD SP!, {R0-R12, LR}
MSR CPSR_cxsf, R9
;MOV PC, LR
;LDMFD sp!,{r0-r12,pc}
MOV PC, LR
FIQ_Handler
B FIQ_Handler
InitStack
MOV R0, LR
;Build the SVC stack
;设置管理模式堆栈
MSR CPSR_c, #0xd3
;LDR SP, StackSvc
LDR SP, =0x810000
;Build the IRQ stack
;设置中断模式堆栈
MSR CPSR_c, #0x52
;LDR SP, StackIrq
LDR SP, =0x810000
;Build the FIQ stack
;设置快速中断模式堆栈
MSR CPSR_c, #0xd1
;LDR SP, StackFiq
LDR SP, =0x830000
;Build the DATAABORT stack
;设置中止模式堆栈
MSR CPSR_c, #0xd7
;LDR SP, StackAbt
LDR SP, =0x840000
;Build the UDF stack
;设置未定义模式堆栈
MSR CPSR_c, #0xdb
;LDR SP, StackUnd
LDR SP, =0x850000
;Build the SYS stack
;设置系统模式堆栈
;MSR CPSR_c, #0xdf
MSR CPSR_c, #0x10
;LDR SP, StackUsr
LDR SP, =0x860000
; Bulid the use stack
; 设置用户模式
MSR CPSR_c, #0x10
;LDR SP, StackSvc
LDR SP, =0x800000
MOV PC, R0
ResetInit
MRS r0, cpsr
BIC r0, r0, #MASK_MODE
ORR r0, r0, #MODE_SVC32
;ORR r0, r0, #I_BIT
;ORR r0, r0, #F_BIT
MSR cpsr_c, r0
LDR r0, =ARM7_INTMASK
LDR r1, =0x3FFFFF
STR r1, [r0]
LDR r0, =ARM7_SYSCFG ;
LDR r1, =0xE7FFFF80 ;SYSCFG的初始值(根据实际需要设置SYSCFG的值)
STR r1, [r0]
;part2
LDR r1, =rEXTDBWTH ;EXTDBWTH
LDR r2, =rROMCON0 ;ROMCON0 @ 0M ~ 2M
LDR r3, =rROMCON1 ;ROMCON1 @ DISABLED
LDR r4, =rROMCON2 ;ROMCON1 @ DISABLED
LDR r5, =rROMCON3 ;ROMCON1 @ DISABLED
LDR r6, =rROMCON4 ;ROMCON1 @ DISABLED
LDR r7, =rROMCON5 ;ROMCON1 @ DISABLED
LDR r8, =rSDRAMCON0 ;SDRAMCON0 @ 2M ~ 18M
LDR r9, =rSDRAMCON1 ;SDRAMCON1 @ DISABLED
LDR r10,=rSDRAMCON2 ;SDRAMCON2 @ DISABLED
LDR r11,=rSDRAMCON3 ;SDRAMCON3 @ DISABLED
LDR r12,=rSREFEXTCON
LDR r0, =ARM7_EXTDBWTH
STMIA r0, {r1-r12}
;part3
IMPORT |Image$$RO$$Base|
IMPORT |Image$$RO$$Limit|
IMPORT |Image$$RW$$Base|
IMPORT |Image$$RW$$Limit|
IMPORT |Image$$ZI$$Base|
IMPORT |Image$$ZI$$Limit|
;***************************************************************
;Self copy from FLASH to SDRAM
LDR r0, =|Image$$RO$$Base|
LDR r1, =|Image$$RO$$Limit|
LDR r2, =|Image$$RW$$Base|
LDR r3, =|Image$$RW$$Limit|
;SUB r1, r1, r0
;SUB r3, r3, r2
;ADD r1, r1, r3
MOV r1, #0x200000
LDR r2, =0x200000 ;@2M
;ADD r2,r2,r0 ;确保从重新映象后的数据是完全一致的
COPY
LDR r3, [r0], #4
STR r3, [r2], #4
SUBS r1, r1, #4
BNE COPY
LDR r1, =rEXTDBWTH_R ;EXTDBWTH
LDR r2, =rROMCON0_R ;ROMCON0 @ 16M ~ 18M
LDR r3, =rROMCON1_R ;ROMCON1 @ DISABLED
LDR r4, =rROMCON2_R ;ROMCON2 @ DISABLED
LDR r5, =rROMCON3_R ;ROMCON3 @ DISABLED
LDR r6, =rROMCON4_R ;ROMCON4 @ DISABLED
LDR r7, =rROMCON5_R ;ROMCON4 @ DISABLED
LDR r8, =rSDRAMCON0_R ;SDRAMCON0 @ 0M ~ 16M
LDR r9, =rSDRAMCON1_R ;SDRAMCON1 @ DISABLED
LDR r10,=rSDRAMCON2_R ;SDRAMCON2 @ DISABLED
LDR r11,=rSDRAMCON3_R ;SDRAMCON3 @ DISABLED
LDR r12,=rSREFEXTCON_R
LDR r0, =ARM7_EXTDBWTH
STMIA r0, {r1-r12}
; 设置串口中断 IRQ接收中断
BL InitStack
;LDR r0, =ARM7_INTMODE
;LDR r1, =0x0
;STR r1, [r0]
;LDR r0, =ARM7_INTMASK
;LDR r1, =0x1FFFDF
;STR r1, [r0]
;LDR PC, = hm_monitor
LDR PC, =main
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -