- 论坛徽章:
- 0
|
本帖最后由 flyredonly 于 2014-04-08 10:51 编辑
uboot下ARMv7的Start.S中,关MMU和Cache的一段代码看不懂,请各位大大指导!
cache_set:
/* 禁止MMU ICACHE DCACHE */
MRC p15, 0, r0, c1, c0, 0 /*; Get control register */
BIC r0, r0, #CTRL_M_BIT /*; Disable MMU */
BIC r0, r0, #CTRL_C_BIT /*; Disable D Cache */
BIC r0, r0, #CTRL_I_BIT /*; Disable I Cache */
MCR p15, 0, r0, c1, c0, 0 /*; Write control register */
/* Invalidate ICACHE和DCACHE */
MOV r0, #0
MOV r0, #0
/* Invalidate caches/BTAC and TLB */
/* I-cache and BTAC(Also resets GHB) */
MCR p15, 0, r0, c7, c5, 0 /* Invalidate all instruction caches(to POU) */
/* D-cache (by set/way) */
/* Read cache size from the Cache Size Identification Register */
MRC p15, 1, r3, c0, c0, 0 /* Read Current Cache Size Identification Register */
/*MOV r1, #0x1ff */
LDR r1, =0x1ff
AND r3, r1, r3, LSR #13 /* r3 = (number of sets -1 */
MOV r0, #0
way_loop:
MOV r1, #0 /* r1->set counter */
主要就是这两条数据传送指令,不明白为何在设置了CP15的协处理器后,要做这样的两个操作。
一条操作难道不行? |
|