ARM920T及其MMU,Cache学习杂记 (三)

要实现中断向量重映射,我们需至少将地址0开始的1MB地址映射到0x3000 0000开始的地址上.因为我们现在只使用段描述符.我们现在要实现的虚拟地址与物理地址的对应关系为

VA                                      PA

0x0000 0000-0x000f ffff          0x3000 0000 -0x300f ffff

0x3000 0000-0x31ff ffff                    0x3000 0000--0x31ff ffff

其它地址则都不可访问.

我们让可以访问的内存分为域不可访问的内存空间为其他(如域1),并在CP15 Reg3中设置的相应的域控制属性。

同样,我们设定TTB0x3000 0000,可访问的段的属性为 0x01e 不可访问的段的属性为0x03e

这样我们的转换表初始化如下:

0x3000 0000 上的数据为 0x3000 001e                          1

0x3000 0004 -0x3000 0BFC  0x0010 003e -0x2ff0 003e  767

0x3000 0C00 0x3000 0C7C   0x3000 001e-0x31f0 001e  32

0x3000 0C80-0x3000 3ffc    0x3200 003e-0xfff0 003e   3296个入口  总共4096个入口

 

假设中断向量地址为 0x0000 0014 则该对就的物理地下由以下方法算出:

虚拟地址展开为

31

30

 

 

 

 

 

 

 

 

 

20

19

 

 

 

 

 

 

12

11

10

9

8

 

 

5

4

3

2

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

0

 

它转换时先取得虚拟地的 31:20,在此为:0x000

然后根据TTB+(0x000<<2)=0x3000 0000 取得转换入口的内存地址,

然后得到这个地址上的数据:0x3000 001e 因此这个段基址为 0x300

最后,段基址<<20,再并上虚拟地址的19:0得出物理地址:0x3000 0014

于是得出物理地址:0x3000 0014

你可能感兴趣的:(ARM920T及其MMU,Cache学习杂记 (三))