个人团购网站 转入备案,免费网站制作 优帮云,移动手机网站建设,做电商网站的公司一. 简介
相信大家都玩过屏幕#xff0c;在FPGA上使用最多的就是VGA/HDMI接口的显示器了#xff0c;这两种显示器的优点就不用说了#xff0c;缺点就是体积比较大#xff0c;而且价格比较贵#xff0c;对于追求便携/价格低的我来说#xff0c;SPI接口的屏幕才是我的首要…一. 简介
相信大家都玩过屏幕在FPGA上使用最多的就是VGA/HDMI接口的显示器了这两种显示器的优点就不用说了缺点就是体积比较大而且价格比较贵对于追求便携/价格低的我来说SPI接口的屏幕才是我的首要选择,而且一般是可以带触摸的哦。
后面图像处理相关的代码都会基于此屏幕哦
二. SPI屏幕驱动(驱动芯片ST7789V)
1. SPI模式
SPI时序就不介绍了很最重且必须要掌握的协议。要想驱动屏幕最关系的肯定是使用那种模式来驱动了答案就在这里数据在SCL时钟的上升沿被采样数据在SCL时钟的下降沿切换空闲的时候对SCL的电平不作要求),对应的模式为0和3。 2. 初始化
摸清楚SPI的模式之后就可以开始初始化屏幕了最简单高效的方法当然是参考C语言的现实。
可以看出初始化的过程就是依次发送命令和数据即可。那么如何辨别命令和数据呢 通过下图可以清楚的知道是通过DC信号线的电平来区别的(低电平表示当前发送的数据为命令)。 弄懂了上述问题之后就可以按照C语言实现依葫芦画瓢依次将命令和数据发送出去即可。另外有两点需要注意的是
两条命令不能连续发送中间需要停顿数个时钟周期而数据则不需要。命令到数据或者数据到命令是不能连续中间需要停顿数个时钟周期。 另外这三个命令需要注意一下0x360x2A,0x2B,它们分别是设置显示的方向(还有就是数据是RGB还是BGR)、列地址和行地址。0x36设计到的东西比较多需要详细了解的可以自行去翻阅数据手册。
经过上面的初始化如果成功了屏幕上显示出杂乱无章的图案。
3. 显示数据
C语言的实现如下设置要显示X,Y的范围也就是矩形的左上角和右下角的值然后发送要显示的数据即可。非常简单。 三. FPGA实现
有了C语言作为参考FPGA端的实现那还不是小菜一碟总共只需要分为如下的三个模块:
SPI主机模块: 用来和屏幕进行数据交互屏幕初始化模块: 将初始化数据依次通过SPI主机模块发送给模块屏幕刷新模块: 将显示数据依次通过SPI主机模块发送给模块
模块框图如下有点小哈(⭐) SPI主机模块和初始化模块非常简单就不作说明啦重点来说说刷新模块。 刷新模块不会像单片机中那样调用的时候才会进行刷新而且在初始化完成之后就一直在对整个屏幕进行刷新了
1. 模块状态跳转
模块由如下四个在状态组成在发送前11个数据的时候需要进入打啊奥延时状态原因是这11个数据中既有命令也有数据(此数据懂?), 后面则一直在DATA态它只包括显示数据所以不需要延时。最后一个显示数据发送完成后就进入帧同步状态表示一帧数据发送完成。 2. 图像显示数据
很easy发送完前面的命令和数据后剩下的全部都是显示数据了都丢在default里面就可以了。这里暂时写死了(后面会将显示的数据修改为模块输入的数据)。 3. 模块端口
端口信号如下着重关注用户接口的三个信号即可非常easy 四. 模块封装
spi模块top模块的接口如下很明显不够完美无法知道当前显示的像素坐标而且图像数据一般为16bit的而这个模块的输入为8bit的数据另外在替换VGA接口的屏幕时候也不能简单高效的替换下来所以需要经过一次封装将其与外部进行交互的端口信号封装为VGA接口的信号(近似)。 封装后的模块端口信号如下其内部实现类似于VGA驱动。 五. 上板测试
测试代码如下显示四个方块是不是感觉so easy。 测试图片如下显示效果完美 关注 FPGA之旅 回复 FPGA驱动SPI屏幕 即可获取完整工程文件