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.

[参考译文] TMS320F28P550SJ:首次未正确触发 SPITXDMA。

Guru**** 2966500 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1661028/tms320f28p550sj-spitxdma-not-triggered-properly-for-the-first-time

器件型号: TMS320F28P550SJ
主题: SysConfig 中讨论的其他器件

尊敬的专家:

我的客户使用 SPI(主器件)+ DMA。 其中、TXFFST < TXFFIL (0x1) 会触发 SPITXDMA、DMA 将数据从缓冲区移动到 TXFIFO。 Trnasfer 大小设置为 128。

此设计为当 FIFO 为空 (<1) 时、触发 DMA 将在 TX FIFO 中移动数据、然后 TXFFST=1。 SPI 倒装数据、TXFFST=0、再次触发 DMA。 这会重复进行、直到 DMA 在通道停止时移动 128 个数据。

问题是第一个 SPITXDMA 未被触发。 初始化 SPI 和 DMA 后、我的状态如下所示:

  1. SPI TX FIFO 和 TXFFST< TXFFIL 中不包含任何内容。  
  2. image.png
  3. DMA 已启动、RUNSTS=1、但未设置 PERINTFLG。
  4. image.png
  5. 接下来、向 PERINTFRC 写入 1。 一旦我向它写入 1、DMA 就会被触发、并且它被 SPITXDMA 重复触发、直到它完成 WHO 传输。

这表示未命中 SPITXDMA 的第一个触发。 这里的问题是什么?  

我们知道 Ex5_loopback_DMA 可以实现此设计。 但我们需要找到根花瓶、以便客户可以修复自己的代码。  

我有客户代码 snipet、并使用以下项目进行了复制。

spi_ex5_loopback_dma_hunkey.zip 

该主题提到 SPITXDMA 对边沿敏感、但我找不到更多信息。

webexteams://im?space=c4bf65d0-2477-11e-917e-f308078ad72d&message=c3b76310-76c0-11f1-ace7-4bdfd6559a74

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

    您好 Hang、

    如何初始化 SPI 和 DMA? 客户是否在使用 SysConfig? 这听起来像是初始化步骤的顺序有问题。 如果 SPI 触发基于边沿并且 SPI 在 DMA 启用(运行)之前发送触发信号、则 DMA 可能会丢失触发信号。 您能否检查客户是否按照与示例代码相同的顺序初始化每个模块?

    此致、

    Delaney

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

    尊敬的 Delaney:

    感谢您的答复! 在 SPI 解决问题之前初始化 DMA。