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.

[参考译文] MSP430F67751A:如何知道 DMA 何时开始接收数据?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/925182/msp430f67751a-how-do-i-know-when-dma-is-starting-to-receive-data

器件型号:MSP430F67751A

大家好、我正在使用 DMA 执行 UART 应用。  每10秒通过 UART 接收一次固定大小的数据。 波特率:115200。

我使用重复单次传输、如何知道 DMA 何时开始接收数据?

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

    DMANSZ 在每次传输时(明显)递减、因此作为一种轮询机制、您可以看到 DMANSZ 是否与您最初设置的值发生了变化。 您可以通过设置 DMANSZ=1来获得异步指示(DMAIFG)、但这似乎会使 DMA 的用途落空。

    对于重复单次触发、DMANSZ 达到0 (并重新设置)后会有一个比赛、但在这种情况下、您将得到 DMAIFG。

    [参考用户指南(SLAU208Q)第11.2.2.1节和图11-3]

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

    Bruce、您好!

    感谢您的回答、但这些方法对我不起作用、因为我用于 DMA 的缓冲区大小为500字节、但我接收到的数据包大小(每10秒)为60字节。 我想知道这60个字节的数据何时到达。

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

    好的、这是一个稍微不同的问题。 当(b) DMA 已进行特定量(在本例中为60)时、听起来您希望(a)异步通知(IFG)。

    在(某些)其他 DMA 设计中、这是通过通常称为"半传输"中断来实现的、这为您提供了在填充后半部分时卸载缓冲器前半部分的时间。 我还想使用这个功能、但据我所知、MSP430 DMA 单元都无法实现这个功能。

    我认为您最接近的方法是将缓冲区大小设置为60、并在下一个字节出现之前快速卸载(整个)缓冲区。 通常、您只能获得一个字节的时间来执行此操作、但在您的情况下、似乎您有接近10秒的时间、这并不是非常严格的时间预算。