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.

关于M4的刷屏问题

你好:

        我现在用LM4F231H5QD,工作在80MHz下,刷一个240*320的液晶屏,用16BIT的IO口(PA+PB,用8080总线),IO口的输出,用直接置寄存器的方法(HWREG()),编译器的speed选择5(对于编译器level选项,我不敢修改,因为我发现修改完以后,有些函数会出问题,例如我有一个delay的函数,修改完以后,直接被跳过了),目前做到刷一帧数据需要50ms,但是在刷的的时候,会感觉到明显的刷屏。

        后来我测试了用直接置IO口(在一个while里面,置0,置1,),发现IO的速度只能大概达到5MHz。

        我想问:

         1.      除了直接置寄存器外,还有什么办法能够提高GPIO的速度。

          2.     对于一个240*320的液晶屏,一般需要刷新速度要达到多少,才能让人感觉不出刷屏.

         3.    如果一帧数据50ms没问题,那么有没有可能液晶屏有问题?(估计这个不太可能,呵呵)。

  • 没大侠回答我,自己先顶一下

  • 1.你可以用Address masking的方法对一个IO进行操作。我试了一下,主频在50MHz是,用AHP总线操作IO,可以达到12M以上的反转速度。

    2.刷新速度和像素没太大的关系,以前的CRT显示器,刷新速度在75Hz的时候就几乎看不到闪烁了。这个数据供参考。

    一些建议和你讨论:

    操作GPIO的时候最好直接对寄存器进行操作,减少函数调用和程序的跳转,这样可以提高IO的实际速度。

    在满足液晶时序的前提下,尽量减少延时,来提高刷屏速度。

    如果显示的时候只是修改了其中一部分内容,是否可以考虑只更新屏幕上的这个部分,而不是整屏重刷。

     

    下面给出了通过AHB总线和Adress masking操作PG7的代码例子。

    首先要在GPIO High-Performance Bus控制寄存器中使能PG口的AHP总线:

    HWREG(SYSCTL_GPIOHBCTL) |=  (1 << (SYSCTL_PERIPH_GPIOG & 0xF));

    然后将PG7配置为输出后,就可以使用Address masking进行操作了:

    HWREG(GPIO_PORTG_AHB_BASE + (GPIO_O_DATA + (GPIO_PIN_7 << 2))) = GPIO_PIN_7;         //PG7 = H

    HWREG(GPIO_PORTG_AHB_BASE + (GPIO_O_DATA + (GPIO_PIN_7 << 2))) = 0;                              //PG7 = L