start.S解析5
2016-04-22 13:06
162 查看
《朱老师物联网大讲堂》学习笔记
学习地址:www.zhulaoshi.org
为什么要判断?
冷启动的话,当前代码段应该在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行呢),还包括一些宏定义也很多,
学习地址: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行呢),还包括一些宏定义也很多,
相关文章推荐
- 我的 ARM+Linux 学习路线
- 开发学习记录之看门狗驱动
- 时钟+温度+遥控设置,综合时钟例子
- Linux下运行openwebos- -(转)
- Linux下运行openwebos- -(转)
- BusyBox 简化嵌入式 Linux 系统
- EGL 学习
- 嵌入式开发设计方法变化的背景
- 嵌入式人才的发展方向
- 汇编调用c函数为什么要设置栈
- 三角函数的实现
- 嵌入式桌面操作系统使用与制作攻略
- 嵌入式系统烧写uboot/bootloader/kernel的一般方法
- 甲骨文收购Sleepycat 丰富嵌入式产品线
- 嵌入式Linux操作系统学习规划
- 基于嵌入式多芯片模组的微机保护平台
- 嵌入式系统中常用文件系统的制作总结
- 嵌入式C语言基础教程一
- 汇总Dotfuscator自定义规则中的元素选择
- 3. 类型限定符