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

📄 vector.s

📁 LPC2220的Bootloader自己写的,和 周立功的模版实现完全不一样
💻 S
字号:
;//***************************************************************
;//  ARM BOOT ROUTE VER1.0 for NXP_ARM release
;//  bjwork2007@gmail.com
;//  chenjun @ 2008-7-19
;//***************************************************************


	INCLUDE NXP_ARM.s

	CODE32
	AREA	boot,	CODE,	READONLY

	GBLS	MainEntry
MainEntry	SETS	"main"
	IMPORT	$MainEntry

	IMPORT	UDF_INS_VECTOR
	IMPORT	SWI_SVC_VECTOR
	IMPORT	INS_ABT_VECTOR
	IMPORT	DAT_ABT_VECTOR
	IMPORT	IRQ_SVC_VECTOR
	IMPORT	FIQ_SVC_VECTOR	

ENTRY
	
ResetEntry
    LDR     PC, ResetAddr
    LDR     PC, UndefinedAddr
    LDR     PC, SWI_Addr
    LDR     PC, PrefetchAddr
    LDR     PC, DataAbortAddr
    DCD     76151151
    LDR     PC, IRQ_Addr
    LDR     PC, FIQ_Addr

ResetAddr	 	DCD	SYS_RST_HANDLER-0x020f0000
UndefinedAddr	DCD	UDF_INS_HANDLER-0x020f0000
SWI_Addr		DCD	SWI_SVC_HANDLER-0x020f0000
PrefetchAddr	DCD	INS_ABT_HANDLER-0x020f0000
DataAbortAddr	DCD	DAT_ABT_HANDLER-0x020f0000
Nouse			DCD 0
IRQ_Addr		DCD	IRQ_SVC_HANDLER-0x020f0000
FIQ_Addr		DCD	FIQ_SVC_HANDLER-0x020f0000

UDF_INS_HANDLER
	stmfd	sp!, {r0-r3, lr}
	ldr	r0, =UDF_INS_VECTOR
	mov	lr, pc
	ldr	pc, [r0]
	ldmfd	sp!, {r0-r3, pc}^

SWI_SVC_HANDLER
	stmfd	sp!, {r0-r3, lr}
	ldr	r0, =SWI_SVC_VECTOR
	mov	lr, pc
	ldr	pc, [r0]
	ldmfd	sp!, {r0-r3, pc}^

INS_ABT_HANDLER
	sub	lr, lr, #4
	stmfd	sp!, {r0-r3, lr}
	ldr	r0, =INS_ABT_VECTOR
	mov	lr, pc
	ldr	pc, [r0]
	ldmfd	sp!, {r0-r3, pc}^

DAT_ABT_HANDLER
	sub	lr, lr, #4
	stmfd	sp!, {r0-r3, lr}
	ldr	r0, =DAT_ABT_VECTOR
	mov	lr, pc
	ldr	pc, [r0]
	ldmfd	sp!, {r0-r3, pc}^

IRQ_SVC_HANDLER
	ldr	r0, =IRQ_SVC_VECTOR
	ldr	pc, [r0]	

FIQ_SVC_HANDLER
	ldr	r0, =IRQ_SVC_VECTOR
	ldr	pc, [r0]

SYS_RST_HANDLER
;*********  set ARM working at SVC mode | disable FIQ and IRQ  ***********
	;//disable Int
	mrs	r0, cpsr				
	bic	r0, r0, #ModeMask
	orr	r0, r0, #(SVC :OR: I :OR: F)
	msr	cpsr_c, r0		

	IMPORT	InitCPU
	bl	InitCPU 

	adr	r0, ResetEntry
	ldr	r1,	BaseOfROM
	cmp	r0,	r1
	ldreq	r0, TopOfROM
	beq	InitRamData
	
	ldr	r2,	=CopyProcBeg
	sub	r1, r2, r1
	add	r0, r0, r1	
	ldr	r3,	=CopyProcEnd	
0	
	ldmia	r0!, {r4-r7}
	stmia	r2!, {r4-r7}
	cmp	r2, r3
	bcc	%B0	
		
	ldr	r3, TopOfROM
	ldr	pc, =CopyProcBeg
	
CopyProcBeg	
0	
	ldmia	r0!, {r4-r11}
	stmia	r2!, {r4-r11}
	cmp		r2, r3
	bcc		%B0	
CopyProcEnd
	
	sub	r1, r2, r3
	sub	r0, r0, r1	
			
InitRamData  
    ldr r2, BaseOfBSS
	ldr	r3, BaseOfZero	    
0
	cmp	r2, r3   
	ldrcc	r1, [r0], #4     
	strcc	r1, [r2], #4
	bcc	%B0	   

	mov	r0,	#0   
	ldr	r3,	EndOfBSS   
		    
1	  
	cmp	r2,	r3   
	strcc	r0, [r2], #4     
    bcc %B1        
    
	ldr	pc,	GotoMain	

GotoMain	DCD	$MainEntry

;***********************************************
	IMPORT	|Image$$RO$$Base|	; ROM code start	
	IMPORT	|Image$$RO$$Limit|	; RAM data starts after ROM program
	IMPORT	|Image$$RW$$Base|	; Pre-initialised variables
	IMPORT	|Image$$ZI$$Base|	; uninitialised variables
	IMPORT	|Image$$ZI$$Limit|	; End of variable RAM space

BaseOfROM	DCD	|Image$$RO$$Base|
TopOfROM	DCD	|Image$$RO$$Limit|
BaseOfBSS	DCD	|Image$$RW$$Base|
BaseOfZero	DCD	|Image$$ZI$$Base|
EndOfBSS	DCD	|Image$$ZI$$Limit|

    EXPORT	BaseOfROM
	EXPORT	TopOfROM
	EXPORT	BaseOfBSS
	EXPORT	BaseOfZero
	EXPORT	EndOfBSS
;***********************************************	
	
	END		
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -