u-boot第一阶段分析(三)

本文详细解析了U-Boot中的lowlevel_init.S模块,包括检查复位状态、IO状态恢复、关闭看门狗、时钟初始化、DDR初始化及串口初始化等内容,并解释了这些步骤的重要性和相互依赖关系。

lowlevel_init.S的引入

注:本次分析的u-boot是九鼎官方的u-boot代码
下载地址:链接:http://pan.baidu.com/s/1gfpDZqj 密码:7cqe


继续上一章节的第四小节;
第一次设置完栈之后,跳转到lowlevel_init.S中去,代码如下:

bl	lowlevel_init

通过Source Insight找到lowevel_init.S的实际位置在:
uboot/board/samsumg/x210/lowlevel_init.S
1.压栈

lowlevel_init:
	push	{lr}

接下来还会再次调用函数,所以要先压栈。

2.检查复位状态

ldr	r0, =(ELFIN_CLOCK_POWER_BASE+RST_STAT_OFFSET)
ldr	r1, [r0]
bic	r1, r1, #0xfff6ffff
cmp	r1, #0x10000
beq	wakeup_reset_pre
cmp	r1, #0x80000
beq	wakeup_reset_from_didle

(1)复杂CPU允许多种复位情况。譬如直接冷上电、热启动、睡眠(低功耗)状态下的唤醒等,这些情况都属于复位。所以我们在复位代码中要去检测复位状态,来判断到底是哪种情况。
(2)判断哪种复位的意义在于:冷上电时DDR是需要初始化才能用的;而热启动或者低功耗状态下的复位则不需要再次初始化DDR。

3.IO状态恢复

/* IO Retention release */
	ldr	r0, =(ELFIN_CLOCK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值