文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>crt0_gnu.S理解

crt0_gnu.S理解

时间:2010-05-21  来源:likefreebird

.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 4
reset:

/* 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_vector
swi_vector:
    b     swi_vector
pabt_vector:
    b     pabt_vector
dabt_vector:
    b     dabt_vector
rsvd_vector:
    b     rsvd_vector
irq_vector:
    b     irq_vector
fiq_vector:
    b     fiq_vector
reset_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_SR
1:
    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_SR
1:
    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, #0
1:
    cmp r3, r4
    strcc r2, [r3], #4
    bcc 1b

#ifdef CFG_NORFLASH        

//如果是从NorFlash启动,那么拷贝NorFlash中的4K代码到内部的sram0中
/*if boot from nor flash then relocate to RAM */
relocate:
        ldr r1, _loop_start
        ldr r2, _loop_end
        ldr r3, _loop_target

copy_loop:
        ldr r4,[r1],#4
        str r4,[r3],#4
        cmp r3,r2
        ble copy_loop
#endif


/* 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__

 _loop_start:
        .word 0x10000000     //NorFlash的起始地址

_loop_end:
        .word 0x201000      //内部sram0的结束地址

_loop_target:
        .word 0x200000      //内部sram0的起始地址


 

相关阅读 更多 +
排行榜 更多 +
雷电觉醒安卓版

雷电觉醒安卓版

飞行射击 下载
3D幻影飞车最新版

3D幻影飞车最新版

飞行射击 下载
乡村拼图

乡村拼图

休闲益智 下载