基于A(yíng)RM與FPGA的LCD控制器設計
隨著(zhù)顯示屏技術(shù)的不斷發(fā)展,真彩液晶顯示屏以其高分辨率、高對比度及高清晰度等優(yōu)勢逐漸在嵌入式顯示系統中占據重要地位。目前,基于嵌入式平臺的LCD顯控技術(shù)的實(shí)現主要有兩種方式:ARM內嵌LCD控制器和獨立的控制器件。但是這兩種實(shí)現方式都存在著(zhù)不足之處,內嵌控制器的使用可能增大處理器的負擔和限制顯示幀率,而外部控制器件不僅成本高,而且專(zhuān)用性比較強,很難適應不同類(lèi)型的液晶屏。
本文引用地址:http://dyxdggzs.com/article/149691.htm據此存在的問(wèn)題,這里提出一種基于ARM與FPGA的LCD控制器設計方案,該設計方案一方面能夠通過(guò)操作LINUX OS下的Framebuffer設備提高顯存的寫(xiě)入速率及減輕處理器的負擔,另一方面用FPGA來(lái)實(shí)現LCD控制器的設計,開(kāi)發(fā)周期短、功耗低,同時(shí)具有靈活的移植性,可應用于不同中小尺寸的液晶顯示屏。
1 系統組成及工作原理
系統主要有微控制器、FPGA(LCD控制器)、存儲單元以及外設接口組成,系統組成框圖如圖1所示。
系統的工作流程:在FPGA內部的時(shí)序發(fā)生電路所產(chǎn)生的時(shí)序控制信號作用下,LCD控制器通過(guò)Framebuffer接口從微控制器讀出顯示所需的數據存入顯示緩存SRAM中。同時(shí)LCD顯示屏從顯存SRAM中讀取顯示數據,并通過(guò)數據格式轉換電路直接將數據信息實(shí)時(shí)顯示。
2 系統硬件設計
2.1 LCD控制器
LCD控制器是基于FPGA實(shí)現的。本方案采用Altera公司的CvclONe(颶風(fēng))系列EPlC6Q240。FPGA具有高速的數據傳輸I/O接口,可實(shí)現高速的顯存讀取速率,大大提高LCD顯示的幀率。而同時(shí)FPGA是可編程邏輯器件,可實(shí)現復雜的邏輯運算及提供復雜的控制時(shí)序。LCD顯示屏采用LQ035Q3DG01型的TFT-LCD液晶顯示屏,分辨率為320×240,圖像信號為RGB格式。
由于SRAM有較高的讀寫(xiě)速度,該設計方案的顯示緩存采用1片IS61LV51216AL型SRAM,其容量為512 KB,讀寫(xiě)速度為10ns左右。而顯示一幀圖像的大小為125 KB(320x240x2/l024),FPGA對顯存的讀寫(xiě)速度約為200 ns,因此滿(mǎn)足系統要求。圖2為L(cháng)CD控制器電路連接圖。
2.2 ARM9微控制器
該系統設計的主控單元采用ATMEL公司的AT9lRM9200(簡(jiǎn)稱(chēng)9200)作為MCU,該處理器是基于A(yíng)RM920T內核,工作主頻為180 MHz。性能可達到200 MI/s,系統采用開(kāi)源的LINUX OS。但是ARM9作為系統的控制終端,需要完成信息采集、處理以及與外部通信等多項工作,而LCD控制器如果也要從內存中讀出數據顯示,這就會(huì )造成處理器負擔,從而降低顯示緩存讀入數據的速率,影響LCD的實(shí)時(shí)顯示。因此這里提出一種基于LINUX 0S下的Framebuffer接口的應用方法,大大提升顯存讀入數據的速率,從而提升整個(gè)顯示系統的實(shí)時(shí)性。圖3為AT91RM9200接口電路連接。
3 系統軟件設計
系統的軟件設計主要分為基于FPGA的LCD控制器設計與LINUX OS下Framebuffer驅動(dòng)程序設計2部分。
3.1 LCD控制器設計
3.1.1 LCD控制器組成
該設計方案的LCD控制器主要由緩存讀寫(xiě)、MCU接口及LCD時(shí)序控制等模塊組成,具體組成如圖4所示。
3.1.2 LCD控制器設計原理
由TFT-LCD液晶屏顯示原理可知,顯示所需的主要控制信號有像素時(shí)鐘信號、行/場(chǎng)同步信號以及使能信號。該方案的顯示屏分辨率為320x240,要求設計液晶顯示屏的刷新頻率為60 Hz,即場(chǎng)同步信號(VSYNC)為60Hz,刷新一屏所需時(shí)間為1/60 s,而一場(chǎng)則由240個(gè)行同步信號組成,那么一個(gè)行同步信號的周期為1/(60x240)s,即可得行同步信號(HSYNC)為15 kHz。同理可得像素時(shí)鐘信號(CK)為5MHz。
采用FPGA內置的鎖相環(huán)IP模塊(PLL)將FPGA 50 MHz時(shí)鐘信號F_CLK 10分頻為5 MHz的像素時(shí)鐘信號。應用狀態(tài)機方法,用Verilog硬件描述語(yǔ)言設計時(shí)序控制模塊,它為L(cháng)CD提供滿(mǎn)足時(shí)序要求的控制信號VSYNC、HSYNC以及ENAB。設計完成后在QuatuslI環(huán)境下完成時(shí)序仿真,得到的仿真結果滿(mǎn)足時(shí)序要求,仿真圖如圖5所示。
SRAM為顯存模塊,由圖2可知LCD控制器與微控制器之間的數據傳輸是在A(yíng)RM的時(shí)鐘控制下讀入,而同時(shí)LCD屏顯則是在像素時(shí)鐘信號CK的控制下從SRAM中讀取數據。針對該異時(shí)鐘域之間數據的傳輸問(wèn)題本方案采用FPGA設計實(shí)現異步FIFO來(lái)完成。
3.2 Framebuffer驅動(dòng)設計
Framebuffer是Linux內核中的一種驅動(dòng)程序接口,該接口將顯示設備映射為幀緩沖區。平臺使用Linux2.6.25內核。在Linux2.6內核當中,通常采用分層的驅動(dòng)設計框架。對設備進(jìn)行分層和分類(lèi)管理,驅動(dòng)底層為總線(xiàn)驅動(dòng),上層為具體設備驅動(dòng)。在Framebuffer驅動(dòng)程序中,其軟件設計流程為:首先需要針對該具體的設備和硬件連接注冊總線(xiàn)類(lèi)型及申請系統總線(xiàn)資源;其次,將具體設備驅動(dòng)程序注冊進(jìn)入總線(xiàn)鏈表,Linux內核根據設備驅動(dòng)程序中提供的探測函數檢測總線(xiàn)設備類(lèi)型;最后在驅動(dòng)探測函數中實(shí)現具體設備類(lèi)型的注冊。以下為其具體的實(shí)現過(guò)程。
1)資源申請 系統中,9200通過(guò)外部總線(xiàn)接口的BANK7與FPGA FIFO接口連接,采用16位靜態(tài)總線(xiàn)方式對FIFO數據進(jìn)行寫(xiě)入操作。根據驅動(dòng)設計框架,驅動(dòng)程序設計的第一步需要通過(guò)系統調用platform_device_regiSTer函數申請總線(xiàn)資源,示意代碼如下:
2)驅動(dòng)注冊 在具體設備驅動(dòng)中,通過(guò)使用module_init宏與module_exit定義驅動(dòng)模塊的加載與卸載方法,在模塊注冊函數中使用plat-form_driver_register函數將具體設備的platform_driver結構體注冊進(jìn)入系統總線(xiàn)鏈表,platform_driver中為總線(xiàn)提供具體設備的probe與remove等操作方法,其示意代碼如下:
3)Framebuffer設備注冊 在Linux中,通過(guò)fb_info結構體對幀緩沖設備信息進(jìn)行描述。在fb_info中,較為重要的結構有fb_var_scree-ninfo、fb_var_screeninfo、fb_ops。其中,fb_var_screeninfo記錄用戶(hù)可修改的顯示控制器參數,包括屏幕分辨率;fb_fix_screeninfo記錄用戶(hù)不能修改的顯示控制器的參數,如屏幕緩沖區的物理地址等;fb_ops記錄了具體顯示設備IO操作的實(shí)現方法。驅動(dòng)通過(guò)register_-framebuffer函數將fb_info記錄的顯示設備信息注冊進(jìn)Framebuffer設備鏈表。
在Linux文件系統中,Framebuffer設備的主設備號為29,次設備號為幀緩沖序號。Framebuffer設備注冊后通過(guò)mknod指令在系統dev目錄下創(chuàng )建Framebuffer設備文件節點(diǎn),應用層程序可通過(guò)Framebuffer設備文件實(shí)現Framebuffer設備的訪(fǎng)問(wèn)和操作。
4 結束語(yǔ)
該設計方案的LCD控制器達到實(shí)時(shí)性及顯示幀率的要求,每秒顯示至少25幀?;贔PGA設計的LCD控制器技術(shù)具有應用廣泛、移植性強、開(kāi)發(fā)周期短以及成本低等優(yōu)點(diǎn),可以適用于眾多的需要LCD液晶顯示的系統或場(chǎng)合。
LCD顯示屏相關(guān)文章:lcd顯示屏原理
lcd相關(guān)文章:lcd原理
評論