◆何成 焦杰
用于單片機(jī)系統(tǒng)的VGA顯示驅(qū)動(dòng)電路
◆何成1焦杰2通訊作者
(1.葫蘆島廣播電視監(jiān)測(cè)臺(tái) 遼寧 125000;2.吉林省廣播電視研究所 吉林 130041)
一種可以用單片機(jī)驅(qū)動(dòng)的VGA高性能顯示電路;采用CPLD設(shè)計(jì)邏輯電路,控制兩片作為顯存的SRAM;以16位并行總線(xiàn)高速寫(xiě)入像素?cái)?shù)據(jù),經(jīng)過(guò)緩存之后再保存到顯存;并行總線(xiàn)不但支持單片機(jī)無(wú)條件高速寫(xiě)入,而且可以用DMA快速更新任意矩形窗口;具有刷新速度快的特點(diǎn),并且用兩片SRAM分別作為前景頁(yè)和背景頁(yè),可以全屏快速切換刷新。
VGA;CPLD;單片機(jī);DMA;顯示頁(yè)
低成本的單片機(jī)系統(tǒng)通常用數(shù)碼管或小屏LCD輸出信息,顯示區(qū)較小。目前幾乎所有的電視機(jī)、投影儀、顯示器等大屏設(shè)備都有VGA輸入接口[1]。如果設(shè)計(jì)一種由單片機(jī)直接驅(qū)動(dòng)的VGA顯示電路,用動(dòng)態(tài)的文字、圖形或視頻展示信息,那就可以大幅提升人機(jī)界面交互水平。在640X480@60Hz條件下,VGA像素頻率為25MHz[2];在800X600@60Hz時(shí),像素頻率高達(dá)40MHz。因其頻率較高,用單片機(jī)難以直接處理顯示復(fù)雜彩色圖形、文字或視頻[3]。本文介紹一種適用于單片機(jī)擴(kuò)展VGA接口的驅(qū)動(dòng)電路,可以很方便地高速刷新顯示動(dòng)態(tài)圖像。運(yùn)用該電路制作的設(shè)備在多個(gè)廣播電視臺(tái)站應(yīng)用,效果良好。關(guān)于VGA的時(shí)序及部分接口電路設(shè)計(jì),在參考文獻(xiàn)[4]已有介紹,因此本文重點(diǎn)闡述提高系統(tǒng)動(dòng)態(tài)刷新性能的方法。
廣播電視監(jiān)測(cè)工作需要一種的VGA大屏幕信息發(fā)布系統(tǒng),用大號(hào)字符動(dòng)態(tài)顯示當(dāng)前時(shí)間和其他一些信息,具體要求:
(1)輸出640X480@60Hz或800X600@60Hz的64K真彩色,支持16位并行輸入接口;
(2)支持任意時(shí)刻總線(xiàn)無(wú)條件高速寫(xiě)入;
(3)可任意指定顯存的寫(xiě)入地址,隨機(jī)修改屏幕上任意像素;
(4)顯存的寫(xiě)地址自動(dòng)步進(jìn),支持快速DMA方式刷新;
(5)支持顯示分頁(yè),實(shí)現(xiàn)全屏圖像瞬間刷屏。
像素采用16位RGB565真彩色格式,全屏像素保存在SRAM顯存中,每個(gè)像素對(duì)應(yīng)一個(gè)地址,用兩片512KX16位的存儲(chǔ)器IS61LV51216,分別保存前景與背景兩屏圖像。用CPLD設(shè)計(jì)數(shù)字電路,按VGA像素頻率把顯存中的數(shù)據(jù)按地址順序讀出,經(jīng)過(guò)IO腳上由電阻網(wǎng)絡(luò)組成的簡(jiǎn)易DAC轉(zhuǎn)變成為模擬信號(hào),分別輸出到VGA的RGB三條顏色信號(hào)線(xiàn)上。
通常單片機(jī)輸出的信息總量不會(huì)太大,640X480已能滿(mǎn)足大多數(shù)的使用需要。如果像素頻率為25MHz,那么就設(shè)計(jì)用50MHz的系統(tǒng)時(shí)鐘,二分頻后得到25MHz像素時(shí)鐘,其低、高電平分別對(duì)應(yīng)顯存讀取和寫(xiě)入兩個(gè)時(shí)間窗口[5]。在讀窗口期間,顯存中數(shù)據(jù)送到DAC,并在讀窗口期結(jié)束時(shí)保持鎖存以維持DAC輸出。為了支持任意時(shí)刻的單片機(jī)總線(xiàn)寫(xiě)入,必須把像素?cái)?shù)據(jù)先緩存在一個(gè)16位的緩存中,等到下一次顯存的寫(xiě)窗口期才真正寫(xiě)入顯存。
若外部像素寫(xiě)入速度低,則顯示內(nèi)容刷新較慢,甚至能看到圖像文字在蠕動(dòng)。可采取顯示換頁(yè)的方法,在屏幕上顯示前景頁(yè),而把像素悄悄寫(xiě)入背景頁(yè),寫(xiě)完之后交換兩頁(yè)可瞬間全屏刷新。
向顯存寫(xiě)入像素之前,需要先寫(xiě)入像素的顯存地址。通常顯示輸出的圖形或字模都是一個(gè)矩形窗口,顯示數(shù)據(jù)都是從左到右成行排列,每行結(jié)束再向下排列出新一行像素。因此在絕大多數(shù)情況下,像素?cái)?shù)據(jù)都將順序?qū)懭搿H魧?xiě)入地址能夠自動(dòng)累加步進(jìn),則總線(xiàn)數(shù)據(jù)量可減少一半。
圖1是系統(tǒng)主要部分的電路原理圖。

圖1 主要電路圖
圖中,用兩片型SRAM作為顯存,共計(jì)1M地址空間,分成由U3低顯示頁(yè),以及由U2高顯示頁(yè),利用兩個(gè)顯存的片選CE19和CE19#,選擇其中一個(gè)顯存輸出到DAC,二者切換則可實(shí)現(xiàn)瞬間換頁(yè)刷新。用型號(hào)為EPM570的CPLD設(shè)計(jì)控制電路,生成行場(chǎng)同步信號(hào)。電阻網(wǎng)絡(luò)RN1-RN11組成簡(jiǎn)易DAC,用50MHz的晶振實(shí)現(xiàn)640X480分辨率,若要實(shí)現(xiàn)800X600分辨率,則需換用80M晶振。
設(shè)計(jì)16位數(shù)據(jù)總線(xiàn)FSMC_DA[15..0]并行接口,寫(xiě)信號(hào)線(xiàn)FSMC_NWE和控制線(xiàn)FSMC_A16,只支持顯存寫(xiě),不需支持讀。寫(xiě)入像素?cái)?shù)據(jù)之前可寫(xiě)入地址控制字來(lái)設(shè)置顯存的寫(xiě)入地址。控制字有1個(gè)位用于設(shè)置顯示前景頁(yè)。設(shè)計(jì)20位的顯存地址空間,當(dāng)FSMC_A16為1時(shí),表明寫(xiě)入16位地址控制字。地址控制字分兩次寫(xiě)入,第一次寫(xiě)入的是控制字和顯存地址高4位,第二次寫(xiě)入顯存低16位地址。當(dāng)FSMC_A16為0時(shí),寫(xiě)入的是像素?cái)?shù)據(jù),每寫(xiě)一次像素,顯存的寫(xiě)地址都會(huì)自動(dòng)累加步進(jìn)。
在VGA模塊中,有一個(gè)19位同步累加計(jì)數(shù)器作為顯存地址讀計(jì)數(shù)器,在讀窗口期向顯存輸出讀地址,在像素時(shí)鐘的上升沿累加計(jì)數(shù)值。
顯存地址讀計(jì)數(shù)器只輸出19位地址,第20位地址用于總線(xiàn)設(shè)置而不參與計(jì)數(shù),決定顯存讀地址處于512K以下還是在512K以上,實(shí)現(xiàn)分頁(yè)功能,可實(shí)現(xiàn)圖像高速刷新。
地址寫(xiě)模塊輸出20位輸出顯存寫(xiě)地址,由1位顯存寫(xiě)片選緩存和19位的可重裝載同步累加計(jì)數(shù)器拼接組成。在FSMC_A16高電平期間,20位數(shù)值分兩次寫(xiě)入,第一次寫(xiě)入高4位,第二次寫(xiě)入低16位。緩存第一次寫(xiě)入Bit15作為顯存讀片選位,確定哪片SRAM作為前景頁(yè);第一次寫(xiě)入Bit3也被緩存,確定像素寫(xiě)入哪片SRAM。在FSMC_A16低電平的像素寫(xiě)入期間,計(jì)數(shù)器在每個(gè)上升沿都累加一次,實(shí)現(xiàn)寫(xiě)地址自動(dòng)步進(jìn)。
地址步進(jìn)功能可以提高總線(xiàn)效率。作為追求低成本的單片機(jī)系統(tǒng),通常顯示輸出的信息量不會(huì)太大,需要更新的內(nèi)容通常只局限于幾個(gè)特定的矩形窗口區(qū)域。如果只想更新這部分內(nèi)容,可以先寫(xiě)入矩形左上角坐標(biāo)對(duì)應(yīng)的顯存地址,之后依次把這行數(shù)據(jù)連續(xù)寫(xiě)入即可完成第一行刷新。再寫(xiě)入矩形左上角第二行起點(diǎn)的坐標(biāo)對(duì)應(yīng)顯存地址,連續(xù)寫(xiě)第二行的數(shù)據(jù)刷第二行。不斷重復(fù)每行像素寫(xiě)入,直到最下邊一行即可完成整個(gè)矩形區(qū)刷新。
對(duì)于那些具有DMA功能的單片機(jī)來(lái)說(shuō),利用地址步進(jìn)功能可以實(shí)現(xiàn)高效快速的矩形窗口刷新。例如使用STM32F103單片機(jī),把這套電路當(dāng)作存儲(chǔ)器接在16位FSMC總線(xiàn)[6]上。設(shè)置DMA為存儲(chǔ)器到存儲(chǔ)器的轉(zhuǎn)輸方式,可以把存儲(chǔ)器中的圖形字模快速寫(xiě)入顯存而極少占用CPU時(shí)間片。
本文介紹的VGA驅(qū)動(dòng)顯示電路用型號(hào)為EPM570的CPLD設(shè)計(jì),資源消耗較少,實(shí)際僅占用182個(gè)邏輯宏元。運(yùn)用該電路設(shè)計(jì)的設(shè)備經(jīng)過(guò)實(shí)際使用,未出現(xiàn)圖像抖動(dòng)、扭曲、閃爍等差錯(cuò),效果良好。
[1]陳平平,楊雷,張志堅(jiān). 基于FPGA的VGA數(shù)據(jù)線(xiàn)測(cè)試儀的設(shè)計(jì)與實(shí)現(xiàn)[J]. 現(xiàn)代電子技術(shù),2016(14):127.
[2]廖延初.基于FPGA 的便攜式視頻顯示系統(tǒng)的設(shè)計(jì)[J].福建師大福清分校學(xué)報(bào),2018(2):29.
[3]喬威,崔旭晶,等. 基于FPGA 的門(mén)禁攝像采集與實(shí)時(shí)顯示系統(tǒng)[J]. 沈陽(yáng)理工大學(xué)學(xué)報(bào),2019(1):69.
[4]申中杰,王素珍,等. 基于FPGA的VGA多幅圖片動(dòng)態(tài)顯示系統(tǒng)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2018(1):52-56.
[5]焦杰. 利用USB接口的原始視頻實(shí)時(shí)采集系統(tǒng)[J]. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2016(7):79.
[6]李良.基于STM32單片機(jī)FSMC接口驅(qū)動(dòng)LCD的配置與分析[J]. 機(jī)電產(chǎn)品開(kāi)發(fā)與創(chuàng)新,2018(4):72.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2021年2期