三星uboot-1.1.6源码分析——lowlevel_init.S (4)
2012-06-15 17:26
633 查看
三星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] -----看下面这些图,就明白是干什么的了:
ldr r1, [r0, #NFCONT_OFFSET]
orr r1, r1, #0x03
str r1, [r0, #NFCONT_OFFSET]------也看图:
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有关,看下面:
#endif
#if 1
wakeup_reset: 相等是跳转到这里
/*Clear wakeup status register*/
ldr r0, =(ELFIN_CLOCK_POWER_BASE+WAKEUP_STAT_OFFSET)
ldr r1, [r0]
str r1, [r0]
/*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 文件的内容就都说完了,主要是有关开发板的一些配置,因为是汇编,所以看起来有点烦,不过,也挺简单的。
三星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] -----看下面这些图,就明白是干什么的了:
ldr r1, [r0, #NFCONT_OFFSET]
orr r1, r1, #0x03
str r1, [r0, #NFCONT_OFFSET]------也看图:
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有关,看下面:
#endif
#if 1
wakeup_reset: 相等是跳转到这里
/*Clear wakeup status register*/
ldr r0, =(ELFIN_CLOCK_POWER_BASE+WAKEUP_STAT_OFFSET)
ldr r1, [r0]
str r1, [r0]
/*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 文件的内容就都说完了,主要是有关开发板的一些配置,因为是汇编,所以看起来有点烦,不过,也挺简单的。
相关文章推荐
- 三星U-Boot-1.1.6源码分析lowlevel_init.S (board\samsung\smdk6410)
- 三星uboot-1.1.6源码分析——lowlevel_init.S (2)——时钟配置
- 三星uboot-1.1.6源码分析——lowlevel_init.S (board\samsung\smdk6410)(1)
- 三星uboot-1.1.6源码分析——lowlevel_init.S (3)---串口
- u-boot源码----lowlevel_init.S分析
- 三星uboot1.1.6源码分析——start.s(3)---从NAND复制uboot到外部RAM(2)
- 三星uboot1.1.6源码分析——start.s(7)--C语言部分(1)
- 三星uboot1.1.6源码分析——start.s(5)——与MMU有关的源码(1)
- 三星uboot1.1.6源码分析——start.s(11)--C语言部分(5)
- 三星uboot1.1.6源码分析——start.s(12)--C语言部分(6)
- 三星uboot1.1.6源码分析——start.s(4)——从NAND复制源码到RAM(3)
- 三星uboot1.1.6源码分析——start.s(1)
- 三星U-Boot-1.1.6源码分析
- 三星uboot1.1.6源码分析——start.s(2)--从NAND复制uboot源码到RAM(1)
- 三星uboot1.1.6源码分析——start.s(13)--C语言部分(7)
- 三星uboot1.1.6源码分析——start.s(1)
- 三星uboot1.1.6源码分析——start.s(5)——与MMU有关的源码(2)
- 三星uboot1.1.6源码分析——start.s(9)--C语言部分(3)
- 三星uboot1.1.6源码分析——start.s(4)——从NAND复制源码到RAM(3)
- 三星uboot1.1.6源码分析——start.s(6)--汇编部分完!