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.

[参考译文] TMS320F280039:DMA 在每次突发后生成中断

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1592237/tms320f280039-dma-generating-interrupt-after-each-burst

器件型号: TMS320F280039

您好:

我有一个 16kHz 计时器中断、会调用自己的 ISR。

在 ISR 中、我会触发一个 DMA、将 6 个字从缓冲区传输到 SPI TX FIFO(突发大小= 1、传输大小= 6)。 我还配置了另一个 DMA、从 SPI RX FIFO 中读取相关的 6 个字并将它们移动到另一个缓冲区。 到目前为止、很简单:使用一次 DMA 启动、我可以完全传输我的缓冲区、并在下一次计时器中断时重新启动序列。

我需要努力解决的是:我需要在每次突发传输后触发 CLA 任务、这意味着我需要 CLA 任务运行 6 次、每次突发一次。

理想情况下、我想使用计时器 ISR 来启动 SPI/DMA 事务并处理“缓慢“计算、同时我每次从 SPI 收到新字时都需要进行一些快速计算。

这在某种程度上是可能的吗? 请注意、我不能在 CPU 中注册多个 ISR、因为它的周期必须具有极其确定性。

谢谢!

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

    尊敬的 Michel Donadon:

    DMA 通道中断可用作 CLA 任务触发器。 但是、DMA 中断只能在 传输开始/结束时配置、而不能在每次突发之后配置。

    一个选项可以是将传输大小配置为 1(因此 1 次传输= 1 次突发)。 并且将通道配置为连续模式、并在收到所有 6 个突发后禁用。

    此致、

    Veena

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

    您好、Veena、

    谢谢你的答复。

    是的、这是我想的... 但是如果我这么做(1 个传输= 1 个突发)、如何在 6 个事务后停止 DMA? 请考虑、DMA 应自主处理 SPI 通信、CPU 开销为零。 这是可能的吗? CLA 可以停止 DMA 吗? 另外、如何重置 2 个 DMA 通道的源/目标地址指针?

    谢谢!

    Michel