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.
我没有将 DMA 用于任何其他用途。 在 syscfg 中、所有其他 DMA 通道都处于非活动状态(未配置)。
如果您是指外部总线活动:仅连接了一条外部总线 — CAN 总线:预计每 50ms 接收大约 15 帧。
有关内部总线活动:PD0 和 PD1 外设总线、请参阅下文。
对于像素时钟生成、我使用 TIMA1。
其他配置的外设为:
请参见带有配置概述的图像:
我对不同的线程(此处)进行了一个简单的实验、并估计了 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 传输可以正常工作、没有任何问题。
我想此时我们可以在这里解决这个问题。
此致