`
jsntghf
  • 浏览: 2569841 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

汇编写启动代码之开iCache

阅读更多

本文使用的开发板是九鼎创展的X210 iNand版本。

 

一、iROM中BL0对cache的操作

 

(1)iCache的一切动作都是自动的,不需要人为干预,我们所需要做的仅仅是打开或者关闭iCache。

(2)X210的iROM中BL0默认已经打开了iCache。

 

二、查阅ARM手册中CP15寄存器的相关部分

 

ARM处理器中CP15协处理器的寄存器,如下图所示:

 

由上图可知,CP15包括了16个寄存器,其中C1寄存器是控制寄存器,主要用于:

(1)禁止/使能MMU以及其它与存储系统有关的功能

(2)配置存储系统以及ARM处理器相关的工作

 

C1寄存器的位定义,如下图所示:

 

由上图可知,bit12用于开关iCache,其中0代表关闭iCache,1代表开启iCache。

 

三、代码实现

 

(1)开启iCache

 

mrc p15,0,r0,c1,c0,0;			
orr r0, r0, #(1<<12)	// bit12置1
mcr p15,0,r0,c1,c0,0;

 

(2)关闭iCache

 

mrc p15,0,r0,c1,c0,0;			
bic r0, r0, #(1<<12)	// bit12置0
mcr p15,0,r0,c1,c0,0;

 

分享到:
评论

相关推荐

    [原创]自己动手编写嵌入式Bootloader之(1).pdf

    ### 第一阶段:汇编代码(start.S) 由于嵌入式系统上电后,硬件设备尚未初始化,不具备运行C语言程序的条件,因此Bootloader的初始部分通常采用汇编语言编写。这一阶段的代码需完成原始硬件初始化和C运行环境的...

    编写嵌入式Bootloader

    - **Reset异常**:这是系统上电后自动触发的第一个异常,因此我们的代码都写在这个异常的服务程序里。 - **其他异常**:如未定义指令、指令预取中止、数据访问中止等,由于在S-Boot中并未使用中断,这些异常的服务...

    Linux平台下Mini210S裸机程序开发指南.pdf

    程序开发中的重定位过程涉及到将代码从IROM移动到DRAM(动态随机存取存储器),以及如何控制指令缓存(icache)。这些都是裸机程序开发中的核心知识点,需要开发者仔细研究和实践。 此外,教程还覆盖了S5PV210...

    ARM例程源码

    通过分析和学习这些源码,我们可以深入理解ARM处理器的工作原理以及如何编写高效的ARM汇编代码或者C/C++代码来利用其特性。 首先,ARM架构有多种不同的模式,包括用户模式(User)、系统模式(System)、中断模式...

    精通Linux设备驱动程序开发第2章-内核一瞥.pdf

    内核初始化阶段,从执行实模式汇编代码开始,紧接着调用`init/main.c`中的`start_kernel()`函数。此函数负责CPU子系统的初始化,内存管理与进程管理系统的配置,以及对外部总线和I/O设备的启动。最终,激活init进程...

    编写2440bootload

    第一阶段的汇编代码:start.S** 由于系统上电或复位后,硬件环境尚未准备就绪,因此Bootloader的第一阶段通常采用汇编语言编写。这部分代码负责完成最基础的硬件初始化工作,如设置CPU模式、禁用中断等,并为后续...

    Uboot源码阅读笔记.pdf

    ### U-Boot 源码解析之ARM920T启动过程 #### 一、概述 U-Boot(Universal Boot Loader)是一个支持多种处理器架构的开源Bootloader项目,广泛应用于嵌入式系统的启动加载过程中。本文将根据提供的文档《U-Boot源码...

Global site tag (gtag.js) - Google Analytics