天嵌 ARM开发社区

 找回密码
 注册
查看: 3655|回复: 3

mmu_init()函数中的一个问题

[复制链接]
liuke918 发表于 2010-4-30 15:56:30 | 显示全部楼层 |阅读模式
MMU_SetFastBusMode
   mrc p15,0,r0,c1,c0,0
   bic r0,r0,#R1_iA:OR:R1_nF
   mcr p15,0,r0,c1,c0,0
   MOV_PC_LR

;void MMU_SetAsyncBusMode(void)
; FCLK:HCLK= 1:2
   EXPORT MMU_SetAsyncBusMode
MMU_SetAsyncBusMode
   mrc p15,0,r0,c1,c0,0
   orr r0,r0,#R1_nF:OR:R1_iA
   mcr p15,0,r0,c1,c0,0
   MOV_PC_LR
这段代码中是让P15中的C1寄存器的31BIT职位或者清零,但是ARM中的C1寄存器中的.31不是保留位吗?这里有何意义呢?
 楼主| liuke918 发表于 2010-4-30 16:11:07 | 显示全部楼层
for(i=0;i<64;i++)
                for(j=0;j<8;j++)
                        MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
这段代码我的理解是清空并使无效CACHE中的由I和J参数传递的组号和块号,简单的说这里应该就是无效整个数据CACHE并清空整个数据CACHE,这里为什么要清空呢?清空的意思是写入主存。
回复

使用道具 举报

 楼主| liuke918 发表于 2010-4-30 16:57:44 | 显示全部楼层
MMU_SetMTT(0x00000000,0x03f00000,(int)__ENTRY,RW_CB);  //bank0
        MMU_SetMTT(0x04000000,0x07f00000,0,RW_NCNB);                          //bank0
        MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_CNB);  //bank1
        MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_NCNB); //bank2
        MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_NCNB); //bank3
        //MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_CB); //bank4
        MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_CNB); //bank4 for STRATA Flash
        MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_NCNB); //bank5
        //30f00000->30100000, 31000000->30200000
        MMU_SetMTT(0x30000000,0x30100000,0x30000000,RW_CB);          //bank6-1
        MMU_SetMTT(0x30200000,0x33e00000,0x30200000,RW_NCNB); //bank6-2
        //
        MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CB);   //bank6-3
        MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_NCNB); //bank7
   
        MMU_SetMTT(0x40000000,0x47f00000,0x40000000,RW_NCNB); //SFR
        MMU_SetMTT(0x48000000,0x5af00000,0x48000000,RW_NCNB); //SFR
        MMU_SetMTT(0x5b000000,0x5b000000,0x5b000000,RW_NCNB); //SFR
        MMU_SetMTT(0x5b100000,0xfff00000,0x5b100000,RW_FAULT);//not used

这段函数是建立映射表吧?第一个问题,这个映射表虚拟地址和物理地址一样,可以说就是没有做映射,为什么要加上这段代码?
第二个问题,这个函数的最后一个参数不是很理解?他是来做什么的?
第三个问题,完成映射表后,表的基地址是怎么传入P15的C2中去的?
第四个问题,BANK0-BANK7是从0X00000000-0X40000000的,那么大于0X40000000的地址也能叫物理地址?谢谢高手回答
回复

使用道具 举报

 楼主| liuke918 发表于 2010-5-1 09:43:49 | 显示全部楼层
DESC_SEC        (0x2|(1<<4)),在一级描述符中,.4这个在ARM手册是用户自定义,这个定义用来干什么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-6-18 01:05 , Processed in 2.049138 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表