三星uboot-1.1.6源码分析——lowlevel_init.S (4)

三星uboot-1.1.6源码分析——lowlevel_init.S (board\samsung\smdk6410)(1)的链接地址

三星uboot-1.1.6源码分析——lowlevel_init.S (2)——时钟配置的链接地址

三星uboot-1.1.6源码分析——lowlevel_init.S (3)---串口的链接地址


上一篇主要是串口部分,这篇接着分析lowlevel_init.S的源码。

#if defined(CONFIG_NAND)  我们定义了#defineCONFIG_NAND
/* simple init for NAND */
bl nand_asm_init  
#endif

nand_asm_init 源码如下:

/*
 * Nand Interface Init for SMDK6400 

*/
nand_asm_init:
ldr r0, =ELFIN_NAND_BASE   -----  寄存器基地址
ldr r1, [r0, #NFCONF_OFFSET]
orr r1, r1, #0x70
orr r1, r1, #0x7700
str     r1, [r0, #NFCONF_OFFSET]   -----看下面这些图,就明白是干什么的了:


三星uboot-1.1.6源码分析——lowlevel_init.S (4)_第1张图片
三星uboot-1.1.6源码分析——lowlevel_init.S (4)_第2张图片

ldr r1, [r0, #NFCONT_OFFSET]
orr r1, r1, #0x03
str     r1, [r0, #NFCONT_OFFSET]------也看图:

三星uboot-1.1.6源码分析——lowlevel_init.S (4)_第3张图片


movpc, lr  -----返回

接着看:

bl mem_ctrl_asm_init  ---- 这个的源码在cpu_init.S (cpu\s3c64xx\s3c6410)文件中,我以前分析过,主要是和DRAM有关的初始化,这里就不分析了。

继续接着看:

#if 1
        ldr     r0, =(ELFIN_CLOCK_POWER_BASE+RST_STAT_OFFSET)
        ldr     r1, [r0]
        bic     r1, r1, #0xfffffff7
        cmp     r1, #0x8
        beq     wakeup_reset   -----主要和寄存器RST_STAT有关,看下面:


三星uboot-1.1.6源码分析——lowlevel_init.S (4)_第4张图片

#endif


#if 1
wakeup_reset:    相等是跳转到这里


/*Clear wakeup status register*/
ldr r0, =(ELFIN_CLOCK_POWER_BASE+WAKEUP_STAT_OFFSET)
ldr r1, [r0]
str r1, [r0]



三星uboot-1.1.6源码分析——lowlevel_init.S (4)_第5张图片
        /*LED test*/
        ldr     r0, =ELFIN_GPIO_BASE
        ldr     r1, =0x3000
        str     r1, [r0, #GPNDAT_OFFSET]


/*Load return address and jump to kernel*/    没用到
ldr r0, =(ELFIN_CLOCK_POWER_BASE+INF_REG0_OFFSET)
ldr r1, [r0]/* r1 = physical address of s3c6400_cpu_resume function*/
mov pc, r1/*Jump to kernel (sleep-s3c6400.S)*/   没有这个文件
nop
nop
#endif

到这里有关lowlevel_init.S 文件的内容就都说完了,主要是有关开发板的一些配置,因为是汇编,所以看起来有点烦,不过,也挺简单的。


你可能感兴趣的:(c,汇编,function,三星,interface)