uboot 2013.01.01 start.S部分分析
#if !(defined(CONFIG_OMAP44XX) && defined(CONFIG_SPL_BUILD))
/* Set V=0 in CP15 SCTRL register - for VBAR to point to vector */
mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTRL Register
bic r0, #CR_V @ V = 0
mcr p15, 0, r0, c1, c0, 0 @ Write CP15 SCTRL Register
/* Set vector address in CP15 VBAR register */
ldr r0, =_start
mcr p15, 0, r0, c12, c0, 0 @Set VBAR
#endif
这是对cp15寄存器的操作
这一句:mrc p15, 0, r0, c1, c0, 0 @ Read CP15 SCTRL Register
就是把cp15的c1 c0中的值放到 r0寄存器中
#define CR_V (1 << 13) /* Vectors relocated to 0xffff0000 */
bic r0, #CR_V @ V = 0
就是把r0的第13位清零
mcr p15, 0, r0, c1, c0, 0 @ Write CP15 SCTRL Register
然后再写回c1 c0寄存器
我们看一下手册中的c1 c0的第13位清零是什么作用
这个寄存器对异常向量起作用,描述上大概是第13位为0 异常向量地址会被映射到0x00000000 如果为1 会被映射到0xffff0000
个人记录使用