大家好、我正在使用 DMA 执行 UART 应用。 每10秒通过 UART 接收一次固定大小的数据。 波特率:115200。
我使用重复单次传输、如何知道 DMA 何时开始接收数据?
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.
大家好、我正在使用 DMA 执行 UART 应用。 每10秒通过 UART 接收一次固定大小的数据。 波特率:115200。
我使用重复单次传输、如何知道 DMA 何时开始接收数据?
DMANSZ 在每次传输时(明显)递减、因此作为一种轮询机制、您可以看到 DMANSZ 是否与您最初设置的值发生了变化。 您可以通过设置 DMANSZ=1来获得异步指示(DMAIFG)、但这似乎会使 DMA 的用途落空。
对于重复单次触发、DMANSZ 达到0 (并重新设置)后会有一个比赛、但在这种情况下、您将得到 DMAIFG。
[参考用户指南(SLAU208Q)第11.2.2.1节和图11-3]
好的、这是一个稍微不同的问题。 当(b) DMA 已进行特定量(在本例中为60)时、听起来您希望(a)异步通知(IFG)。
在(某些)其他 DMA 设计中、这是通过通常称为"半传输"中断来实现的、这为您提供了在填充后半部分时卸载缓冲器前半部分的时间。 我还想使用这个功能、但据我所知、MSP430 DMA 单元都无法实现这个功能。
我认为您最接近的方法是将缓冲区大小设置为60、并在下一个字节出现之前快速卸载(整个)缓冲区。 通常、您只能获得一个字节的时间来执行此操作、但在您的情况下、似乎您有接近10秒的时间、这并不是非常严格的时间预算。