Thread 中讨论的其他器件:, SysConfig
您好!
我想向您介绍一些有关在32MHz 以上运行 CPU/MCLK 时钟时 UART TX DMA 数据损坏的问题。 我在当前正在开发的定制硬件和固件项目中遇到问题、但能够将问题范围缩小到微控制器时钟域中似乎存在的问题。 为此、我能够在 LP-MSPM0G3507 Launchpad (标记为修订版 A)上可靠地重现故障行为、并对 TI 提供的 UART TX DMA 示例("UART_TX_multibyte_fifo_dma_interrupts_LP_MSPM0G3507_nortos_ticlang")进行了略微修改、以便它在 EOT 和 DMADONE 重复字符数组和 DMADONE 标志上等待 ASCII 字符数组 (没有更改)处于115200波特的无限 while 循环中。
该示例使用由 SYSOSC 直接提供的 CPU/MCLK/ULPCLK、并且一切运行完美。 如果我从 SYSPLL 提供这些时钟、但32MHz、一切都可以正常工作。 如果我更改 UDIV、使16MHz 不发生数据损坏、该功能也适用。 如果我现在尝试为 CPUCLK/MCLK 计时任何高于32MHz 的值、我就会开始遇到 PC 端接收到的数据损坏的问题。
在我看来,如果 MCLK > 32MHz 数据将在这些情况下 MCLK != ULPCLK 损坏。 例如、如果 I CLOCK 40MHz 40MHz (UDIV=/1)、则一切仍能正常工作、不会发生损坏。 如果我现在将 UDIV 更改为/2并且20MHz、我开始看到损坏。 例如、如果我尝试(就像我正在处理的真实项目中)为80MHz 和40MHz 计时、也会发生这种情况。 我觉得、目前这将把可用的 CPUCLK/MCLK 总数限制为最大值。 40MHz 不出现损坏、因为 ULPCLK_max 为40MHz。
我还尝试为 UART0外设提供不同的时钟源(MFCLK=MCLK)、同时保持4MHz 时钟速度加快。 这也会导致接收到的 TX 数据损坏。
我曾提到、为此目的、我更改了提供的 UART TX DMA 示例、同时通过 Git 跟踪我在本文中写入的更改和故障引入配置状态、以便您可以回溯我的更改、 比较提交、并轻松地将 MSP 带入我所描述的错误数据破坏状态。
编辑:在我使用80MHz 时钟的实际项目中、如果我使用阻塞 UART 写入、UART 数据就不会损坏、因此我认为问题出在 DMA 时钟方面。
在此问题上的每一位帮助和信息都是非常感谢和提前感谢
乔纳斯