一、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 = .;
}
上一篇:第一页
下一篇:S3C2440代码重定位分析
推荐阅读
史海拾趣
在稳固了国内市场后,Elpress AB开始积极拓展国际市场。公司设立了多个海外子公司和物流中心,如丹麦的锡尔克堡、德国的Viersen以及中国的北京等地。这些海外机构的建立为Elpress AB的产品提供了更广阔的销售渠道和更便捷的服务支持。同时,Elpress AB还与国际知名电子企业开展合作,共同研发新产品、开拓新市场,进一步提升了公司的国际影响力。
北京速通科技有限公司(以下简称速通科技)作为ETC行业的领军企业,其创立之初就专注于电子不停车收费系统(ETC)的研发与应用。随着国内交通拥堵问题的日益严重,速通科技看到了ETC系统在未来交通管理中的重要地位。公司组建了一支由行业专家和技术精英组成的团队,开始了ETC技术的探索之路。
Alpha Semiconductor位于美国加州硅谷的研发与生产基地是公司发展的重要支撑。在这里,公司拥有一流的研发团队和先进的生产设备,能够为客户提供高质量的产品和服务。硅谷作为全球科技创新的中心之一,为Alpha Semiconductor提供了丰富的技术资源和人才支持,使得公司能够不断推陈出新,保持在半导体行业的领先地位。
通过以上五个故事,我们可以看到Alpha Semiconductor公司在电子行业中的发展历程。从初创时期的代工服务起步,到后来的OEM定制产品、自主研发电源管理产品,再到高性能标准模拟和混合信号IC的制造实力,以及在美国硅谷的研发与生产基地的建立,每一个阶段都见证了公司的成长和进步。Alpha Semiconductor凭借着不断的技术创新和市场拓展,已经成为了半导体行业中的佼佼者。
在半导体领域,技术创新是企业持续发展的关键。谷峰公司深知这一点,不断加大研发投入,致力于新技术的研发与应用。其中,SGT(Super Junction Technology)技术的成功研发,是谷峰发展历程中的一个重要里程碑。SGT技术以其低内阻、高效率的特点,成为高频应用的理想选择,极大地提升了谷峰产品的市场竞争力。此外,谷峰还推出了多款高性能的碳化硅MOSFET产品,进一步巩固了其在功率半导体领域的领先地位。
为了保持技术领先和市场竞争力,晶岳电子一直注重研发团队的建设。目前,公司在上海、深圳及台湾均建有成熟的产品研发团队,核心功率器件及集成电路设计人员均拥有15年以上的设计研发经验。这些优秀的研发人员不仅为公司带来了源源不断的技术创新,也确保了公司在激烈的市场竞争中始终保持领先地位。此外,晶岳电子还积极与高校和研究机构合作,共同开展前沿技术的研发和应用。
关于DSP实时多任务操作系统在国外已经广为大家应用,但在国内大家迟迟接受不了这种基于DSP操作系统的概念,往往被基本输入输出BIOS所困扰,大家可以想想:为什么计算机上有了主板的BIOS,还需要一个DOS和windows?有专家认为:在未来的几年内,DSP系 ...… 查看全部问答∨ |
|
嵌入式软件专家Embedded software specialist 风河公司(Wind River) 宣布为Andrors移动手机厂商提供商用的商用开发平台OEM服务。根据风河公司称,这个平台非常稳定,因为Android源代码经过了广泛的测试。 风河公司在他的商用开发平台中集成 ...… 查看全部问答∨ |
如何搭建Android开发环境谷歌官网上有详细的介绍,这里主要给出一些简要提示,更多细节可参考http://code.google.com/android/intro/installing.html Supported Operating Systems: Windows XP or Vista Mac OS X 10.4.8 or later (x86 only) Lin ...… 查看全部问答∨ |
一、 统概述 目前市场上的商用嵌入式系统产品,如Vxwork、PSOS和Windows CE等已经十分成熟,提供有力的开发和调试工具,但开发成本昂贵,而uCOS-II是一种多任务实时操作系统,内核源代码公开 ...… 查看全部问答∨ |
请问各位大侠,IAR能仿真msp430单片机串行口通讯吗?如果能请帮我查查程序哪里错了. #include<msp430x14x.h> void main( void ) { char m=0; int i[25]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, ...… 查看全部问答∨ |
现在在做GPRS数据中心,我们采用的是GPRS专线接入方式,连接数据中心,我用的是TCP/IP协议;每个DTU都有固定IP;现在只有我一个人做,特请教大家; 1)数据中心是客户端,采用轮询方式,采集DTU数据;可我在很多GPRS公司提供的应用案例中,他们都是把数据中心 ...… 查看全部问答∨ |
求助阿,兄弟姐妹们,能帮帮我吗? interrupt[UART1RX_VECTOR] void usart1_rx (void) { while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready? TXBUF0 = RXBUF1;// RXBUF1 to TXBUF0 } 以上串口0是可以正常收到串口1的数据的, in ...… 查看全部问答∨ |
各位先進好~ 小弟最近入手MCB1700,想使用P0.19與P0.20的I2C keil範例中並無I2C的簡單範例,我找NXP提供的source(如附件) 打開官方example,並使用示波器量測P0.20&P0.19並無CLK與DATA出 ...… 查看全部问答∨ |
开发上位机软件的语言有很多,为何偏偏选中了.NET呢,主要是因为这个语言开发上位机软件相当方面而且微软提供了大量的类库和API。虽然底层实现代码不像JAVA一样可以开源的,但是这个不影响这门语言的推广,试问有几个人会真正意义上去研究底层的代 ...… 查看全部问答∨ |
设计资源 培训 开发板 精华推荐
- Atmel SAM R21“无线”设计大赛
- Digi-Key KOL视频来袭~欢迎进入MicroPython的奇妙世界
- Maxim 利用nanoPower创新技术,致力于降低系统的静态功耗 看视频答题赢好礼! 还有免费开发板等你拿
- 安世半导体&世平集团 高效能&小型化, Nexperia MOSFET的5G解决方案 观看、下载 闯关赢好礼!
- “USB 3.1 规范及重要测试需考虑的因素”江湖令,一起在吐槽中成长
- 免费送:英国Aim TTi 最新数字信号发生器和热销电流探头【社区重磅福利】
- 【已结束】直播“戴”“芯”:英飞凌可穿戴设备保姆级解决方案
- 抢先体验NUCLEO家族新贵,ST STM32 NUCLEO-F091RC开发板28元包邮!
- 【下单全额返现,300元封顶,不限产品】MPS商城钜惠体验季!
- 看视频赢京东卡 PI汽车专用解决方案学习中心正式上线