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

📄 app_init0.s

📁 S3C4510B的例程
💻 S
字号:
/***********************************************************************
 *  MODULE:        app_init0.s
 *  Description:   application start assembly routines
 *  Runtime Env:   ARM7TDMI
 *  Company:       ESPD-inc
 *  Change History:
 *     09-18-01   Create (Yadong Wang)
 ***********************************************************************/
.include "samsung4510.a"
	.text

/***********************************************************************
 * step2 - Setup interrupt / exception vectors
 ***********************************************************************/
_start:
        B       =Reset_Handler		
        B       =SystemUndefinedHandler
        B       =SystemSwiHandler
        B       =SystemPrefetchHandler
        B       =SystemAbortHandler
		nop 
        B       =SystemIrqHandler
        B       =SystemFiqHandler

SystemUndefinedHandler:
	B		=SystemUndefinedHandler

SystemSwiHandler:
	B		=SystemSwiHandler

SystemPrefetchHandler:
	B		=SystemSwiHandler

SystemAbortHandler:
	B		=SystemAbortHandler

SystemIrqHandler:
	B		=SystemIrqHandler

SystemFiqHandler:
	B		=SystemFiqHandler

Reset_Handler:                          

/***********************************************************************
 * step3 - Mask off all IRQ sources
 ***********************************************************************/
	LDR	r1, =IntMask
	LDR	r0, =0x3FFFFF
	STR	r0, [r1]

/***********************************************************************
 * step4 - Initialise system stack for different processor modes
 ***********************************************************************/
.if 0
INITIALIZE_STACK:
	MRS	r0, cpsr
	BIC	r0, r0, #LOCKOUT | MODE_MASK
	ORR	r2, r0, #USR_MODE	
	ORR	r1, r0, #LOCKOUT | FIQ_MODE

	MSR	cpsr_c, r1					/* change to FIQ MODE */
	MSR	spsr_c, r2 					/* set the SPSR under FIQ */
	LDR	sp, =FIQ_STACK				/* set SP (R13) under FIQ */

	ORR	r1, r0, #LOCKOUT | IRQ_MODE
	MSR	cpsr_c, r1					/* change to IRQ MODE */
	MSR	spsr_c, r2					/* set the SPSR under IRQ */
	LDR	sp, =IRQ_STACK				/* set SP (R13) under IRQ */

	ORR	r1, r0, #LOCKOUT | ABT_MODE
	MSR	cpsr_c, r1					/* change to ABORT MODE */
	MSR	spsr_c, r2					/* set the SPSR under ABORT */
	LDR	sp, =ABT_STACK				/* set SP (R13) under ABORT */

	ORR	r1, r0, #LOCKOUT | UDF_MODE
	MSR	cpsr_c, r1					/* change to Undefine MODE */
	MSR	spsr_c, r2					/* set the SPSR under Undefine */
	LDR	sp, =UDF_STACK				/* set SP (R13) under Undefine */

	ORR	r1, r0, #LOCKOUT | SUP_MODE
	MSR	cpsr_c, r1					/* change to Superuser MODE */
	MSR	spsr_c, r2					/* set the SPSR under super */ 
	LDR	sp, =SUP_STACK				/* set SP (R13) under super */
.endif

/***********************************************************************
 * step5 - System Config Regsiter
 *	Enable Catch
 *	Enable write buffer
 *	use all internal 8K SRAM as catch
 ***********************************************************************/
	LDR	r0, =0x3FF0000		 
	LDR r1, [r0]
	BIC r1,r1,#0x30
	ORR r1,r1,#0x10|0x06
	STR	r1, [r0]	  	


/***********************************************************************
 * step6 - Copy Data and zero bss 
 ***********************************************************************/
.if 0
    	IMPORT  |Image$$RO$$Limit|  /* End of ROM code (=start of ROM data) */
    	IMPORT  |Image$$RW$$Base|   ; Base of RAM to initialise
    	IMPORT  |Image$$ZI$$Base|   ; Base and limit of area
    	IMPORT  |Image$$ZI$$Limit|  ; to zero initialise

    	LDR  r0, =|Image$$RO$$Limit| ; Get pointer to ROM data
    	LDR  r1, =|Image$$RW$$Base|  ; and RAM copy
    	LDR  r3, =|Image$$ZI$$Base|  ; Zero init base => top of initialised data
    	CMP     r0, r1               ; Check that they are different
    	BEQ     %1
0   	CMP     r1, r3               ; Copy init data
    	LDRCC   r2, [r0], #4
    	STRCC   r2, [r1], #4
    	BCC     %0
1   	LDR     r1, =|Image$$ZI$$Limit| ; Top of zero init segment
    	MOV     r2, #0
2  		CMP     r3, r1               	; Zero init
    	STRCC   r2, [r3], #4
    	BCC     %2
.endif


/***********************************************************************
 * step7 - Now change to user mode and set up user mode stack.
 ***********************************************************************/
.if 0
    MRS     r0, cpsr
	BIC	r0, r0, #LOCKOUT /*;| MODE_MASK */
/*	ORR	r1, r0, #SUP_MODE  ;#USR_MODE*/
	MSR	cpsr_cf, r0
	LDR	sp, =SUP_STACK /*;=USR_STACK*/
.endif

/***********************************************************************
 * step8 - Enter the C program, never return
 ***********************************************************************/
         .extern app_init1
        BL      app_init1
		/* toggle P12 Pin */
		ldr r0, =0x3ff7004
		ldr r1, =0x01000000
		str	r1, [r0]

		ldr r0, =0x3ff8004
		ldr r1, =0x10000000
		str	r1, [r0]

		ldr r0, =0x3ff5000
		ldr r1, =0x00000001
		str	r1, [r0]

		ldr r0, =0x3ff5008
loop:
		ldr r1, =0x00000001
		str	r1, [r0]
		ldr r1, =0x00000000
		str	r1, [r0]
		b loop

⌨️ 快捷键说明

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