在LM3S9B90上移植 TI GUI库问题



硬件环境: LM3S9B90 + SSD2119驱动器的液晶屏幕(和LM3S9B96上使用相同的液晶驱动器)

软件环境: 在LM3S9B96的demo基础上修改的项目(液晶驱动也是用的相同的),以成功编译运行

 

故障现象: 目标板现在可以成功驱动 液晶屏幕,色彩还有屏幕显示效果都算理想。

                     但有个致命缺陷,就是在向屏幕写数据时,观察屏幕会有明显的 画屏感(屏幕由程序画写方向刷新下来),给人直观感受是屏幕显示的速度很慢

 

为解决这个问题,我做了测试,并且有一定的分析结果,供高手参考

测试分析:

1  无论是色块还是图片数据 刷新速度都很慢

2  由于使用的液晶屏仅驱动器与9B96的开发套件使用一致,所以我特意向液晶供应商索取了 驱动命令字的代码,重新改写液晶驱动,故障依旧

3  TI GUI中有 显示图片的函数接口,我将同一份图做成压缩和非压缩两个版本,使用定时器做时间测试,发现 非压缩的速度要比压缩数据快一倍左右,肉眼感觉屏幕确实也是非压缩图片数据显示的快一些,由此我推断问题很可能出现在 MCU端,而不是液晶驱动器的配置问题。

4  为找出MCU端的问题,我做了以下对比测试:

1> 将系统时钟倍频至 50Mhz(demo本身就使用的50Mhz),然后使用GUI 绘制色块,每个色块大约耗时为3402603个系统时钟,折算下来 约合68MS左右

2>  将系统时钟倍频至80Mhz,然后使用GUI绘制色块,每个色块大约耗时为 5000000个系统时钟左右,折算下来也是约合 63MS左右

5  由于我手上并没有LM3S9B96的片子,所以无法更换片子做对比测试,我也没有办法确定 LM3S9B96的开发套件会不会有同样的问题。

以上就是我的测试内容,望高手专家看到帮我分析一下问题所在。 我现在想知道的是,到底是由于访存速度本身的制约,还是由于demo中 液晶驱动程序的效率太低,导致大量的访存操作,从而影响使用效果。

  • 楼主说的绘制色块是整个屏幕完全更新的那种吗?这样的算话整个屏幕更新可以做到15Hz左右,不算快但也不慢。但肯定不会出现那种刷屏的感觉

    楼主在用TI Demo跑的时候会有类似问题吗?楼主的程序中是不是有很多需要频繁响应的中断?或者楼主用的控件(widget)非常多?这些都会影响系统性能的因素。有一个简单的办法,就是不要每次都整屏更新,利用StellarisWare图形库控件管理的方法,每次只更新必要的Widget图形。

  •  你好,首先感谢你的解答!由于此移植项目被其他项目搁置,一直到现在才来重新解决这个问题

     我想跟你再次讨论一下,您说的15hz,根据计算 大概在0.066秒左右,换算之后为66ms左右和我的测试数据非常吻合。人眼可识别频率为24hz的话,66ms离42ms 还是有一些差距的,我理解的为当屏幕还没有刷新完时以超过42ms另外20ms会让人眼产生闪烁感。 我所说的画屏感 并不是 速度非常慢的那种,而是再绘制一张整屏幕时会有明显的裂痕感觉。

     再者,根据您提出的一些疑问我做一些解释: 首先我现在是在单独测试液晶底层驱动,所以整个程序基本就只有液晶的操作代码。如果要算上中断,也只有freertos的tick中断了。至于使用控件的情况,是完全没有使用的,仅调用单独绘制屏幕函数。

    可能您会觉得我吹毛求疵,如果说正常屏幕刷新色块可以勉强接近42ms这个数值的话,那么根据我测试的结果,如果绘制一张8位深度320*240的图像数据将会耗时接近120ms左右,这样的数据结果是让人无法接受的。

     至于您所说到的图形库控件管理方法,只更新必要控件这种方法我是理解的,而且TI在演示视频中看不到明显的画屏感也是得益于这种方法。但画屏速度毕竟还是越快越好不是吗

  • 注意到楼主50MHz和80MHz时候系统消耗的时钟数量是不一样的,而做的事情是一样的,所以可以怀疑这些时间消耗在了等待外设响应上。

    楼主可以看看当时钟改变后,到底是哪部分代码消耗的时间增多了,如果真的是等待SPI(或其它外设)的话,说明瓶颈可能在屏幕那边

  • 关于液晶显示有刷屏感觉我有如下理解仅供参考,不仅限于回答你的问题:

    1.影响显示速度的有以下几个因素:

    1)CPU主频,

    2)写显示数 据的代码复杂度,包括LCD显示位数

    3)并口操作时,GPIO的翻转速度

    2.如何提高显示速度?

    1)首先想到就是提髙主频,缩短每条语句执行的单位时间。但是这个方法是有瓶颈的,因为LCD驱动代码大多数都是在操作GPIO口,当主频高于GPIO口的翻转时间时,CPU会等待GPIO,在操作时増加等待时钟,这时提高主频就不起作用了。甚至在有些频点会比低主频的要慢。

    2)优化显示代码,把不必要的代码删除,能分时操作就分时操作。9b96带EPI接口,会比普通软件操作GPIO口快很多。

    3)采用16位操作会比8位模式节省几个CLK操作

    3.以上讲的都是硬指标,这些即使实现了还是不能达到效果咋办呢。我们就需要用软件处理来弥补。

    1)如何消除人眼的刷屏感。没错,人眼是分辩率是24Hz,但并不是説达到24Hz就没有刷屏的感觉,是没有闪烁感而已。

  • 2)如何让人眼睛感觉不到刷屏呢?

        现在大多数的LCD都提供使能显示的命令,在写数据的时候LCD是不会同步显示的,当写完后在使能显示,这样,人眼就感觉是闪了一下就切换到新的屏幕了。

    3)在LCD显示软件设计时,我们可以按照如下几个方法来做。

      a. 如果是全屏显示切换,比如整个图片的切换,尽量先把显示数据写入LCD的缓冲,然后使能显示。这样能有效的消除刷屏的感受

      b. 如果只是较小的显示部分更新,可以边写数据边显示。

      c. 对显示速度有要求的场合,不要调用TI的GUI库,那个比你自己写的代码要慢。

      d. 如果楼主是从其他外设(例如串行FLASH)读入图片显示,那么瓶颈会是在外设的操作上.可以一次性读入显示数据,但这样会耗费大量RAM,不太现实。可以一块一块读进来,然后在读下块数据的D时候,同时往LCD缓冲发送数据。这样可以把顺序的操作变成同时的操作,大大减少外设消耗的时间。

  • 补充一点,虽然人眼的反应时间是24HZ,如果要让人感觉不到刷频,至少要到30ms.