start.S解析5

《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org


	ldr	r0, =0xff000fff
	bic	r1, pc, r0		/* r0 <- current base addr of code */
	ldr	r2, _TEXT_BASE		/* r1 <- original base addr in ram */
	bic	r2, r2, r0		/* r0 <- current base addr of code */
	cmp     r1, r2                  /* compare r0, r1                  */
	beq     1f			/* r0 == r1 then skip sdram init   */
判断当前代码执行的位置,

为什么要判断?

冷启动的话,当前代码段应该在SRAM中的BL1中,

如果是低功耗的话,就是在DDR中运行的,

上面的不同,引起代码上的不同就是时钟的初始化和DDR的初始化,

bic r1, pc, r0 //清除某些位,将其它一些位的值赋值给r1,

ldr r2, _TEXT_BASE //加载链接地址到r2,然后将某些位清0,留下特定位,最后去比较r1和r2,

上面两步为什么要拿掉特定位,而且手法也是蛮新的,清除掉低位肯定变化的地址和高位肯定不变的地址,留下中间可能变也可能不变的地址,然后来比较地址的变化,

ps:1代表标号,f代表向下找,不是一个整体,


system_clock_init,

system_clock_init:

	ldr	r0, =ELFIN_CLOCK_POWER_BASE	@0xe0100000

	/* Set Mux to FIN */
	ldr	r1, =0x0
	str	r1, [r0, #CLK_SRC0_OFFSET]

	ldr	r1,	=APLL_LOCKTIME_VAL
	str	r1,	[r0, #APLL_LOCK_OFFSET]

	/********lxg added*********************/
	ldr	r0, =ELFIN_CLOCK_POWER_BASE	@0xe0100000

	ldr	r1,	=MPLL_LOCKTIME_VAL
	str	r1,	[r0, #MPLL_LOCK_OFFSET]
	/********end*********************/

	/* Disable PLL */
后面还很多,有必要都贴出来吗?简单说,就是分析这些值怎么来的,有很多很长哦(128行呢),还包括一些宏定义也很多,





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值