📄 boot.s
字号:
;--------------------------------------------------------------------------------------------------
; - AT91SAM7x256启动程序 - 作者:焦海波 -
;--------------------------------------------------------------------------------------------------
;- 文件名称 : cstartup.s
;- 功能描述 : 这是启动代码文件,其主要为系统各个处理模式分配堆栈,建立SWI系统调用
;- 版本 : V0.1
;- 建立时间 : 2007/02/22 18:34
;--------------------------------------------------------------------------------------------------
INCLUDE at91sam7x256/include/AT91SAM7X256.inc
INCLUDE arm7tdmi/include/arm.inc
;--------------------------------------------------------------------------------------------------
;- 仅本文件使用的一些宏定义
;--------------------------------------------------------------------------------------------------
AT91C_SRAM_AFTER_REMAP EQU 0x0
;- 系统各内核模式使用的堆栈,注意这是重映射指令之后的堆栈分配
IRQ_STACK_SIZE EQU (256 * 4)
FIQ_STACK_SIZE EQU (16 * 4)
ABT_STACK_SIZE EQU (16 * 4)
UND_STACK_SIZE EQU (16 * 4)
;--------------------------------------------------------------------------------------------------
;- 代码区
;--------------------------------------------------------------------------------------------------
AREA Startup, CODE, READONLY
ENTRY
EXPORT SYSEntry
SYSEntry
;--------------------------------------------------------------------------------------------------
;- 应用系统初始化函数
;--------------------------------------------------------------------------------------------------
IMPORT vLowLevelInit
LDR R13, = (AT91C_SRAM_AFTER_REMAP+AT91C_ISRAM_SIZE)
BL vLowLevelInit
;------------------------------------------------------------------------------
;- 为各种内核模式分配堆栈
;------------------------------------------------------------------------------
LDR R0, = (AT91C_SRAM_AFTER_REMAP + AT91C_ISRAM_SIZE)
;- FIQ模式
MSR CPSR_c, #ARM_MODE_FIQ:OR:I_BIT:OR:F_BIT
MOV R13, R0
SUB R0, R0, #FIQ_STACK_SIZE
;- IRQ模式
MSR CPSR_c, #ARM_MODE_IRQ:OR:I_BIT:OR:F_BIT
MOV R13, R0
SUB R0, R0, #IRQ_STACK_SIZE
;- 异常终止模式
MSR CPSR_c, #ARM_MODE_ABORT:OR:I_BIT:OR:F_BIT
MOV R13, R0
SUB R0, R0, #ABT_STACK_SIZE
;- 未定义指令模式
MSR CPSR_c, #ARM_MODE_UNDEF:OR:I_BIT:OR:F_BIT
MOV R13, R0
SUB R0, R0, #UND_STACK_SIZE
;- 管理模式
MSR CPSR_c, #ARM_MODE_SVC
MOV R13, R0
;------------------------------------------------------------------------------
;- 进入C程序
;------------------------------------------------------------------------------
IMPORT CMain
LDR R0, =CMain
MOV LR, PC
BX R0
End
B End
;------------------------------------------------------------------------------
;- 运行在RAM中的各个系统函数的入口函数,它们完成各自相应函数的调用
;------------------------------------------------------------------------------
;- 首先定义一个系统调用宏,负责完成系统函数的调用
MACRO
__macSYSCaller $NUM
STMFD SP!, {LR}
SWI $NUM
LDMFD SP!, {LR}
BX LR
MEND
;- 各系统函数的入口函数
EXPORT DFL_IsLockedPage
EXPORT DFL_PageLock
EXPORT DFL_PageUnlock
EXPORT DFL_WriteFlash
EXPORT DFL_WriteAndLockFlash
EXPORT DFL_EraseAllFlash
EXPORT DFL_SetNVM
EXPORT DFL_ClearNVM
DFL_IsLockedPage
__macSYSCaller 0
DFL_PageLock
__macSYSCaller 1
DFL_PageUnlock
__macSYSCaller 2
DFL_WriteFlash
__macSYSCaller 3
DFL_WriteAndLockFlash
__macSYSCaller 4
DFL_EraseAllFlash
__macSYSCaller 5
DFL_SetNVM
__macSYSCaller 6
DFL_ClearNVM
__macSYSCaller 7
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -