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

📄 init.txt

📁 arm——启动代码
💻 TXT
字号:
	.global  __main  		/* defined to ensure that C runtime system */
__main:                  	/* is not linked in */

#   ENTRY
__ENTRY:

# --- Setup interrupt / exception vectors
    B       Reset_Handler
    B       Undefined_Handler
    B       SWI_Handler
    B       Prefetch_Handler
    B       Abort_Handler
    NOP						/* Reserved vector */
    B       IRQ_Handler
    B       FIQ_Handler

/*==========================================================*/
/* The Default Exception Handler Vector Entry Pointer Setup	*/
/*==========================================================*/
FIQ_Handler:
	SUB	sp, sp, #4
	STMFD	sp!, {r0}
	LDR	r0, =SystemFiqHandler
	STR	r0, [sp, #4]
	LDMFD	sp!, {r0, pc}

IRQ_Handler:
	SUB	sp, sp, #4
	STMFD	sp!, {r0}
	LDR	r0, =SystemIrqHandler
	STR	r0, [sp, #4]
	LDMFD	sp!, {r0, pc}

Prefetch_Handler:
	SUB	sp, sp, #4
	STMFD	sp!, {r0}
	LDR	r0, =SystemPrefetchHandler
	STR	r0, [sp, #4]
	LDMFD	sp!, {r0, pc}

Abort_Handler:
	SUB	sp, sp, #4
	STMFD	sp!, {r0}
	LDR	r0, =SystemAbortHandler
	STR	r0, [sp, #4]
	LDMFD	sp!, {r0, pc}

Undefined_Handler:
	SUB	sp, sp, #4
	STMFD	sp!, {r0}
	LDR	r0, =SystemUndefinedHandler
	STR	r0, [sp, #4]
	LDMFD	sp!, {r0, pc}

SWI_Handler:
	SUB	sp, sp, #4
	STMFD	sp!, {r0}
	LDR	r0, [lr, #-4]
	BIC	r0, r0, #0xff000000
	CMP	r0, #0xff
	BEQ	SWI_RET
	LDR	r0, =SystemSwiHandler
	STR	r0, [sp, #4]
	LDMFD	sp!, {r0, pc}
SWI_RET:
	mov pc, lr

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

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

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

 	swi 0xff 			;/* Call SWI Vector  */
 
	LDR	r1, =IOPDATA
	LDR	r0, =0x33
	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_RW_Base					/* Base of RAM to initialise */
	.extern  Image_ZI_Base   				/* Base and limit of area */
	.extern  Image_ZI_Limit  				/* to zero initialise */

	LDR  r3, =Image_ZI_Base  				/* Zero init base => top of initialised data */
	
    LDR     r1, =Image_ZI_Limit 			/* Top of zero init segment */
    MOV     r2, #0
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, #USR_MODE
	MSR	cpsr_cf, r0
	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.	  */
/*=========================================== */
SystemUndefinedHandler:
	.extern	ISR_UndefHandler
	STMFD	sp!, {r0-r12}
	B	ISR_UndefHandler
	LDMFD	sp!, {r0-r12, pc}^

SystemSwiHandler:
	.extern	ISR_SwiHandler
	STMFD	sp!, {r0-r12,lr}
	LDR	r0, [lr, #-4]
	BIC	r0, r0, #0xff000000
	CMP	r0, #0xff
	BEQ	MakeSVC
	B	ISR_SwiHandler
	LDMFD	sp!, {r0-r12, pc}^
	
MakeSVC:
	MRS	r1, spsr
	BIC	r1, r1, #MODE_MASK
	ORR	r2, r1, #SUP_MODE
	MSR	spsr_cf, r2
	LDMFD	sp!, {r0-r12, pc}^

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

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

SystemReserv:
	SUBS	pc, lr, #4

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


/****************************************************/
/*	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:

⌨️ 快捷键说明

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