?? startup.s
字號:
;/*
; * startup.s -- startup file for int0
; *
; * Author: li ming <admin@lumit.org>
; * Date: 2004-8-26
; * Copyleft: http://www.lumit.org
; */
F_Bit EQU 0x40
Mode_Svc EQU 0x13
AREA asm_code, CODE
; *********************************************************************
IMPORT __main
ENTRY
|__init|
; **********************************************************************
; * Set up the stack pointer to point
; **********************************************************************
;set up irq stack
mov r0, #0xd2 ; make irq mode with all irqs disabled
msr cpsr_cxsf, r0
MOV sp, #0x70000
;set up svc stack
mov r0, #0xd3 ; make svc mode with all irqs disabled
msr cpsr_cxsf, r0
MOV sp, #0x80000
; **********************************************************************
; * Get the address of the C entry point.
; **********************************************************************
LDR lr, =__main
; **********************************************************************
; * Enable the interrupt while staying in the supervisor mode
; **********************************************************************
MOV r0, #Mode_Svc:OR:F_Bit
MSR cpsr_c, r0
MOV pc, lr
IMPORT do_irq
EXPORT irq_handler
irq_handler
SUB lr, lr, #4
STMFD sp!, {r0-r12, lr} ; push r0-r12 register file and lr( pc return address )
MRS r4, spsr
STMFD sp!, {r4} ; push current spsr_cxsf_irq ( =cpsr_svc )
BL do_irq ; goto C handler
LDMFD sp!, {r4} ; get cpsr_svc from stack
MSR spsr_cxsf, r4 ; prepare spsr_cxsf to return svc mode
LDMFD sp!, {r0-r12, pc}^ ; recover r0-r12 and pc from stack, cpsr also
END
; **********************************************************************
; * END OF startup.s
; **********************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -