尤衛(wèi)衛(wèi),冒建亮,葉 樺
(東南大學(xué) 自動(dòng)化學(xué)院,江蘇 南京 210096)
液晶顯示器由于其輕薄、便攜、高分辨率等優(yōu)點(diǎn)已被廣泛應(yīng)用到生活、工業(yè)、軍事等各種場(chǎng)合。TFT-LCD顯示器作為液晶顯示器中一類重要的代表,具有體積小,功耗低,顯示品質(zhì)優(yōu)良等諸多優(yōu)勢(shì),已經(jīng)成為當(dāng)前桌面顯示的主流。雖然TFT-LCD顯示效果極佳,但由于控制時(shí)序相對(duì)復(fù)雜,其控制一直是大家研究的重點(diǎn)[1-2]。目前對(duì)TFT-LCD的控制方式主要有3種:
(1)使用專用控制芯片,但此方式易受器件斷檔影響,并且不利用技術(shù)移植;
(2)使用內(nèi)置TFT-LCD控制器的STM32,如ARM9等,此方式適用于高端顯示領(lǐng)域,成本較高;
(3)使用FPGA或CPLD進(jìn)行 TFT-LCD的控制器設(shè)計(jì),利用此方式設(shè)計(jì)靈活性強(qiáng)、可移植性高,且器件性價(jià)比高。
比較3種方案,本文選擇靈活性強(qiáng)、可移植性高,且器件性價(jià)比高的第三種方案來(lái)設(shè)計(jì)控制器[3]。
圖1為液晶屏顯示系統(tǒng)的系統(tǒng)框圖。其中,主控芯片STM32[4]內(nèi)部制定了與CPLD間的通訊協(xié)議,主要用于實(shí)現(xiàn)在LCD上的各類寫(xiě)操作指令,通過(guò)Intel8080總線將待顯示信息傳送給CPLD。作為控制器的核心元件,CPLD主要實(shí)現(xiàn)三個(gè)模塊的功能[5]:
(1)協(xié)議解析模塊:CPLD接收控制器STM32發(fā)出的控制指令,實(shí)現(xiàn)對(duì)8080總線通訊協(xié)議的解析,主要包括待寫(xiě)數(shù)據(jù)模式,待寫(xiě)數(shù)據(jù)坐標(biāo)以及待寫(xiě)數(shù)據(jù)RGB顏色。
(2)SRAM 讀寫(xiě)控制模塊:CPLD 在 TFTLCD屏顯消隱區(qū)間,根據(jù)提出的數(shù)據(jù)坐標(biāo)及RGB顏色,將相應(yīng)值寫(xiě)入SRAM相應(yīng)地址。在TFTLCD屏顯有效區(qū)間時(shí),將上述數(shù)據(jù)按照時(shí)序依次讀出,完成TFT-LCD的顯示驅(qū)動(dòng)。
(3)LCD時(shí)序驅(qū)動(dòng)模塊:根據(jù)LCD顯示時(shí)序,實(shí)現(xiàn)液晶屏的顯示驅(qū)動(dòng)。
STM32內(nèi)部實(shí)現(xiàn)了底層接口函數(shù)及上層界面函數(shù),底層接口函數(shù)主要實(shí)現(xiàn)通訊協(xié)議的制定,包括用于界面顯示的各類函數(shù)的實(shí)現(xiàn)。主要包括:?jiǎn)吸c(diǎn)寫(xiě)、多點(diǎn)寫(xiě)、8點(diǎn)帶背景寫(xiě)與8點(diǎn)不帶背景寫(xiě)命令。各命令具體操作如下:
(1)單點(diǎn)寫(xiě)
單點(diǎn)寫(xiě)主要是為了實(shí)現(xiàn)一些不易繪制的圖形,如圓、三角形等,也可用于顯示完整的圖片。STM32內(nèi)部根據(jù)指定的時(shí)序規(guī)則,依次發(fā)送指令:選擇單點(diǎn)寫(xiě)模式→待顯示像素點(diǎn)行、列地址→待顯示像素點(diǎn)顏色。
(2)多點(diǎn)寫(xiě)
多點(diǎn)寫(xiě)主要用于繪制直線、矩形等,也可用于局部圖形的填充。STM32內(nèi)部根據(jù)指定的時(shí)序規(guī)則,依次發(fā)送指令:選擇多點(diǎn)寫(xiě)模式→待顯示圖形起始點(diǎn)行、列地址→待顯示圖形長(zhǎng)度→待顯示圖形顏色。
(3)8點(diǎn)帶背景寫(xiě)
主要用于字符的覆蓋顯示,可繪制任意像素為8N×8N的字符。STM32內(nèi)部根據(jù)指定的時(shí)序規(guī)則,依次發(fā)送指令:選擇8點(diǎn)帶背景寫(xiě)模式→待顯示字符起始行、列地址→待顯示字符前景色→待顯示字符背景色。
(4)8點(diǎn)不帶背景寫(xiě)
主要用于字符的層疊顯示,可繪制任意像素為8N×8N的字符。STM32內(nèi)部根據(jù)指定的時(shí)序規(guī)則,依次發(fā)送指令:選擇8點(diǎn)不帶背景寫(xiě)模式→待顯示字符起始行、列地址→待顯示字符前景色。
根據(jù)上述4種操作,STM32可以便捷地進(jìn)行各類圖文的繪制,并將相應(yīng)的指令傳送給CPLD對(duì)通訊數(shù)據(jù)進(jìn)行解析,實(shí)現(xiàn)TFT-LCD的顯示驅(qū)動(dòng)。
顯示器的驅(qū)動(dòng)主要由CPLD實(shí)現(xiàn),包括LCD時(shí)序驅(qū)動(dòng)、通訊協(xié)議解析和SRAM讀寫(xiě)控制,如圖2所示。CPLD接收控制器STM32發(fā)出的控制指令,提取待顯示點(diǎn)的坐標(biāo)與RGB數(shù)據(jù),并在TFT-LCD屏顯消隱區(qū)間,將相應(yīng)數(shù)據(jù)寫(xiě)入SRAM相應(yīng)地址。在TFT-LCD屏顯有效區(qū)間時(shí),將相應(yīng)數(shù)據(jù)按照時(shí)序依次讀出,完成TFTLCD的顯示驅(qū)動(dòng)。
圖2 TFT-LCD顯示驅(qū)動(dòng)框圖Fig.2 Driving chart of TFT-LCD display
3.2.1 通訊協(xié)議解析模塊
CPLD對(duì)STM32的通訊協(xié)議解析,按照先取指令后取數(shù)據(jù)的方式進(jìn)行。當(dāng)STM32發(fā)送控制指令時(shí),控制線RS為0,發(fā)送數(shù)據(jù)指令時(shí),控制線RS為1,每發(fā)送完對(duì)應(yīng)的指令,發(fā)送相應(yīng)的數(shù)據(jù)。因此,通過(guò)判斷RS由0到1的上升邊沿,此時(shí)總線上數(shù)據(jù)狀態(tài)穩(wěn)定,即可讀取指令至CPLD中的寄存器;同理,當(dāng)檢測(cè)到RS由1到0的下降邊沿時(shí),可以根據(jù)接收到的控制指令,將相應(yīng)的數(shù)據(jù)存放入對(duì)應(yīng)的寄存器中,進(jìn)而在TFT-LCD數(shù)據(jù)寫(xiě)有效時(shí),進(jìn)行相應(yīng)的寫(xiě)屏操作。
寫(xiě)屏操作具體指STM32用于圖文繪制的單點(diǎn)寫(xiě)、多點(diǎn)寫(xiě)、8點(diǎn)帶背景寫(xiě)與8點(diǎn)不帶背景寫(xiě)的驅(qū)動(dòng)程序,采用有限狀態(tài)機(jī)模式,主要分為兩大類:第一類是輸出只和狀態(tài)有關(guān),與輸入無(wú)關(guān),即Moore型狀態(tài)機(jī);第二類是輸出和輸入、狀態(tài)有關(guān),且次態(tài)也與輸入和當(dāng)前狀態(tài)有關(guān),即 Mealy型狀態(tài)機(jī)。本設(shè)計(jì)中采用的是Mealy型狀態(tài)機(jī),各部分對(duì)應(yīng)狀態(tài)操作如下:
(1)清屏操作
設(shè)定狀態(tài)S1:寄存器清零操作;S2:清屏操作。狀態(tài)圖如圖3所示。其中,WAddCnt為寫(xiě)屏操作完成標(biāo)志。
圖3 清屏操作狀態(tài)圖Fig.3 State chart of screen clearing operation
(2)單點(diǎn)寫(xiě)
設(shè)定狀態(tài)S1:等待數(shù)據(jù)穩(wěn)定;S2:寫(xiě)單點(diǎn)操作,S3:寄存器清零操作。狀態(tài)圖如圖4所示。
圖4 單點(diǎn)寫(xiě)操作狀態(tài)圖Fig.4 State chart of single point writing operation
(3)多點(diǎn)寫(xiě)
設(shè)定狀態(tài)S1:等待數(shù)據(jù)穩(wěn)定;S2:寫(xiě)起始點(diǎn)操作;S3:寫(xiě)剩余長(zhǎng)度點(diǎn)操作。狀態(tài)圖如圖5所示。其中,MulPotWrCnt為寫(xiě)計(jì)數(shù)器,MulPotLength為多點(diǎn)寫(xiě)長(zhǎng)度。
圖5 多點(diǎn)寫(xiě)操作狀態(tài)圖Fig.5 State chart of multipoint writing operation
(4)8點(diǎn)帶背景寫(xiě)
設(shè)定狀態(tài)S1:等待數(shù)據(jù)穩(wěn)定;S2:寫(xiě)起始點(diǎn)操作;S3:寫(xiě)其余7點(diǎn)操作。狀態(tài)圖如圖6所示。其中,MulPotWrCnt為寫(xiě)計(jì)數(shù)器;狀態(tài)S2和狀態(tài)S3中,對(duì)字模數(shù)據(jù)的操作為:0寫(xiě)背景色,1寫(xiě)前景色。
圖6 8點(diǎn)帶背景寫(xiě)狀態(tài)圖Fig.6 State chart of 8points with background writing operation
(5)8點(diǎn)不帶背景寫(xiě)
設(shè)定狀態(tài)S1:等待數(shù)據(jù)穩(wěn)定;S2:寫(xiě)起始有效點(diǎn)操作;S3:無(wú)效點(diǎn)計(jì)數(shù)清零操作;S4:寫(xiě)其余有效點(diǎn)操作。狀態(tài)圖如圖7所示。其中,8Addr[7]為字模最高位,每個(gè)時(shí)鐘周期左移1位;8AddrCnt為單字模中兩有效點(diǎn)間無(wú)效點(diǎn)計(jì)數(shù)器;MulPotWrCnt為寫(xiě)計(jì)數(shù)器,8AddrWrCnt為單字模中無(wú)效點(diǎn)總計(jì)數(shù)器。對(duì)字模數(shù)據(jù)的操作為:0為無(wú)效點(diǎn),1為有效點(diǎn),此時(shí)寫(xiě)背景色。
圖7 8點(diǎn)不帶背景寫(xiě)狀態(tài)圖Fig.7 State chart of 8points without background writing operation
3.2.2 SRAM 讀寫(xiě)控制模塊
外部緩存SRAM的主要作用是將STM32發(fā)送的圖文數(shù)據(jù)進(jìn)行緩存,以便在TFT-LCD顯示有效區(qū)間,CPLD可按照一定的時(shí)序從SRAM中依次讀出。對(duì)于SRAM,通過(guò)設(shè)定與的高低,將芯片的16位數(shù)據(jù)線分高8位和低8位存儲(chǔ)RGB顏色數(shù)據(jù),以滿足存儲(chǔ)像素點(diǎn)640×480的需求,即將整屏數(shù)據(jù)分為上半屏(0~239行)、下半屏(240~479行)存儲(chǔ),每半屏地址一樣,地址數(shù)為640×240。當(dāng)接收到顯示像素點(diǎn)為上半屏數(shù)據(jù)時(shí),設(shè)定=0=1,數(shù)據(jù)存儲(chǔ)于低8位,當(dāng)接收到顯示像素點(diǎn)為下半屏數(shù)據(jù)時(shí),設(shè)定=1=0,數(shù)據(jù)存儲(chǔ)于高8位。
3.2.3 LCD時(shí)序驅(qū)動(dòng)模塊
LCD驅(qū)動(dòng)程序流程圖如圖8所示。通過(guò)行、場(chǎng)計(jì)數(shù)器,產(chǎn)生TFT-LCD控制所需的行、場(chǎng)同步信號(hào)、像素時(shí)鐘,同時(shí)產(chǎn)生RGB數(shù)據(jù)讀寫(xiě)有效位,即在RGB數(shù)據(jù)讀有效時(shí),按照時(shí)序依次從SRAM中讀取存儲(chǔ)的數(shù)值,在RGB數(shù)據(jù)寫(xiě)有效時(shí),CPLD根據(jù)數(shù)據(jù)傳輸指令協(xié)議,接收并解析STM32給定的TFT-LCD上各坐標(biāo)點(diǎn)待顯示的圖像數(shù)據(jù)。
圖8 LCD驅(qū)動(dòng)模塊流程圖Fig.8 Flow chart of LCD driving module
本節(jié)利用 Quartus II[9]軟件仿真功能,對(duì)LCD時(shí)序和SRAM讀寫(xiě)功能進(jìn)行仿真。
如圖9為L(zhǎng)CD時(shí)序仿真圖,其中,LCD_HS是行同步信號(hào),LCD_VS是場(chǎng)同步信號(hào),可以看出,當(dāng)場(chǎng)計(jì)數(shù)器Vcnt達(dá)到524時(shí),意味著一場(chǎng)掃描完,LCD_VS發(fā)生反轉(zhuǎn),進(jìn)入場(chǎng)消隱,同時(shí)新的一場(chǎng)同步信號(hào)隨后到來(lái)。
圖9 LCD時(shí)序仿真圖Fig.9 Simulation chart of LCD timing
SRAM讀寫(xiě)控制信號(hào)由TFT-LCD顯示有效與消隱區(qū)間決定,設(shè)定RCnt和 WCnt分別為SRAM讀、寫(xiě)狀態(tài)的地址、數(shù)據(jù)判斷標(biāo)志位。
圖10 SRAM讀時(shí)序仿真圖Fig.10 Simulation chart of SRAM reading
如圖11,當(dāng)WE為低時(shí),SRAM進(jìn)行寫(xiě)操作。此時(shí),在WCnt為高電平時(shí),給定待寫(xiě)像素點(diǎn)地址,WCnt為低電平時(shí),同樣經(jīng)過(guò)20ns時(shí)延后寫(xiě)相應(yīng)地址數(shù)據(jù)。同時(shí),在SRAM在讀操作時(shí),行地址從0~639,當(dāng)讀操作結(jié)束并轉(zhuǎn)入寫(xiě)操作時(shí),行地址清0,場(chǎng)地址加1,可見(jiàn)仿真結(jié)果的正確性。
圖11 SRAM寫(xiě)時(shí)序仿真圖Fig.11 Simulation chart of SRAM writing
圖12是對(duì)TFT-LCD半場(chǎng)信號(hào)掃描仿真的結(jié)果。在TFT-LCD的行掃描中,有一段消隱區(qū)間與有效區(qū)間;在消隱區(qū)間,可以對(duì)SRAM進(jìn)行數(shù)據(jù)寫(xiě)操作,在有效區(qū)間,按照行地址計(jì)數(shù)0~639依次輸出信號(hào)。每行掃描結(jié)束后,場(chǎng)地址加1,當(dāng)場(chǎng)地址到達(dá)239時(shí),即TFT-LCD半場(chǎng)掃描結(jié)束,接下來(lái)以同樣的地址進(jìn)行下半場(chǎng)的掃描。
圖12 半場(chǎng)掃描完仿真圖Fig.12 Simulation chart of half-court scanning finished
通過(guò)采用本文設(shè)計(jì)方法,實(shí)現(xiàn)的設(shè)計(jì)實(shí)物效果如圖13所示。
圖13 設(shè)計(jì)實(shí)物圖Fig.13 Chart of design entity
本文介紹了基于STM32和CPLD的TFTLCD顯示控制器的設(shè)計(jì)方法。TFT-LCD模塊采用的是不帶LCD控制器的群創(chuàng)AT056TN52-5.6in(1in=2.54cm)TFTLCD。在設(shè)計(jì)控制器時(shí),采用的是Altera公司的 MAX II系列的 CPLD(EPM570)作為核心部件,以ISSI公司的IS61LV25616大容量SRAM作為顯示緩沖存儲(chǔ)器。測(cè)試結(jié)果表明,本文設(shè)計(jì)的控制器相對(duì)市場(chǎng)上TFT-LCD的專用控制芯片工作穩(wěn)定可靠,性價(jià)比高。在很多場(chǎng)合具有一定的實(shí)用價(jià)值。
[1] 徐婧婧.彩色有源LCD顯示屏外圍驅(qū)動(dòng)電路的研究與設(shè)計(jì)[D].長(zhǎng)春:吉林大學(xué),2007.Xu J J.The research and design on the peripheral driving circuit of color AM-LCD [D].Changchun:Jilin University,2007.(in Chinese)
[2] Lin J T,Wang F K,Lo S L,et al.Analysis of the supply and demand in the TFT-LCD market[J].Technological Forecasting and Social Change,2006,73(4):422-435.
[3] 李輝祥,黃光明.基于 CPLD 的 TFT-LCD控制器的設(shè)計(jì)[J].電子設(shè)計(jì)工程,2011,19(23):128-130.Li H X,Huang G M.Design of TFT-LCD controller based on CPLD [J].Electronic Design Engineering,2011,19(23):128-130.(in Chinese)
[4] 李寧.基于MDK的STM32處理器開(kāi)發(fā)應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2008.Li N.Application of STM32 Processor Development Based on MDK [M].Beijing:Beihang University Press,2008.(in Chinese)
[5] 胡健生,羅衛(wèi)兵,錢淵.嵌入式TFT-LCD控制器設(shè)計(jì)[J].計(jì)算機(jī)工程,2010,5:088.Hu J S,Luo W B,Qian Y.Design of embedded TFT-LCD controller[J].Computer Engineering,2010,5:088.(in Chinese)
[6] 蘇維嘉,張澎.基于FPGA的 TFT-LCD控制器的設(shè)計(jì)和實(shí)現(xiàn)[J].液晶與顯示,2010,25(1):75-78.Su W J,Zhang P.Design and implementation of TFT-LCD controller based on FPGA[J].Chinese Journal of Liquid Crystals and Displays,2010,(2511):75-78.(in Chinese)
[7] 唐徐立,黃君凱,劉明峰,等.基于FPGA的TFT-LCD控制器設(shè)計(jì)與實(shí)現(xiàn)[J].集成電路設(shè)計(jì)與開(kāi)發(fā),2010,35(11):1134-1137.Tang X L,Huang J K,Liu M F,et al.Design and realization of the TFT-LCD controller based on FPGA[J].Design and Development of IC,2010,35(11):1134-1137.(in Chinese)
[8] 黃杰勇.基于CPLD的 TFT-LCD控制器設(shè)計(jì)[J].現(xiàn)代計(jì)算機(jī):上半月版,2013(2):62-64.Huang J Y.Design of TFT-LCD controller based on CPLD[J].Modern Computer:First Half Edition,2013(2):62-64.(in Chinese)
[9] 王冠,俞一鳴.面向CPLD/FPGA的Verilog設(shè)計(jì) [M].北京:機(jī)械工業(yè)出版社,2007.Wang G,Yu Y M.Verilog Design for CPLD/FPGA [M].Beijing:Machinery Industry Press,2007.(in Chinese)
[10] 薛家祥,黃澤林,沈棟,等.TFT-LCD驅(qū)動(dòng)中SDRAM 控制器的仲裁器設(shè)計(jì)[J].液晶與顯示,2013,28(6):877-882.Xue J X,Huang Z L,Shen D,et al.Design of SDRAM controller with arbiter for TFT-LCD driver[J].Chinese Journal of Liquid Crystals and Displays,2013,28(6):877-882.(in Chinese)