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

📄 init.s.bak

📁 移植在鱼板上运行的ucos
💻 BAK
字号:
;/*************************************************************************/
;/*                                                                       */
;/* FILE NAME                                            VERSION          */
;/*                                                                       */
;/*      init.s                              SNDS100 Board version 1.0    */
;/*                                                                       */
;/* COMPONENT                                                             */
;/*                                                                       */
;/*                                                                       */
;/* DESCRIPTION                                                           */
;/*                                                                       */
;/*      This file contains the target processor dependent initialization */
;/*      routines (boot code) and data.                                   */
;/*                                                                       */
;/* AUTHOR                                                                */
;/*                                                                       */
;/*                                                                       */
;/* DATA STRUCTURES                                                       */
;/*                                                                       */
;/*                                                                       */
;/* FUNCTIONS                                                             */
;/*                                                                       */
;/*                                                                       */
;/* DEPENDENCIES                                                          */
;/*                                                                       */
;/*      snds.a                              System constants             */
;/*                                                                       */
;/* HISTORY                                                               */
;/*                                                                       */
;/*         NAME            DATE                    REMARKS               */
;/*                                                                       */
;/*        hbahn         01-25-1998      Created initial version 1.0      */
;/*                                                                       */
;/*************************************************************************/
;//更改samsung的demo程序
;//ezhang5,2004-4-12
	GET memory.s
	GET snds.s
	
	AREA    Init, CODE, READONLY
; --- Define entry point
        EXPORT  __main  ; defined to ensure that C runtime system
__main                  ; is not linked in
  		     
        ENTRY
        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}

	AREA Main, CODE, READONLY

;==========================================================
; The Reset Entry Point
;==========================================================
          EXPORT	Reset_Handler
Reset_Handler                           ;/* Reset Entry Point */

	;=====================================
	; 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
	MSR	spsr_cxsf, r2
	LDR	sp, =FIQ_STACK

	ORR	r1, r0, #LOCKOUT | IRQ_MODE
	MSR	cpsr_cxsf, r1
	MSR	spsr_cxsf, r2
	LDR	sp, =IRQ_STACK

	ORR	r1, r0, #LOCKOUT | ABT_MODE
	MSR	cpsr_cxsf, r1
	MSR	spsr_cxsf, r2
	LDR	sp, =ABT_STACK

	ORR	r1, r0, #LOCKOUT | UDF_MODE
	MSR	cpsr_cxsf, r1
	MSR	spsr_cxsf, r2
	LDR	sp, =UDF_STACK

	ORR	r1, r0, #LOCKOUT | SUP_MODE
	MSR	cpsr_cxsf, r1
	MSR	spsr_cxsf, r2
	LDR	sp, =SUP_STACK   ; Change CPSR to SVC mode


	;=====================================
	; LED Display
	;=====================================
	LDR	r1, =IOPMOD		;使io口0--15为输出状态
	LDR	r0, =0xFF
	STR	r0, [r1]

	LDR	r1, =IOPDATA
	LDR	r0, =0x55 		;使io口0\2\4\6为高电平
	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

	;=====================================
	; Initialise memory required by C code
	;=====================================
    	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
	
	;====================================================
	; Now change to user mode and set up user mode stack.
	;====================================================
    MRS     r0, cpsr
	BIC	r0, r0, #0x80	;开irq中断
	MSR	cpsr_cxsf, r0
	
;       /* 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
	;===========================


        IMPORT  C_Entry
        BL      C_Entry


;===========================================
; Exception Vector Function Definition
; Consist of function Call from C-Program.
;===========================================
SystemUndefinedHandler
	IMPORT	ISR_UndefHandler
	STMFD	sp!, {r0-r12,lr}
	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}
	SUBS	pc, lr, #8

SystemReserv
	SUBS	pc, lr, #4

SystemIrqHandler
	;adjust back address
	;if you want the irq more fast,comment the 1 to 2
	SUB		lr,lr,#4
	STMFD	sp!,{lr};1
	;back to sup mode
	MRS 	r14,cpsr;1
	BIC		r14,r14,#MODE_MASK;1
	ORR		r14,r14,#SUP_MODE;1
	MSR		cpsr_cxsf,r14;1
	;save r0-r12,r14,and save a space for pc
	SUB 	sp,sp,#4
	STMFD 	sp!,{r0-r12,r14}
	MOV 	r4,sp
	;back to irq mode
	MRS 	r1,cpsr;1
	BIC		r1,r1,#MODE_MASK;1
	ORR		r1,r1,#IRQ_MODE;1
	MSR		cpsr_cxsf,r1;1
	;save cpsr(sup mode) and pc(sup mode) 
	MRS		r1,spsr
	STR 	r1,[r4,#-4]!
	LDMFD 	sp!,{r14};1
	STR 	r14,[r4,#60]
	IMPORT 	OSIntEnter
	BL 		OSIntEnter
	IMPORT 	OSIntNesting
	LDR 	r5,=OSIntNesting
	LDRB	r5,[r5]
	CMP 	r5,#1
	IMPORT	ISR_IrqHandler
	BLNE	ISR_IrqHandler
	;save the sp to OSTCBCur
	IMPORT 	OSTCBCur
	LDR 	r5,=OSTCBCur
	LDR 	r6,[r5]
	STR 	r4,[r6]
	BL		ISR_IrqHandler
	IMPORT 	OSIntExit
	BL		OSIntExit
	;back to sup mode
	MRS 	r14,cpsr;1
	BIC		r14,r14,#MODE_MASK;1
	ORR		r14,r14,#SUP_MODE;1
	MSR		cpsr_cxsf,r14;1
	LDR		r5,[r5]
	LDR		sp,[r5]
	LDMFD 	sp!,{r0}
	;ORR	r0, r0, #LOCKOUT
	MSR 	spsr_cxsf,r0
	LDR r4,=0x3FF4008
	LDR r5,[r4]
	BIC r5,r5,#0x200000
	STR r5,[r4]
	LDMFD 	sp!,{r0-r12,lr,pc}^

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


	AREA Main, CODE, READONLY


;===========================================
; 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,DATA,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 + -