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

📄 crt0_gnu_lolo.asm

📁 含t h r e a d x,u c o s 的b s p
💻 ASM
字号:
/*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; $Workfile:   crt0_gnu_lolo.asm  $; $Revision:   1.1  $; $Author:   WellsK  $; $Date:   Sep 18 2003 08:35:54  $; ; Project: GNU C runtime startup code for LOLO;; Description:;     This code sets simply saves the register set on the existing;     stack, clears the zero-init data segment, calls the user;     function at c_entry, restores the stack, and then returns to;     the caller. This is intended to be used with LOLO.;; Revision history:; $Log:   //smaicnt2/pvcs/VM/sharpmcu/archives/sharpmcu/software/csps/lh7a404/bsps/sdk7a404/examples/common/crt0_gnu_lolo.asm-arc  $; 
;    Rev 1.1   Sep 18 2003 08:35:54   WellsK
; Added support for IRQ and FIQ stack creation at run-time.
; ;    Rev 1.0   Sep 15 2003 09:47:06   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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/    .text    .code 32    .align 0    .extern c_entry         /* Reference to c entry point */    .extern __gnu_bssstart  /* Start of the bss segment */    .extern __gnu_bssend    /* End of the bss segment */    .global __gccmain       /* public method */    .global __start         /* public code entry point *//*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Private defines and data;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;*/.EQU MODE_FIQ,  0x011.EQU MODE_IRQ,  0x012.EQU IF_MASK,   0x0C0.EQU IRQ_SSIZE, 0x1000.EQU FIQ_SSIZE, 0x1000__start:    STMFD sp!, {lr}    STMFD sp!, {r0 - r12, lr}    LDR r0, =__gnu_bssstart /* Get start of bss segment */    LDR r1, =__gnu_bssend   /* Get end of bss segment *//* 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}/* The function gccmain() is needed only for GNU toolsets */__gccmain:    MOV pc, lr              /* Just return - gnu specific */    .end

⌨️ 快捷键说明

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