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

📄 start.s

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 S
字号:
/* *  start.S :	  RTEMS entry point * *  Copyright (C) 2000 Canon Research Centre France SA. *  Emmanuel Raguet, mailto:raguet@crf.canon.fr * *  The license and distribution terms for this file may be *  found in found in the file LICENSE in this distribution or at *  http://www.rtems.com/license/LICENSE. * */.equ ABORT_Stack, 0.equ IRQ_Stack, 0x100.equ FIQ_Stack, 0x200.equ SVC_Stack, 0x300	/* 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:/* * Here is the code to initialize the low-level BSP environment * (Chip Select, PLL, ....?)	/* Copy data from FLASH to RAM */        LDR     r0, =_initdata        /* load address of region */	LDR     r1, =0x400000         /* execution address of region */        LDR     r2, =_edata           /* copy execution address into r2 */copy:	        CMP     r1, r2		      /* loop whilst r1 < r2 */        LDRLO   r3, [r0], #4        STRLO   r3, [r1], #4        BLO     copy/* 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	R8, #0	ADR	R9, Vector_Init_Block	LDMIA	R9!, {R0-R7}	/* Copy the Vectors (8 words) */	STMIA	R8!, {R0-R7}	LDMIA	R9!, {R0-R7}	/* Copy the .long'ed addresses (8 words) */	STMIA	R8!, {R0-R7}	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   Set up the ABORT stack pointer last and stay in SVC mode */    MOV     r0, #(Mode_ABORT | I_Bit | F_Bit)   /* No interrupts */    MSR     cpsr, r0    LDR     sp, =ABORT_Stack/* Enter IRQ mode and set up the IRQ stack pointer */    MOV     r0, #Mode_IRQ | I_Bit | F_Bit     /* No interrupts */    MSR     cpsr, r0    LDR     sp, =IRQ_Stack/* Enter FIQ mode and set up the FIQ stack pointer */    MOV     r0, #Mode_FIQ | I_Bit | F_Bit     /* No interrupts */    MSR     cpsr, r0    LDR     sp, =FIQ_Stack/* 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     sp, =SVC_Stack/* --- Now we enter the C code */    B	boot_card

⌨️ 快捷键说明

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