📄 init.s.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 + -