📄 boot.s
字号:
;--------------------------------------------------------------------------------------------------
; - AT91SAM7x256启动程序 - 作者:焦海波 -
;--------------------------------------------------------------------------------------------------
;- 文件名称 : cstartup.s
;- 功能描述 : 这是启动代码文件,其完成硬件的的初始化工作:1、存储器重映射;2、设置并选择PLLCK作为主
;- : 机时钟和处理器时钟;3、加载并将系统控制权交给在RAM中运行的函数库模块
;- 版本 : V0.1
;- 建立时间 : 2007/02/22 18:34
;--------------------------------------------------------------------------------------------------
INCLUDE at91sam7x256/include/AT91SAM7X256.inc
INCLUDE arm7tdmi/include/arm.inc
;--------------------------------------------------------------------------------------------------
;- 仅本文件使用的一些宏定义
;--------------------------------------------------------------------------------------------------
AT91C_SRAM_BEFORE_REMAP EQU AT91C_ISRAM
TOP_INTERNAL_MEMORY EQU AT91C_SRAM_BEFORE_REMAP
SYS_LOAD_ADDR EQU 0x40
DFL_STORE_ADDR EQU 0x00100200
;--------------------------------------------------------------------------------------------------
;- 代码区
;--------------------------------------------------------------------------------------------------
AREA Startup, CODE, READONLY
ENTRY
EXPORT SYSEntry
SYSEntry
B Handler_Reset ;跳转到复位处理函数
VEC_UndefInst
B VEC_UndefInst ;未定义指令异常
VEC_SoftInterrupt
B VEC_SoftInterrupt ;软件中断
VEC_PrefetchAbort
B VEC_PrefetchAbort ;预取指异常
VEC_DataAbort
B VEC_DataAbort ;数据终止异常
VEC_Reserve
B VEC_Reserve ;保留
VEC_IRQ
B VEC_IRQ ;IRQ
VEC_FIQ
B VEC_FIQ ;FIQ
;--------------------------------------------------------------------------------------------------
;- 系统复位后的初始化函数
;--------------------------------------------------------------------------------------------------
Handler_Reset
IMPORT rvLowLevelInit ;- 导入硬件初始化函数
LDR R13, = (TOP_INTERNAL_MEMORY+AT91C_ISRAM_SIZE) ;- 为C程序分配一个临时堆栈,并进入底层硬件初始化程序
BL rvLowLevelInit
LDR R2, =0x00000000 ;- 向0x0写0x12345678,如果改写成功则表明存储器已经重映射
LDR R1, [R2]
LDR R3, =0x12345678
STR R3, [R2]
LDR R2, [R2]
CMP R3, R2
BEQ Recover
LDR R12, pfunInitRemap ;- 加载存储器重映射之后的处理函数地址
MOV R1, #AT91C_MC_RCB ;- 重映射
STR R1, [R0]
MOV PC, R12
pfunInitRemap
DCD Loader
Recover
LDR R2, =0x00000000
STR R1, [R2]
;------------------------------------------------------------------------------
;- 加载主系统
;------------------------------------------------------------------------------
Loader
; 为相关寄存器设置初始值
MOV R4, #0
MOV R5, #SYS_LOAD_ADDR
LDR R6, =(DFL_STORE_ADDR + 4)
; 读取需要加载的代码长度
LDR R0, =DFL_STORE_ADDR
LDR R7, [R0]
StartLoad
CMP R4, R7
BCS EndLoad
LDR R0, [R6, #0]
STR R0, [R5, #0]
ADD R5, R5, #4
ADD R6, R6, #4
ADD R4, R4, #4
B StartLoad
EndLoad
LDR R0, =SYS_LOAD_ADDR
MOV LR, PC
BX R0
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -