📄 startup.s
字号:
PRESERVE8
AREA START, CODE, READONLY
ENTRY
CODE32
GET 2440addr.inc
IMPORT InitPLL
IMPORT InitBank
IMPORT InitStack
IMPORT InitRORWZI
IMPORT IRQ_Dispatch
IMPORT Main
IMPORT OSIntExit
IMPORT OS_CPU_IRQ_ISR
;异常向量表
LDR PC, =HANDLE_ResetInit ;复位异常
LDR PC, =HandlerUndef ;未定义指令异常
LDR PC, =HandlerSWI ;软中断异常
LDR PC, =HandlerPabort ;取指中止异常
LDR PC, =HandlerDabort ;数据中止异常
LDR PC, . ;保留
LDR PC, =OS_CPU_IRQ_ISR ;IRQ中断异常
LDR PC, =HandlerFIQ ;FIQ中断异常
;********************************************************
;复位异常处理函数
;处理系统的复位异常,初始化硬件系统环境,并调到c语言
;********************************************************
HANDLE_ResetInit
;关闭看门狗
LDR R0, =WTCON
LDR R1, =0X0
STR R1, [R0]
;屏蔽IRQ和FIQ中断位
MRS R0, CPSR
ORR R0, R0,#0xc0
MSR CPSR_c,R0
BL InitPLL ;配置MPLL和UPLL时钟
BL InitBank ;配置bank的参数
BL InitStack ;配置各种模式下的堆栈
BL InitRORWZI ;RW和ZI段的初始化
;开启IRQ和FIQ中断位
MRS R0, CPSR
AND R0, R0,#0x1F
MSR CPSR_c,R0
B Main
;********************************************************
;未定义指令异常处理函数
;********************************************************
HandlerUndef
;********************************************************
;软中断处理函数
;********************************************************
HandlerSWI
;********************************************************
;指令终止异常处理函数
;********************************************************
HandlerPabort
;********************************************************
;数据终止异常处理函数
;********************************************************
HandlerDabort
;********************************************************
;终端异常处理函数
;********************************************************
HandlerIRQ
; SUB LR, LR, #4
; STMFD SP!, {R0-R12, LR}
; LDR LR, =RETURN_ADDR
; LDR PC, =IRQ_Dispatch
RETURN_ADDR
LDMFD SP!, {R0-R12, PC}^
;SPSR复制到CPSR中
;是把R0到R7及其PC等十三个寄存器的值都恢复
;********************************************************
;快速中断异常处理函数
;********************************************************
HandlerFIQ
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -