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.

[参考译文] MSPM0G3507:UART DMA 中断问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1220604/mspm0g3507-uart-dma-interrupt-issue

器件型号:MSPM0G3507

您好!

我正在探索 MSP-M0G3607 MCU。 我将 CCS Theia 0.9与 SDK 0.58配合使用。 我需要在串行控制台上转储一组数据。 为此、 我将使用"uart_tx_console_multibyte_fifo_dma"示例。 我在 UART DMA 中断中观察到了问题。 我已配置 UART、如下图所示。

在串行控制台上转储特定量的数据后、我无法获得如下图所示的 DMA 中断。

 我在这里缺少什么吗? 请引导我。

谢谢并重新毕业、

Virendra Dalal.

eInfochips  

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

    尊敬的 Virendra:

    在您从下载的 MySecureSoftware 文件夹中有一个文档、其中包含早期样片和量产样片之间的勘误表和增强功能。  查找"早期样品功能差异文档"

    这听起来像是文档中的 UART_05问题。  

    您是否可以在下面添加以下内容,在 UART 处理程序中设置 gConsoleTxDMATransrecent 标志?  

    Fullscreen
    1
    DEBUG_UART_INST->INT_EVENT2.IMASK = UART_INT_EVENT2_IMASK_TXINT_CLR;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    过去、我发现这确实必须在解决方法中所述的 DMADONE 中断内完成。  生产器件上不需要此权变措施。

    此致、
    Brandon Fisher

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

    尊敬的 Brandon:

    感谢您的快速响应。

    正如您提到的、 我已更新了处理程序、如下图所示。

    但是、添加此函数后、会导致 DMA 中断卡在第一个 UART 事务中、如下图所示。

    另外、我不知道它是否相关、但在我的应用程序中、我还配置了 ADC、PWM 和 SysTick 中断。 这些中断中的任何一个都可以引起 UART DMA 中的问题吗?

    请帮我解决这个问题。

    此致、

    Virendra Dalal.

    eInfochips

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

    尊敬的 Virendra:

    还请注释掉对以下内容的调用:DL_UART_disableDMATransmitEvent (DEBUG_UART_INST);  

    我们正在将变通办法的这一部分有效地移动到中断处理程序、使其快速发生而不被抢占、因此您应该在此处将其注释掉。  

    另外、我不知道它是否相关、但在我的应用程序中、我还配置了 ADC、PWM 和 SysTick 中断。 这些中断中的任何一个都可以引起 UART DMA 中的问题吗?

    [/报价]

    您是否有可能将 DMA 与这些外设中的任何一个配合使用? 这将是我要找的第一个地方。  

    此致、
    Brandon Fisher

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

    尊敬的  Brandon:

    感谢您的快速响应。

    我已尝试注释掉"DL_UART_disableDMATransmitEvent (DEBUG_UART_INST);"。  但问题仍然存在。

    另外、我不知道它是否相关、但在我的应用程序中、我还配置了 ADC、PWM 和 SysTick 中断。 这些中断中的任何一个都可以引起 UART DMA 中的问题吗?

    您是否有可能将 DMA 与这些外设中的任何一个配合使用? 这将是我要找的第一个地方。  

    [/报价]

    否、我没有将 DMA 与任何外设结合使用。

    我随附了 syscfg 文件中 UART 配置的屏幕截图、以供参考。

     

    此致、

    Virendra Dalal.

    eInfochips

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

    尊敬的 Virendra:

    我在这里看不到任何明显错误的东西。 您是否更改了关于 UART 示例的任何其他内容、例如波特率或时钟设置?

    在我的设置中、该示例在该配置下正常运行。

    UART 是每次都在一致的地方发生故障、还是看起来是随机的?  

    此致、
    Brandon Fisher

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

    尊敬的  Brandon:

    您是否更改了有关 UART 的示例的任何其他内容(如波特率或时钟设置)?

    否、我具有 与 UART DMA 示例完全相同的配置。 一个示例项目运行正常、但我的固件应用程序不工作。   

    UART 是否每次都在一致位置失败或似乎是随机的?  [/报价]

    是的、在同一个地方也是失败的。 固件应用程序基本上会首先 初始化所有外设、然后等待按钮中断。 初始化完成后、我在 UART 上打印了一条欢迎消息、这可以正常工作。 但当我得到按钮中断时、我开始采集 ADC 样本并通过 UART 打印这些样本。 在第一次打印样本时、它始终会卡住。

    我还尝试更改 FIFO 电平、如下面的快照所示。

     

    我还尝试了"MSPM0_EarlySamplesFunctionDifferences_v1p0"文档中建议的相同配置。

    我是否缺少任何其他 UART 配置? 或者您能建议其他方式吗?

    谢谢。此致、

    Virendra Dalal.

    eInfochips

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

    尊敬的 Virendra:

    当您开始采集 ADC 样本时、接下来如何将消息打印到 UART?  

    我想、可能有一些提示表明了 ADC 是如何触发 UART 的、因为此处出现了故障。  

    您是否从 ADC 完成 ISR 内部调用 uart_console_write 函数? 这种结构看起来是什么样子的?  

    此致、
    Brandon Fisher

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

    尊敬的 Brandon:

    当您开始采集 ADC 样本时、接下来如何将消息打印到 UART?  

    我想、可能有一些提示表明了 ADC 是如何触发 UART 的、因为此处出现了故障。  

    您是否从 ADC 完成 ISR 内部调用 uart_console_write 函数? 这种结构看起来是什么样子的?

    [/报价]

    是的、回答正确。 我错误地 在 ADC ISR 中打印了一行。 我现在可以打印所有 ADC 样本、不会出现任何问题。

    感谢您的持续支持。

    我对 PWM API 确实有一个疑问。 我已经  为两个通道配置了 PWM0、如下图所示:

    有没有任何方法可以停止一个 PWM 通道? 我已经尝试将第一个 PWM 通道捕获比较值设置为0、但似乎不起作用。 我需要使用"DL_TimerG_stopCounter"方法来停止整个 PWM 组。  

    您能建议我用什么方法做这个吗?

    谢谢。此致、
    Virendra Dalal.

    eInfochips

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

    尊敬的 Virendra:

    是的、回答正确。 我错误地 在 ADC ISR 中打印了一行。 我现在可以打印所有 ADC 样本、不会出现任何问题。

    感谢您的持续支持。

    [/报价]

    太好了、很高兴听到 UART 输出现在工作。

    有没有任何方法可以停止一个 PWM 通道? 我已经尝试将第一个 PWM 通道捕获比较值设置为0、但似乎不起作用。 我需要使用"DL_TimerG_stopCounter"方法来停止整个 PWM 组。  

    [/报价]

    您是否希望 PWM 引脚在空闲/断开时变为低电平或高电平?

    通过将 CCP 值设置为加载值、您应该能够将占空比设置为0%。  

    或者、应注意的是、我以前实际上还没有尝试过该方法、您还可以 使用 IOMUX 从相关引脚上断开 TIMx 通道。 在该模式下、可以将其保持为高阻态或以 GPIO 的形式重新连接并以所需的任何方式驱动。

    此致、
    Brandon Fisher

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

    尊敬的  Brandon:

    但我确实设法停止了单个 PWM 通道。 我可以单独正确地运行两个 PWM 通道。 问题是、我已将最大 CCP 值设置为16000、这基本上是0%占空比。 为了使它正常工作、我需要将此值设置为15999。  

    感谢您的全力支持。

    谢谢。此致、

    Virendra Dalal.

    eInfochips