lgglove163
驱动牛犊
驱动牛犊
  • 注册日期2010-03-30
  • 最后登录2010-07-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3254回复:6

pci9656驱动、DMA传输问题

楼主#
更多 发布于:2010-06-30 19:36
刚接触PCI9656(工作在C模式下),原来没有接触过驱动方面,所以驱动程序也是用的9054的(寄存器我看了看也不用改),现在想进行DMA数据传输,本地控制线号只使用了ads,blast,ready,lwr,lhold,lholda这个几个,大家看可以吗?现在读数据读的全不对(在FPGA发送端数据是正确的),可是我观测这几个控制信号的时序还是正确的;写数据每次都重启蓝屏,数据也不对。大家感觉可能是什么问题呢?可能是驱动的问题吗?对应这两种芯片驱动有什么不同吗?各位大仙帮帮忙吧
lgglove163
驱动牛犊
驱动牛犊
  • 注册日期2010-03-30
  • 最后登录2010-07-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-07-02 12:48
大仙指教指教啊!PCI9054和9656驱动可以混用吗?谢谢
adamite
驱动牛犊
驱动牛犊
  • 注册日期2009-05-14
  • 最后登录2013-04-03
  • 粉丝0
  • 关注0
  • 积分31分
  • 威望271点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-07-05 16:08
首先看你配置的硬件空间是否相同,其次,9054和9056的本地端时序是否相同。
总之,都极有可能是直接或者间接的驱动问题。
别省事,会付出代价的。
lgglove163
驱动牛犊
驱动牛犊
  • 注册日期2010-03-30
  • 最后登录2010-07-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-07-07 00:02
谢谢ls的
lgglove163
驱动牛犊
驱动牛犊
  • 注册日期2010-03-30
  • 最后登录2010-07-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-07-07 19:20
回 2楼(adamite) 的帖子
我把DMA读出的数据保存下来,发现读出的数据不是FPGA发送的数据而是配置空间内寄存器的值,这是什么原因造成的呢?我如何才能知道DMA操作的数据在哪个BAR对应的存储区呢?配置空间是否也在某个BAR对应的存储区内呢?我目前驱动程序内实例化了两个KIoRange类和两个KMemoryRange类,DMA操作时具体操作(一部分)如下:
VOID PCI9656Device::StartDMA(ULONG PAddress,ULONG NBytes)
{
    //下面几条语句设置DMA通道0寄存器,启动块传输方式,从FIFO读数据
    //Channel0 interrupt to the PCI Bus interrupt,Done Interrupt Enable,FIFO
    m_IoPortRange0.outd(DMAMODE0,0x20D43);
    //DMA Channel0 PCI Address
    m_IoPortRange0.outd(DMAPADR0,PAddress);
    //DMA Channel0 Local Address,自己设计的FIFO地址
    m_IoPortRange0.outd(DMALADR0,0x8);
    //DMA Channel0 Transfer Size(Bytes)
    m_IoPortRange0.outd(DMASIZ0,NBytes);
    //from the Local Bus to the PCI Bus
        if(read)
    {
        m_IoPortRange0.outd(DMADPR0,(ULONG)0x08);
    }
    else
    {
       m_IoPortRange0.outd(DMADPR0,(ULONG)0x00);
    }
    //Channel0 Enable,Start
    m_IoPortRange0.outb(DMACSR0,0x03);
}
这块应该没什么问题吧
偶是菜鸟,可能问些比较白痴的问题,望大仙不吝赐教啊,谢谢了
lgglove163
驱动牛犊
驱动牛犊
  • 注册日期2010-03-30
  • 最后登录2010-07-14
  • 粉丝0
  • 关注0
  • 积分14分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-07-08 21:03
我用windriver读数据时,发现只有bar3(memory)读出的数据是配置空间内寄存器的值,其他三个读出的不知道是什么数据(但三个读出的是一样的数据),但是利用bar3写数据,fpga端接收的正确的。这可能是什么原因造成的呢?配置空间设置有问题?还是硬件连接的问题?麻烦大家了
qdkfwherojack
驱动牛犊
驱动牛犊
  • 注册日期2011-06-24
  • 最后登录2011-06-24
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望41点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2011-06-24 16:16
有可能是对PCI9054的寄存器配置没有看懂吧。你可以把相关的资源研究一下。
还有是否让PCI9054的中断生效了,没有中断产生数据也会传输失败的。

我没有接触过PCI9054,但在开发别的PCI驱动时,也研究了一下。希望对你有帮助。
游客

返回顶部