晴朗的天空
驱动牛犊
驱动牛犊
  • 注册日期2003-12-23
  • 最后登录2004-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1373回复:3

关于内存映射的偏移地址问题?

楼主#
更多 发布于:2004-01-12 11:10
驱动开发环境:WIN2K DDK,DS,PCI卡驱动
假如一块PCI板上有16个64byte的储存空间,硬件设计人员把它们的偏移地址分别定义为1000、1001、1002...1014、1015,
他在基址寄存器bar0里面用内存映射的方式映射,现在我想问以下两个问题:
1:就这块PCI板,它向系统申请分配的地址空间的大小是多少?是16吗?还是16*64?我的意思是一个偏移地址所对应的空间必须是一个字节的呢还是可以是多个字节的?
2:如果一个偏移地址对应空间可以是多个字节,假设偏移地址1002对应64byte空间,我如何访问1002地址对应的64字节空间内的第32个字节以后的数据呢?硬件设计人员跟我说:等我读完64个字节,硬件就把下64个字节的数据打入偏移地址对应的空间内。我知道驱动里面对内存有双字读操作,当我读完一个偏移地址对应的64字节空间内的前4个字节,但我如何读取后后面的字节呢?
望各位帮帮我   期盼中。。。

[编辑 -  1/14/04 by  晴朗的天空]
也许你的举手投足的指点就是我莫大的帮助。
dswei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-19
  • 最后登录2010-06-13
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-13 11:13
16个64b1002...1014、1015是什么?
1、申请分配的地址空间的大小是由硬件决定的,你是做软件的吧?一个偏移地址对应一个字节,不过通常都是对4个字节一起操作。也就是给出一个偏移地址,连带的对它和它后面的3个地址一起操作
2、。。。
晴朗的天空
驱动牛犊
驱动牛犊
  • 注册日期2003-12-23
  • 最后登录2004-01-14
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-01-14 10:09
谢谢dswei的多次帮忙。
是我把上面的问题写错了,我现在把上面的修改过来了。请再看一下。
我把问题再归纳一下:
1。一个偏移地址对应的空间可以超过4个字节吗?
2。如果是,如何对4个字节之后的空间进行读写?可以用outd(offset,pBuffer,count)里的count来设定顺序读写一个空间里的count*4个字节的数据吗?

你说一个偏移地址只对应一个字节,但他定义一个偏移地址对应64byte的空间,只要求我的驱动获取基址,再对某一个具体的偏移地址对应的64byte空间的数据进行读写,硬件人员是用FPGA来开发PCI接口的,是不是他错了。


[编辑 -  1/14/04 by  晴朗的天空]
也许你的举手投足的指点就是我莫大的帮助。
dswei
驱动牛犊
驱动牛犊
  • 注册日期2003-03-19
  • 最后登录2010-06-13
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望40点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-14 10:38
1、一个偏移地址确实只对应一个字节,你用outd(offset,pBuffer,count)的时候,它是这样工作的:
offset至offset+3对应pBuffer[0],
offset+4至offset+7对应pBuffer[1],
offset+8至offset+11对应pBuffer[2],
.....
2、“他定义一个偏移地址对应64byte的空间”的意思是这个“偏移地址”地址是这“64byte的空间”的起始地址。你的驱动获取的基址就是这个起始地址。比如你要访问这64byte的空间的第四个字节,可以这样:outd(起始地址+4,data).
游客

返回顶部