一. 簡(jiǎn)介
相信大家都玩過(guò)屏幕,在FPGA上使用最多的就是VGA/HDMI接口的顯示器了,這兩種顯示器的優(yōu)點(diǎn)就不用說(shuō)了,缺點(diǎn)就是體積比較大,而且價(jià)格比較貴,對(duì)于追求便攜/價(jià)格低的我來(lái)說(shuō),SPI接口的屏幕才是我的首要選擇,而且一般是可以帶觸摸的哦。
此為圖像處理的基礎(chǔ),后面圖像處理相關(guān)的代碼都會(huì)基于此屏幕哦!
二. SPI屏幕驅(qū)動(dòng)(驅(qū)動(dòng)芯片ST7789V)
1. SPI模式
SPI時(shí)序就不介紹了,很重要且必須要掌握的協(xié)議。要想驅(qū)動(dòng)屏幕,最關(guān)系的肯定是使用那種模式來(lái)驅(qū)動(dòng)了,答案就在這里,數(shù)據(jù)在SCL時(shí)鐘的上升沿被采樣,數(shù)據(jù)在SCL時(shí)鐘的下降沿切換(空閑的時(shí)候?qū)CL的電平不作要求),對(duì)應(yīng)的模式為0和3。
2. 初始化
摸清楚SPI的模式之后,就可以開(kāi)始初始化屏幕了,最簡(jiǎn)單高效的方法當(dāng)然是參考C語(yǔ)言的現(xiàn)實(shí)。
可以看出,初始化的過(guò)程就是依次發(fā)送命令和數(shù)據(jù)即可。那么如何辨別命令和數(shù)據(jù)呢?
通過(guò)下圖可以清楚的知道,是通過(guò)DC信號(hào)線的電平來(lái)區(qū)別的(低電平表示當(dāng)前發(fā)送的數(shù)據(jù)為命令)。
弄懂了上述問(wèn)題之后,就可以按照C語(yǔ)言實(shí)現(xiàn)依葫蘆畫瓢,依次將命令和數(shù)據(jù)發(fā)送出去即可。另外有兩點(diǎn)需要注意的是:
兩條命令不能連續(xù)發(fā)送,中間需要停頓數(shù)個(gè)時(shí)鐘周期;而數(shù)據(jù)則不需要。
命令到數(shù)據(jù),或者數(shù)據(jù)到命令,是不能連續(xù),中間需要停頓數(shù)個(gè)時(shí)鐘周期。
另外這三個(gè)命令需要注意一下0x36,0x2A,0x2B,它們分別是設(shè)置顯示的方向(還有就是數(shù)據(jù)是RGB還是BGR)、列地址和行地址。0x36涉及到的東西比較多,需要詳細(xì)了解的可以自行去翻閱數(shù)據(jù)手冊(cè)。
經(jīng)過(guò)上面的初始化,如果成功了,屏幕上顯示出雜亂無(wú)章的圖案。
3. 顯示數(shù)據(jù)
C語(yǔ)言的實(shí)現(xiàn)如下,設(shè)置要顯示X,Y的范圍,也就是矩形的左上角和右下角的值,然后發(fā)送要顯示的數(shù)據(jù)即可。非常簡(jiǎn)單。
三. FPGA實(shí)現(xiàn)
有了C語(yǔ)言作為參考,F(xiàn)PGA端的實(shí)現(xiàn)那還不是小菜一碟,總共只需要分為如下的三個(gè)模塊:
SPI主機(jī)模塊: 用來(lái)和屏幕進(jìn)行數(shù)據(jù)交互
屏幕初始化模塊: 將初始化數(shù)據(jù)依次通過(guò)SPI主機(jī)模塊發(fā)送給模塊
屏幕刷新模塊: 將顯示數(shù)據(jù)依次通過(guò)SPI主機(jī)模塊發(fā)送給模塊
模塊框圖如下,有點(diǎn)小哈()
SPI主機(jī)模塊和初始化模塊非常簡(jiǎn)單,就不作說(shuō)明啦!重點(diǎn)來(lái)說(shuō)說(shuō)刷新模塊。
刷新模塊不會(huì)像單片機(jī)中那樣,調(diào)用的時(shí)候才會(huì)進(jìn)行刷新,而且在初始化完成之后,就一直在對(duì)整個(gè)屏幕進(jìn)行刷新了,
1. 模塊狀態(tài)跳轉(zhuǎn)
模塊由如下四個(gè)在狀態(tài)組成,在發(fā)送前11個(gè)數(shù)據(jù)的時(shí)候,需要進(jìn)入打啊奧延時(shí)狀態(tài),原因是這11個(gè)數(shù)據(jù)中既有命令也有數(shù)據(jù)(此數(shù)據(jù),懂?), 后面則一直在DATA態(tài),它只包括顯示數(shù)據(jù),所以不需要延時(shí)。最后一個(gè)顯示數(shù)據(jù)發(fā)送完成后,就進(jìn)入幀同步狀態(tài),表示一幀數(shù)據(jù)發(fā)送完成。
2. 圖像顯示數(shù)據(jù)
很easy!發(fā)送完前面的命令和數(shù)據(jù)后,剩下的全部都是顯示數(shù)據(jù)了,都丟在default里面就可以了。這里暫時(shí)寫死了(后面會(huì)將顯示的數(shù)據(jù)修改為模塊輸入的數(shù)據(jù))。
3. 模塊端口
端口信號(hào)如下,著重關(guān)注用戶接口的三個(gè)信號(hào)即可,非常easy!
四. 模塊封裝
spi模塊top模塊的接口如下,很明顯不夠完美,無(wú)法知道當(dāng)前顯示的像素坐標(biāo),而且圖像數(shù)據(jù)一般為16bit的,而這個(gè)模塊的輸入為8bit的數(shù)據(jù),另外在替換VGA接口的屏幕時(shí)候,也不能簡(jiǎn)單高效的替換下來(lái),所以需要經(jīng)過(guò)一次封裝,將其與外部進(jìn)行交互的端口信號(hào)封裝為VGA接口的信號(hào)(近似)。
封裝后的模塊端口信號(hào)如下,其內(nèi)部實(shí)現(xiàn)類似于VGA驅(qū)動(dòng)。
五. 上板測(cè)試
測(cè)試代碼如下,顯示四個(gè)方塊,是不是感覺(jué)so easy!。
測(cè)試圖片如下,顯示效果完美?。。?!
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1624文章
21538瀏覽量
600458 -
顯示器
+關(guān)注
關(guān)注
21文章
4890瀏覽量
139641 -
SPI
+關(guān)注
關(guān)注
17文章
1681瀏覽量
91050 -
驅(qū)動(dòng)芯片
+關(guān)注
關(guān)注
13文章
1235瀏覽量
54302
原文標(biāo)題:FPGA驅(qū)動(dòng)SPI屏幕
文章出處:【微信號(hào):FPGA研究院,微信公眾號(hào):FPGA研究院】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論