3895|6

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

WINCE下MMU地址映射问题 [复制链接]

目前在做bootloader 在汇编中要对mmu设置虚拟地址和物理地址的映射关系  我在OEMAddressTable是这样的
DCD     0x80000000, 0x33E00000, 2      ; 64 MB DRAM BANK 6
        DCD     0x8C000000, 0x30000000, 62      ; 64 MB DRAM BANK 6

        DCD     0x84000000, 0x10000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 2 - XD
        DCD     0x86000000, 0x18000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 3 - NAND
        DCD     0x88000000, 0x20000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 4 - SRAM or ATA
        DCD     0x8A000000, 0x28000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 5 - Ethernet

        DCD     0x90800000, 0x48000000,  1      ; SDRAM control register
        DCD     0x90900000, 0x49000000,  1      ; USB Host register
        DCD     0x90A00000, 0x4A000000,  1      ; Interrupt Control register
        DCD     0x90B00000, 0x4B000000,  1      ; DMA control register
        DCD     0x90C00000, 0x4C000000,  1      ; Clock & Power register
        DCD     0x90D00000, 0x4D000000,  1      ; LCD control register
        DCD     0x90E00000, 0x4E000000,  1      ; NAND flash control register
        DCD     0x90F00000, 0x4F000000,  1      ; SSMC control
        DCD     0x91000000, 0x50000000,  1      ; UART control register
        DCD     0x91100000, 0x51000000,  1      ; PWM timer register
        DCD     0x91200000, 0x52000000,  1      ; USB device register
        DCD     0x91300000, 0x53000000,  1      ; Watchdog Timer register
        DCD     0x91400000, 0x54000000,  1      ; IIC control register
        DCD     0x91500000, 0x55000000,  1      ; IIS control register
        DCD     0x91600000, 0x56000000,  1      ; I/O Port register
        DCD     0x91700000, 0x57000000,  1      ; RTC control register
        DCD     0x91800000, 0x58000000,  1      ; A/D convert register
        DCD     0x91900000, 0x59000000,  1      ; SPI register
        DCD     0x91A00000, 0x5A000000,  1      ; SD Interface register
        DCD     0x91B00000, 0x48800000,  1      ; Extrenal Bus Interface
        DCD     0x91C00000, 0x4D800000,  1      ; Camera control register
        DCD     0x91D00000, 0x4B800000,  1      ; ATAPI control register
        DCD     0x92000000, 0x00000000, 32      ; 32 MB SROM(SRAM/ROM) BANK 0
        DCD     0x00000000, 0x00000000,  0      ; end of table
当汇编走到
         mrc                 p15,0,r1,c1,c0,0
        orr                r1, r1, #0x0071                ; Enable: MMU
        orr                r1, r1, #0x0004                ; Enable the cache
       
        ldr                r0, =VirtualStart

        cmp                r0, #0                                ; make sure no stall on "mov pc,r0" below
        mcr                p15, 0, r1, c1, c0, 0
;;;;;;;这里程序就飞掉了
        mov                pc, r0                                ;  & jump to new virtual address
        nop

        ;------------------------------------------------
        ;  MMU & caches now enabled.
        ;  (r10) = physcial address of 1st level page table

VirtualStart

        ldr                sp, =0x8F020000
        b                main
我知道原因应该是在开启MMU之后 虚拟地址和物理地址关系不对造成的  我应该怎么修改呢,能不能给个思路啊??

此帖出自WindowsCE论坛

最新回复

在BSP的很多汇编源文件、C源文件和头文件里是用了硬编码,也就是把虚拟地址直接写到了源码里面或者是使用宏定义。修改OEMAddressTable后还要在源代码里把相关的地方改过来。具体的要看你的BSP了。  详情 回复 发表于 2007-12-11 00:40
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
补充一下:
刚才又试了一下 我在程序中加了一个闪灯程序 就在mcr p15,  0,  r1,  c1,  c0,  0 这句之后,地址都是映射之后的虚拟地址,灯可以闪,  那现在就是b main 这个跳转的地址不对吧,应该怎么改呢??   还有一个问题就是我发现灯是可以闪 但是怎么闪个不停啊??我程序里只是让它闪20次就可以了,但是他不停的闪........
我的程序结构是这样的 在ads下编写4k的boot程序 放到norflash的0地址处, 上电自动运行这段程序,之后从norflash中读第二段代码(64k大小,就是我上面出问题的代码)到0x30000000 执行
此帖出自WindowsCE论坛
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
在补充一下:
现在闪灯不是闪个不停了,刚才可能是我搞错了,目前情况是这样
           ldr                r0, =VirtualStart
        cmp                r0, #0                                ; make sure no stall on "mov pc,r0" below
        mcr                p15, 0, r1, c1, c0, 0;;;;使能MMU
        bl                LED_DISPLAY1;;;;灯闪正常
        mov                pc, r0;;;;;;;估计就是这里不对,跳转地址有问题                                ;  & jump to new virtual address
        nop

        ;------------------------------------------------
        ;  MMU & caches now enabled.
        ;  (r10) = physcial address of 1st level page table

VirtualStart

        ldr                sp, =0x8F020000
        b                main
此帖出自WindowsCE论坛
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

4
 
是不是内存溢出了。你有没有在EBOOT里面加入很大的数组呢?建议你把大数组定义成const属性的。
此帖出自WindowsCE论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢,应该不是内存溢出吧,程序里没有数组之类的, 这个程序是在PB下编译的,只是有加了一些ce下的头文件  
此帖出自WindowsCE论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
顶一下!!!
此帖出自WindowsCE论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(中级)

7
 
在BSP的很多汇编源文件、C源文件和头文件里是用了硬编码,也就是把虚拟地址直接写到了源码里面或者是使用宏定义。修改OEMAddressTable后还要在源代码里把相关的地方改过来。具体的要看你的BSP了。
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表