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.

[参考译文] TMS570LC4357:SPI 处于从模式和 DMA

Guru**** 2439560 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/624617/tms570lc4357-spi-in-slave-mode-and-dma

器件型号:TMS570LC4357

大家好、  

我们需要使从器件 SPI 处于兼容 模式 和 DMA 传输。  

我们有一个以1.25Mhz 发射的主设备。 如果没有 DMA、代码工作正常。

您可以找到我们的代码。  

e2e.ti.com/.../1207.main.c

我们进行了一些测试:

1)元素数量等于26 、帧数量等于1、我们在接收缓冲区中得到的值是26乘以相同的值

2)当元件数量等于1 且帧数量等于26时、DMA 不会完成(BTFFLAG 从不等于零)。

我们无法理解这种行为。  

有人能解释这种奇怪的现象吗?  

非常感谢  

Alain  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在第一种情况下、元件数量等于26、帧数量等于1、当您收到一个 DMA 请求、即接收到一个 SPI 字时、您会告诉 DMA 读取同一个位置26次。 这通常不是您想要的。

    在第二种情况下、您读取了一个 SPI 字。 DMA 可能正在等待 SPI 接收另一个字。 由于 SPI 配置为从器件、您是否已验证主器件(无论它是什么)正在发送多个字?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob:

    在第一种情况下、您是对的、这不是我们想要的。


    对于第二个、我们确信主器件会连续发送数据。 主器件发送一个不同的字(1、2、3、...) 每1ms、一个经典(非 DMA 从器件)都会将其接收为 OK。 这就是我们无法理解行为的原因。


    Alain
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为问题是从器件 SPI 希望在全双工模式下工作。 除非发送缓冲区中有新字符、否则不会接收新字符。 我在您的示例中看到您有一个写入 spiREG3->DAT1的操作。 将虚拟数据(看起来像0)放入发送缓冲器的应用。 允许从器件 SPI 接收一个字符。

    要在具有 DMA 的从模式下使用 SPI、您需要使用两个 DMA 通道。 第二个通道从 SPI TX 缓冲区空中触发、只需将一些常量虚拟数据写入 spiREG3->DAT0即可。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Bob:  

    您说得对、SPI 是全双工、我们需要在 DAT1中写入虚拟数据。  但还有三个问题:

    1) 1)对于从器件 SPI、是否有办法避免这种情况、在不事先写入内容的情况下接收数据?

    2) 2)您是否有 DMA 传输示例代码?

    3) 3)我们已启用缓存。 当 DMA 在存储器中存储数据时、该存储器不会在高速缓存中更新。 是否有办法使用缓存启用来解决此问题?

    Alain  

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 1)否、在这些器件上、您必须加载 TX 缓冲器以作为从器件接收。
    2) 2)不完全正确。 下面是一个使用 DMA 进行 SCI 传输的示例、可能有所帮助;
    www.ti.com/.../spna213.pdf
    下面是一个将并行 MibSPI 与 DMA 结合使用的示例、但这比您需要的复杂得多。
    www.ti.com/.../spna231.pdf
    3) 3)使用 MPU 并将用于 SPI 缓冲器的 RAM 部分映射为不可缓存。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    1) 1)确定
    2) 2)我们将尝试并尽快回来。
    3) 3)工作正常。

    此致

    Alain