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.

[参考译文] CCS/TMS320F28335:F28335通过 XINTF 将数据写入 FPGA、但数据不正确

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/938032/ccs-tms320f28335-f28335-write-data-to-fpga-through-xintf-but-the-data-is-incorrect

器件型号:TMS320F28335

工具/软件:Code Composer Studio

大家好、我现在在28335 XINTF 接口上遇到了一个非常奇怪的问题。  在电路板中、我将低数据总线(bit15~0) XINTF 引脚连接到 FPGA、并将 XINTF 配置为16位总线模式。  问题在于、当 DSP 将数据写入 FPGA 时、总线上的数据与 DSP 处理的数据不同、您可以在图1中看到这一点、但读取操作正常。

EALLOW;

XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
//无写入缓冲
XintfRegs.XINTCNF2.bit.WRBUFF = 0;
// XCLKOUT 被启用
XintfRegs.XINTCNF2.bit.CLKOFF = 0;
// XCLKOUT=XTIMCLK/2
XintfRegs.XINTCNF2.bit.CLKMODE = 0;

XintfRegs.XTIMING7.bit.XWRLEAD=1;
XintfRegs.XTIMING7.bit.XWRACTIVE = 7;
XintfRegs.XTIMING7.bit.XWRTRAIL = 1;
//区域读取时序
XintfRegs.XTIMING7.bit.XRDLEAD=3;
XintfRegs.XTIMING7.bit.XRDACTIVE = 7;
XintfRegs.XTIMING7.bit.XRDTRAIL = 3;

//双倍全区域读/写前置/主动/后置定时
 
XintfRegs.XTIMING7.bit.X2TIMING=0;

//区域将对 XREADY 信号进行采样
 
XintfRegs.XTIMING7.bit.USEREADY=0;
XintfRegs.XTIMING7.bit.READYMODE = 0;//采样异步

//大小必须为:
// 0、1 = x32或
// 1、1 = x16保留其他值
XintfRegs.XTIMING7.bit.XSIZE = 3;

//组切换
//假设区域7运行缓慢,因此添加额外的 BCYC 周期
//从区域7切换到另一个区域时。
//这将有助于避免总线争用。
XintfRegs.XBANK/bit.Bank= 7;
XintfRegs.XBANK/bit.BCYC = 7;

//GPIO 配置

GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 3;// XD15
GpioCtrlRegs.GPCMUX1.bit.GPIO65=3;// XD14
GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 3;// XD13
GpioCtrlRegs.GPCMUX1.bit.GPIO67 = 3;// XD12
GpioCtrlRegs.GPCMUX1.bit.GPIO68=3;// XD11
GpioCtrlRegs.GPCMUX1.bit.GPIO69 = 3;// XD10
GpioCtrlRegs.GPCMUX1.bit.GPIO70=3;// XD19
GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 3;// XD8
GpioCtrlRegs.GPCMUX1.bit.GPIO72=3;// XD7
GpioCtrlRegs.GPCMUX1.bit.GPIO73 = 3;// XD6
GpioCtrlRegs.GPCMUX1.bit.GPIO74 = 3;// XD5
GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 3;// XD4
GpioCtrlRegs.GPCMUX1.bit.GPIO76 = 3;// XD3
GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 3;// XD2
GpioCtrlRegs.GPCMUX1.bit.GPIO78 = 3;// XD1
GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 3;// XD0

GpioCtrlRegs.GPBMUX1.bit.GPIO40 = 3;// xa0/XWE1n
GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 3;// XA1
GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3;// XA2
GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 3;// XA3
GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 3;// XA4
GpioCtrlRegs.GPBMUX1.bit.GPIO45=3;// XA5
GpioCtrlRegs.GPBMUX1.bit.GPIO46 = 3;// XA6
GpioCtrlRegs.GPBMUX1.bit.GPIO47 = 3;// XA7

GpioCtrlRegs.GPCMUX2.bit.GPIO80 = 3;// xA8
GpioCtrlRegs.GPCMUX2.bit.GPIO81 = 3;// xA9
GpioCtrlRegs.GPCMUX2.bit.GPIO82=3;// XA10
GpioCtrlRegs.GPCMUX2.bit.GPIO83 = 3;// XA11
GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 3;// XA12
GpioCtrlRegs.GPCMUX2.bit.GPIO85=3;// XA13
GpioCtrlRegs.GPCMUX2.bit.GPIO86=3;// XA14
GpioCtrlRegs.GPCMUX2.bit.GPIO87 = 3;// XA15
GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 3;// XA16
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 3;// XA17
GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 3;// XA18
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 3;// XA19

GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3;// XREADY
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 3;// XRNW
GpioCtrlRegs.GPBMUX1.bit.GPIO38 = 3;// XWE0

GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 3;// XZCS0
GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3;// XZCS7
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 3;// XZCS6


EDIS;

asm (" RPT #7 || NOP");

测试代码如下所示:

uint16  * ExRamStart =(uint16 *) 0x200000;

*(ExRamStart + 1)= 0x5a5a;
*(ExRamStart + 2)= 0x1234;
*(ExRamStart + 3)= 0xa5a5;

数据的某些位不正确、这真的让我感到困惑。

顺便说一下、我将 zone7用于 FPGA 存储器空间、所有 DSP 读取功能都运行良好。

TI 专家或其他专家可以为我提供帮助吗?  提前感谢。

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

    您好!

    我们的一位专家将在周二前回来、因为周一是美国假日。

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

    您好、 Karthik、

      感谢您的回复、有一些新情况:

    初始化完成时,在 DSP 未向空间写入任何数据之前,但地址0x20000~0x200fff 已填充诸如0x3ff、0x8bf 等数据,这些数据来自何处?

    当 DSP 将数据写入地址时、使用 *(0x201100)= 0x5a5a、低10位全为1、这意味着数据为0x5dff;但当我在同一地址的存储器中写入0x5a5a 时、总线上的数据是正确的。

     此致、

     方浩。

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

    [引用 user="fan fanghaa"]顺便说一下,我将 zone7用于 FPGA 存储器空间,所有 DSP 读取功能都运行良好。

    您如何确定读操作正常?

    [引用用户="fan fanghaa"]初始化完成时,在 DSP 未向该空间写入任何数据之前,但地址0x20000~0x200fff 已填充0x3ff、0x8bf 等数据,这些数据来自何处?

    如果这些位置没有被写入、那么内容是无效的、未经初始化的值。  如果您要连接 FPGA、则由 FPGA 确定。

    [引用用户="fan fanghaa"]当 DSP 将数据写入地址使用 *(0x201100)= 0x5a5a 时,低10位全为1,这意味着数据是0x5dff;但当我在内存中的同一地址写入0x5a5a 时,总线上的数据是正确的。

    请阐明如何在同一地址的存储器中执行写入0x5a5a、以及这与 *(0x201100)= 0x5a5a 有何不同。  当您说所有低10位为1时、您是否使用示波器观察电压?  这是首选方法、因为它可以向您显示总线上是否存在争用。