xiao9925
驱动牛犊
驱动牛犊
  • 注册日期2004-08-27
  • 最后登录2006-01-06
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望16点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1603回复:5

多谢,多谢

楼主#
更多 发布于:2004-12-14 17:27
在用武安河的书中DMA例子时,数据的接收一直不对,都是FF,用SOFTICE查看内存时,发现内存中也的确是FF,我想可能是DMA传输的本地地址设置有问题,因为本地那个地址的信号选通信号没有响应,好象本地地址没有用对,但是怎么用呢???(10分)

9054的本地地址空间Space0,和Space1 指的是同一个地址空间吗,在地址映射的时候用法有特别要求吗,我觉得他们是一个空间,但是在用相同的偏移地址读取时都是不同的???(10分)
谢谢了
saviola7
驱动牛犊
驱动牛犊
  • 注册日期2003-12-16
  • 最后登录2005-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-15 20:43
Space0是内存空间,Space1是I/O空间,指向同一空间,但地址映射的方式应该有所不同。可以看看是不是这方面的问题。
xiao9925
驱动牛犊
驱动牛犊
  • 注册日期2004-08-27
  • 最后登录2006-01-06
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望16点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-15 20:49
谢谢楼上的大侠
 它们是同一个空间,但我用这两个空间基址读出的数是不同的?
  这是为什么呢
saviola7
驱动牛犊
驱动牛犊
  • 注册日期2003-12-16
  • 最后登录2005-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-15 21:08
怎么读的?把语句写下来,我们一起分析分析。
xiao9925
驱动牛犊
驱动牛犊
  • 注册日期2004-08-27
  • 最后登录2006-01-06
  • 粉丝0
  • 关注0
  • 积分84分
  • 威望16点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-16 14:06
BOOLEAN PciwdmDevice::Isr_Irq(void)//中断子程序
{  
  .ULONG status;
   status=m_IoPortRange0.ind(PLX9054_INTCSR);
   if((status&0x8000)==0x8000) //读中断寄存器如果是本地中断
{  
m_IoPortRange0.outd(PLX9054_INTCSR,m_IoPortRange0.ind(PLX9054_INTCSR)&~ULONG(1<<11));  //lint disable
for (int i=0;i<14;i++) // 取数开始
  t<<"read num "<<i<<":"<<m_MemoryRange1.inb(C554B_RHR)<<EOL;
  我如果对这块本地内存按SPACE0内存映射的话读出的数是对的。
如果它们是同一块内存的话,按SPACE1的I/0映射读出的数就是不对的了
这样:t<<"read num "<<i<<":"<<m_IoRange1.inb(C554B_RHR)<<EOL;

为什么呢?谢谢帮忙啊,多谢多谢
  
 
}
   
saviola7
驱动牛犊
驱动牛犊
  • 注册日期2003-12-16
  • 最后登录2005-05-24
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-16 20:13
看这段程序,应该是没什么错,是不是地址映射出了问题,我看武安河的书,里面用到了m_IoPortRange0,是指哪段空间?
游客

返回顶部