,现在一公司从事软件开发,要写win 驱动,看了一个plx9054例子有几个问题不太明白,希望大虾们帮忙解答一下,小弟先谢啦。plx 9054:程序一部分:
#define INTCSR 0x68
#define DMAMODE0 0x80
#define DMAPADR0 0x84
#define DMALADR0 0x88
#define DMASIZ0 0x8C
#define DMADPR0 0x90
#define DMACSR0 0xA8
#define CNTRL 0x6C
上面几个寄存器的偏移地址为什么是这几个值?数据手册上没发现啊?
VOID PCI9054Device::StartDMARead(ULONG PAddress,ULONG NBytes)
{
//Channel0 interrupt to the PCI Bus interrupt,Done Interrupt Enable,FIFO
m_IoPortRange0.outd(DMAMODE0,0x20409); //Local bus is 16 bits width
//m_IoPortRange0.outd(DMAMODE0,0x205C3);
//DMA Channel0 PCI Address
m_IoPortRange0.outd(DMAPADR0,PAddress);
//DMA Channel0 Local Address
m_IoPortRange0.outd(DMALADR0,m_LocalBase);
// m_LocalBase += NBytes;
//DMA Channel0 Transfer Size(Bytes)
m_IoPortRange0.outd(DMASIZ0,NBytes);
//from the Local Bus to the PCI Bus
m_IoPortRange0.outd(DMADPR0,0x8);
//Channel0 Enable,Start
m_IoPortRange0.outb(DMACSR0,0x3);
}
还有DMA传输时控制字为什么这样写?手册上没有介绍这些寄存器的结构啊,所以控制字不好写啊
难道就没有人会吗?
小弟等着救命啊!!!高手们出来啊!
没用这个片子,不过这些东西都是数据手册必须给出的。楼主仔细找找,或者重新找下数据手册。
这些都是PLX 9054的寄存器,不是主机上的。你去找数据手册看看,0x68 INTCSR在runtime registers里,其他的在DMA registers里,都有详细的定义.