×
单片机 > 单片机程序设计 > 详情

ARM9 MMU映射问题三

发布时间:2020-06-02 发布时间:
|
对“MMU映射地址一”里面的程序

 

 unsigned long *mmu_tlb_base = (unsigned long *)0x30000000;

 virtuladdr = 0xA0000000;
 physicaladdr = 0x56000000;

*(mmu_tlb_base + (virtuladdr >> 20)) = (physicaladdr & 0xFFF00000) |

                                            MMU_SECDESC;
我自己理解为: virtuladdr 为虚拟空间各段基地址,virtuladdr >> 20为段描述符的各段的位置,即第几个段,(physicaladdr & 0xFFF00000)为物理空间各段的位置,也即第几个段,则上面程序意思为把物理空间各段基地址放进虚拟空间的各段基地址,即索引。。。。

 

但是有个问题,跟0x30000000有什么关系呢?

因为上面的程序是要把也表放在SDRAM里,并且是从0x30000000处开始放起;第二就是为什么只有virtuladdr>>20,而没有完整的virtual地址?因为地址是1M对齐,即后20位全为零,所以只看高12位就行,所以只有virtuladdr>>20也能起点作用;

 

那么我有个问题,就是把也表放在那了,那它是什么时候去用他们呢,怎么用的他们呢,好像跟前两篇博客讲的不太一样?

哦,一样,因为建立(一级)页表(地址在0x30000000)后,首先要告诉MMU页表位于0x30000000处;

第二,当CPU发出一个虚拟地址时,要被MMU分成两部分,第一部分就是段基址,第二部分是地址偏移量,然后MMU去页表地址找页表,然后自动通过一系列转换规则,来找到对应物理地址。

关键字:ARM9  MMU映射 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析