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

📄 init.s

📁 ~{WwU_J9SC5D~}ucos~{T4Bk#,1`RkA4=S5wJT>y?IRT#,4x~}uart~{2bJT~}
💻 S
字号:
	.INCLUDE "netstart.mac"


/****************************************************/
/*	AREA	Init, CODE, READONLY					*/
/*	--- Define entry point							*/
/****************************************************/
.text
	.global	__main					/* defined to ensure that C runtime system */
__main:                  			/* is not linked in */


__ENTRY:
/****************************************************/
/*	--- Setup interrupt / exception vectors			*/
/****************************************************/
	B		SystemResetHandler
	B       SystemUndefinedHandler
	B       SystemSwiHandler
	B       SystemPrefetchHandler
	B       SystemAbortHandler
	nop										/* Reserved vector not use*/
    B       SystemIrqHandler
    B       SystemFiqHandler


/****************************************************/
/*	AREA Main, CODE, READONLY						*/
/*	The Reset Entry Point							*/
/****************************************************/
	.global	Reset_Handler
SystemResetHandler:
Reset_Handler:								/* Reset Entry Point */
	LDR		r1, =IntMask
	LDR		r0, =0xFFFFFFFF
	STR		r0, [r1]


	/*======================================*/
	/*			LED Display					*/
	/*======================================*/
	LDR		r1, =IOPMODE
	LDR		r0, =0x30080
	STR		r0, [r1]

	LDR		r1, =IOPDATA
	LDR		r0, =0x30080 
	STR		r0, [r1]


	/*======================================*/
	/*			Initialise STACK			*/
	/*======================================*/
INITIALIZE_STACK:
	MRS		r0, cpsr
	BIC		r0, r0, #LOCKOUT | MODE_MASK	/*0xC0 | 0x1F*/
	ORR		r2, r0, #USR_MODE	

	ORR		r1, r0, #LOCKOUT | FIQ_MODE		/*0xC0 | 0x11*/
	MSR		cpsr_cf, r1
	MSR		spsr_cf, r2
	LDR		sp, =FIQ_STACK

	ORR		r1, r0, #LOCKOUT | IRQ_MODE		/*0xC0 | 0x12*/
	MSR		cpsr_cf, r1
	MSR		spsr_cf, r2
	LDR		sp, =IRQ_STACK

	ORR		r1, r0, #LOCKOUT | ABT_MODE		/*0xC0 | 0x17*/
	MSR		cpsr_cf, r1
	MSR		spsr_cf, r2
	LDR		sp, =ABT_STACK

	ORR		r1, r0, #LOCKOUT | UDF_MODE		/*0xC0 | 0x1B*/
	MSR		cpsr_cf, r1
	MSR		spsr_cf, r2
	LDR		sp, =UDF_STACK

	ORR		r1, r0, #LOCKOUT | SUP_MODE		/*0xC0 | 0x13*/
	MSR		cpsr_cf, r1
	MSR		spsr_cf, r2
	LDR		sp, =SUP_STACK   				/* Change CPSR to SVC mode */
	

	/*======================================*/
	/* Initialise memory required by C code	*/
	/*======================================*/
	.extern	Image_RO_Limit					/* limit of ROM */
	.extern	Image_RW_Base					/* Base of RAM to initialise */
	.extern	Image_ZI_Base					/* Base and limit of area */
	.extern	Image_ZI_Limit					/* to zero initialise */

	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				/* Zero init base => top of initialised data */
	MOV		r2, #0							/* Top of zero init segment */

LOOP2:
	CMP     r3, r1							/* Zero init */
	STRCC   r2, [r3], #4
	BCC		LOOP2


	/*======================================================*/
	/*	Now change to user mode and set up user mode stack.	*/
	/*======================================================*/
	MRS		r0, cpsr
	BIC		r0, r0, #LOCKOUT | MODE_MASK
	ORR		r1, r0, #SYS_MODE
	MSR		cpsr_cf, r1
	LDR		sp, =USR_STACK


	/*==============================================================*/
    /* Call C_Entry application routine with a pointer to the first	*/
    /* available memory address after ther compiler's global data	*/
    /* This memory may be used by the application.					*/
	/*==============================================================*/
	/*======================================*/
	/*		Now we enter the C Program		*/
	/*======================================*/
	.extern	C_Entry
	BL		C_Entry



/****************************************************/
/*	Exception Vector Function Definition			*/
/*	Consist of function Call from C-Program.		*/
/****************************************************/
	.extern	ISR_UndefHandler
SystemUndefinedHandler:
	STMFD	sp!, {r0-r12, lr}
	BL		ISR_UndefHandler
	LDMFD	sp!, {r0-r12, pc}^


	.extern	ISR_SwiHandler
SystemSwiHandler:
	STMFD	sp!, {r0-r12,lr}
	LDR		r0, [lr, #-4]
	BIC		r0, r0, #0xff000000
	CMP		r0, #0xff
	BEQ		MakeSVC
	BL		ISR_SwiHandler
	LDMFD	sp!, {r0-r12, pc}^

MakeSVC:
	LDMFD	sp!, {r0-r12, pc}


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


	.extern	ISR_AbortHandler
SystemAbortHandler:
	STMFD	sp!, {r0-r12, lr}
	BL		ISR_AbortHandler
	LDMFD	sp!, {r0-r12, lr}
	SUBS	pc, lr, #8


SystemReserv:
	SUBS	pc, lr, #4


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


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


   .global	TEST
TEST:
	MOV		r1, #5
	MOV		r0, #6
	MOV		pc, lr


/****************************************************/
/*	AREA SYS_STACK, NOINIT							*/
/****************************************************/
.data
	.SPACE		USR_STACK_SIZE
USR_STACK:

	.SPACE		UDF_STACK_SIZE
UDF_STACK:

	.SPACE		ABT_STACK_SIZE
ABT_STACK:

	.SPACE		IRQ_STACK_SIZE
IRQ_STACK:

	.SPACE		FIQ_STACK_SIZE
FIQ_STACK:

	.SPACE		SUP_STACK_SIZE
SUP_STACK:

#--------------------------------------------------------------------------------------
#	END										

⌨️ 快捷键说明

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