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.

[参考译文] MSP432P401R:如何重置DMA缓冲区?

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/615942/msp432p401r-how-to-reset-dma-buffer

部件号:MSP432P401R

你好

我在 MSP432上有裸机(无RTOS)应用程序。

DMA设置为与UART RX配合使用。

UART通信只是256字节的电报流,其间有1毫秒的暂停。

我看到以下情景。

如果DMA在UART电报开始时未开始侦听,它将接收其中的一部分,然后等待暂停,接收预期256的剩余量(来自另一个电报)

等等...

问题

使用DAM模块驱动程序库中的什么命令可以重置DMA缓冲区?

谢谢  

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

    没有用于重置DMA缓冲区指针的Reset命令。 您需要确保仅在发生暂停时启用DMA通道,以确保接收来自同一电报的256字节。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    >您需要确保仅在发生暂停时才启用DMA通道  

    如何实现? 在启用UART+DMA之前,我不知道是否有暂停。  

    如果我在电报中间开始接收,会怎样?  

    无法取消?

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

    我不确定UART的数据源是什么。如果源是可编程源,则可以在源和MSP432P401R设备之间连接GPIO,以便源在暂停期间切换GPIO一次,从而使MSP432P401R 可以同步UART+DMA。 仅当第一次发生切换或由于MSP432P401R设备上的处理延迟导致数据模式丢失时,才启用UART。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >我不确定UART的数据源是什么。
    某些外部设备,之间没有其它连接。
    >对不起,无法进行切换,因为除UART外没有其他连接。

    好的,意味着我没有办法取消半填充DMA缓冲区?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yuliy您好,

    如果CPU没有指示存在不完整的数据缓冲区,则不能简单地取消半填充缓冲区。 如果可以确定信息,则禁用UART,禁用DMA通道,重新初始化DMA控制结构,启用DMA通道,然后启用UART是取消先前已知的不完整缓冲区的正确方法。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >然后禁用UART,禁用DMA通道,重新初始化DMA控制结构,启用DMA通道,然后启用UART是取消先前已知的不完整缓冲区的正确方法。

    好的,答案就是... 说实话,我期待更优雅的方式
    任何情况下,感谢您的回答。 我关闭该问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yuliy您好,

    我认为问题在于DMA控制结构被破坏,这就是重新建立DMA控制结构的原因。 如果知道第一次腐败事件的实际顺序,我们可以更好地帮助您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有两种导致DMA缓冲区损坏的淫秽方式。

    首先,2个DMA缓冲区之间的间隔太小,这是一种溢出错误。

    其次, DMA在UART传输的中间开始侦听错误的时间,因此它占用当前UART电报的一部分,等待,接收第二个UART电报的另一部分,Viola,我们必须重置DMA。

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

    DMA以全时钟速度工作,而UART是低速外设。 缩放应允许无缝传输。 第二点是关于初始化模型。 在启动UART通信之前,必须初始化并启用DMA。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    >DMA必须在启动UART通信之前初始化并启用。

    这是一件好事,但当我启动应用程序时,我无法理解这一时刻是两个UART电报之间的停顿,还是UART即将到来。

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

    设备启动时,DMA是配置的第一个块。 然后配置UART。 UART开始传输后,DMA可以从UART模块接收数据字节。 我看不出在这方面有什么问题? 请您澄清一下吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有2台设备相互通信。
    设备A是主设备。 它发送,比如256字节-暂停300 us -发送256字节,依此类推。 最后2个字节是CRC类型检查
    设备B是从属设备,它会侦听。

    我为设备B执行应用程序。当我启用DMAI,不知道它是在主发送或主暂停的中间收听的。
    没有办法。 在奴隶开始并能够识别出错误之前,我从中间到中间一直在倾听。
    现在这个大问题是,
    如何重置DMA?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yuliy您好,

    在这种情况下,正确的方法是监控UART RX线路,并查看是否存在100 us或以上的空闲状态。 如果是,则这是启用UART的正确时间,因为UART现在将从开始接收256字节,而不是在传输过程中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    > 监控UART RX线,查看是否有100 us或更多空闲

    您是否打算在此引脚上设置GPIO处于活动状态,如果仍处于活动状态,则进行监控?

    如果是,请激活此引脚上的UART RX?

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

    是的,在GPIO模式下监控引脚。 我们现在知道有256字节的数据。 每次都有1->0的切换,这意味着发送一个字节,因此重置一个100 us的计时器。 一旦最后1->0转换结束,等待100 us计时器超时。 如果计时器超时,则表示总线上没有下一个200 us的数据。 这200 us现在可用于初始化UART和DMA。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    OK Amit,
    谢谢,我会听从您的建议
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yuliy您好,

    请允许我将论坛帖子标记为"非公开"。 如果您仍然需要帮助,可以重新打开论坛帖子。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,它已关闭