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

📄 crt0_gnu.s

📁 针对at91系列的arm的启动代码的编写有一个整体的说明
💻 S
字号:
/* ---------------------------------------------------------------------------- *         ATMEL Microcontroller Software Support  -  ROUSSET  - * ---------------------------------------------------------------------------- * Copyright (c) 2006, Atmel 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 disclaimer below. *  * - Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the disclaimer below in the documentation and/or * other materials provided with the distribution.  *  * Atmel's name may not be used to endorse or promote products derived from * this software without specific prior written permission.  *  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE * DISCLAIMED. IN NO EVENT SHALL ATMEL 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. * ---------------------------------------------------------------------------- * File Name           : crt0_gnu.S * Object              :  * Creation            : ODi Apr 19th 2006 *----------------------------------------------------------------------------- */.section start	.text 	#include "include/part.h"/*---------------------------------------------------------------------------- Area Definition---------------- Must be defined as function to put first in the code as it must be mapped at offset 0 of the flash EBI_CSR0, ie. at address 0 before remap._---------------------------------------------------------------------------*//* Application startup entry point */	.globl reset	.align 4reset:/* Exception vectors (should be a branch to be detected as a valid code by the rom */_exception_vectors:	b 	reset_vector    /* reset */	b 	undef_vector 	/* Undefined Instruction */	b 	swi_vector   	/* Software Interrupt */	b 	pabt_vector  	/* Prefetch Abort */	b 	dabt_vector  	/* Data Abort */	b 	rsvd_vector  	/* reserved */	b 	irq_vector	/* IRQ : read the AIC */	b 	fiq_vector      /* FIQ */undef_vector:	b 	undef_vectorswi_vector:	b 	swi_vectorpabt_vector:	b 	pabt_vectordabt_vector:	b 	dabt_vectorrsvd_vector:	b 	rsvd_vectorirq_vector:	b 	irq_vectorfiq_vector:	b 	fiq_vectorreset_vector:/* Init the stack */_init_stack:	ldr     sp,=TOP_OF_MEM/* Test if main oscillator is enabled */	ldr 	r0,=AT91C_PMC_SR	ldr 	r1, [r0]	ldr 	r2,=AT91C_PMC_MOSCS	ands 	r1, r1, r2	bne     _switch_to_mosc/* Enable the main oscillator */_enable_mosc:	ldr 	r0,=AT91C_PMC_MOR	mov 	r1, #(0x40 << 8)	ldr 	r2,=AT91C_CKGR_MOSCEN	orr 	r1, r1, r2	str	r1, [r0]	ldr 	r0,=AT91C_PMC_SR1:	ldr 	r1, [r0]	ldr 	r2,=AT91C_PMC_MOSCS	ands 	r1, r1, r2	beq     1b	/* Test if MCK == SLOW CLOCK */_switch_to_mosc:	ldr 	r0,=AT91C_PMC_MCKR	ldr 	r1,=AT91C_PMC_CSS	ldr 	r2, [r0]	and 	r2, r2, r1	mov	r1, #0	cmp    	r1, r2/* No => Do nothing */	bne	_init_bss/* Yes => Switch to the main oscillator */	ldr 	r1,=AT91C_PMC_CSS_MAIN_CLK	ldr 	r2,=AT91C_PMC_PRES_CLK	orr	r1, r1, r2	str 	r1, [r0]	ldr 	r0,=AT91C_PMC_SR1:	ldr     r1, [r0]	ldr	r2,=AT91C_PMC_MCKRDY	ands    r1, r1, r2	beq     1b/* Initialize the bss segment */_init_bss:	adr    r2, _lp_bss	ldmia  r2, {r3, r4}	mov    r2, #01:	cmp    r3, r4	strcc  r2, [r3], #4	bcc    1b/* Branch on C code Main function (with interworking) */_branch_main:	ldr     r4, = main	mov     lr, pc	bx      r4/* Branch to the application at the end of the bootstrap init */_go:	ldr 	r1, =MACH_TYPE	mov     lr, pc	bx      r0	.align_lp_bss:	.word __bss_start__	.word __bss_end__

⌨️ 快捷键说明

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