阅读:1724回复:5
多谢,多谢
在用武安河的书中DMA例子时,数据的接收一直不对,都是FF,用SOFTICE查看内存时,发现内存中也的确是FF,我想可能是DMA传输的本地地址设置有问题,因为本地那个地址的信号选通信号没有响应,好象本地地址没有用对,但是怎么用呢???(10分)
9054的本地地址空间Space0,和Space1 指的是同一个地址空间吗,在地址映射的时候用法有特别要求吗,我觉得他们是一个空间,但是在用相同的偏移地址读取时都是不同的???(10分) 谢谢了 |
|
沙发#
发布于:2004-12-16 20:13
看这段程序,应该是没什么错,是不是地址映射出了问题,我看武安河的书,里面用到了m_IoPortRange0,是指哪段空间?
|
|
板凳#
发布于: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; 为什么呢?谢谢帮忙啊,多谢多谢 } |
|
地板#
发布于:2004-12-15 21:08
怎么读的?把语句写下来,我们一起分析分析。
|
|
地下室#
发布于:2004-12-15 20:49
谢谢楼上的大侠
它们是同一个空间,但我用这两个空间基址读出的数是不同的? 这是为什么呢 |
|
5楼#
发布于:2004-12-15 20:43
Space0是内存空间,Space1是I/O空间,指向同一空间,但地址映射的方式应该有所不同。可以看看是不是这方面的问题。
|
|