我有一个基于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是不可预先映射的内存)。
如果有人能给我一些可能导致这个问题的暗示,我将非常感激。
由于
答案 0 :(得分:0)
如果问题发生在其他人身上,我正在回答我的问题。
在使用此设备之前应采取一系列措施。
然后应初始化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
};
然后您就可以毫无问题地访问设备的所有地址空间。
以及更多信息this linux源代码可能非常有用