验证RA8875的硬件绘图与使用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软件绘图的速度差异相关推荐
- 关于硬件问题造成的MCU死机,过来人简单的谈一谈
关于MCU死机问题,近期小编在出差期间遇到多起,且原因不同.所以,今日小白借此机会讲一讲因硬件问题造成的MCU死机. MCU不良 在遇到死机问题时,已经可以判定是硬件原因造成的前提下,大多人的选择是交 ...
- 科普:原型验证系统VS硬件仿真器,哪一个更好?
总有小伙伴问我:"原型验证系统和硬件仿真器,哪一个更好?" 为什么会有这样的选择困难呢?实在是现在的芯片规模太大.太复杂了. 随着AI.5G等新技术的不断推进,&qu ...
- FPGA原型验证系统VS硬件仿真器
作者:杨一峰,芯华章科技技术市场经理 文章首发于<中国集成电路>,由国家工业和信息化部主管,中国半导体行业协会主办的官方专业期刊. 之前我们已经对"FPGA开发板"和& ...
- [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套
转自:https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247483680&idx=1&sn=c5fd069ab3f ...
- 浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解
内容提要 注:本文摘自NXP工程师胡恩伟的微信公众号"汽车电子expert成长之路",大家感兴趣可以关注一下. 引言 1. S32K1xx系列MCU启动过程详解(startup_S ...
- 从硬件工程师转到纯软件开发,回顾那些岁月
1. 序 前段时间,我写了很多关于js的文章,分享的乐趣使我决定继续写下去.在接下来的时间,我计划也开始写关于Java的内容. 其实我很早以前就想写了,Java是我毕业后学的第一门语言,准确来说,如果 ...
- java 2d 绘图教程_Java标准教程:Java 2D绘图--第2章 从绘图开始
Java标准教程:Java 2D绘图--第2章从绘图开始 Java 2D API是强大并且复杂的.然而,大多数Java 2D API只用到了封装在java.awt.Graphic类中的功能的自己.本节 ...
- 苹果手机“无法验证应用”解决办法,免越狱无视软件掉签名
使用苹果手机的用户基本都遇见过这样的类似情况,原本好好的应用突然打开提示"无法验证应用"的错误提示. 明明天天都在用,怎么突然就用不了呢? 这是因为软件的证书掉了,所以手机就会提示 ...
- “由于无法验证发行者,所以WINDOWS已经阻止此软件”的解决方法
Windows7系统都很注重系统的安全性,在提高安全性的同时,也给我们某些应用带来不便,例如在使用网银时,需要安装插件或证书,可能会弹出" 由于无法验证发行者,所以WINDOWS已经阻止此软 ...
最新文章
- ITK:可视化静态密集2D水平集零集
- matlab中矩阵怎么敲_Ansys刚度(质量、阻尼)矩阵的提取(part 1)
- 树形dp-CF-337D. Book of Evil
- 算法六之直接插入排序
- 全球最囧的爱情测试.....
- 高性能开发,别点,发际线要紧!
- SQLite中利用事务处理优化DB操作
- IIS中部署vue程序,刷新直接404
- Linux 系统编程技巧与概念 第14章 字节次序
- POJ 2159 解题报告
- 深入浅出理解 Java回调机制(异步)
- intent传递集合数据
- A graph auto-encoder model for miRNA-disease associations prediction 论文解析
- SpringCloud——Eureka服务注册和发现
- Arduino驱动LM35温度传感器自制温度计
- java计算时间从什么时候开始 为什么从1970年开始 java的时间为什么是一大串数字
- 对于编码器与解码器的理解
- 读者写者问题浅析(代码实现)
- MATLAB Jacobi迭代法求解
- Dell服务器IPMI工具远程唤醒开机
热门文章
- Flowable工作流之Flowable UI画工作流程图
- windows10怎么开局域网文件夹共享
- 纬编针织脱圈走纱分析与防走纱工艺研究
- 解决金仓数据库KingbaseES创建serial列并将其设置为主键约束,同时copy两条及以上数据时报错的问题
- 金仓数据库KingbaseES本地化配置LC_CTYPE和lLC_COLLATE
- 【python爬虫】Ajax英雄的皮肤进行保存及英雄基本信息保存至Excel
- 全网最全高性能蓝牙耳机盘点,双11十大低延迟蓝牙耳机排行榜
- VoNR技术来了,一个新动向值得我们关注
- 心理学教授谈记忆魔法--艾宾浩斯遗忘曲线
- c、c++中的字符输入