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

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