下面看看ARM存储体系:
可以看到速度最快的是处理器和内部寄存器,他们的数量很少,价格很昂贵。接着是TCM紧耦合存储器:cache和main memory。速度最慢的是外部存储介质:Flash和SD卡等。
CACHE:
上面是两种访存的两种机制,一种是处理器直接访问主存,另一种是处理器-cache-主存。第一种中,处理器的速度相比主存是非常快的,所以两者的速度很不匹配。浪费了处理器的很多资源。第二种是为了改进第一种的缺陷,在处理器和主存之间增加了一种叫Cache的原件,cache的访问速度比主存快,比处理器慢了点,这样就缓和了第一种的资源浪费现象。
其实在cache里存放的是主存的一些数据的拷贝:当处理器要访问主存里的数据的时候,处理器会先到cache里面找,如果里面没有想要的数据,再到主存里面访问,此时主存除了把数据总到处理器之外,他还拷贝一份数据到cache里。下一次处理器访问数据的时候,还是到cache里面找,如果有就直接取走。不用访问主存。有人做过统计,就是处理器会频繁使用某些数据,有些数据处理器很久才使用一次。这样就大大地提高了访问的速度了。
Cache是一种容量小但存取速度非常快的存储器,它保存最近用到的存储器中数据的拷贝。对于程序员来说,Cache是透明的。它自动决定保存哪些数据、覆盖哪些数据。按照功能划分:
I-Cache: 指令Cache,用于存放指令
D-Cache:数据Cache,用于存放数据
2440的I/D-cache:
6410:
210:
虚拟内存:
假如一个程序员,编写了三个程序,都需要访问内存。而且操作系统中还有其他的应用程序。然而作为程序员,都是表层操作的,程序员都只是懂得软件的编写。他们怎么知道哪些物理地址被用了呢?他要使用哪些物理地址才不会冲突呢?最后很可能是两个应用程序访问同一个物理内存,就会产生地址冲突。还有就是实际的物理地址范围是很有限的。
但是引入了虚拟地址之后,程序员应用程序员不需要知道哪些物理地址被使用,因为他们使用的是虚拟地址。即使三个应用程序使用了同一个虚拟地址,最后系统会把这三个虚拟地址映射到不同的物理地址去执行。这样就不会产生冲突了。这样程序员使用的虚拟地址的范围比物理地址大了很多。
虚拟地址:程序使用的地址
物理地址:物理存储单元实际的地址
虚拟地址:
可以让进程使用更大的空间
可以解决冲突
那么谁来实现虚拟内存到物理内存的转换呢?这就是下面的MMU解决的问题了。
MMU的机制:
上面就是MMU的位置,完成虚拟地址到物理地址的转换。在上图结构看到cache在ARM11之前,cache是在MMU与处理器之间。ARM之后,cache是在MMU和Main memory之间。
要使用MMU和cache,这两个是必须学会使用的,这里把它关掉是我现在不用到MMU和cache,因为他们两的使用如果没有经过正确的配置,会出现一些意想不到的错误。所以这里先把他们关掉,免得出现影响裸机的学习。
2440的I、Dcache无效的设置:
首先进入ARM920t核手册ARM920T_TRM1_S.pdf,搜索CP15:
定位到2.3 CP15 register map summary
咋CP15里有一个control寄存器:
定位到该寄存器,可以看到它的访问方法read和write:
MRC p15, 0, Rd, c1, c0, 0 ; read control register
MCR p15, 0, Rd, c1, c0, 0 ; write control register
在这个寄存器中,怎么设置关闭I、Dcache和MMU,看下面control寄存器的参数:
从上图可以看到,控制I cache的是[12]位,该位设置为0就是disable I cache,1为使能。控制D cache的是[2]位,该位设置为0就是关闭D cache。第[0]位是控制MMU,设置为0是关闭,设置为1是使能。所以关闭I/D cache的工作就是设置上面三个位为0即可。
但是,在起初时,I/Dcache里面已经有了数据了的。所以我们还需要对它进行数据无效操作:
命令:
MCR p15,0,Rd,c7,c7,0
由上面的信息知道,关闭I/D cache和MMU的操作是:
使I/D cache和MMU无效:MCR p15,0,Rd,c7,c7,0
接着关闭I/D cache和MMU。
首先是使I/D cache和MMU无效,这里的通用寄存器选r2:
MCR p15,0,r2,c7,c7,0
关闭MMU和cache:
MRC p15,0,r2,c1,c0,0 @ read control register
bic r2,r2,#0x00000805 @0b100000000101=0x805
MCR p15,0,r2,c1,c0,0 @ write control register
最后的代码:
这里是2440的设置,6410和210也是一样的操作。前面提过他们三者的CP15是一样的。
6410:
MRC p15, 0, MCR p15, 0, MCR CP15,0,R1,C7,C10,0 210:
上一篇:27.点亮led的操作
下一篇:25.核心初始化之中断屏蔽-210
推荐阅读最新更新时间:2024-11-08 12:11
设计资源 培训 开发板 精华推荐
- AD8330-EVALZ,评估套件是一种易于使用的附件,可用于对 AD8330 可变增益放大器 (VGA) 进行动手评估
- 耳放(12v单电源转-12V)
- 反向降压35W,LED电流由具有模拟/ PWM调光调节的HVLED002控制
- LE80CD-TR带抑制功能极低压降稳压器的典型应用
- LM217慢开启15V稳压器典型应用
- 用于汽车应用的 LTC3642EDD 5V、50mA 降压型稳压器的典型应用电路
- 仪器模拟放大
- TS2007EIJT 3W免滤波D类音频功放单端输入配置典型应用6或12dB固定增益选择
- 【武汉理工大学校赛】LM5122升压模块
- AD9248BCP-40EBZ,用于评估 AD9248BCPZ-40 双通道 ADC 流水线 40Msps 14 位并行 64 引脚 LFCSP 的评估套件