📄 init.s
字号:
PIOA_PDR EQU 0xFFFFF404
PIOA_ASR EQU 0xFFFFF470
CKGR_PLLBR EQU 0xFFFFFC2C
PMC_SR EQU 0xFFFFFC68
Mode_USR EQU 0x10
Mode_FIQ EQU 0x11
Mode_IRQ EQU 0x12
Mode_SVC EQU 0x13
Mode_ABT EQU 0x17
Mode_UND EQU 0x1B
Mode_SYS EQU 0x1F
I_Bit EQU 0x80 ; when I bit is set, IRQ is disabled
F_Bit EQU 0x40 ; when F bit is set, FIQ is disabled
UND_Stack_Size EQU 0x00000010
SVC_Stack_Size EQU 0x00000010
ABT_Stack_Size EQU 0x00000010
FIQ_Stack_Size EQU 0x00000010
IRQ_Stack_Size EQU 0x00000080
USR_Stack_Size EQU 0x00000400
AREA Init,CODE,READONLY
ENTRY
Vectors
LDR PC,Reset_Addr
LDR PC,Undef_Addr
LDR PC,SWI_Addr
LDR PC,PAbt_Addr
LDR PC,DAbt_Addr
NOP ; Reserved Vector
LDR PC,[PC,#-&F20]
;//LDR PC,IRQ_Addr
LDR PC,FIQ_Addr
Reset_Addr DCD Reset_Handler
Undef_Addr DCD Undef_Handler
SWI_Addr DCD SWI_Handler
PAbt_Addr DCD PAbt_Handler
DAbt_Addr DCD DAbt_Handler
DCD 0 ; Reserved Address
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_Handler
Undef_Handler B Undef_Handler
SWI_Handler B SWI_Handler
PAbt_Handler B PAbt_Handler
DAbt_Handler B DAbt_Handler
IRQ_Handler B IRQ_Handler
FIQ_Handler B FIQ_Handler
Reset_Handler
;enable DBUG
LDR R1, =&C0000000
LDR R0, =PIOA_PDR
STR R1, [R0]
LDR R1, =&C0000000
LDR R0, =PIOA_ASR
STR R1, [R0]
;set PLLB
LDR R0, =CKGR_PLLBR
LDR R1, =&10193F05
STR R1, [R0]
PLLB_WAIT
LDR R0, =PMC_SR
LDR R1, [R0]
TST R1, #4
BEQ PLLB_WAIT
MCK_WAIT
LDR R0, =PMC_SR
LDR R1, [R0]
TST R1, #8
BEQ MCK_WAIT
;//Setup Stack for each mode
LDR R0, =&204000
;//Enter Undefined Instruction Mode and set its Stack Pointer
MSR CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #UND_Stack_Size
;//Enter Abort Mode and set its Stack Pointer
MSR CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #ABT_Stack_Size
;//Enter FIQ Mode and set its Stack Pointer
MSR CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #FIQ_Stack_Size
;//Enter IRQ Mode and set its Stack Pointer
MSR CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #IRQ_Stack_Size
;//Enter Supervisor Mode and set its Stack Pointer
MSR CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
MOV SP, R0
SUB R0, R0, #SVC_Stack_Size
;//Enter User Mode and set its Stack Pointer
MSR CPSR_c, #Mode_USR
MOV SP, R0
IMPORT Main
B Main
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -