您尚未登录。

楼主 #1 2020-12-05 20:15:43

f_Endman
会员
注册时间: 2020-04-16
已发帖子: 55
积分: 137

F1C100s裸奔DMA-TCON方式的Framebuffer,代码不到5KB!(附ST7789的RGB接口裸机驱动)

事情还要从我上淘宝捡便宜买了一块ST7789主控的LCD开始说起(不是广告),然后折腾半天才发现这玩意需要用SPI进行初始化QAQ。。(以下省略N字)

在翻F1C100s手册的时候偶然间看到TCON的数据源中写到了“DMA565”,然后再一次在偶然间翻DMA的手册时发现F1C100有个叫DDMA的东西可以用DRQ的形式向TCON发送数据,来实现类似于Framebuffer的功能,于是我开始尝试调试这个玩意。这个DMA方式的Framebuffer是我自己几乎从零开始慢慢摸索,断断续续整了几个月弄出来的(其实绝大部分时间都花在了TCON的调试上)。

DMA方式的特点在于代码小,避开了图像引擎那资料极少、难以理解、操作还极其繁琐的初始化过程,这样一来增强了可移植性,而且顺便避开了图像引擎工作带来的工作耗电量。而且我还发现使用图像引擎方式屏幕上的像素点会有一定抖动,但DMA方式则完全不会抖动。要说缺点的话,其一是只能使用RGB565,其二是不能使用图像引擎的硬件混色和图层叠加啥的,其三是会一定程度上占用AHB总线。但这些在大部分情况下影响都不大,毕竟代码量只有5KB这个大优势是一直都在的。

裸机BootLoader使用了我前段时间在论坛里开源过的BootLoader,并修复了一些小Bug(代码大小的判断出错)。目前试了三种交叉编译链都能正常编译运行。

软件部分秉承我的一贯风格,使用了我自己写的外设寄存器结构体(这段时间摸索出来了一种极其方便的利用Excel处理手册的方法)。程序里存进去了一张数组形式的图片用于测试。开发环境用的是VSCode,但其它环境应该也没问题。
硬件部分是荔枝派NANO+官方4.3寸屏或者通过转接板连接我上面蓝字那款ST7789的屏(这坑人玩意还涨价了)。其中转接板我用了一种极其鬼畜的方式复用了LCD的引脚来进行软件模拟SPI通讯,居然成功了,AD工程附在文件里。

正所谓前人种树后人乘凉,希望我开源这个东西可以帮到以后入坑的同好。这个DMA-TCON方式实在是有太多坑了,我在程序里基本都详细地一一注释了,有些手册写的不清楚的地方我也根据自己的推断写了注释。

相关文件:DMA-TCON-Framebuffer.zip

图

离线

楼主 #7 2020-12-21 22:30:26

f_Endman
会员
注册时间: 2020-04-16
已发帖子: 55
积分: 137

Re: F1C100s裸奔DMA-TCON方式的Framebuffer,代码不到5KB!(附ST7789的RGB接口裸机驱动)

达克罗德 说:

这种方式双buffer切换好实现吗?

理论上来讲,只要更改DDMA的源地址寄存器就行了

离线

楼主 #34 2023-04-03 19:38:18

f_Endman
会员
注册时间: 2020-04-16
已发帖子: 55
积分: 137

Re: F1C100s裸奔DMA-TCON方式的Framebuffer,代码不到5KB!(附ST7789的RGB接口裸机驱动)

rayandy 说:

按照上面这张图,LCDC DMA的地址应该是FIFO1。

时间有点久了,我记得f1c的tcon的dma是比较特殊的dma,内部应该有硬件连接,没有目标地址,直接设置目标类型就行。具体你还是看代码吧。
那个fifo1是tcon的硬件实现,程序好像不用管

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn