📄 init.s
字号:
AREA Init, CODE, READONLY
ENTRY
IMPORT main
;IMPORT Time0_irq
;中断向量表
Vectors
LDR PC, RESET1
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
LDR PC, DataAbortAddr
LDR PC, [PC, #-0xF20] ;IRQ_Addr ;
LDR PC, FIQ_Addr
RESET1 DCD Reset_Handler
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
nouse DCD 0
FIQ_Addr DCD FIQ_Handler
;IRQ_Addr DCD Time0_irq
Reset_Handler
;BL CODECOPY ;把FALSH的程序拷贝到RAM里运行
BL InitStack ;初始化堆栈后进入管理模式
LDR R0, =0xFFE00000
LDR R1, =0x1002529 ;MMU FLASH ADDR AT 0x1000000
STR R1, [R0]
MOV R1, #1
STR R1, [R0,#0x20] ;REMAP
B main
CODECOPY
LDR R1, =0x300000 ;RAM START ADDR
LDR R2, =0x0 ;FLASH START ADDR
MOV R0, #0x20000 ;COPY 128K FORM FLASH TO RAM
LOOP
LDR R3, [R2],#4
STR R3, [R1],#4
CMP R2, R0
BCC LOOP ;copy
MOV PC,LR
;未定义指令
Undefined
b Undefined
;取指令中止
PrefetchAbort
b PrefetchAbort
;取数据中止
DataAbort
b DataAbort
SoftwareInterrupt
B SoftwareInterrupt
;快速中断
FIQ_Handler
STMFD SP!, {R0-R3, LR}
;BL FIQ_Exception
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4
InitStack
MOV R0, LR
;设置中断模式堆栈
MSR CPSR_c, #0xd2
LDR SP, =0x40000 ;设置在RAM的最高位置
;设置快速中断模式堆栈
MSR CPSR_c, #0xd1
LDR SP, =(0x40000-0x400)
;设置中止模式堆栈
MSR CPSR_c, #0xd7
LDR SP, =(0x40000-0x400)
;设置未定义模式堆栈
MSR CPSR_c, #0xdb
LDR SP, =(0x40000-0x400)
;设置系统模式堆栈
MSR CPSR_c, #0x1f
LDR SP, =(0x40000-0x400)
;设置管理模式堆栈
MSR CPSR_c, #0x13
LDR SP, =(0x40000-0x400)
MOV PC, R0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -