This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
XINTF配置如下
void InitXintf(void) { // This shows how to write to the XINTF registers. The // values used here are the default state after reset. // Different hardware will require a different configuration. // For an example of an XINTF configuration used with the // F28335 eZdsp, refer to the examples/run_from_xintf project. // Any changes to XINTF timing should only be made by code // running outside of the XINTF. // All Zones--------------------------------- // Timing for all zones based on XTIMCLK = 1/2 SYSCLKOUT EALLOW; SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1; EDIS; EALLOW; XintfRegs.XINTCNF2.bit.XTIMCLK = 1; // No write buffering XintfRegs.XINTCNF2.bit.WRBUFF = 0; // XCLKOUT is enabled XintfRegs.XINTCNF2.bit.CLKOFF = 0; // XCLKOUT = XTIMCLK/2 XintfRegs.XINTCNF2.bit.CLKMODE = 1; // Zone 0------------------------------------ // When using ready, ACTIVE must be 1 or greater // Lead must always be 1 or greater // Zone write timing XintfRegs.XTIMING0.bit.XWRLEAD = 3; XintfRegs.XTIMING0.bit.XWRACTIVE = 7; XintfRegs.XTIMING0.bit.XWRTRAIL = 3; // Zone read timing XintfRegs.XTIMING0.bit.XRDLEAD = 3; XintfRegs.XTIMING0.bit.XRDACTIVE = 7; XintfRegs.XTIMING0.bit.XRDTRAIL = 3; // double all Zone read/write lead/active/trail timing XintfRegs.XTIMING0.bit.X2TIMING = 1; // Zone will sample XREADY signal XintfRegs.XTIMING0.bit.USEREADY = 1; //修改值,忽略xready信号 XintfRegs.XTIMING0.bit.READYMODE = 1; // sample asynchronous // Size must be either: // 0,1 = x32 or // 1,1 = x16 other values are reserved XintfRegs.XTIMING0.bit.XSIZE = 3; EDIS; }
使用ZONE0区域 通信代码如下
void CommunicationFPGA(void) { GpioDataRegs.GPACLEAR.bit.GPIO5 = 1; //D_G_A 使能A相数据总线收发器 GpioDataRegs.GPASET.bit.GPIO30 = 1; //D_G_B 禁止B相总线收发器导通 GpioDataRegs.GPBSET.bit.GPIO32 = 1; //D_G_C 禁止C相总线收发器导通 GpioDataRegs.GPACLEAR.bit.GPIO2 = 1; //A_G_A****地址线总线收发器使能,低电平使能 GpioDataRegs.GPASET.bit.GPIO1 = 1; //A_G_B地址总线禁止 GpioDataRegs.GPBSET.bit.GPIO39 = 1; //A_G_C GpioDataRegs.GPASET.bit.GPIO4 = 1; //D_DIR_A 总线收发器方向,DSP->FPGA GpioDataRegs.GPASET.bit.GPIO3 = 1; *(sendStart + 0) =Value; *(sendStart + 1) =Value; *(sendStart + 2) =Value; *(sendStart + 3) =Value; *(sendStart + 4) =Value; *(sendStart + 5) =Value; *(sendStart + 6) =Value; *(sendStart + 7) =Value; GpioDataRegs.GPACLEAR.bit.GPIO4 = 1; //D_DIR_A 总线收发器方向,FPAG->DSP GpioDataRegs.GPASET.bit.GPIO3 = 1; /* receFPGAmessage[0] = *(receStart + 0); //第一个子模块电压 receFPGAmessage[1] = *(receStart + 1); //第二个子模块电压 receFPGAmessage[2] = *(receStart + 2); //第三个子模块电压 receFPGAmessage[3] = *(receStart + 3); //第三个子模块电压 receFPGAmessage[4] = *(receStart + 4); //第四个子模块电压 receFPGAmessage[5] = *(receStart + 5); receFPGAmessage[6] = *(receStart + 6); receFPGAmessage[7] = *(receStart + 7); //第六个子模块电压 receFPGAmessage[8] = *(receStart + 8); //第七个子模块电压 receFPGAmessage[9] = *(receStart + 9); //第七个子模块电压 receFPGAmessage[10] = *(receStart + 10); //第八个子模块电压 receFPGAmessage[11] = *(receStart + 11); //第八个子模块电压 receFPGAmessage[12] = *(receStart + 12); //第八个子模块电压 receFPGAmessage[13] = *(receStart + 13); //第八个子模块电压 receFPGAmessage[14] = *(receStart + 14); //第八个子模块电压 receFPGAmessage[15] = *(receStart + 15); //第八个子模块电压*/ GpioDataRegs.GPASET.bit.GPIO5 = 1; //D_G_A 禁止A相数据总线收发器 GpioDataRegs.GPASET.bit.GPIO2 = 1; //A_G_A禁止A相地址总线收发 return; }
Value值为9;
仿真时,通过查看memory观察,数据异常,而且没有什么规律
已经测试过FPGA时序是正常的
求大神告知
您是否有尝试 XINTF Power Up Workaround 的方法?
调试XINTF的最直接方法是在写入数据时使用示波器观察其引脚活动。这将使您能够验证控制信号的时序和逻辑电平。
您好,我们通过ChipScope观察一些使能引脚时序,均为正常,在之前我们检查硬件问题时,发现若发送数据1,XD0电平应该是3.3V,但是实际上通过示波器观测电压只有1V。 但是这似乎不影响数据的传输,现在当FPGA像DSP接收数据时,DSP接受的数据基本正常(有些微小误差)但是当DSP发送数据给FPGA时,向地址写入数据,通过仿真器观察,这些地址的数据并不是我写入的数据。FPGA接受到的数据是我memory里面观测到的数据
我建议验证一下FPGA是否满足异步协议的控制信号和时序要求。
例如,根据TRM的波形图表明,只有在Write操作的ACTIVE和TRAIL阶段,才保证数据总线有效:
datasheet里面提供了有关Setup和Hold时序的更多详细信息