源码
GitHub:https://github.com/Kilento/4412NoOS
看门狗
用过单片机的人应该比较熟悉看门狗了,这是在程序异常时自动复位CPU的一个寄存器。在 Exynos 4412 同样有这样一个看门狗。查看数据手册可以得知它的地址: 从前面的博文 Exynos4412 启动分析中我们知道在启动过程中一般首先要关闭看门狗。我们在不知道看门狗模式是否关闭的情况下,需要显示地关闭看门狗。关闭的汇编代码比较简单
ldr r0, =WATCHDOG
ldr r1, =0x0
str r1, [r0]
iCache
我们知道 CPU 执行程序首先要从内存(DDR)中加载指令,而 CPU 的速度一般远远要快于 DDR,这回导致程序执行速度受限于 DDR。所以引入了 Cache的概念,Cache由SRAM 制作。有了 Cache 之后我们就可以提前将数据或者指令提前放到 Cache 之中。就可以大大提高 CPU 处理的速度。
开关 Cache 需要控制协处理器 CP15,这里我不对 CP15 作详细介绍,具体可以阅读参考资料[1]
控制 Cache 使用 CP15的寄存器 Bit12 则控制 iCache 的使能与否 iCache 是指令缓存,相应的还有 dCache 数据缓存。我们这边尝试关闭或打开 iCache,查看实验现象。
/* 打开或者关闭 iCache */
mrc p15, 0, r0, c1, c0, 0 /* 将 CP15 寄存器 C1 的值读到 r0 中 */
//bic r0, r0,
orr r0, r0,
mcr p15, 0, r0, c1, c0, 0 /* 将 r0 的值写到 CP15 寄存器 C1 中 */
查看现象发现,打开 iCache 比 关闭 iCache 情况下灯的闪烁要稍快一些。上述代码不执行时,灯的闪烁和打开 iCache 相同,可知默认情况下 BL0 已经打开了 iCache。
参考资料
[1]ARM协处理器CP15寄存器详解
2021年8月29日
Kilento
|