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

📄 start.s

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 S
字号:
/* * Cirrus EP7312 Startup code * * Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com> *	 * Copyright (c) 2002 by Charlie Steader <charlies@poliac.com> * *  The license and distribution terms for this file may be *  found in the file LICENSE in this distribution or at * *  http://www.rtems.com/license/LICENSE. * * *  $Id: start.S,v 1.1.2.1 2003/09/04 18:43:48 joel Exp $*/		/* Some standard definitions...*/.equ Mode_USR,        	     0x10.equ Mode_FIQ,        	     0x11.equ Mode_IRQ,        	     0x12.equ Mode_SVC,        	     0x13.equ Mode_ABT,        	     0x17.equ Mode_ABORT,             0x17.equ Mode_UNDEF,      	     0x1B.equ Mode_SYS,        	     0x1F /*only available on ARM Arch. v4*/.equ I_Bit,           	     0x80.equ F_Bit,           	     0x40	.text	.globl	_start	 _start:	/* store the sp */	mov	r12, sp/* * Here is the code to initialize the low-level BSP environment * (Chip Select, PLL, ....?)	/* zero the bss */        LDR     r1, =_bss_end_       /* get end of ZI region */        LDR     r0, =_bss_start_     /* load base address of ZI region */zi_init:	        MOV     r2, #0        CMP     r0, r1		       /* loop whilst r0 < r1 */        STRLOT   r2, [r0], #4        BLO     zi_init 	/* Load basic ARM7 interrupt table */VectorInit:		MOV	R0, #0	ADR	R1, Vector_Init_Block	LDMIA	R1!, {R2, r3}	/* Copy the Vectors (8 words) */	STMIA	R0!, {r2, r3}	LDMIA	R1!, {R2, r3}	/* Copy the Vectors (8 words) */	STMIA	R0!, {r2, r3}	LDMIA	R1!, {R2, r3}	/* Copy the Vectors (8 words) */	STMIA	R0!, {r2, r3}	LDMIA	R1!, {R2, r3}	/* Copy the Vectors (8 words) */	STMIA	R0!, {r2, r3}	LDMIA	R1!, {R2, r3}	/* Copy the .long'ed addresses (8 words) */	STMIA	R0!, {r2, r3}	LDMIA	R1!, {R2, r3}	/* Copy the .long'ed addresses (8 words) */	STMIA	R0!, {r2, r3}	LDMIA	R1!, {R2, r3}	/* Copy the .long'ed addresses (8 words) */	STMIA	R0!, {r2, r3}	LDMIA	R1!, {R2, r3}	/* Copy the .long'ed addresses (8 words) */	STMIA	R0!, {r2, r3}	B	init2/******************************************************* standard exception vectors table *** Must be located at address 0 ********************************************************/	 Vector_Init_Block:		LDR	PC, Reset_Addr	LDR	PC, Undefined_Addr	LDR	PC, SWI_Addr	LDR	PC, Prefetch_Addr	LDR	PC, Abort_Addr	NOP	LDR	PC, IRQ_Addr	LDR	PC, FIQ_Addr	.globl Reset_AddrReset_Addr:	.long   _start Undefined_Addr:	.long	Undefined_HandlerSWI_Addr:	.long	SWI_HandlerPrefetch_Addr:	.long	Prefetch_HandlerAbort_Addr:	.long	Abort_Handler		.long	0	IRQ_Addr:	.long	IRQ_HandlerFIQ_Addr:	.long	FIQ_Handler	/* The following handlers do not do anything useful */	.globl Undefined_HandlerUndefined_Handler:	        B       Undefined_Handler	.globl SWI_HandlerSWI_Handler:	        B       SWI_Handler 	.globl Prefetch_HandlerPrefetch_Handler:	        B       Prefetch_Handler	.globl Abort_HandlerAbort_Handler:	        B       Abort_Handler	.globl IRQ_HandlerIRQ_Handler:	        B       IRQ_Handler	.globl FIQ_HandlerFIQ_Handler:	        B       FIQ_Handlerinit2 :	/* --- Initialise stack pointer registers	/* Enter IRQ mode and set up the IRQ stack pointer */    MOV     r0, #Mode_IRQ | I_Bit | F_Bit     /* No interrupts */    MSR     cpsr, r0    ldr	    r1, =_irq_stack_size    LDR     sp, =_irq_stack    add	    sp, sp, r1    sub     sp, sp, #0x64	/* Enter FIQ mode and set up the FIQ stack pointer */    MOV     r0, #Mode_FIQ | I_Bit | F_Bit     /* No interrupts */    MSR     cpsr, r0    ldr	    r1, =_fiq_stack_size    LDR     sp, =_fiq_stack    add	    sp, sp, r1    sub     sp, sp, #0x64	/* Enter ABT mode and set up the ABT stack pointer */    MOV     r0, #Mode_ABT | I_Bit | F_Bit     /* No interrupts */    MSR     cpsr, r0    ldr	    r1, =_abt_stack_size    LDR     sp, =_abt_stack    add	    sp, sp, r1    sub     sp, sp, #0x64		/* Set up the SVC stack pointer last and stay in SVC mode */    MOV     r0, #Mode_SVC | I_Bit | F_Bit     /* No interrupts */    MSR     cpsr, r0    ldr	    r1, =_svc_stack_size    LDR     sp, =_svc_stack    add	    sp, sp, r1    sub     sp, sp, #0x64		/* save the original registers */	stmdb	sp!, {r4-r12, lr}/* --- Now we enter the C code */    bl	boot_card	ldmia	sp!, {r4-r12, lr}	mov	sp, r12	mov	pc, lr

⌨️ 快捷键说明

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