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

📄 nbc_init.s

📁 三星mcu S3C4510B评估板的原码
💻 S
字号:
;; ******************************************************
;; * NAME    : SOURCE\NBC_INIT.S	ver1.0		*
;; * Author  : Nicolas Park				*
;; * E-mail  : openice@aijisystem.com			*
;; * Description:					*
;; *   C start up codes	for NBC board S3C4510B0		*
;; *   Configure memory, Initialize ISR ,stacks		*
;; *   Initialize C-variables				*
;; *   Fill zeros into zero-initialized C-variables	*
;; * The last Modification date: 18-April-2002          *
;; * REMARKS:  Created initial version 1.0              *
;; *            Copyrigth (C) 2002 AIJISYSTEM CO.,LTD   *
;; ******************************************************

	GET ..\include\memory.a
	GET ..\include\nbc.a


    	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


        IMPORT  Main

	AREA    Init, CODE, READONLY
	ENTRY
;; --------------------------------------------------------------------------------------------------
;; Booting from address 0
;; Setup 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, =HandleFiq
	LDR	r0, [r0]
	STR	r0, [sp, #4]
	LDMFD	sp!, {r0, pc}

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

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

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

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

SWI_Handler
	SUB	sp, sp, #4
	STMFD	sp!, {r0}
	LDR	r0, =HandleSwi
	LDR	r0, [r0]
	STR	r0, [sp, #4]
	LDMFD	sp!, {r0, pc}


;; --------------------------------------------------------------------------------------------------
;; The Reset Entry Point
;; --------------------------------------------------------------------------------------------------

Reset_Handler                           ;/* Reset Entry Point */
	;=====================================
	; Setup Special Register
	;=====================================
	LDR	r0, =0x3FF0000		 
	LDR	r1, =0x87FFFF90   	; SetValue = 0x83FFFF91
	STR	r1, [r0]	  	; Cache,WB disable
                           		; Start_addr = 0x3FF00000

	ldr	r0,	=SYS_SET		
	ldmia	r0,	{r1-r5}		
	ldr	r0,	=0x3ff3000	
	stmia	r0,	{r1-r5}		

	ldr	r0,	=SMRDATA	
	ldmia	r0,	{r1-r11}		
	ldr	r0,	=0x3ff3014	
	stmia	r0,	{r1-r11}	



	;=====================================
	; Initialise STACK 
	;=====================================
INITIALIZE_STACK
	MRS	r0, cpsr
	BIC	r0, r0, #LOCKOUT | MODE_MASK
	ORR	r2, r0, #USR_MODE	

	ORR	r1, r0, #LOCKOUT | FIQ_MODE
	msr     cpsr_cxsf,	r1

	LDR	sp, =FIQ_STACK

	ORR	r1, r0, #LOCKOUT | IRQ_MODE
	msr     cpsr_cxsf,	r1

	LDR	sp, =IRQ_STACK

	ORR	r1, r0, #LOCKOUT | ABT_MODE
	msr     cpsr_cxsf,	r1

	LDR	sp, =ABT_STACK

	ORR	r1, r0, #LOCKOUT | UDF_MODE
	msr     cpsr_cxsf,	r1

	LDR	sp, =UDF_STACK

	ORR	r1, r0, #LOCKOUT | SUP_MODE
	msr     cpsr_cxsf,	r1

	LDR	sp, =SUP_STACK   ; Change CPSR to SVC mode


	;=====================================
	; LED Display
	;=====================================
	LDR	r1, =IOPMOD
	LDR	r0, =0xFF
	STR	r0, [r1]

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


	;=============================
	; Exception Vector Table Setup 
	;=============================
EXCEPTION_VECTOR_TABLE_SETUP
	LDR	r0, =HandleReset	; Exception Vector Table Memory Loc.
	LDR	r1, =ExceptionHandlerTable ; Exception Handler Assign
	MOV	r2, #8			; Number of Exception is 8
ExceptLoop	
	LDR	r3, [r1], #4
	STR	r3, [r0], #4
	SUBS	r2, r2, #1		; Down Count
	BNE	ExceptLoop



;; --------------------------------------------------------------------------------------------------
;; Initialization for C source program
;; --------------------------------------------------------------------------------------------------
;; Initialize memory required for C code
;;   - RAM initialization
;;   - Copy all read/write data from Assembler & C code to the read/write area
;;   - Copy Zero initialized data from C code to the read/write area(for example, global variable)
;; --------------------------------------------------------------------------------------------------


    	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
	
	;====================================================
	; 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_cxsf, r0
	LDR	sp, =USR_STACK



	;===========================
	; Now we enter the C Program
	;===========================


        BL      Main

;===========================================
; Exception Vector Function Definition
; Consist of function Call from C-Program.
;===========================================
SystemUndefinedHandler
	IMPORT	ISR_UndefHandler
	STMFD	sp!, {r0-r12}
	B	ISR_UndefHandler
	LDMFD	sp!, {r0-r12, pc}^

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

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

SystemAbortHandler
	IMPORT	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
	IMPORT	ISR_IrqHandler
	STMFD	sp!, {r0-r12, lr}
	BL	ISR_IrqHandler
	LDMFD	sp!, {r0-r12, lr}
	SUBS	pc, lr, #4

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


	AREA ROMDATA, DATA, READONLY


;; MEMMORY CONFIG


SYS_SET
	DCD 0x0
	DCD 0x0
	DCD 0x0eb70eb7
	DCD 0xeb70eb7
	DCD 0x55fff59
	ALIGN

SMRDATA
	DCD 0x4000060
	DCD 0x8010040
	DCD 0x9020040
	DCD 0xa021020
	DCD 0xb028040
	DCD 0xc02c040
	DCD 0x20040380
	DCD 0x21084180
	DCD 0x22088180
	DCD 0x2308c180
	DCD 0xce278360

	ALIGN


;===========================================
; Exception Handler Vector Table Entry Point
;===========================================
ExceptionHandlerTable
	DCD	UserCodeArea
	DCD	SystemUndefinedHandler
	DCD	SystemSwiHandler
	DCD	SystemPrefetchHandler
	DCD	SystemAbortHandler
	DCD	SystemReserv
	DCD	SystemIrqHandler
	DCD	SystemFiqHandler

	ALIGN

;/***************************************************/
	AREA SYS_STACK, NOINIT
;/***************************************************/
                %       USR_STACK_SIZE
USR_STACK
                %       UDF_STACK_SIZE
UDF_STACK
                %       ABT_STACK_SIZE
ABT_STACK
                %       IRQ_STACK_SIZE
IRQ_STACK
                %       FIQ_STACK_SIZE
FIQ_STACK
                %       SUP_STACK_SIZE
SUP_STACK

;/***************************************************/

	END

⌨️ 快捷键说明

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