Home » 朱老师嵌入式 » icache 相关

icache 相关

编 辑:Y ┊ 时 间:2022年04月08日 ┊ 访问: 16 次

irom手册

94428-98tnfiar6rb.png

网络关于Icache的内容

一、什么是Cache

Cache是一种容量比较小,但访问速度比较快存储器。由于处理器的速度远高于主存,处理器直接从内存中存取数据要等待一定周期,而Cache位于处理器与主存之间,保存着最近一段时间处理器涉及到的主存块内容。在需要读取数据是,处理器可能就会从Cache中读取需要的数据,而不是从主存中获取数据,这样就提高了系统的运行效率。

二、ARM处理器的Cache

ARM处理器支持Cache机制,并将Cache分开为I-Cache(指令缓存)和D-Cache(数据缓存)。系统刚上电时,I-Cacche中的内容是无效的,并且I-Cacche的功能也是关闭的,CP15协处理器的SCTLR寄存器(系统控制寄存器)的bit[12]控制I-Cache的打开和关闭。I-Cache关闭时,CPU每次取指令都要读主存,所以性能比较低。因此应该尽快打开I-Cache。同样,系统刚上电时, D-Cache中的内容是无效的,并且D-Cache的功能也是关闭的,SCTLR寄存器的bit[2]控制D-Cache的打开和关闭。因为D-Cache必须在开启MMU(内存管理单元)后才能使能,而本程序并不打算开启MMU,所以这里我们不是能D-Cache,只研究I-Cache。

三、Cache测试

我们使用Exynos4412处理器开发板,该处理器采用32nm制程,拥有四枚主频可达1.4 GHz的Cortex-A9通用处理核心,拥有32 KB I- Cache和32 KB D- Cache,1 MB L2 Cache。以下是I-Cache的测试代码,如下:

.section 
.text
.globl _start

_start:
    ldr r0, =WTCON
    mov r1, #0
    str r1, [r0]
    mrc p15, 0, r0, c1, c0, 0
    /* orr r0, r0, #0x1000 @Enable ICache */
    bic r0, r0, #0x1000 @Disable ICache
    mcr p15, 0, r0, c1, c0, 0

    ldr r0, =GPF3CON
    ldr r1, =0x10000
    str r1, [r0]

led_flash:
    ldr r0, =GPF3DAT
    mov r1, #0x10
    str r1, [r0]
    bl delay

    mov r1, #0x0
    str r1, [r0]

    bl delay
    bled_flash

delay:
    cmp r0, #0
    subne r0, r0, #1
    bne delay
.end

将该程序放到Exynos4412开发板上测试,先使能I-Cache,再关闭I-Cache,观察LED灯闪烁的频率变化。我们能够发现,使能I-Cache灯的闪烁频率比较高,关闭I-Cache闪烁频率低,这说明处理器执行过的指令被I-Cache缓存,当处理器再一次执行该指令时,处理器只需要从Cache中取出需要的指令,而不再需要访问主存储器,不必等待一段时间,从而提高了系统的效率。

在我们的代码中加入icache的代码

其实仅需在我们start.S 里面加入我们的代码:

// 定义看门狗设置寄存器
#define WTCON 0xE2700000
#define SVC_STACK 0xd0037D80

.global _start
_start:
    // 关闭看门狗
    ldr r0, =WTCON
    ldr r1, =0x0
    str r1, [r0]

    ldr sp, =SVC_STACK
    // 从这里之后就可以开始调用C程序了

    // 开/关icache
    mrc p15,0,r0,c1,c0,0;            // 读出cp15的c1到r0中
    //bic r0, r0, #(1<<12)            // bit12 置0  关icache
    orr r0, r0, #(1<<12)            // bit12 置1  开icache
    mcr p15,0,r0,c1,c0,0;
    
    // 从这里之后就可以开始调用C程序了
    bl start_main //C语言实现的一个函数
    // 汇编最后的这个死循环不能丢
    b .

就好了




Copyright © 2026 Y 版权所有.网站运行:13年238天21小时25分