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

📄 toscrt0.s

📁 tinyos2.0版本驱动
💻 S
字号:
/* *  IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.  By *  downloading, copying, installing or using the software you agree to *  this license.  If you do not agree to this license, do not download, *  install, copy or use the software. * *  Intel Open Source License  * *  Copyright (c) 2002 Intel Corporation  *  All rights reserved.  *  Redistribution and use in source and binary forms, with or without *  modification, are permitted provided that the following conditions are *  met: *  *	Redistributions of source code must retain the above copyright *  notice, this list of conditions and the following disclaimer. *	Redistributions in binary form must reproduce the above copyright *  notice, this list of conditions and the following disclaimer in the *  documentation and/or other materials provided with the distribution. *      Neither the name of the Intel Corporation nor the names of its *  contributors may be used to endorse or promote products derived from *  this software without specific prior written permission. *   *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *  PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE INTEL OR ITS *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  *  *//* * * Authors: Phil Buonadonna,David Gay * Date last modified:  $Revision: 1.6 $ * */				.equ	ARM_CPSR_MODE_MASK,(0x0000001F)	.equ	ARM_CPSR_INT_MASK,(0x000000C0)	.equ	ARM_CPSR_COND_MASK,(0xF8000000)		.equ	ARM_CPSR_MODE_USR,(0x10)	.equ	ARM_CPSR_MODE_FIQ,(0x11)	.equ	ARM_CPSR_MODE_IRQ,(0x12)	.equ	ARM_CPSR_MODE_SVC,(0x13)	.equ	ARM_CPSR_MODE_ABT,(0x17)	.equ	ARM_CPSR_MODE_UND,(0x1B)	.equ	ARM_CPSR_MODE_SYS,(0x1F)	.equ	ARM_CPSR_BIT_N,(0x80000000)	.equ	ARM_CPSR_BIT_Z,(0x40000000)	.equ	ARM_CPSR_BIT_C,(0x20000000)	.equ	ARM_CPSR_BIT_V,(0x10000000)	.equ	ARM_CPSR_BIT_Q,(0x08000000)		.equ	ARM_CPSR_BIT_I,(0x00000080)	.equ	ARM_CPSR_BIT_F,(0x00000040)	.equ	ARM_CPRS_BIT_T,(0x00000020)	.equ   _TOS_STACK_SIZE,(0x400)		@ TinyOS Exception stack sizes	.equ   _TOS_ISRAM_PHYSBASE,(0x5C000000)	@ Internal SRAM on PXA27X	.text	.globl startstart:	mrs	r0, CPSR	bic	r0, r0, #ARM_CPSR_MODE_MASK	orr	r0, r0, #(ARM_CPSR_MODE_SVC | ARM_CPSR_INT_MASK)	msr	cpsr_cf, r0		/* Initialize the stack pointers for all modes */	mov	r0,#_TOS_ISRAM_PHYSBASE	ldr	r2, =(256*1024 - 4)		@ and go to the last slot (256K - 4)	add	r2,r2,r0		mov	r0, #ARM_CPSR_MODE_ABT				msr	CPSR_c, R0	mov	sp, r2	sub	r2, r2, #_TOS_STACK_SIZE	mov	r0, #ARM_CPSR_MODE_UND		msr	CPSR_c, R0	mov	sp, r2	sub	r2, r2, #_TOS_STACK_SIZE		mov	r0, #ARM_CPSR_MODE_FIQ				msr	CPSR_c, R0	mov	sp, r2	sub	r2, r2, #_TOS_STACK_SIZE	mov	r0, #ARM_CPSR_MODE_IRQ				msr	CPSR_c, R0	mov	sp, r2	sub	r2, r2, #(_TOS_STACK_SIZE * 2)		mov	r0, #ARM_CPSR_MODE_SVC				msr	CPSR_c, R0	mov	sp, r2				/* copy data */	ldr	r0, =__data_load_start	ldr	r1, =__data_load_end	ldr	r2, =__data_start.Lcopy:		cmp	r0, r1	beq	.Lcopydone	ldrb	r3, [r0], #1	strb	r3, [r2], #1	b	.Lcopy.Lcopydone:	/* clear bss */	ldr	r0, =__bss_start__	ldr	r1, =__bss_end__	mov	r2, #0.Lclear:		cmp	r0, r1	beq	.Lcleardone	strb	r2, [r0], #1	b	.Lclear.Lcleardone:		mov	r0, #0 /* argc? */	mov	r1, #0 /* argv? */	bl	main.L1:		nop	b	.L1@if we receive and interrupt that we don't handle, behavior will depend on whether we're in release or not.ifdef RELEASE @reboot...assumes that we started out in supervisor mode..and that we'll be returning  hplarmv_undef:	movs PC, #0hplarmv_swi:	movs PC, #0hplarmv_pabort:	movs PC, #0hplarmv_dabort:	movs PC, #0hplarmv_reserved:	movs PC, #0hplarmv_irq:	movs PC, #0hplarmv_fiq:		movs PC, #0.else@infinite loop so that we can detect what happened with a debugger@in future, we'll want to blink specific LED patter or something for the USER...or perhaps blue light of deathhplarmv_undef:	b hplarmv_undef	hplarmv_swi:	b hplarmv_swihplarmv_pabort:	b hplarmv_paborthplarmv_dabort:	b hplarmv_daborthplarmv_reserved:	b hplarmv_reserved	hplarmv_irq:	b hplarmv_irq	hplarmv_fiq:		b hplarmv_fiq.endifreset_handler_start:@ reset handler should first check whether this is a debug exception@ or a real RESET event.@ NOTE: r13 is only safe register to use.@ - For RESET, don苩 really care about which register is used@ - For debug exception, r13=DBG_r13, prevents application registers@ - from being corrupted, before debug handler can save.	mrs r13, cpsr	and r13, r13, #0x1f	cmp r13, #0x15			@ are we in DBG mode?	beq dbg_handler_stub		@ if so, go to the dbg handler stub	mov r13, #0x8000001c		@ otherwise, enable debug, set MOE bits	mcr p14, 0, r13, c10, c0, 0	@ and continue with the reset handler@ normal reset handler initialization follows code here,@ or branch to the reset handler.		b	start.align 5 @ align code to a cache line boundary.dbg_handler_stub:@ First save the state of the IC enable/disable bit in DBG_LR[0].	mrc p15, 0, r13, c1, c0, 0	and r13, r13, #0x1000	orr r14, r14, r13, lsr #12@ Next, enable the IC.	mrc p15, 0, r13, c1, c0, 0	orr r13, r13, #0x1000	mcr p15, 0, r13, c1, c0, 0@ do a sync operation to ensure all outstanding instr fetches have@ completed before continuing. The invalidate cache line function@ serves as a synchronization operation, that苨 why it is used@ here. The target line is some scratch address in memory.	adr r13, line2	mcr p15, 0, r13, c7, c5, 1@ invalidate BTB. make sure downloaded vector table does not hit one of@ the application苨 branches cached in the BTB, branch to the wrong place	mcr p15, 0, r13, c7, c5, 6@ Now, send 鎟eady for download

⌨️ 快捷键说明

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