找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1134|回复: 2
收起左侧

mcu刷屏速度测试—基于STC32G12K128和JLX256128

[复制链接]
ID:1039438 发表于 2023-5-25 16:03 | 显示全部楼层 |阅读模式
  常听到有人说刷屏太慢,于是想测一下我的屏最快能刷多少帧。目的不是为了看视频,而是减少MCU在刷屏方面占用的时间。提高其使用效率。
  本实验使用的MCU是STC32G12K128,屏采用了晶联讯的JLX256128-920-PN。屏的时序是6800.
  测试时采用了一幅256x128的单色图(黑白图)。因为这款屏只能显示单色图像。
  先在群里咨询了一下各位大师。用什么办法方便测试屏的刷新速度。有高人指出。找一个闲置IO口,每次刷新完就让IO口翻转一次。然后运行时用示波器测IO口的频率,其二倍就是刷新速度了。
  按这个思路,写了一个程序,第一次测出刷新是40X2=80帧。
  不太满意,又修改了程序。使用了STC32G12K128的硬件LCM接口和DMA功能。再测刷新速度成为265x2=530帧。
  做最后的努力。对程序进行极限优化,测出的刷新速度为323x2=646帧。
  这时mcu的设置到了极限,就是说找不到可以继续提高的速度的设置了。估计使用STC32F,刷新速度还会有大的提高。
  对这个数据我简单分析了一下。一屏图像的数据量为256x128=32768点。单色屏需要4096字节。也就是4K。646帧数据需要每秒传送2646016字节。不到3M,一个字节需要的时间包括相关使能电平变化,数据的移动,指令的下达,应该是这个时间的4-6倍。按5倍核算的话,这时端口的运行速度在15M。无论对MCU还是屏都是可以接受的。
  下面给出程序的主要内容和测试时示波器的显示:
void main(void)
{                                                
uint i;
        mcu_initial();
        initial_lcd();                                                 //对液晶模块进行初始化设置
        transfer_command_lcd(0x08);                //数据格式,
        clear_screen();                                        //清屏
for (i=0;i<4096;i++)
        buffer1[ i]=onecolor[ i];//把code的数据搬到xdata
        lcm_dma_transfer(1,1,256,128,4096,buffer1);//这是个完整的显示函数
        clear_screen();                                //清屏
      lcd_address(1,1,256,128);
        while(1)
        {
                DMA_LCM_CR = 0xa1; //启动 DMA 开始发送数据
                P1=~P1;
                while(!(DMA_LCM_STA&0x01));//等待一屏数据发送完成
                        DMA_LCM_STA = 0x00; //清除 DMA 状态
        }
}
void mcu_initial(void)
{
P1M1=0x00;
P1M0=0x00;   //P1配置为准双向
P2M1=0x00;
P2M0=0x00;   //P2配置为准双向
P3M1=0x00;
P3M0=0x00;   //P3配置为准双向        
P4M0=0xff;
P4M1=0x00;
EAXFR = 1; //使能访问 XFR
CKCON = 0x00; //设置外部数据总线速度为最快
WTST = 0x00; //设置程序代码等待参数,
LCMIFCFG = 0x01; //设置 LCM 接口为 8 位数据位,6800 接口,数据口为 P2
LCMIFCFG2 = 0x00;        //RS:P45,RD:P44,WR:P42; Setup Time=0,HOLD Time=0。
LCMIFSTA = 0x00;//标志位清零
LCMIFCR = 0x80; //使能 LCM 接口
}
速度提升最大的是LCM接口的使用和DMA功能的使用。极限优化主要表现在两点,一个是LCMIFCFG2=0。把数据建立时间和保持时间都设成最小了。
二是主程序循环中把设置项都提前了。避免重复设置。循环中只保留了向屏发送数据指令,IO口翻转指令和等待任务完成指令。MCU主频为35M。完整的程序见附件。
40.png
265.png
323.png
实物.jpg

lcd_256.zip

129.83 KB, 下载次数: 12, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:373976 发表于 2023-5-25 18:49 | 显示全部楼层
学到了DMA方式驱动LCM.
回复

使用道具 举报

ID:1039438 发表于 2023-5-26 20:26 | 显示全部楼层
这款屏所用芯片的帧率上限是153HZ,所以有理由认为这个测试实际是测量了stc32g12k128
的写屏速度,并且这个速度对单屏图像显示是有效的。对于连续写屏。屏上实际显示出的内容受限于屏本身的刷新速度。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表