ARM920T_内核MMU与cache应用分析

2019-08-22来源: eefocus关键字:ARM920T  内核MMU  cache

一、cache分类及应用场合

cache是内存和CPU之间的高速缓冲存储器,其分为icache(指令缓存)和dcache(数据缓存)。如果开启了cache,当CPU运行时会将正在运行的指令地址附近的指令或者数据调入cache,这样当运行下一条指令或用到下一条数据时直接从cache中查找,如果查找不到再访问内存,以此加快CPU执行速度。icache可以直接开启,而dcache需要开启MMU之后才能开启。


在启动文件中开启icache的代码可以放在时钟速度配置完成之后,代码如下:


    bl enable_icache

 

enable_icache:

    mrc p15, 0, r0, c1, c0, 0

    orr r0, r0, #(1<<12)

    mcr p15, 0, r0, c1, c0, 0

    mov pc, lr

二、MMU的应用

当CPU执行小的应用程序时,只要代码大小在芯片存储容量范围内,CPU每次都可以直接访问内存执行指令,但是当代码很大超出芯片存储容量时,则不能运行。此时需要MMU(内存管理单元),MMU可以将物理地址重映射,开启MMU之后CPU每次访问的都是虚拟地址,而每一个虚拟地址或者多个虚拟地址对应一个物理地址。32位的CPU虚拟地址范围为4G,映射方式为在物理存储地址上建立映射表。每个表有多个条目,每个条目大小1M,所以表的大小为:    条目数 = 4G/1M = 4096 ,一个条目32位占4Byte, 表大小 = 4096 * 4Byte = 16KB。因而只要在nand上占据16KB的空间即可重映射4G的访问范围。


CPU发出的VA(虚拟地址)经过CP13的C13转换为MVA(modified virtual address),MMU所看到的地址其实是MVA,通常外在来看不加以细分,权当VA处理。MMU常用section转换方式进行虚拟地址到物理地址的转换,其格式如下:

高12位为PA(物理地址)的高12位,AP设置访问权限(常设置为11,特权模式/用户模式下可读可写,所有模式下允许任何访问),domain(域设置,arm9有16个域,此处设置0选择域0),C(是否开启cache),B(是否开启Write buffer),其他位用默认值。


重映射代码如下:


#define MMU_SECDESC_AP      (3<<10)

#define MMU_SECDESC_DOMAIN  (0<<5)

#define MMU_SECDESC_NCNB    (0<<2)

#define MMU_SECDESC_WB      (3<<2)

#define MMU_SECDESC_TYPE    ((1<<4) | (1<<1))

 

#define MMU_SECDESC_FOR_IO   (MMU_SECDESC_AP | MMU_SECDESC_DOMAIN | MMU_SECDESC_NCNB | MMU_SECDESC_TYPE)

#define MMU_SECDESC_FOR_MEM   (MMU_SECDESC_AP | MMU_SECDESC_DOMAIN | MMU_SECDESC_WB | MMU_SECDESC_TYPE)

 

 

#define IO  1

#define MEM 0

 

void create_secdesc(unsigned int *ttb, unsigned int va, unsigned int pa, int io)

{

int index;

 

index = va / 0x100000;

 

if (io)

ttb[index] = (pa & 0xfff00000) | MMU_SECDESC_FOR_IO;

else

ttb[index] = (pa & 0xfff00000) | MMU_SECDESC_FOR_MEM;

}

 

/* 

 *    VA           PA           CB

 *    0            0            00

 *    0x40000000   0x40000000   11

 *

 *    64M sdram:

 *    0x30000000   0x30000000   11

 *    ......

 *    0x33f00000   0x33f00000   11

 *    

 *    register: 0x48000000~0x5B00001C

 *    0x48000000   0x48000000   00

 *    .......

 *    0x5B000000   0x5B000000   00

 *

 *    Framebuffer : 0x33c00000

 *    0x33c00000   0x33c00000   00

 *

 *    link address:

 *    0xB0000000   0x30000000   11

 */

void create_page_table(void)

{

/* ttb: translation table base */

unsigned int *ttb = (unsigned int *)0x32000000;

 

unsigned int va, pa;

int index;

 

/* 2.1 for sram/nor flash */

create_secdesc(ttb, 0, 0, IO);

 

/* 2.2 for sram when nor boot */

create_secdesc(ttb, 0x40000000, 0x40000000, MEM);

 

/* 2.3 for 64M sdram */

va = 0x30000000;

pa = 0x30000000;

for (; va < 0x34000000;)

{

create_secdesc(ttb, va, pa, MEM);

va += 0x100000;

pa += 0x100000;

}

 

/* 2.4 for register: 0x48000000~0x5B00001C */

va = 0x48000000;

pa = 0x48000000;

for (; va <= 0x5B000000;)

{

create_secdesc(ttb, va, pa, IO);

va += 0x100000;

pa += 0x100000;

}

 

/* 2.5 for Framebuffer : 0x33c00000 */

create_secdesc(ttb, 0x33c00000, 0x33c00000, IO);

 

/* 2.6 for link address */

create_secdesc(ttb, 0xB0000000, 0x30000000, MEM);

}

启动文件中代码如下:


/* 创建页表 */

bl create_page_table

 

/* 启动MMU */

bl mmu_enable

 

 

mmu_enable: 

/* 把页表基址告诉cp15 */

ldr r0, =0x32000000

mcr p15, 0, r0, c2, c0, 0

 

/* 设置域为0xffffffff, 不进行权限检查 */

ldr r0, =0xffffffff

mcr p15, 0, r0, c3, c0, 0

 

/* 使能icache,dcache,mmu */

mrc p15, 0, r0, c1, c0, 0

orr r0, r0, #(1<<12)  /* enable icache */

orr r0, r0, #(1<<2)  /* enable dcache */

orr r0, r0, #(1<<0)  /* enable mmu */

mcr p15, 0, r0, c1, c0, 0

 

mov pc, lr

有几个需要注意的关键点:


1. 由于代码重定位脚本中将nand中的代码重定位至0xB0000000,所以应该在重定位之前MMU进行地址的重映射,将0XB0000000映射到0X30000000,也就是nnad启动时SDRAM的起始地址,有关重定位参考此链接S3C2440代码重定位分析


2.在makefile时注意将mmu.c放至靠前的位置,必须在nand的前4K范围完成地址重映射,代码重定位,否则芯片将直接无法启动。


3.当使用NOR启动时,0地址映射时不能开启cache和write buffer。


代码重定位脚本:


SECTIONS{

. = 0xB0000000;

__code_start = .;

. = ALIGN(4);

.text  : {*(.text)}

. = ALIGN(4);

.rodata : {*(.rodata)}

. = ALIGN(4);

.data  : {*(.data)}

. = ALIGN(4);

__bss_start = .;

.bss : { *(.bss) *(.COMMON) }

_end = .;

}

关键字:ARM920T  内核MMU  cache

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic472094.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:ARM内存边界对齐以及sizeof问题
下一篇:S3C2440代码重定位分析

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ARM920T_内核 und与svc异常模式分析

debug输出结果:cpsr值得M4-M0为11011同下图的数据手册中的值一致2018.12.3补充,print1处的bug是因为print1改变了cpsr的值使0xdeadc0de成为不可执行指令,debug方法,去掉print1,未定义指令改为0xeeadc0de.二、svc异常模式0. 异常的进入与处理与und异常几乎一样,注意点为: /* 复位之后, cpu处于svc模式 * 现在, 切换到usr模式 */ mrs r0, cpsr      /* 读出cpsr */ bic r0, r0, #0xf  /* 修改M4-M0为0b10000, 进入usr模式 */ orr r0, r0
发表于 2019-08-22
ARM920T_内核 und与svc异常模式分析

基于ARM920T的嵌入式Linux系统的构建

(SAM SUNG公司使用ARM920T处理器内核开发的一款嵌入式处理器)。ARM920T核由ARM9TDMI,存储管理单元(MMU)和高速缓存三部分组成。    S3C2410的资源还包括外围存储设备(SDRAM和NandFlash),外围显示设备(触摸屏和LCD)与外围接口设备(串口、网口与并口)。    软件平台    嵌入式Linux系统从软件系统的角度通常可以分为以下4个部分。  ·引导加载程序。包括固化在固件中的启动代码(可选)和Bootloader。  ·内核。特定于嵌入式板子的定制内核以及控制内核引导系统的参数。  ·文件系统。包括根文件系统和建立
发表于 2018-02-18
基于ARM920T的嵌入式Linux系统的构建

基于arm920T嵌入式Linux的实验平台环境的构建

    面向A R M微处理器构架的嵌入式操作系统的使用量这些年持续增长,在各种嵌入式操作系统中, L inux是获得支持最多的第三大力量。    目前,ARM L inux支持包括ARM610、A RM710、ARM720T cores、ARM920T cores、StrongARM 110、StrongARM1100、XScale等系列的arm处理器。    Gameboy是目前比较流行的8位掌上游戏机,通常被简称为GB,它的最终态Game Boy Color (GBC)是完全向后兼容的。Gnuboy是GB /GBC的软件模拟器,是一种自由软件,它是基于Qt系统
发表于 2018-02-12
基于arm920T嵌入式Linux的实验平台环境的构建

基于ARM920T内核的16/32位RISC嵌入式CPU的解析方案

    1 前言    在当今后PC时代,嵌入式系统应用得越来越广泛,嵌入式产品充斥着许多领域,日常生活的手机,MP4,PDA等都属于典型的嵌入式系统。在嵌入式系统中,微处理器和操作系统是进行应用开发的基础。在微处理器方面,S3C2410是Samsung公司推出的一款基于ARM920T内核的16/32位 RISC嵌入式CPU,主要面向手持设备以及高性价比、低功耗的应用。在操作系统方面,Windows CE 5.0是由微软提供的一款嵌入式操作系统,在Windows CE 4.2基础上,它又加入了一些新特性以满足市场需求。板级支持包 (Board Support 
发表于 2018-02-05

基于ARM720T的SEP4020嵌入式处理器的动作控制MP3的设计

是由东南大学国家专用集成电路系统工程技术研究中心设计的一款处理器,采用 0.18μm标准CMOS的工艺设计,内嵌ASIXCORE(32位RISC内核,兼容ARM720T,带8kB指令数据Cache和全功能MMU)。 SEP4020芯片中集成各种功能,包括: 8/16位SRAM/NORFALSH接口,16位SDRAM接口硬件NANDFLASH控制器,支持NANDFLASH自启动,支持软件/硬件ECC校验10M/100M自适应以太网MAC,支持RMII接口64kByte高速片上SRAMUSBl.1Device,全速12Mb/s支持I2S音频接口支持MMC/SD卡LCD控制器,支持640×480×16位TFT彩屏和STN黑白
发表于 2017-09-18
基于ARM720T的SEP4020嵌入式处理器的动作控制MP3的设计

Ikanos Communications 将 MIPS MIPS32 24KEc处理器内核应用于下一代宽带系统级芯片

高性能处理器内核显著提升先进宽带解决方案性能   为数字消费、网络、个人娱乐、通信和商业应用提供业界标准处理器架构及内核的领先供应商 MIPS 科技(纳斯达克交易代码:MIPS)今天宣布,Ikanos Communications 已将 MIPS MIPS32  24KEc 处理器内核应用于下一代快速光网络宽带接入先进解决方案。其应用对象涵盖所有新兴的宽带应用领域。包括用户终端设备(CPE)、家庭网络、SOHO 及企业级网络应用。   行业分析公司 Infonetics Research 预测,到 2009 年,随着服务提供商在三重服务和四重服务中不断捆绑语音、数据、视频、无线应用服务,将进一步吸引新的顾客并减少现有客户流失
发表于 2006-08-22

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved