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指令的格式为: