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.

[参考译文] TMS320F28388D:McBSP MFSR 和 MFSX 未同步

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1654733/tms320f28388d-mcbsp-mfsr-and-mfsx-not-synced

器件型号: TMS320F28388D

我尝试将 McBSP 设置为使 TX 和 RX 同时对 FS 和 CLK 使用相同的引脚、即 MFSX 和 MCLKX。

在我看来、RX 端可以使用 MFSX 和 MCLKX 进行触发。 我通过使用采样率发生器生成 TX 并为 RX 供电、设置配置来解决该问题。

我的问题是 MFSX 针脚和 MFSR 针脚不同步。 我看到 MFSX 和 MFSR 相隔 700ns。

这是我的配置:

  McbspbRegs.SPCR2.bit.frst = 0;
  McbspbRegs.SPCR2.bit.GRST = 0;
  McbspbRegs.SPCR2.bit.XRST = 0;
  McbspbRegs.SPCR1.bit.RRST = 0;

  McbspbRegs.SPCR1.bit.RJUST = 0;

  McbspbRegs.RCR2.bit.RDATDLY = 1;
  McbspbRegs.XCR2.bit.XDATDLY = 0;
  McbspbRegs.RCR1.bit.RWDLEN1 = 2;
  McbspbRegs.XCR1.bit.XWDLEN1 = 2;

  McbspbRegs.PCR.bit.CLKXM = 1;
  McbspbRegs.PCR.bit.CLKRM = 1;
  McbspbRegs.PCR.bit.FSXM = 1;
  McbspbRegs.PCR.bit.FSRM = 1;

  McbspbRegs.SRGR2.bit.fsgm = 1;

  //与时钟相关
  McbspbRegs.SRGR1.bit.CLKGDV = 9;
  McbspbRegs.SRGR2.bit.FPER = 32;
  McbspbRegs.SRGR1.bit.FWID = 0;

  //时钟源
  McbspbRegs.SRGR2.bit.CLKSM = 1;
  McbspbRegs.PCR.bit.SCLKME = 0;

  McbspbRegs.SRGR2.bit.GSYNC = 0;

  McbspbRegs.MFFINT.bit.rint = 1;

  __asm(“ RPT #80 || NOP“);

  McbspbRegs.SPCR2.bit.GRST = 1;
  McbspbRegs.SPCR2.bit.frst = 1;

  __asm(“ RPT #160 || NOP“);

  McbspbRegs.SPCR2.bit.XRST = 1;
  McbspbRegs.SPCR1.bit.RRST = 1;

 

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

    VI、

    可以尝试以下操作:

    1) 确保使用的 GPIO 已配置为异步模式作为其限定设置。  GPIO 的默认设置是与 SYSCLK 同步、但由于我们将这些 GPIO 馈送到 McBSP(它自己具有同步功能)、因此我们不需要/不希望这个额外的时钟同步发挥作用。  这是相对于多路复用器选择的独立设置、可为 McBSP 配置引脚

    2) McbspbRegs.RCR2.bit.RDATDLY = 1;

      McbspbRegs.XCR2.bit.XDATDLY = 0;
    我们可以将它们保持不变、即 XDATDLY = 1 吗?  这可能会解释时序差异
    3) 打开全局同步
    McbspbRegs.SRGR2.bit.GSYNC = 1; //从 0 更改为//
    4) 使用外部帧同步、但也从外部将 MFSX 引脚连接到 MFSR 引脚、MCLKX 连接到 MCLKR。
    //配置采样率发生器以生成帧同步
    McbspbRegs.SRGR2.bit.FSGM = 1; //由帧同步逻辑生成 FSG
    //使 MFSX 成为输出(发生器)
    McbspbRegs.PCR.bit.FSXM = 1; // FSX 为输出
    //将 MFSR 作为输入并从外部将其连接到 MFSX
    McbspbRegs.PCR.bit.FSRM = 0; // FSR 为输入(来自 MFSX 引脚)
    //使 MCLKX 成为输出
    McbspbRegs.PCR.bit.CLKXM = 1; // CLKX 为输出
    //将 MCLKR 变为输入、并从外部将其连接至 MCLKX
    McbspbRegs.PCR.bit.CLKRM = 0; // CLKR 为输入(来自 MCLKX 引脚)
    此致、
    Matthew