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.

[参考译文] TM4C129XNCZAD:用于图形的双缓冲器

Guru**** 2394295 points
Other Parts Discussed in Thread: TM4C129XNCZAD

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/669493/tm4c129xnczad-double-buffer-for-graphics

器件型号:TM4C129XNCZAD

客户拥有开发套件 DK-TM4C129X-DK (TM4C129XNCZAD)、并连接了480x272光栅显示屏和外部 SRAM 进行测试。

他们正在尝试使 Tiva C 上的双缓冲与图形一起工作。 它们使用是 grlib_raster 驱动程序_16bpp 库。 他们查看了该示例、但它仅涵盖单个缓冲选项。 他们尝试进行以下更改、但不认为它可以正常工作、因为每次更新屏幕时屏幕都会闪烁。

MAP_LCDDMAConfigSet (LCD0_BASE、LCD_DMA_BURST_16 | LCD_DMA_FIFORDY_128_SPICE | LCD_DMA_PING_PONG);

   //

   //设置帧缓冲区。  请注意、我们允许扩展该缓冲器

   //位于可用 SRAM 之外。  这使我们能够轻松地在其中测试模式

   //我们不能将整个帧放入内存中,当然会意识到这一点

   //部分显示将包含 crud。

   //

   MAP_LCDRasterFrameBufferSet (LCD0_BASE、0、g_pui32DisplayBuffer、

                               size_palette + size_buffer);

   

    //秒

   MAP_LCDRasterFrameBufferSet (LCD0_BASE、1、g_pu32DisplayBuffer2、

                               size_palette + size_buffer);

 

   //

   //将调色板写入帧缓冲区。

   //

   MAP_LCDRasterPaletteSet (LCD0_BASE、

                           LCD_PALEGE_SRC_24bit| LCD_PALEGE_TY_DIRECT、

                           (uint32_t *) g_pui16调色板、g_pulSrcPalette、0、

                           (size_palette / 2));

 

   //第二个货盘缓冲器

     //

   //将调色板写入帧缓冲区。

   //

   MAP_LCDRasterPaletteSet (LCD0_BASE、

                           LCD_PALEGE_SRC_24bit| LCD_PALEGE_TY_DIRECT、

                           (uint32_t *) g_pui16Palette2、g_pulSrcPalette、0、

                           (size_palette / 2));

 

  //

   //启用 LCD 中断。

   //

   MAP_LCDIntEnable (LCD0_BASE、(LCD_INT_DMA_DONE | LCD_INT_SYNC_Lost |

                    LCD_INT_underflow | LCD_INT_EOF0));

请告知上述代码是否存在问题、或者是否有工作示例。

谢谢、
Brian

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Brian、
    在用户指南中有一个与 LCDDMAConfigSet 相关的注释。 请在下面找到。 您是否会在调用中添加 LCD_DMA_BURST_16并查看它是否会产生影响?

    注:
    在外部使用帧缓冲器时、应设置 DMA 突发大小 LCD_DMA_BURST_16、
    连接 EPI 的存储器。 在这种情况下、使用较小的突发大小可能会导致偶尔出现的情况
    FIFO 下溢和相关的显示干扰。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Brian、
    TivaWare 外设驱动程序库用户指南的第18.3节提供了一个 LCD 示例。 不过、它适用于单个缓冲器。 使用单缓冲器时、结果是否比双缓冲器差、或者没有差异或更好?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    如果我可能(在显示业务中)在单缓冲存储器的"活动扫描"(显示读取)期间发生"显示写入"时、大多数"单缓冲存储器方案"都会受到"存储器总线争用"的影响。    这种争用在 显示屏上是(非常)可识别(干扰)的-通常被认为 是"不可接受!"

    "双缓冲存储器"提供了"可能" (但不保证)-启用"显示写入"-到"分离的存储器区域"... (甚至)在另一个(当前扫描的)内存的活动扫描期间。    这通常证明不足以"只提供更大的内存"。    这是因为"活动扫描"不能受到任何"显示写入"的影响、尤其是 "活动扫描"期间发生的写入。

    它可能会证明、"超出 MCU 的能力"、"持续且正确"地检索数据(从存储器的一部分)、而"显示写入"(到单独的存储器区域)同时(接近)!

    通过监控地址总线-并观察 内存写入期间"线性地址定序"(在"非写入间隔"期间注明)是否变为"断开/失真"、可以检测到这种情况。    "检测此类"双缓冲器"功能的另一种方法是 确认 "MCU 对"Memory Bank_2"的写入-在"刚启动"一个"存储器读取"-可以足够快地发生-因此 、"不要延迟"、"从 Bank_1读取的下一个存储器"。   (这样会"干扰"显示屏!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    感谢您的指导和知识共享。 我非常清楚、您在显示器业务中的时间很长。 :-)我知道双缓冲器是首选方法,因为数据表中也有相关说明。 我要求测试单个缓冲区是否产生了最差、没有差异或更好的结果的理由是、了解双缓冲模式下是否存在 DMA 设置问题、或者限制仅仅是由 EPI 接口瓶颈造成的。 如果单缓冲器模式产生的结果与双缓冲器模式没有区别、甚至没有更好的结果、则可能存在一些 DMA 设置问题。 当然、我们希望单个缓冲器产生的结果会非常糟糕。 对于480x272显示屏、我无法评论它是否太大、无法让 TM4C 处理。 TivaWare 示例使用较小的显示屏。 海报要检查的另一件事是 SRAM 配置和 SRAM 类型。 更快的 SRAM 器件是否会提供帮助?

    顺便说一下、我没有发现海报代码有什么问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我很怀疑、A、"更快的 SRAM"会有所帮助。   MCU 中肯定存在此问题-而不是外部存储器。

    我已在我(之前)的帖子中添加了两个简单测试。    (可能在您的帖子组成期间到达。)

    如果您将-仔细查看我的(添加的)最后一句-它可能会为这个双重缓冲尝试提供"死亡"-。。

    "480x272" TFT 的时序要求-很可能是120MHz MCU 的"碰撞/突破"限制。  (即使接受了双缓冲、尤其是在满足双缓冲的情况下!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    我只是再次阅读您之前的答复。 根据您的经验、您是否能够评论120MHz MCU 可以支持的显示分辨率? 我认为使用内部 SRAM 进行缓冲会有所帮助、但可用 SRAM 大小会限制显示大小。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    请考虑-成功的"双缓冲" (通常[保存字]) 要求"填充一个缓冲区"(以"或更快"的速率)、而非"清空另一个缓冲区"!   (喜欢那种语言!)   而且-至关重要-"一个缓冲区的装载-不得影响"另一个缓冲区的卸载!"    实际上、这会给存储器控制器带来"高要求"-这一点(现在)应该很明显。

    在20世纪90年代-我们对这一争论问题进行了反驳。   我们最初通过在 一个显示帧中使用一个"第二存储器区域"(我们无法加载该区域)来"解决"这一问题。    因此-在"存储器区域"之间切换-需要多个"显示帧通道"。   只有在"新"存储器完全加载时-并且-活动存储器区域刚刚被卸载并显示 -我们才能"切换到新/第二存储器区域!   这降低了显示器的更新速率-但客户认为种"双缓冲"是一种改进。

    海报的480x272 -尤其是16-18位"颜色深度"-是我的"最爱"之一-但证明"要求很高"。   (从存储器中、我记得此类显示的"点时钟"为9MHz 左右、这是连续的!)

    因此-时钟较慢的 MCU (即 TM4C 系列)-我怀疑-(可能)证明可以"双缓冲器" TFT 达到/接近 QVGA。   (320x240像素)    这证明是可能的、因为"点时钟"大幅减少-但我没有、"运行数字"-这是海报的责任。

    如果本海报中有、应调查4.3英寸 TFT (480x272)上的"心脏设置"-使用(正确) TFT 控制 IC (SSD 或 Epson)的情况。   (SSD = Solomon-Systech、 检查 SSD1963)