打印
[STM32F4]

关于刷TFT阻塞CPU的问题

[复制链接]
1797|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
KC_CEC|  楼主 | 2014-8-22 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 KC_CEC 于 2014-8-22 11:20 编辑

1、硬件环境:
f407,主频168M,外扩SRAM做缓存驱动3.5寸480*320屏(驱动芯片:ILI9481)

2、过程:
先将需要显示的内容在SRAM中刷完,然后再一次性全部刷新在TFT上。
在TFT和SRAM的FSMC都配置在最快且显示正常的情况下,试过两种方式刷屏:
A、直接用for循环来刷新液晶,就是将外部缓存直接当作一个大数组,然后一步步扔进TFT就行

B、用DMA,只需要指定SRAM起始地址和TFT地址即可,不需要CPU一步步刷。
但是,由于DMA的M2M方式加上FIFO需要至少两次才能刷完整屏,
为了避免数据显示错位,需要硬等待第一次DMA完成后再完成第二次。

3、问题:
实测以上AB两种方式刷屏的最快频率是25ms。
那么就是说这个25ms是硬消耗CPU的,不能用来做其他事情。这样对整个系统实时性有一定影响,
希望大家给点意见.....
沙发
KC_CEC|  楼主 | 2014-8-22 12:31 | 只看该作者
想到了一个笨办法,就是在SRAM内部开两个缓存。C和D
两个交替给TFT刷屏,正在刷屏的一个缓存数据是不会改变的。
比如:
现在正在用C缓存刷液晶(DMA方式,发送一个命令即可),
然后其他任务同时在向D缓存写入这些任务所改变的显示。

当C缓存刷完一屏后,开始调用D缓存刷屏。与此同时,C
缓存需要将D缓存的数据完全读回来一次,在此基础上CPU
再来刷新C缓存。
依次交替下去.....

此方法可好?

使用特权

评论回复
板凳
KC_CEC|  楼主 | 2014-8-22 12:37 | 只看该作者
想了想好像有点**肋,一个缓存就300k,两个就600多K了。

使用特权

评论回复
地板
aozima| | 2014-8-22 13:45 | 只看该作者
RTOS,DMA,中断

使用特权

评论回复
5
KC_CEC|  楼主 | 2014-8-22 14:21 | 只看该作者
aozima 发表于 2014-8-22 13:45
RTOS,DMA,中断

不管用哪种方式,如果是单缓存的话都得等待一屏完全刷完。
不然刷了一半,CPU去改变了缓存内容,再去刷另一半的时候显示就会出问题

使用特权

评论回复
6
pofu007| | 2014-8-22 15:32 | 只看该作者
在显示内容上作一些规划,把整个显示屏分块,那部分改变就刷哪块,不要整屏都刷。

使用特权

评论回复
7
yhn1973| | 2014-8-22 15:33 | 只看该作者
用DMA了不用消耗CPU吧,DMA过程中CPU可以干些其他工作

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

169

帖子

1

粉丝