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

📄 init.s

📁 移植的S3C4510b的ucos-ii中的启动源代码
💻 S
字号:
##########################################################################################
#
#	Filename:	init.s
#
#	Description:This code initials memory,stack pointer,exception vectors,variables in C code
#
#	Author:
#
#	Date:2004.2.5
#
###########################################################################################

    .include "asmdef.a"

    .macro HANDLER HandleLabel
    sub	    sp,sp,#4	    /* decrement sp(to store jump address) */							
    stmfd   sp!,{r0}	    /* PUSH the work register to stack(lr does't push because it return to original address) */
    ldr	    r0,=\HandleLabel /* load the address of HandleXXX to r0 */
    ldr	    r0,[r0]	    	/* load the contents(service routine start address) of HandleXXX */
    str	    r0,[sp,#4]	    /* store the contents(ISR) of HandleXXX to stack */
    ldmfd   sp!,{r0,pc}	    /* POP the work register and pc(jump to ISR) */
    .endm


####################################################
#	Program entry point and exception vector
####################################################
ENTRY:
	B		Reset_Handler
	B		ArmUndefHandler
	B		ArmSwiHandler
	B		ArmPreHandler
	B		ArmAbortHandler
	B		.
	B		ArmIrqHandler
	B		ArmFiqHandler

    .ltorg	
ArmUndefHandler:	HANDLER ArmUndefHandle
ArmSwiHandler:		HANDLER	ArmSwiHandle
ArmPreHandler:		HANDLER ArmPreHandle
ArmAbortHandler:	HANDLER ArmAbortHandle
ArmRevHandler:		HANDLER ArmRevHandle
ArmIrqHandler:		HANDLER ArmIrqHandle
ArmFiqHandler:		HANDLER ArmFiqHandle



#****************************************************
#*	START											*
#****************************************************
	.global	Reset_Handler
Reset_Handler:
	###############################################
	#	
	###############################################
	#	LDR		sp,	=0x0100000

	###############################################
	#	Setup the system configure register(SYSCFG)
	###############################################
	LDR		r0,	=SPREG_BASEADDR
	LDR		r1,	=0xE7FFFF90
	STR		r1,	[r0]

	################################################
	#	Configure memory (ROM,SRAM,SDRAM)
	################################################

	LDR		r0,	=MemoryCtrlRegValue
	LDMIA	r0,	{r1-r12}
	LDR		r0,	=MEMCONFBASE_ADDR
	STMIA	r0,	{r1-r12}

	################################################
	#	Disable all interrupts
	################################################
	LDR		r0,	=INTPEND_ADDR
	LDR		r1,	=0xFFFFFFFF
	STR		r1,	[r0]

	LDR		r0,	=INTMASK_ADDR
	LDR		r1,	=0x003FFFFF
	STR		r1,	[r0]

	#################################################
	#	Configure System clock
	#################################################
	LDR		r0,	=CLKCON_ADDR
	LDR		r1,	=0x00000000
	STR		r1,	[r0]

	#################################################
	#	Configure Exteral I/O Regs
	#################################################
	LDR		r0,	=EXTACON0_ADDR
	LDR		r1,	=0x02000200
	STR		r1,	[r0]

	LDR		r0,	=EXTACON1_ADDR
	LDR		r1,	=0x02000200
	STR		r1,	[r0]

    #;****************************************************
    #;*	Setup IRQ handler								*
    #;****************************************************
    ldr	    r0,=ArmIrqHandle	/* This routine is needed */
    ldr	    r1,=ArmIRQIsr		/* if there isn't 'subs pc,lr,#4' at 0x18, 0x1c */
    str	    r1,[r0]

	#################################################
	#	external symbol used 
	#################################################
	.extern	Image_RO_Limit
	.extern	Image_RW_Base
	.extern	Image_ZI_Base
	.extern	Image_ZI_Limit
	
	#################################################
	#	Initialize memory with zero used in C code
	#################################################
	LDR		r0,	=Image_RO_Limit
	LDR		r1,	=Image_RW_Base
	LDR		r3,	=Image_ZI_Base
	CMP		r0,	r1
	BEQ		LOOP1
LOOP0:
	CMP		r1,	r3
	LDRCC	r2,	[r0], #4
	STRCC	r2,	[r1], #4	
	BCC		LOOP0
LOOP1:
	LDR		r1,=Image_ZI_Limit
	MOV		r2,	#0
LOOP2:
	CMP		r3,	r1
	STRCC	r2,	[r3], #4
	BCC		LOOP2
	
	
	#################################################
	#	Initialize Stack Space
	#################################################
INITIALIZE_STACK:
	MRS		r0,	cpsr
	BIC		r0,	r0,	#CPSR_DISABLE_INT | CPSR_MODE_MASK
	ORR		r2,	r0,	#CPSR_USR_MODE

	ORR		r1,	r0,	#CPSR_DISABLE_INT | CPSR_FIQ_MODE
	MSR		cpsr_cf,	r1
	MSR		spsr_cf,	r2
	LDR		sp,	=FIQ_STACK

	ORR		r1,	r0,	#CPSR_DISABLE_INT | CPSR_IRQ_MODE
	MSR		cpsr_cf,	r1
	MSR		spsr_cf,	r2
	LDR		sp,	=IRQ_STACK

	ORR		r1,	r0,	#CPSR_DISABLE_INT | CPSR_ABT_MODE
	MSR		cpsr_cf,	r1
	MSR		spsr_cf,	r2
	LDR		sp,	=ABT_STACK

	ORR		r1,	r0,	#CPSR_DISABLE_INT | CPSR_UDF_MODE
	MSR		cpsr_cf,	r1
	MSR		spsr_cf,	r2
	LDR		sp,	=UDF_STACK

	ORR		r1,	r0,	#CPSR_DISABLE_INT | CPSR_SUP_MODE
#
	BIC		r1,r1,#CPSR_DISABLE_INT
#
	MSR		cpsr_cf,	r1
	MSR		spsr_cf,	r2
	LDR		sp,	=SUP_STACK

#	ORR		r1,	r0,	#CPSR_DISABLE_INT | CPSR_SUP_MODE
#	MSR		cpsr_cf,	r1
#	MSR		spsr_cf,	r2
#	LDR		sp,	=SUP_STACK

	#######################################################
	#	Switch user mode and set its stack
	#######################################################

#	MRS		r0,	cpsr
#	BIC		r0,	r0,	#CPSR_DISABLE_INT | CPSR_MODE_MASK
#	ORR		r1,	r0,	#CPSR_USR_MODE
#	MSR		cpsr_cf,	r1
#	LDR		sp,	=USR_STACK

	###########################################################
	#	Entry to main() in C code
	###########################################################
	.extern		Main
	BL		Main

	######################################################
	#	define exception handle functions
	######################################################
#	
#SystemUndefinedHandler:
#	B		SystemUndefinedHandler
#SystemSwiHandler:
#	B		SystemSwiHandler
#SystemPrefetchHandler:
#	B		SystemPrefetchHandler
#SystemAbortHandler:
#	B		SystemAbortHandler
#SystemReserveHandler:
#	B		SystemReserveHandler

#SystemIrqHandler:
#	.extern		ISR_IrqHandler
#	STMFD		sp!,	{r0-r12,lr}
#	BL			ISR_IrqHandler
#	LDMFD		sp!,	{r0-r12,lr}
#	SUBS		pc,	lr,	#4

#SystemFiqHandler:
#	.extern		ISR_FiqHandler
#	STMFD		sp!,	{r0-r7,lr}
#	BL			ISR_FiqHandler
#	LDMFD		sp!,	{r0-r7,lr}
#	SUBS		pc,	lr,	#4

########################################################
#	constant value of memory control registers allocated
#	in ROM/FLASH
########################################################
MemoryCtrlRegValue:
	.long	0x05503E02			
#	.long	0x02000060
	.long	0x1a060040			@配置ROM0从0x1800000到0x1a00000
	.long	0x00000060
	.long	0x00000060
	.long	0x00000060
	.long	0x00000060
	.long	0x00000060
#	.long	0x14010380
	.long	0x10000301			@配置RAM0从0x0到0x1000000
	.long	0x00000000
	.long	0x00000000
	.long	0x00000000
	.long	0x67178360

#########################################################
#	Define stack space for all modes
#########################################################
	.data
			.SPACE		2048
USR_STACK:	.SPACE		512
UDF_STACK:	.SPACE		512
ABT_STACK:	.SPACE		512
IRQ_STACK:	.SPACE		512
FIQ_STACK:	.SPACE		1024
SUP_STACK:	

#	.end

⌨️ 快捷键说明

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