02.07.2013 Views

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

而此处代码被#if 0注释掉了。<br />

图表 14 CLKDIVN 的位域<br />

问:为何要注释掉,难道想要使用其默认的值,即HDIVN和PDIVN上电后,默认值Initial<br />

State,都是0,对应的含义为,FCLK:HCLK:PCLK = 1:1:1 ???<br />

答:不是,是因为我们在其他地方会去初始化时钟,去设置对应的CLKDIVN,详情参考后面的<br />

代码:<br />

bl clock_init<br />

的部分。<br />

#endif /* CONFIG_S3C2400 || CONFIG_S3C2410 || CONFIG_S3C2440 */<br />

此处是结束上面的#ifdef。<br />

/*<br />

* we do sys-critical inits only at reboot,<br />

* not when booting from ram!<br />

*/<br />

#ifndef CONFIG_SKIP_LOWLEVEL_INIT<br />

#endif<br />

bl cpu_init_crit<br />

关于bl指令的含义:<br />

b指令,是单纯的跳转指令,即CPU直接跳转到某地址继续执行。<br />

而BL是Branch with Link,带分支的跳转,而Link指的是Link Register,链接寄存器<br />

R14,即lr,所以,bl的含义是,除了包含b指令的单纯的跳转功能,在跳转之前,还把r15寄<br />

存器=PC=cpu地址,赋值给r14=lr,然后跳转到对应位置,等要做的事情执行完毕之后,再用<br />

mov pc, lr<br />

使得cpu再跳转回来,所以整个逻辑就是调用子程序的意思。<br />

bl的语法为:<br />

“2、 BL指令<br />

BL指令的格式为:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!