📄 stack_init.s
字号:
;************************************
;定义7中处理模式下的栈起始地址和大小
;SDRAM地址范围:0x30000000~0x33FFFFFF
;栈基址地址从0x33FFFFFF开始往后倒退
;***********************************
AREA STACK, CODE, READONLY
ENTRY
CODE32
GET 2440addr.inc
EXPORT InitStack
C_STACK_BASE EQU 0X33FF0000
C_USR_STACK_BASE EQU C_STACK_BASE
C_USR_STACK_SIZE EQU (10*1024)
C_SYS_STACK_BASE EQU C_USR_STACK_BASE - C_USR_STACK_SIZE
C_SYS_STACK_SIZE EQU (10*1024)
C_SVC_STACK_BASE EQU C_SYS_STACK_BASE - C_SYS_STACK_SIZE
C_SVC_STACK_SIZE EQU (10*1024)
C_IRQ_STACK_BASE EQU C_SVC_STACK_BASE - C_SVC_STACK_SIZE
C_IRQ_STACK_SIZE EQU (10*1024)
C_FIQ_STACK_BASE EQU C_IRQ_STACK_BASE - C_IRQ_STACK_SIZE
C_FIQ_STACK_SIZE EQU (1024)
C_ABT_STACK_BASE EQU C_FIQ_STACK_BASE - C_FIQ_STACK_SIZE
C_ABT_STACK_SIZE EQU (128)
C_UND_STACK_BASE EQU C_ABT_STACK_BASE - C_ABT_STACK_SIZE
C_UND_STACK_SIZE EQU (128)
;****************************************************************
;配置各种模式下的堆栈
;****************************************************************
InitStack
MRS R7, CPSR;备份处理器模式
MRS R0, CPSR
AND R0, R0, #0XFFFFFFE0
;配置SVC模式的堆栈
ORR R1, R0, #0X13
MSR CPSR_c, R1
LDR SP, =C_SVC_STACK_BASE
;配置IRQ模式的堆栈
ORR R1, R0, #0X12
MSR CPSR_c, R1
LDR SP, =C_IRQ_STACK_BASE
;配置FIQ模式的堆栈
ORR R1, R0, #0X11
MSR CPSR_c, R1
LDR SP, =C_FIQ_STACK_BASE
;配置UND模式的堆栈
ORR R1, R0, #0X1B
MSR CPSR_c, R1
LDR SP, =C_UND_STACK_BASE
;配置ABT模式的堆栈
ORR R1, R0, #0X17
MSR CPSR_c, R1
LDR SP, =C_ABT_STACK_BASE
;配置SYS模式的堆栈
ORR R1, R0, #0X1F
MSR CPSR_c, R1
LDR SP, =C_SYS_STACK_BASE
MSR CPSR_c, R7
BX LR
; MOV PC, LR
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -