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.

[参考译文] ***

Guru**** 2553450 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1533948/thread

部件号:部件号:*** >


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

    DMA 传输需要有限的时间;我在 TRM/数据表中找不到需要多长时间的规格。

    整个第二组 (1-0-0) 周期似乎被拉伸。 是否将 DMA 用于任何其他目的? CPU 生成哪种类型的总线活动? (你似乎在运行非常接近极限,所以这些事情 可能很重要。

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

    我没有将 DMA 用于任何其他用途。 在 syscfg 中、所有其他 DMA 通道都处于非活动状态(未配置)。

    如果您是指外部总线活动:仅连接了一条外部总线 —  CAN 总线:预计每 50ms 接收大约 15 帧。

    有关内部总线活动:PD0 和 PD1 外设总线、请参阅下文。

    对于像素时钟生成、我使用 TIMA1。

    其他配置的外设为:

    • PWM 模式下用于背光的 TIMA0 计时器–500Hz
    • 两个通用计时器:TIMG0 和 TIMG6
    • MCAN–处于 FD 模式。
    • 挑战
    • 事件–1 个用于触发 DMA 的事件
    • CRC
    • I2C–仅在启动时使用

     

    请参见带有配置概述的图像:

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

    我对不同的线程(此处)进行了一个简单的实验、并估计了 10 个时钟的 DMA 传输。 (我很确定 DMA 是从 MCLK 运行的,但我现在似乎找不到引文。)

    如果这接近准确、这意味着 MCLK=SYSPLL=DMA 时的最大传输数为 8M 80MHz、因此您的运行速度非常接近该限值。 因此、公共汽车上的任何干扰都可能把事情推倒。

    1) CPU(与 SRAM 竞争)可能是最容易控制的事情。 如果可以、在这一过程中、安排 CPU 处于 WFI/WFE 中。

    2) 是否总是第二个被拉伸的三元组,而所有其他的位都是“正常“的情况? 当您将 PCLK 降低到 5MHz 时、您仍然会在第二个三倍频中看到拉伸吗?

    3) 在我的实验中,我也注意到时间“ wiggled “的前 2 次转移。 (我还没有进一步查看,但我把它归咎于 ADC)。 看起来您的 PCLK 在所有时间都运行、即计时器始终运行;您如何“放进档“来启动 DMA? (事件触发启用? DMA 通道是否启用?)

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

    您好 Bruce、

    感谢您的参与!

    我还假设我们非常接近极限。

    查看您观点的答案:
    1.--> WFI/WFE 意味着在 DMA 传输期间我们无法进行任何计算。 由于我们没有帧缓冲区、因此我们可以利用该时间计算 LCD 的下一行。
    2.-->这不是所有的时间的第二个三元组。 这取决于我如何为像素时钟配置 PWM、以及根据哪个事件触发 DMA 传输。 我看到它也发生在“1 0 0 数据“的中间。
    使用 5MHz 时、它似乎运行良好。 脉冲(来自 1 0 0 三元组)具有恒定高电平 — 不会拉伸。 此外、根据我的分析、没有额外的像素时钟。

    3.是的, PCLK 始终运行,也尊重沿时序。 DMA 的启动方式为:
    DL_DMA_setTransferSize (DMA、DMA_LCD_CHAN_ID、transferLength);
    DL_DMA_enableChannel (DMA、DMA_LCD_CHAN_ID);

    此致、
    Mihai

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

    [我没有忽视你,但我也没有任何好的答案。]

    两个概念[“建议“一词过于强烈]:

    1) 如果我们假设 (a) 我们看到的是 DMA 的某种启动工件、(b) DE 信号是数据的一部分(写入 DOUT 的位矢量)、在前置“虚拟“位中可能有某个值、de=0 表示实际数据、以提供任何该时间实现稳定。  

    2) 通过启用通道(PCLK 处于活动状态)来启动 DMA、而不是清除/启用事件触发器 (ICLR/IMASK)、这意味着事件通道 (MIS) 中几乎可以肯定已经存在请求、结果是第一次 DMA 传输将立即触发、而不与 PCLK 同步、在这种情况下、第一个位将很短。 但我在示波器跟踪中看不到、因此我想我缺少了一些内容。

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

    我设置了一个测试用例、我认为(至少表面上)与您所做的类似。 我无法生成您发布的确切波形、但我能够在非常接近 PCLK=MCLK/10 的位置产生类似的异常。

    我做的一个实验是(类似于另一个线程)读取触发器计时器 CTR、而不是写入 DOUT。  我注意到的是、“批处理“(EN=1) 的第一次 DMA 传输比其余时间长 2 个时钟。 9i 非常确定这些是 MCLK、因为即使我将 ULPCLK 速度减慢到 MCLK/2、数字也是 2。) 这会在周期的早期出现、在读取源之前的某个时间、但我看不到更多信息。 使用重复单次 DMA 模式时、这个额外延迟仅出现在第一次传输时、而不是出现在每次重复(重新加载)时。  

    由于您的运行速度非常接近限值、这 2 个额外的时钟能够将触发序列推入溢出 (TOV)、并进行级联以使一个或多个传输延迟发生。 如果在切屑上正确操作、随着时间的推移、效果似乎甚至会消失。

    人们倾向于这样说、使用重复单次 DMA 模式可能是一种权变措施、但鉴于数据流的启动/停止性质、您必须停止触发器(计时器)以暂停数据输出、在如此短的 PCLK 周期下、这将是一场激烈的竞争。 (您还说过您需要始终保持 PCLK 运行。)

    考虑到这些限制因素、上面的 (1) 项可能是您的最佳选择。 虽然我建议 (1) 作为“修复症状“机制、但这种额外的证据可能会提供使用它的合理理由。

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

    您好 Bruce、

     

    我代表 Mihai,他不能再在这里发帖(得到一个错误).

     

    感谢您的澄清!

     

    我们已经在重复单个 DMA 中尝试过、但正如您所说、我们无法处理其他时序。

     

    我们现在还有第一 (1) 点的实施。 DE 是数据的一部分、我们发送一些 DE = 0 dummys。 但风险是巨大的 PCLK“损失“不会发生在转让的开始。 特别是我们还看到它发生在转移的过程中。

     

    对我们来说、很明显、我们处于 MCU 的极限、无法找到可靠的控制解决方案。 重要的是、我们要了解正在发生的事情、以及为什么会发生这一问题。

     

    因此、我们此时将遵循两条路径:

     

    -与液晶显示器制造商澄清找到降低 PCLK 的方法,并控制显示屏,如这里所述。

     

    -硬件设计变更,以并行模式控制显示屏,以从同一 DOUT 端口控制更多的 GPIO。 然后、我们可以将 PCLK 降低到 3 –5MHz。 第一个测试表明、通过这种方式、DMA 传输可以正常工作、没有任何问题。

     

    我想此时我们可以在这里解决这个问题。

    此致