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

📄 crt0_arm_lolo.s

📁 含t h r e a d x,u c o s 的b s p
💻 S
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; $Workfile:   crt0_arm_lolo.s  $
; $Revision:   1.2  $
; $Author:   WellsK  $
; $Date:   Sep 18 2003 08:36:04  $
; 
; Project: LogicPD SDK7A404 startup code for LOLO
;
; Description:
;     Basic startup code for the LogicPD SDK7A404 EVB when using LOLO
;
; Notes:
;     This version of the file is for the ARM ADS toolset.
;
; Revision history:
; $Log:   //smaicnt2/pvcs/VM/sharpmcu/archives/sharpmcu/software/csps/lh7a404/bsps/sdk7a404/examples/common/crt0_arm_lolo.s-arc  $
; 
;    Rev 1.2   Sep 18 2003 08:36:04   WellsK
; Added support for IRQ and FIQ stack creation at run-time.
; 
;    Rev 1.1   Sep 15 2003 10:26:50   WellsK
; Corrected a few misleading comments.
; 
;    Rev 1.0   Sep 15 2003 09:47:04   WellsK
; Initial revision.
; 
;  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SHARP MICROELECTRONICS OF THE AMERICAS MAKES NO REPRESENTATION
; OR WARRANTIES WITH RESPECT TO THE PERFORMANCE OF THIS SOFTWARE,
; AND SPECIFICALLY DISCLAIMS ANY RESPONSIBILITY FOR ANY DAMAGES, 
; SPECIAL OR CONSEQUENTIAL, CONNECTED WITH THE USE OF THIS SOFTWARE.
; 
; SHARP MICROELECTRONICS OF THE AMERICAS PROVIDES THIS SOFTWARE SOLELY 
; FOR THE PURPOSE OF SOFTWARE DEVELOPMENT INCORPORATING THE USE OF A 
; SHARP MICROCONTROLLER OR SYSTEM-ON-CHIP PRODUCT. USE OF THIS SOURCE
; FILE IMPLIES ACCEPTANCE OF THESE CONDITIONS.
; 
; COPYRIGHT (C) 2001 SHARP MICROELECTRONICS OF THE AMERICAS, INC.
;     CAMAS, WA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    export __start

    ; This is the user application that is called by the startup code
    ; once the stacks are saved
    extern c_entry

    extern |Image$$ER_ZI$$ZI$$Base|
    extern |Image$$ER_ZI$$ZI$$Length|

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Private defines and data
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MODE_FIQ    EQU 0x011
MODE_IRQ    EQU 0x012
IF_MASK     EQU 0x0C0
IRQ_SSIZE   EQU 0x1000
FIQ_SSIZE   EQU 0x1000

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Code
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	AREA STARTUP, CODE   ; Startup code
	ENTRY

__start
    STMFD sp!, {lr}
    STMFD sp!, {r0 - r12, lr}

; Get start and compute end of zero initialized data segment
    LDR r0, =|Image$$ER_ZI$$ZI$$Base| ; Get start of bss segment
    LDR r1, =|Image$$ER_ZI$$ZI$$Length|   ; Get end of bss segment
    ADD r1, r0, r1

; Save the existing CPU status, and the FIQ/IRQ statuses on the stack
; to be restored on exit
    MRS r5, cpsr            ; Save existing CPU status in r5

; Save old FIQ stack value and setup new FIQ stack
    MOV r3, #IF_MASK        ; No Interrupts
    ORR r4, r3, #MODE_FIQ   ; FIQ mode
    MSR cpsr_cxsf, r4       ; FIQ mode with no interrupts
    MOV r6, sp              ; Save stack pointer for FIQ mode in r6
    ADD r10, r1, #FIQ_SSIZE ; Compute FIQ stack area
    MOV sp, r10

; Save old IRQ stack value and setup new IRQ stack
    ORR r4, r3, #MODE_IRQ   ; IRQ mode
    MSR cpsr_cxsf, r4       ; IRQ mode with no interrupts
    MOV r7, sp              ; Save stack pointer for IRQ mode in r7
    ADD r10, r1, #(IRQ_SSIZE + FIQ_SSIZE) ; Compute IRQ stack area
    MOV sp, r10

; Restore CPU status and save other statuses
    MSR cpsr_cxsf, r5       ; Back to LOLO CPU mode
    STMFD sp!, {r5 - r7}    ; Save status and FIQ/IRQ stacks

; Clear out the xero-init (ZI) data segment
    LDR r2, =0              ; r2 = 0
zi_clear
    CMP r0, r1              ; Compare current and last clear address
    BGE zi_clear_done       ; Was this the last address?
    STR r2, [r0]            ; Not last address, clear data area
    ADD r0, r0, #4          ; Increment to next word address
    B zi_clear              ; Continue

; After the ZI segment is cleared, set up the stacks needed for the
; examples
zi_clear_done

c_start
    BL c_entry              ; Jump to the c_entry()

; Restore original FIQ and IRQ stacks
    LDMFD sp!, {r5 - r7}
    MOV r3, #IF_MASK        ; No Interrupts
    ORR r4, r3, #MODE_FIQ   ; FIQ mode
    MSR cpsr_cxsf, r4       ; FIQ mode with no interrupts
    MOV sp, r6
    ORR r4, r3, #MODE_IRQ   ; IRQ mode
    MSR cpsr_cxsf, r4       ; IRQ mode with no interrupts
    MOV sp, r7
    MSR cpsr_cxsf, r5       ; LOLO mode

exit
    LDMFD sp!, {r0 - r12, lr, pc}

    END

⌨️ 快捷键说明

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