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.

[参考译文] TMS320F28P650DK:使用 CLB 实现 Endat 通信时、发现无法正常发送 SPI TX

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1514737/tms320f28p650dk-when-implementing-endat-communication-using-clb-it-was-found-that-spi-tx-could-not-be-sent-normally

器件型号:TMS320F28P650DK

工具/软件:

您好、工程师、

SPICLK 和 PTE 正常。 数据被写入 SPITXFIFO、并写入三段数据。 据观察、数据已进入 SPIDAT 移位寄存器、但无法将其发送出去。


LSPCLK 配置为20 MHz。SPI 配置为从器件。 具体配置如下:

void endat22_spi_fifo_init (){

  //
  //初始化 SPI FIFO 寄存器
  //
  SPI_disableModule (PM_ENDAT22_SPI);
  SPI_disableLoopback (PM_ENDAT22_SPI);
  SPI_setConfig (PM_ENDAT22_SPI、DEVICE_LSPCLK_FREQ_20M、SPI_PROT_POL1PHA0、
         SPI_MODE_peripheral、500000、9);
  SPI_enableFIFO (PM_ENDAT22_SPI);
  SPI_setEmulationMode (PM_ENDAT22_SPI、SPI_emulation_free_run);
  SPI_enableModule (PM_ENDAT22_SPI);
  SPI_resetTxFIFO (PM_ENDAT22_SPI);
  SPI_resetRxFIFO (PM_ENDAT22_SPI);

}

 

CLB 生成 SPICLK(200kHz)Ω、并通过外部连接将其连接至 SPICLK 的 GPIO 端口、GPIO_23已接地:

  GPIO_setPinConfig (GPIO_24_SPIB_PICO);
    GPIO_setPadConfig (24、 GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP );
    GPIO_setQualificationMode (24、 GPIO_QUAL_ASYNC);

    GPIO_setPinConfig (GPIO_25_SPIB_POCI);
    GPIO_setPadConfig (25、 GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode (25、 GPIO_QUAL_ASYNC);

    但未接地/临时使用GPIO23替代 è ge_Pte、原理图中GPIO27应为SPIB;
    GPIO_setPinConfig (GPIO_23_SPIB_PTE);
    GPIO_setPadConfig (23、 GPIO_PIN_TYPE_STD);
    GPIO_setQualificationMode (23、 GPIO_QUAL_ASYNC);

    GPIO_setPinConfig (GPIO_26_SPIB_CLK);
    GPIO_setPadConfig (26、 GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP );
    GPIO_setQualificationMode (26、 GPIO_QUAL_ASYNC);


由测量的 CLB 生成的 SPICLK 如下面的图4所示:

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

    您好 Lin、

    在没有 SPICLK CLB 输入的情况下、代码是否按预期工作?

    您能否验证 CLB CLK 是否正确替换 SPICLK? 由于200kHz 相对较慢、因此基于 CLB 的较高 CLK 值是否有效? SPI 需要遵循所有这些时序要求才能相应地运行。 根据以下代码、我无法确认、因为它看起来好像正在使用常规 SPICLK?

    [引述 userid="637270" url="~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1514737/tms320f28p650dk-when-implementing-endat-communication-using-clb-it-was-found-that-spi-tx-could-not-be-sent-normally
      GPIO_setPinConfig (GPIO_24_SPIB_PICO);
        GPIO_setPadConfig (24、 GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP );
        GPIO_setQualificationMode (24、 GPIO_QUAL_ASYNC);

        GPIO_setPinConfig (GPIO_25_SPIB_POCI);
        GPIO_setPadConfig (25、 GPIO_PIN_TYPE_STD);
        GPIO_setQualificationMode (25、 GPIO_QUAL_ASYNC);

        但未接地/临时使用GPIO23替代 è ge_Pte、原理图中GPIO27应为SPIB;
        GPIO_setPinConfig (GPIO_23_SPIB_PTE);
        GPIO_setPadConfig (23、 GPIO_PIN_TYPE_STD);
        GPIO_setQualificationMode (23、 GPIO_QUAL_ASYNC);

        GPIO_setPinConfig (GPIO_26_SPIB_CLK);
        GPIO_setPadConfig (26、 GPIO_PIN_TYPE_STD | GPIO_PIN_TYPE_PULLUP );
        GPIO_setQualificationMode (26、 GPIO_QUAL_ASYNC);
    [/报价]

    为什么要上拉 PICO 和 CLK? SPI 引脚不需要上拉/下拉电阻器即可运行。  

    此外、如果您一次发送的数据少于16位、数据位是否相应地移位?

    此致、

    Aishwarya

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

    尊敬的 Aishwarya:

    我遵循了您的故障排除建议、并卸下了上拉功能。 但是、我仍然无法确定问题。 GPIO26 SPICLK 在调试模式下的更改(但频率不确定)。 最后、我想到了将 CLB 的 SPICLK 输出修改为直接在内部连接到 SPICLK 的想法、而不是外部 GPIO 连接。 修改后、它能够正常发送数据。 衷心感谢您的帮助和您提供的想法。

    此致、

    林浩南