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.

[参考译文] TMS320F28335:通过 XINTF 与 FPGA 进行数据交互

Guru**** 2239510 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/931383/tms320f28335-data-interaction-with-fpga-through-xintf

器件型号:TMS320F28335

尊敬的团队:

我有一位客户使用 XINTF 接口与 FPGA 进行通信、但无法写入数据。 下面是详细说明:

XINTF 配置如下:

void InitXintf (void){
//这显示了如何写入 XINTF 寄存器。
这里使用的//值是复位后的默认状态。
//不同的硬件需要不同的配置。

//有关与
// F28335 eZdsp 一起使用的 XINTF 配置示例,请参阅 examples/run_fin_XINTF 项目。

//对 XINTF 时序的任何更改只能由
在 XINTF 之外运行的代码//进行。

//所有区域-------------------------------------------------------
//基于 XTIMCLK = 1/2 SYSCLKOUT
EALLOW 的所有区域的时序;
SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1;
EDIS;



EALLOW;
XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
//没有写入缓冲
XintfRegs.XINTCNF2.bit.WRBUFF = 0;
// XCLKOUT 被使能
XintfRegs.XINTCNF2.bit.CLKOFF = 0;
// XCLKOUT = XTIMCLK/2 XintfRegs.XINTCNF2.bit.CLKDE=0;/---



//使用就绪时、有效的必须为1或更大
//引线必须始终为1或更大
//区域写入时序
XintfRegs.XTIMIG0.bit.XWRLEAD = 3;
XintfRegs.XTIMIG0.bit.XTIWRARTIVRE=7;
XintFREGS.XINGRMIRG.3
;XTIMIG0=3;XTIMIRT.XINT.XTIMIRG0=7;XINT.XTIMIRG.XTIFREG=7;XINT.XINT.XTIMIRG.3;XTIFRTS=TID.XINT.XTIMIRG.3;TID.XING.3;TID.XINT.XINT.TIDRDIL.TID.T0 = 7;TIDRDIL.TID.T=




//双倍所有区域读取/写入超前/主动/跟踪时序
XintfRegs.XTIMING0.bit.X2TIMING = 1;

//区域将对 XREADY 信号 XintfRegs.XTIMING0.bit.USEREADY=
1;//修改值,忽略xready信号 XintfRegs.XTIMING0.0
=


1


;

//必须为异步大小= 1;//必须为0、XTIMIGN = 1;//必须为0 = 1;/ 0 = 1 / 0、XTIMIGN = 1 

使用 ZONE0区域、通信代码如下:

void 通信 FPGA (void)
{



GpioDataRegs.GPACLEAR.bit.GPIO5=1; //D_G_A 使能A相数据总线收发器
GpioDataRegs.GPASET.bit.GPIO30 = 1; //D_G_B 禁止B相总线收发器导通
GpioDataRegs.GPBSET.BIO32 = 1; //D_G_C 禁止C相总线收发器导通

GpioDataRegs.GPACLEAR.bit.GPIO2 = 1; //a_G_A****地址线总线收发器使能,低电平使能
GpioDataRegs.GPASET.bit.GPIO1=1; B地址总线禁止_G_T Ü V
GpioDataRegs.GPBSET.BIO39 = 1; /A/A_G_C

GpioDataRegs.GPASET.bit.GPIO4=1; //D_DIR_A 总线收发器方向、DSP->FPGA
GpioDataRegs.GPASET.bit.GPIO3=1;

*(sendStart + 0)=值; //value = 9。
*(sendStart + 1)=值;
*(sendStart + 2)=值;
*(sendStart + 3)=值;
*(sendStart + 4)=值;
*(sendStart + 5)=值;
*(sendStart + 6)=值;
*(sendStart + 7)=值;


GpioDataRegs.GPACLEAR.bit.GPIO4=1; //D_DIR_A 总线收发器方向、FPAG->DSP
GpioDataRegs.GPASET.bit.GPIO3=1;
/* recfPGAmessage[0]=*(recStart + 0);//第一个子模块电压
recfPGAmessage[1]=*(recStart + 1);//第二个子模块电压
recfPGAmessage[2]=*(recStart + 2);//第三个子模块电压
recfPGAmessage[3]=*(recStart + 3);//第三个子模块电压
recfPGAmessage[4]=第四个子模块电压(recStart + 4);//μ s
recfPGAmessage[5]=*(recStart + 5);
recfPGAmessage[6]=*(recStart + 6);
recfPGAmessage[7]=*(recStart + 7);//第六个子模块电压

recfPGAmessage[8]=第七个子模块电压(recStart + 8);//μ s
recfPGAmessage[9]=*(recStart + 9);//第七个子模块电压
recfPGAmessage[10]=*(recStart + 10);//第八个子模块电压
recfPGAmessage[11]=第八个子模块电压(recStart + 11);//μ s
recfPGAmessage[12]=*(recStart + 12);//第八个子模块电压
recfPGAmessage[13]=*(recStart + 13);//第八个子模块电压
recfPGAmessage[14]=*(recStart + 14);//第八个子模块电压
recfPGAmessage[15]=*(recStart + 15);//第八个子模块电压*/

GpioDataRegs.GPASET.bit.GPIO5=1; //D_G_A 禁止A相数据总线收发器
GpioDataRegs.GPASET.bit.GPIO2 = 1; A禁止A相地址总线收发_G_T Ü V

返回;
} 

在仿真过程中、通过查看"Expressions"窗口、可以发现数据异常、没有模式。

我已经测试过 FPGA 时序是否正确。

什么可能导致问题?

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    F. F、

    您是否实现 了 XINTF 上电权变措施

    调试 XINTF 的最直接方法是在写入数据时使用示波器观察其引脚活动。 这将使您能够验证控制信号的时序和逻辑电平。

    Tommy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Tommy:

    大家好、我们通过 ChipScope 观察一些使能引脚的时序、它们都是正常的。

    当我们之前检查硬件问题时、我们发现如果发送数据1、则 XD0电平应为3.3V、但实际上示波器观察到的电压仅为1V。  

    但是、这似乎不会影响数据传输。 现在、当 FPGA 向 DSP 发送数据时、DSP 接收到的数据基本正常(有一些小错误)。

    但是、当 DSP 通过仿真器观察结果将数据发送到 FPGA 时、与地址对应的数据不是我写入的数据、而是在上面的屏幕截图中观察到的存储器中的数据。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="F.F">当我们之前检查硬件问题时、发现如果发送数据1、则 XD0电平应为3.3V、但实际上示波器观察到的电压仅为1V。  

    但是、这似乎不会影响数据传输。 现在、当 FPGA 将数据发送到 DSP 时、DSP 接收到的数据基本上是正常的(有一些小错误)。

    这听起来好像 XINTF 和 FPGA 之间有争用,需要解决--不应忽略它。

    [引用 user="F.F"]但是、当 DSP 通过仿真器观察结果将数据发送到 FPGA 时、与地址对应的数据不是我写入的数据、而是在上述屏幕截图中的存储器中观察到的数据。

    您说的仿真器是什么意思? 这真的是一个建模和仿真环境、还是类似于逻辑分析仪或 FPGA 记录工具? XINTF 和 FPGA 之间的竞争很容易导致数据损坏、因为两个端点都在尝试同时控制总线。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的被叫方:

    很抱歉、可能我犯了个错误。 "仿真器"只是一个 JTAG。

    我们在测试方面取得了新的进展:

    当 DSP 将数据发送到 FPGA 时、FPGA 可以正确接收数据、但在接收数据期间会发生多次跳跃、如图所示:

    发送的数据分别为1、1、255、地址分别为0x4000、0x4001和0x4002。  您可以看到接收第二个数据时出现问题。 当地址更改为4001时、接收到1、但随后跳转至0、1和0。  有几组数据与这种情况类似、这是一个非常奇怪的问题。 目前、怀疑这可能是由 FPGA 的转移问题或 xinf 的时序不匹配引起的。

    你有什么建议吗?

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    F. F、

    我建议验证 FPGA 是否满足异步协议的控制信号和时序要求。

    例如 、TRM 的这个波形图 显示、数据总线只能保证在写入操作的活动和跟踪阶段有效:

    数据表 将提供有关设置和保持时序的更详细信息。

    Tommy