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.

[参考译文] MSP430F6779:单次传输的 UART DMA 问题

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1126357/msp430f6779-uart-dma-problem-with-single-transfer

器件型号:MSP430F6779

大家早上好!

我在 MSP430f6779上的程序有一个奇怪的问题。  

问题是、当我在主文件中有一个空 while 循环时:

while{

它都按预期工作。 DMASZ 递减计数至零并运行中断。

当我在 while 环路中放置一个额外的 for 循环时、一切都会发生变化。
while{
  for (i=0;i<3;i++){
    //不执行任何操作
  }

然后 DMA 数据传输停止工作。

有人有这样的问题吗?  

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

这里是我的 DMA 配置:  

DMACTL0 = DMA0TSEL__USCIA1RX;//将 DMA0触发器设置为 UCA1RXIFG  

__data20_write_long (((uintptr_t)&DMA0SA、(uintptr_t)&UCA1RXBUF);
//源块地址
__data20_write_long (((uintptr_t)&DMA0DA、(uintptr_t)&EXT_UART_buffer);

DMA0SZ = EXT_UART_Buffer_MAX;//Ile danych ma przyjsc po uarcie.
DMA0CTL =(0 << 12)|// 0:单次传输,4:单次传输;单次传输意味着 DMA 将在填满整个缓冲区后停止
(3 << 10)|//目标地址递增
(0 << 8)|//源地址不变
(1 << 7)|//目标为字节
(1 << 6)|//源是字节
(1 << 5)|
(0 < 4)|//禁用 DMA // TODO
(1 << 2)|
(1 << 0);

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

    我从未见过 while 循环语法、因为它缺少循环条件。

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

    当然、我是很抱歉。 我很快就写了这个帖子。
    while 如下所示:while (1){

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

    您好!

    此问题是否仍需要支持? 还是已解决?

    看起来 DMA 一次性模式是正常的、但如果您将这些代码添加到 while 循环中、那么问题出在哪里?  

    我想您可能需要检查是否有某些寄存器会自动清除。

    谢谢!

    此致

    Johnson

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

    看起来您正在设置 DMALEVEL=1和 DMAREQ=1。 这些都可能会导致结果中出现奇怪、但可能不是您描述的症状。 我想您不想使用其中任何一种。

    我怀疑您的问题是程序性的(测试序列)、即作为引入额外环路的一部分、您不小心做了其他事情。 很难从您到目前为止发布的内容中进行猜测。