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

📄 crt0.s

📁 编译后直接运行的MP3播放器全部C语言源代码 一个包含FAT文件系统、系统引导 Boot、FLASH Driver等内容的
💻 S
字号:
/*************************************************************************** *             __________               __   ___. *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  / *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  < *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \ *                     \/            \/     \/    \/            \/ * $Id: crt0.S,v 1.11 2004/01/28 20:43:31 hohensoh Exp $ * * Copyright (C) 2002 by Linus Nielsen Feltzing * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/	.section .init.text	.global	startstart:	/* We begin with some tricks. If we have built our code to be loaded	 * via the standalone GDB stub, we will have out VBR at some other	 * location than 0x9000000. We must copy the trap vectors for the	 * GDB stub to our vector table.	 * If, on the other hand, we are running standalone we will have	 * the VBR at 0x9000000, and the copy will not do any harm.	 */	mov.l	vbr_k,r1		mov.l	orig_vbr_k,r2		/* Move the invalid instruction vector (4) */	mov	#4,r0	shll2	r0	mov.l	@(r0,r2),r3	mov.l	r3,@(r0,r1)		/* Move the invalid slot vector (6) */	mov	#6,r0	shll2	r0	mov.l	@(r0,r2),r3	mov.l	r3,@(r0,r1)		/* Move the bus error vector (9) */	mov	#9,r0	shll2	r0	mov.l	@(r0,r2),r3	mov.l	r3,@(r0,r1)		/* Move the DMA bus error vector (10) */	mov	#10,r0	shll2	r0	mov.l	@(r0,r2),r3	mov.l	r3,@(r0,r1)		/* Move the NMI vector as well (11) */	mov	#11,r0	shll2	r0	mov.l	@(r0,r2),r3	mov.l	r3,@(r0,r1)		/* Move the breakpoint trap vector (32) */	mov	#32,r0	shll2	r0	mov.l	@(r0,r2),r3	mov.l	r3,@(r0,r1)		/* Move the IO trap vector (33) */	mov	#33,r0	shll2	r0	mov.l	@(r0,r2),r3	mov.l	r3,@(r0,r1)		/* Move the serial Rx interrupt vector (105) */	mov	#105,r0	shll2	r0	mov.l	@(r0,r2),r3	mov.l	r3,@(r0,r1)	/* Move the single step trap vector (127) */	mov	#127,r0	shll2	r0	mov.l	@(r0,r2),r3	mov.l	r3,@(r0,r1)		ldc	r1,vbr	/* Now let's get on with the normal business */	mov.l	stack_k,r15	/* zero out bss */	mov.l	edata_k,r0	mov.l	end_k,r1	mov	#0,r2start_l:	mov.l	r2,@r0	add	#4,r0	cmp/ge	r1,r0	bf	start_l	nop	/* copy the .iram section */	mov.l	iramcopy_k,r0	mov.l	iram_k,r1	mov.l	iramend_k,r2copy_l:	mov.l	@r0,r3	mov.l	r3,@r1	add	#4,r0	add	#4,r1	cmp/ge	r2,r1	bf	copy_l	nop	/* copy the .data section, for rombased execution */	mov.l	datacopy_k,r0	mov.l	data_k,r1	mov.l	dataend_k,r2copy_l2:	mov.l	@r0,r3	mov.l	r3,@r1	add	#4,r0	add	#4,r1	cmp/ge	r2,r1	bf	copy_l2	nop	/* Munge the main thread stack */	mov.l	stack_k,r2	mov.l	deadbeef_k,r0	mov.l	stackbegin_k,r1munge_loop:	mov.l	r0,@r1	add	#4,r1	cmp/ge	r2,r1	bf	munge_loop	nop	mov     #0,r0	ldc     r0,gbr		! call the mainline		mov.l	main_k,r0	jsr	@r0	nop.hoo:    bra .hoo	.align 2stack_k:	.long	_stackend	stackbegin_k:	.long	_stackbegindeadbeef_k:	.long	0xdeadbeefedata_k:	.long	_edataend_k:	.long	_endiramcopy_k:	.long	_iramcopyiram_k:	.long	_iramstartiramend_k:	.long	_iramenddatacopy_k:	.long	_datacopydata_k:	.long	_datastartdataend_k:	.long	_dataendmain_k:	.long	_mainvbr_k:	.long	vectorsorig_vbr_k:	.long 0x9000000	.section .resetvectorsvectors:	.long start	.long _stackend	.long start	.long _stackend

⌨️ 快捷键说明

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