RA8875是一块LCD驱动芯片,支持RGB接口的LCD液晶屏,提供8080时序的MCU接口;

RA8875内置了2D硬件加速功能,可以实现硬件绘制矩形,直线等功能;

本次测试就是为了验证RA8875的硬件绘图与使用MCU软件绘图的速度差异。

硬件环境:

CPU:STM32F407VE@168MHz

LCD:480x272x16bpp

测试方法:

计算1秒内填充整个屏幕的次数(FPS)

测试结果:

填充方式

帧率(FPS)

速度(Pixel/s)

备注

软件逐点填充

6

783360

软件逐行填充

63

8225280

软件矩形填充

69

9008640

硬件逐行填充1

201

26242560

先绘图,等待空闲后退出函数

硬件逐行填充2

207

27025920

进入函数先等待空闲,再绘图

硬件矩形填充1

312

40734720

先绘图

硬件矩形填充2

315

41126400

先等待

emWin(5.30)

126

16441000

自带驱动,支持硬件加速

FastGUI

201

26242560

驱动为硬件逐行填充2

FlatGUI

324

42301440

说明:RA8875的硬件绘制功能,需要读取状态寄存器的BIT7,

如果该位为1说明硬件绘制没有完成,不能进行其它绘制,否则屏幕会显示不正常。

“先绘图”是指先发送硬件绘图指令,然后读取状态寄存器,等待BIT7清0后退出函数;

“先等待”是指先读取状态寄存器,等待BIT7清0后,再发送绘图指令;

测试结论:

由此可见使用RA8875的硬件绘图有着非常明显的速度优势,比使用软件绘图快了3-4倍。

附上RA8875的2D加速代码:

static void lcd_set_rect(int x1, int y1, int x2, int y2)
{//窗口起始位置lcd_command(0x30, x1);lcd_command(0x31, (x1 >> 8) & 0x3);lcd_command(0x32, y1);lcd_command(0x33, (y1 >> 8) & 0x01);//窗口结束位置lcd_command(0x34, x2);lcd_command(0x35, (x2 >> 8) & 0x03);lcd_command(0x36, y2);lcd_command(0x37, (y2 >> 8) & 0x01);
}static void lcd_wseek(int x, int y)
{lcd_command(0x46, x);lcd_command(0x47, x >> 8);lcd_command(0x48, y);lcd_command(0x49, y >> 8);
}static void lcd_rseek(int x, int y)
{lcd_command(0x4A, x);lcd_command(0x4B, x >> 8);lcd_command(0x4C, y);lcd_command(0x4D, y >> 8);
}void lcd_set_pixel(int x, int y, int pixel)
{lcd_wait_ram();lcd_wseek(x, y);lcd_command(0x02, pixel);
}int lcd_get_pixel(int x, int y)
{int data;lcd_rseek(x, y);LCD_CMD = 0x02;data = LCD_DATA;  //dummy readdata = LCD_DATA;return data;
}//BTE
static void bte_set_rect(int x, int y, int w, int h)
{lcd_command(0x58, x);lcd_command(0x59, (x >> 8) & 0x03);lcd_command(0x5A, y);lcd_command(0x5B, (y >> 8) & 0x01);lcd_command(0x5C, w);lcd_command(0x5D, (w >> 8) & 0x03);lcd_command(0x5E, h);lcd_command(0x5F, (h >> 8) & 0x03);
}static void bte_set_bkcolor(int color)
{lcd_command(0x60, (color >> 11) & 0x1F);lcd_command(0x61, (color >> 5) & 0x3F);lcd_command(0x62, color & 0x1F);
}static void bte_set_fgcolor(int color)
{lcd_command(0x63, (color >> 11) & 0x1F);lcd_command(0x64, (color >> 5) & 0x3F);lcd_command(0x65, color & 0x1F);
}static void bte_set_colorkey(int color)
{lcd_command(0x67, (color >> 11) & 0x1F);lcd_command(0x68, (color >> 5) & 0x3F);lcd_command(0x69, color & 0x1F);
}static void bte_open(int mode)
{lcd_command(0x51, lcd_rop_mask | mode);lcd_command(0x50, 0x80);
}static void g2d_set_rect(int x, int y, int x2, int y2)
{lcd_command(0x91, x&0xFF);lcd_command(0x92, (x>>8)&0xFF);lcd_command(0x93, y&0xFF);lcd_command(0x94, (y>>8)&0xFF);lcd_command(0x95, x2&0xFF);lcd_command(0x96, (x2>>8)&0xFF);lcd_command(0x97, y2&0xFF);lcd_command(0x98, (y2>>8)&0xFF);
}static void g2d_command(uint8_t cmd)
{lcd_command(0x90, cmd);
}void lcd_set_rop(int mode)
{lcd_rop_mask = (mode & 0x0F) << 4;
}void bte_fill_rect(int x, int y, int w, int h, int color)
{lcd_wait_bte();bte_set_rect(x, y, w, h);bte_set_fgcolor(color);bte_open(0x0C);
}void g2d_fill_rect(int x, int y, int x2, int y2, int color)
{lcd_wait_ram();bte_set_fgcolor(color);g2d_set_rect(x, y, x2, y2);g2d_command(0xB0);
}


验证RA8875的硬件绘图与使用MCU软件绘图的速度差异相关推荐

  1. 关于硬件问题造成的MCU死机,过来人简单的谈一谈

    关于MCU死机问题,近期小编在出差期间遇到多起,且原因不同.所以,今日小白借此机会讲一讲因硬件问题造成的MCU死机. MCU不良 在遇到死机问题时,已经可以判定是硬件原因造成的前提下,大多人的选择是交 ...

  2. 科普:原型验证系统VS硬件仿真器,哪一个更好?

    总有小伙伴问我:"原型验证系统和硬件仿真器​​​​​​​,哪一个更好?" 为什么会有这样的选择困难呢?实在是现在的芯片规模太大.太复杂了. 随着AI.5G等新技术的不断推进,&qu ...

  3. FPGA原型验证系统VS硬件仿真器

    作者:杨一峰,芯华章科技技术市场经理 文章首发于<中国集成电路>,由国家工业和信息化部主管,中国半导体行业协会主办的官方专业期刊. 之前我们已经对"FPGA开发板"和& ...

  4. [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247483680&idx=1&sn=c5fd069ab3f ...

  5. 浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解

    内容提要 注:本文摘自NXP工程师胡恩伟的微信公众号"汽车电子expert成长之路",大家感兴趣可以关注一下. 引言 1. S32K1xx系列MCU启动过程详解(startup_S ...

  6. 从硬件工程师转到纯软件开发,回顾那些岁月

    1. 序 前段时间,我写了很多关于js的文章,分享的乐趣使我决定继续写下去.在接下来的时间,我计划也开始写关于Java的内容. 其实我很早以前就想写了,Java是我毕业后学的第一门语言,准确来说,如果 ...

  7. java 2d 绘图教程_Java标准教程:Java 2D绘图--第2章 从绘图开始

    Java标准教程:Java 2D绘图--第2章从绘图开始 Java 2D API是强大并且复杂的.然而,大多数Java 2D API只用到了封装在java.awt.Graphic类中的功能的自己.本节 ...

  8. 苹果手机“无法验证应用”解决办法,免越狱无视软件掉签名

    使用苹果手机的用户基本都遇见过这样的类似情况,原本好好的应用突然打开提示"无法验证应用"的错误提示. 明明天天都在用,怎么突然就用不了呢? 这是因为软件的证书掉了,所以手机就会提示 ...

  9. “由于无法验证发行者,所以WINDOWS已经阻止此软件”的解决方法

    Windows7系统都很注重系统的安全性,在提高安全性的同时,也给我们某些应用带来不便,例如在使用网银时,需要安装插件或证书,可能会弹出" 由于无法验证发行者,所以WINDOWS已经阻止此软 ...

最新文章

  1. ITK:可视化静态密集2D水平集零集
  2. matlab中矩阵怎么敲_Ansys刚度(质量、阻尼)矩阵的提取(part 1)
  3. 树形dp-CF-337D. Book of Evil
  4. 算法六之直接插入排序
  5. 全球最囧的爱情测试.....
  6. 高性能开发,别点,发际线要紧!
  7. SQLite中利用事务处理优化DB操作
  8. IIS中部署vue程序,刷新直接404
  9. Linux 系统编程技巧与概念 第14章 字节次序
  10. POJ 2159 解题报告
  11. 深入浅出理解 Java回调机制(异步)
  12. intent传递集合数据
  13. A graph auto-encoder model for miRNA-disease associations prediction 论文解析
  14. SpringCloud——Eureka服务注册和发现
  15. Arduino驱动LM35温度传感器自制温度计
  16. java计算时间从什么时候开始 为什么从1970年开始 java的时间为什么是一大串数字
  17. 对于编码器与解码器的理解
  18. 读者写者问题浅析(代码实现)
  19. MATLAB Jacobi迭代法求解
  20. Dell服务器IPMI工具远程唤醒开机

热门文章

  1. Flowable工作流之Flowable UI画工作流程图
  2. windows10怎么开局域网文件夹共享
  3. 纬编针织脱圈走纱分析与防走纱工艺研究
  4. 解决金仓数据库KingbaseES创建serial列并将其设置为主键约束,同时copy两条及以上数据时报错的问题
  5. 金仓数据库KingbaseES本地化配置LC_CTYPE和lLC_COLLATE
  6. 【python爬虫】Ajax英雄的皮肤进行保存及英雄基本信息保存至Excel
  7. 全网最全高性能蓝牙耳机盘点,双11十大低延迟蓝牙耳机排行榜
  8. VoNR技术来了,一个新动向值得我们关注
  9. 心理学教授谈记忆魔法--艾宾浩斯遗忘曲线
  10. c、c++中的字符输入