⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boot.s

📁 《嵌入式网络系统设计-基于Atmel ARM7 系列》这个本书的光盘资料
💻 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 + -