使用jungo驱动程序与PCI设备通信时的非确定性行为

时间:2016-12-26 06:03:46

标签: driver signal-processing pci

我有一个基于PCI的设备,更具体地说是基于tms320c6000 DSP,我试图通过Jungo WinDriver与该设备进行通信(读取一些寄存器)。令人惊讶的是,当它没有系统挂起并且我必须重新启动系统时,它有时会工作,有时也不会。

这是我用来读取EMIF寄存器的剪切代码,例如。

WD_TRANSFER tt[9];
BZERO(tt);
for (unsigned i = 0; i < 9; i++) {
    tt[i].cmdTrans = RM_DWORD;
    tt[i].dwPort = mmr + (i * 4);
}
WD_MultiTransfer(hDevice, &tt, 9);

mmr来自WD_CardRegister函数,该函数提供有关PCI BAR及其映射地址的信息(mmr是不可预先映射的内存)。

如果有人能给我一些可能导致这个问题的暗示,我将非常感激。

由于

1 个答案:

答案 0 :(得分:0)

如果问题发生在其他人身上,我正在回答我的问题。

在使用此设备之前应采取一系列措施。

  1. 通过HDCR寄存器进行热复位(设置WARMRESET位)。
  2. 然后应初始化EMIF寄存器,这些是我使用的值。

    struct emif emif_val = {
        0x00052078, //GBLCTL;
        0x73a28e01, //CE1 Flash/FPGA;
        0xffffffd3, //CE0 SDRAM;
        0x00000000, //Reserved;
        0x22a28a22, //CE2 Daughtercard 32-bit async
        0x22a28a42, //CE3 Daughtercard 32-bit sync
        0x63115000, //SDRAM contral, 4 banks
        0x0000081b, //SDRAM timing
        0x001faf4d  //SDRAM extended control
    };
    

    然后您就可以毫无问题地访问设备的所有地址空间。

  3. 以及更多信息this linux源代码可能非常有用