引言
对DRAM clock的调整可能会影响对DRAM的读写,所以安全的方法是将指令预读。
代码如下
; First get cache info。CP15 c0中记录着该处理器的cache信息
mrc p15, 0, r0, c0, c0, 1
; Get I cache line size as (1 << (b[1..0] + 3)),
;32位的低两位表示cache line size,但是要经过前面的运算,可以为8,16,32,64字节
and r3, r0, #3
add r3, r3, #3
mov r2, #1
mov r2, r2, lsl r3
sub r3, r2, #1
;运算后:
;r2=cache line size r3=r2-1
; Now get first and last instruction addresses。这两个地址见代码后半部。可以理解为:
;r0= IC2START r1= IC2END
add r0, pc, #(IC2START - . + 8)
add r1, pc, #(IC2END - . + 8)
; Make sure that address is cache line aligned。调整R0,使它对齐到cache line
add r0, r0, r3
bic r0, r0, r3
; Avoid doing too much
sub r1, r1, #4
; Prefetch instructions。循环预取r0所指示地址的指令
60 mcr p15, 0, r0, c7, c13, 1
add r0, r0, r2
cmp r0, r1
bls %B60
。。。
IC2START
;这里的nop用来适应前面IC2START的cache line 对齐,所以填充nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
;具体的DRAM clock调整
。。。
IC2END
本文介绍了一种通过ARM处理器的缓存信息获取和预取指令的方法,以应对DRAMclock调整带来的读写影响。该方法首先从CP15c0中获取缓存信息,并计算缓存行大小,然后确定指令的起始和结束地址,进行地址对齐并预取指令。
1338

被折叠的 条评论
为什么被折叠?



