6867|17

85

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

IO范围和物理内存地址是如何对应的? [复制链接]

一块ISA的卡,IO范围是 0x2C0 -- 0x2C7
插在PC104的ISA槽里
系统是WinCE5.0
现在想在应用层用读写物理内存的方式操作IO
用VirtualAlloc和VirtualCopy这两个API把物理内存映射到虚拟内存
那这个IO范围对应的物理内存地址是多少?是怎么计算的?
敬请指点

最新回复

应该可以直接申请的吧, ps:epc8000有bsp包吗?周立功的板子如何啊?  详情 回复 发表于 2010-6-8 00:13
点赞 关注

回复
举报

84

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
去MSDN上查这两个函数。
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
这两个函数的帮助看了很多遍了
不是函数不会用,是不知道应该映射到什么物理地址
主板是Arm的,寄存器应该采用的是内存映射方式
那到底映射到哪块内存了?怎么算的?
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
看内存映射表,算一下就知道了,名字记不太清了,map什么的文件。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
能说的详细点么,哪个文件,大概怎么算?
这块我比较陌生,拜托了
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
类似oemaddrtab_cfg.inc这样的头文件,里面好似类似于
ALIGN
g_oalAddressTable

        DCD     0x80000000, 0xA0000000, 64      ; MAINSTONEII: SDRAM (64MB).
        DCD     0x84000000, 0x5C000000,  1      ; BULVERDE: Internal SRAM (64KB bank 0).
        DCD     0x84100000, 0x58000000,  1      ; BULVERDE: Internal memory PM registers.
        DCD     0x84200000, 0x4C000000,  1      ; BULVERDE: USB host controller.
        DCD     0x84300000, 0x48000000,  1      ; BULVERDE: Memory controller.
        DCD     0x84400000, 0x44000000,  1      ; BULVERDE: LCD controller.
        DCD     0x84500000, 0x40000000, 32      ; BULVERDE: Memory-mapped registers (peripherals).
        DCD     0x86500000, 0x3C000000, 64      ; BULVERDE: PCMCIA S1 common memory space.
        DCD     0x8A500000, 0x38000000, 64      ; BULVERDE: PCMCIA S1 attribute memory space.
        DCD     0x8E500000, 0x30000000, 32      ; BULVERDE: PCMCIA S1 I/O space.
        DCD     0x90500000, 0x2C000000, 64      ; BULVERDE: PCMCIA S0 common memory space.
        DCD     0x94500000, 0x28000000, 64      ; BULVERDE: PCMCIA S0 attribute memory space.
        DCD     0x98500000, 0x20000000, 32      ; BULVERDE: PCMCIA S0 I/O space.
        DCD     0x9A500000, 0xE0000000,  1      ; MAINSTONEII: Zero-bank (in reserved slot - no physical memory required).
        DCD     0x9A600000, 0x14000000,  1      ; MAINSTONEII: nCS5: eXpansion board header.
        DCD     0x9A700000, 0x10000000,  1      ; MAINSTONEII: nCS4: SMSC 91C111 Ethernet controller.
        DCD     0x9A800000, 0x0A000000,  1      ; MAINSTONEII: nCS2 (upper half): 2MB SRAM.
的定义。
我这个是粘的mianstone的,2c0对应的905
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

7
 
呃,发现我在这块真的知识贫乏 :(
基本上看不懂,只好再问

类似这样的文件在哪里找?CE的哪个系统目录里?还是硬件的SDK里?
文件格式的每一块是什么意思?
DCD 0x90500000, 0x2C000000, 64 ; BULVERDE: PCMCIA S0 common memory space.
0x90500000这个是内存地址?
0x2C000000这个是什么?
64 这个是什么?
我要找的物理内存地址对应哪个值?
每次启动后映射到的地址不会变吧?
麻烦你再辛苦解答一下,谢谢!
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

8
 
这个就是虚拟地址和物理地址的内存映射表,静态映射是不会变的,一般在BSP的inc文件夹下,实在不行,你在PB里面搜索一下关键字也能找到。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

9
 
好的,硬件在家里,回去找找看,非常感谢。
再问几个细的问题

1. 主板是买周立功的,系统都是做好了的,我没用PB,也没有BSP。那CE的Platform目录里会有这些Inc文件是么?

2. 你看看文件里的格式我理解的对不对
DCD 0x90500000, 0x2C000000, 64 ; BULVERDE: PCMCIA S0 common memory space.
0x90500000这个是物理内存地址?
0x2C000000这个是IO基地址?
64 这个是长度?
我要找的物理内存地址就是0x90500000?

3. 插在ISA上的板子是我老师自己做的,没有驱动,在Inc文件里应该不会出现吧?那应该找哪一项?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(中级)

10
 
引用 8 楼 dahua 的回复:
好的,硬件在家里,回去找找看,非常感谢。
再问几个细的问题

1. 主板是买周立功的,系统都是做好了的,我没用PB,也没有BSP。那CE的Platform目录里会有这些Inc文件是么?

2. 你看看文件里的格式我理解的对不对
DCD 0x90500000, 0x2C000000, 64 ; BULVERDE: PCMCIA S0 common memory space.
0x905……


0x90500000是虚拟地址起始地址(物理起始地址映射后的虚拟地址);
0x2C000000物理地址的起始地址;
64就是物理地址0x2C000000开始的64M内存大小
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
BOOL VirtualCopy(
  LPVOID lpvDest,
  LPVOID lpvSrc,
  DWORD cbSize,
  DWORD fdwProtect
);
那我用VirtualCopy操作物理内存的话,第2个参数lpvSrc应该填哪个值?
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 dahua 的回复:
BOOL VirtualCopy(
  LPVOID lpvDest,
  LPVOID lpvSrc,
  DWORD cbSize,
  DWORD fdwProtect
);
那我用VirtualCopy操作物理内存的话,第2个参数lpvSrc应该填哪个值?

(0x2C000000>>8),fdwProtect加上PAGE_PHYSICAL。
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

13
 
大侠们这样指点了我一圈还是有点不清楚,再仔细描述下我的问题

主板是周立功的epc8000,ARM体系,有一个ISA槽,系统是WinCE5.0
我老师做了一个板子,插在ISA口,板子的IO范围是 0x2C0 -- 0x2C7
我现在想在用户层读写这个板子的IO,目前的想法是用VirtualCopy函数映射到某个物理内存地址进行操作
现在想知道物理内存地址应该是多少?如何找出来?

seu_dust大侠告诉我找inc文件,可是找哪个inc文件?
inc文件是跟着板子走的吗?我老师自己做的板子没有这个啊
还有如果找到这个映射表了,我是不是可以直接操作那个虚拟内存地址了?还用自己VirtualCopy吗?
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

14
 
学习中。。。。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

15
 
上面几位大侠,帮人帮到底,再来指点一番吧
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

16
 
找到那个映射表,就可以直接在应用中操作了,
是在找不到,也可以先VirtualCopy下,再打印出来就知道地址了,以后直接定义一个指针就可以操作了!
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

17
 
你要看你芯片的datasheet或者bsp的OEMAddressTable
, ISA口对应的起始地址是多少,你说的0x2C0 -- 0x2C7应该是offset。要加baseaddr上去得到Paddr。
这就是你的物理地址,
首先virtualalloc一块虚拟内存(7个字节)Vaddr
然后调用virtualcopy(Vaddr,Paddr,flag)
你就可以直接用Vaddr来用物理地址了
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

18
 
应该可以直接申请的吧,
ps:epc8000有bsp包吗?周立功的板子如何啊?
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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