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

📄 startup.s

📁 LPC2220实用启动代码
💻 S
字号:
; *****************************************************************************
; *																			  *
; *								复位引导程序								  *
; *																			  *
; *****************************************************************************

				
				IMPORT		Int_Undefined
				IMPORT		Int_SWI
				IMPORT		Int_PrefetchAbort
				IMPORT		Int_DataAbort
				IMPORT		Int_FIQ
				IMPORT		Main
				EXPORT		ResetEntry


;定义堆栈的大小(2KB)
IRQ_STACK_LENGTH	EQU         128
FIQ_STACK_LENGTH	EQU         32
SVC_STACK_LENGTH	EQU         32
ABT_STACK_LENGTH	EQU         0
UND_STACK_LENGTH	EQU         0
USR_STACK_LENGTH	EQU			320

				AREA		GprsData, DATA, NOINIT
GprsDataReserve	SPACE		0x7800

				AREA		Stacks, DATA, NOINIT, ALIGN=2

; -----------------------------------------------------------------------------
; 堆栈空间定义
UsrStackSpace	SPACE		USR_STACK_LENGTH * 4							; 系统/用户模式堆栈空间
IrqStackSpace	SPACE		IRQ_STACK_LENGTH * 4							; IRQ中断模式堆栈空间
FiqStackSpace	SPACE		FIQ_STACK_LENGTH * 4							; FIQ中断模式堆栈空间
SvcStackSpace	SPACE		SVC_STACK_LENGTH * 4							; 管理模式堆栈空间
AbtStackSpace	SPACE		ABT_STACK_LENGTH * 4							; 中止模式堆栈空间
UndStackSpace	SPACE		UND_STACK_LENGTH * 4							; 未定义模式堆栈空间

				
				AREA		Startup,CODE,READONLY
				ENTRY

; -----------------------------------------------------------------------------
; 复位中断向量表
ResetEntry
        		LDR     	PC, ResetAddr
        		LDR     	PC, UndefinedAddr
        		LDR     	PC, SwiAddr
        		LDR     	PC, PrefetchAddr
        		LDR     	PC, DataAbortAddr
				B			.
				LDR			PC, [PC, #-0xff0]
        		LDR     	PC, FiqAddr

ResetAddr       DCD			Int_Reset
UndefinedAddr   DCD			Int_Undefined
SwiAddr         DCD			Int_SWI
PrefetchAddr    DCD			Int_PrefetchAbort
DataAbortAddr   DCD			Int_DataAbort
ReserveAddr		DCD			0
IrqAddr         DCD			0
FiqAddr         DCD			Int_FIQ


; -----------------------------------------------------------------------------
; 复位(管理模式)
Int_Reset
				MSR			CPSR_c, #0xd3									; 设置管理模式SVC堆栈
				LDR			SP, StackSvc
				
				MSR			CPSR_c, #0xd2									; 设置中断模式IRQ堆栈
				LDR			SP, StackIrq
				
				MSR			CPSR_c, #0xd1									; 设置快速中断模式FIQ堆栈
				LDR			SP, StackFiq
				
				MSR			CPSR_c, #0xd7									; 设置中止模式DATAABORT堆栈
				LDR			SP, StackAbt
				
				MSR			CPSR_c, #0xdb									; 设置未定义模式UDF堆栈
				LDR			SP, StackUnd
				
				MSR			CPSR_c, #0xdf									; 设置系统/用户模式USR堆栈
				LDR			SP, StackUsr
				
				B			Main											; 系统模式


; -----------------------------------------------------------------------------
; 堆栈定义
StackFiq		DCD			FiqStackSpace + (FIQ_STACK_LENGTH - 1)* 4
StackSvc		DCD			SvcStackSpace + (SVC_STACK_LENGTH - 1)* 4
StackIrq		DCD			IrqStackSpace + (IRQ_STACK_LENGTH - 1)* 4
StackAbt		DCD			AbtStackSpace + (ABT_STACK_LENGTH - 1)* 4
StackUnd		DCD			UndStackSpace + (UND_STACK_LENGTH - 1)* 4
StackUsr		DCD			UsrStackSpace + (USR_STACK_LENGTH - 1)* 4

GprsDataDefine	DCD			GprsDataReserve

				END

⌨️ 快捷键说明

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