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

📄 start.s

📁 u-boot-1.1.6 源码包
💻 S
字号:
/* * Startup Code for S3C44B0 CPU-core * * (C) Copyright 2004 * DAVE Srl * * http://www.dave-tech.it * http://www.wawnet.biz * mailto:info@wawnet.biz * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA */#include <config.h>#include <version.h>/* * Jump vector table */.globl _start_start:	b       reset	add	pc, pc, #0x0c000000	add	pc, pc, #0x0c000000	add	pc, pc, #0x0c000000	add	pc, pc, #0x0c000000	add	pc, pc, #0x0c000000	add	pc, pc, #0x0c000000	add	pc, pc, #0x0c000000	.balignl 16,0xdeadbeef/* ************************************************************************* * * Startup Code (reset vector) * * do important init only if we don't start from memory! * relocate u-boot to ram * setup stack * jump to second stage * ************************************************************************* */_TEXT_BASE:	.word	TEXT_BASE.globl _armboot_start_armboot_start:	.word _start/* * These are defined in the board-specific linker script. */.globl _bss_start_bss_start:	.word __bss_start.globl _bss_end_bss_end:	.word _end#ifdef CONFIG_USE_IRQ/* IRQ stack memory (calculated at run-time) */.globl IRQ_STACK_STARTIRQ_STACK_START:	.word	0x0badc0de/* IRQ stack memory (calculated at run-time) */.globl FIQ_STACK_STARTFIQ_STACK_START:	.word 0x0badc0de#endif/* * the actual reset code */reset:	/*	 * set the cpu to SVC32 mode	 */	mrs	r0,cpsr	bic	r0,r0,#0x1f	orr	r0,r0,#0x13	msr	cpsr,r0	/*	 * we do sys-critical inits only at reboot,	 * not when booting from ram!	 */#ifndef CONFIG_SKIP_LOWLEVEL_INIT	bl	cpu_init_crit	/*	 * before relocating, we have to setup RAM timing	 * because memory timing is board-dependend, you will	 * find a lowlevel_init.S in your board directory.	 */	bl	lowlevel_init#endif#ifndef CONFIG_SKIP_RELOCATE_UBOOTrelocate:				/* relocate U-Boot to RAM	    */	adr	r0, _start		/* r0 <- current position of code   */	ldr	r1, _TEXT_BASE		/* test if we run from flash or RAM */	cmp     r0, r1                  /* don't reloc during debug         */	beq     stack_setup	ldr	r2, _armboot_start	ldr	r3, _bss_start	sub	r2, r3, r2		/* r2 <- size of armboot            */	add	r2, r0, r2		/* r2 <- source end address         */copy_loop:	ldmia	r0!, {r3-r10}		/* copy from source address [r0]    */	stmia	r1!, {r3-r10}		/* copy to   target address [r1]    */	cmp	r0, r2			/* until source end addreee [r2]    */	ble	copy_loop/*	now copy to sram the interrupt vector*/	adr	r0, real_vectors	add	r2, r0, #1024	ldr	r1, =0x0c000000	add	r1, r1, #0x08vector_copy_loop:	ldmia	r0!, {r3-r10}	stmia	r1!, {r3-r10}	cmp	r0, r2	ble	vector_copy_loop#endif	/* CONFIG_SKIP_RELOCATE_UBOOT */	/* Set up the stack						    */stack_setup:	ldr	r0, _TEXT_BASE		/* upper 128 KiB: relocated uboot   */	sub	r0, r0, #CFG_MALLOC_LEN	/* malloc area                      */	sub	r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */#ifdef CONFIG_USE_IRQ	sub	r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)#endif	sub	sp, r0, #12		/* leave 3 words for abort-stack    */	ldr	pc, _start_armboot_start_armboot:	.word start_armboot/* ************************************************************************* * * CPU_init_critical registers * * setup important registers * setup memory timing * ************************************************************************* */#define INTCON (0x01c00000+0x200000)#define INTMSK (0x01c00000+0x20000c)#define LOCKTIME (0x01c00000+0x18000c)#define PLLCON (0x01c00000+0x180000)#define CLKCON (0x01c00000+0x180004)#define WTCON (0x01c00000+0x130000)cpu_init_crit:	/* disable watch dog */	ldr 	r0, =WTCON	ldr	r1, =0x0	str	r1, [r0]	/*	 * mask all IRQs by clearing all bits in the INTMRs	 */	ldr	r1,=INTMSK	ldr	r0, =0x03fffeff	str	r0, [r1]	ldr	r1, =INTCON	ldr	r0, =0x05	str	r0, [r1]	/* Set Clock Control Register */	ldr	r1, =LOCKTIME	ldrb	r0, =800	strb	r0, [r1]	ldr	r1, =PLLCON#if CONFIG_S3C44B0_CLOCK_SPEED==66	ldr	r0, =0x34031 	/* 66MHz (Quartz=11MHz) */#elif CONFIG_S3C44B0_CLOCK_SPEED==75	ldr	r0, =0x610c1 /*B2: Xtal=20mhz Fclk=75MHz  */#else# error CONFIG_S3C44B0_CLOCK_SPEED undefined#endif	str	r0, [r1]	ldr	r1,=CLKCON	ldr	r0, =0x7ff8	str	r0, [r1]	mov	pc, lr/*************************************************//*	interrupt vectors	*//*************************************************/real_vectors:	b	reset	b	undefined_instruction	b	software_interrupt	b	prefetch_abort	b	data_abort	b	not_used	b	irq	b	fiq/*************************************************/undefined_instruction:	mov	r6, #3	b	resetsoftware_interrupt:	mov	r6, #4	b	resetprefetch_abort:	mov	r6, #5	b	resetdata_abort:	mov	r6, #6	b	resetnot_used:	/* we *should* never reach this */	mov	r6, #7	b	resetirq:	mov	r6, #8	b	resetfiq:	mov	r6, #9	b	reset

⌨️ 快捷键说明

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