ml0552
驱动牛犊
驱动牛犊
  • 注册日期2003-05-27
  • 最后登录2003-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1901回复:7

9054的DMA传输的疑问

楼主#
更多 发布于:2003-06-10 20:19
我在配置9054的DMA寄存器的时候,我选用的channel 0 ,block mode(我是用windrive 中的P9054_DMAReadWriteBlock (P9054_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, BOOL fIsRead, P9054_MODE mode, P9054_DMA_CHANNEL dmaChannel)来实现DMA传输的)
.那我是不是只要配置DMAMODE0(DMA channel 0 mode)和DMACSR0(DMA channel 0 command/status)这两个寄存器就可以了。PCI address和local address 以及transfer size 这三个寄存器要配置吗?如果需要,我应该怎样配置?PCI address是不是指PCIBAR2的基地址,local address 是不是指PCIBAR2映射过来的,即我在eeprom中LAS0BA写下的基地址?
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-06-11 09:00
PCI address和local address 以及transfer size 这三个寄存器要配置吗?
我认为应该配置,要不怎么操作?具体配置参考PLXMon的操作手册,大概PCI address为物理内存地址,而Local address为本地的Remap地址,可以从9054的寄存器得到,transfer size 为传送的长度。
fwzfwz1
驱动中牛
驱动中牛
  • 注册日期2002-11-01
  • 最后登录2007-06-01
  • 粉丝0
  • 关注0
  • 积分80分
  • 威望8点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-11 22:33
我在配置9054的DMA寄存器的时候,我选用的channel 0 ,block mode(我是用windrive 中的P9054_DMAReadWriteBlock (P9054_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, BOOL fIsRead, P9054_MODE mode, P9054_DMA_CHANNEL dmaChannel)来实现DMA传输的)
.那我是不是只要配置DMAMODE0(DMA channel 0 mode)和DMACSR0(DMA channel 0 command/status)这两个寄存器就可以了。PCI address和local address 以及transfer size 这三个寄存器要配置吗?如果需要,我应该怎样配置?PCI address是不是指PCIBAR2的基地址,local address 是不是指PCIBAR2映射过来的,即我在eeprom中LAS0BA写下的基地址?

这三个寄存器是一定要配置的,其中PCI address指的是你的PCI设备所DMA传输到的缓冲区的物理地址;local address 是你的PCI设备的局部地址。
其实关于PCI9054的DMA寄存器的配置,本论坛有很多的帖子,找一下吧。
有了驱动,人才有了力量。
ml0552
驱动牛犊
驱动牛犊
  • 注册日期2003-05-27
  • 最后登录2003-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-12 21:45
fwzfwz1和QIZHI:太感谢你们了。我这几天被DMA折腾死了。感觉愈做愈糊涂!
我的9054外接的是CPLD和SRAM ,那在CPLD 中我是不是可以直接将LA的16:2位赋给SA0:SA14?现在我是把READY信号一直置为低电平。
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-06-13 14:02
CPLD和SRAM:我没有使用过SRAM,但是我用过FIFO。在RDK中,恰好有一个SRAM的例子,可以参考一下其逻辑设计。但是我认为应该是可以的。但是,把READY一直置位低可能会有潜在的问题。关于READY的产生方法,RDK有,本站的帖子内也有,我也写过一个帖子,具体位置忘了,但是这几天的,可以搜索一下。
ml0552
驱动牛犊
驱动牛犊
  • 注册日期2003-05-27
  • 最后登录2003-10-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-14 16:35
我应该怎样给分呢?
我已经把各个寄存器配置好了,可还是不能DMA。可能是我的CPLD中的是时序有问题。
我的LOCAL ADDRESS是20000000,那在CPLD中怎样对这个地址进行响应?我是让READY的信号在ADS为0,LA为20000000时,READY 为0,在BLAST为0时,READY 为1。这样写可以吗?
qizhi
驱动小牛
驱动小牛
  • 注册日期2001-10-18
  • 最后登录2017-07-31
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望41点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-06-15 18:40
READY信号应该在ADS#上升沿后为低,在BLAST#上升沿后为高。可能需要寄存器逻辑,如果这样,可以将其D端接LHOLD信号。
flying
驱动小牛
驱动小牛
  • 注册日期2002-08-01
  • 最后登录2016-06-19
  • 粉丝0
  • 关注0
  • 积分197分
  • 威望70点
  • 贡献值0点
  • 好评度19点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-06-15 23:07
你的Ready#驱动有问题!
Ready#有效时表示本次交易的数据已准备好!
当9054读操作时,表示外设已将数据准备好,可以让9054读取了
当9054写操作时,表示9054已将数据准备好,外设可以读9054的LD总线取数据了。


我的LOCAL ADDRESS是20000000,那在CPLD中怎样对这个地址进行响应?我是让READY的信号在ADS为0,LA为20000000时,READY 为0,在BLAST为0时,READY 为1。这样写可以吗?


当ADS=0,LA=20000000H时,可以作为译码来片选该外设。而不能作为Ready#信号,因为当9045ADS#有效时,在LA总线上会驱动有效的地址信息,所以此时不可能进行数据传输的!
具体的CPLD产生时序和9054的工作方式和模式等有关,你可以参考RDK的Verilog代码中的状态机设计你的Ready#信号。
游客

返回顶部