《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于ARM與FPGA的LCD控制器系統(tǒng)設(shè)計
基于ARM與FPGA的LCD控制器系統(tǒng)設(shè)計
電子發(fā)燒友
摘要: 隨著顯示屏技術(shù)的不斷發(fā)展,真彩液晶顯示屏以其高分辨率,、高對比度及高清晰度等優(yōu)勢逐漸在嵌入式顯示系統(tǒng)中占據(jù)重要地位,。目前,基于嵌入式平臺的LCD顯控技術(shù)的實現(xiàn)主要有兩種方式:ARM內(nèi)嵌LCD控制器和獨立的控制器件,。但是這兩種實現(xiàn)方式都存在著不足之處,,內(nèi)嵌控制器的使用可能增大處理器的負擔(dān)和限制顯示幀率,而外部控制器件不僅成本高,,而且專用性比較強,,很難適應(yīng)不同類型的液晶屏。據(jù)此存在的問題,,這里提出一種基于ARM與FPGA的LCD控制器設(shè)計方案,,該設(shè)計方案一方面能夠通過操作LinuxOS下的Framebuffer設(shè)備提高顯存的寫入速率及減輕處理器的負擔(dān),另一方面用FPGA來實現(xiàn)LCD控制器的設(shè)計,,開發(fā)周期短,、功耗低,同時具有靈活的移植性,,可應(yīng)用于不同中小尺寸的液晶顯示屏,。1系統(tǒng)組成及工作原理系統(tǒng)主要有微控制器、FPGA(LCD控制器),、存儲單元以及外設(shè)接口組成,,系統(tǒng)組成框圖如圖1所示。系統(tǒng)的工作流程:在FPGA內(nèi)部的時序發(fā)生電路所產(chǎn)生的時序控制信號作用下,,LCD控制器通過Framebuffer接口從微控制器讀出顯示所需的數(shù)據(jù)存入顯示緩存SRAM中,。同時LCD顯示屏從顯存SRAM中讀取顯示數(shù)據(jù),并通過數(shù)據(jù)格式轉(zhuǎn)換電路直
關(guān)鍵詞: ARM LCD控制器 Cvclone
Abstract:
Key words :

     隨著顯示屏技術(shù)的不斷發(fā)展,,真彩液晶顯示屏以其高分辨率,、高對比度及高清晰度等優(yōu)勢逐漸在嵌入式顯示系統(tǒng)中占據(jù)重要地位。目前,,基于嵌入式平臺的LCD顯控技術(shù)的實現(xiàn)主要有兩種方式:ARM內(nèi)嵌LCD控制器和獨立的控制器件,。但是這兩種實現(xiàn)方式都存在著不足之處,內(nèi)嵌控制器的使用可能增大處理器的負擔(dān)和限制顯示幀率,,而外部控制器件不僅成本高,,而且專用性比較強,很難適應(yīng)不同類型的液晶屏,。

  據(jù)此存在的問題,,這里提出一種基于ARM與FPGA的LCD控制器設(shè)計方案,該設(shè)計方案一方面能夠通過操作Linux OS下的Framebuffer設(shè)備提高顯存的寫入速率及減輕處理器的負擔(dān),,另一方面用FPGA來實現(xiàn)LCD控制器的設(shè)計,,開發(fā)周期短、功耗低,,同時具有靈活的移植性,,可應(yīng)用于不同中小尺寸的液晶顯示屏。

  1 系統(tǒng)組成及工作原理

  系統(tǒng)主要有微控制器,、FPGA(LCD控制器),、存儲單元以及外設(shè)接口組成,系統(tǒng)組成框圖如圖1所示,。

基于ARM與FPGA的LCD控制器系統(tǒng)組成框圖  www.elecfans.com

  系統(tǒng)的工作流程:在FPGA內(nèi)部的時序發(fā)生電路所產(chǎn)生的時序控制信號作用下,,LCD控制器通過Framebuffer接口從微控制器讀出顯示所需的數(shù)據(jù)存入顯示緩存SRAM中。同時LCD顯示屏從顯存SRAM中讀取顯示數(shù)據(jù),,并通過數(shù)據(jù)格式轉(zhuǎn)換電路直接將數(shù)據(jù)信息實時顯示,。

  2 系統(tǒng)硬件設(shè)計

  2.1 LCD控制器

  LCD控制器是基于FPGA實現(xiàn)的。本方案采用Altera公司的Cvclone(颶風(fēng))系列EPlC6Q240,。FPGA具有高速的數(shù)據(jù)傳輸I/O接口,,可實現(xiàn)高速的顯存讀取速率,大大提高LCD顯示的幀率,。而同時FPGA是可編程邏輯器件,,可實現(xiàn)復(fù)雜的邏輯運算及提供復(fù)雜的控制時序。LCD顯示屏采用LQ035Q3DG01型的TFT-LCD液晶顯示屏,,分辨率為320×240,,圖像信號為RGB格式。

  由于SRAM有較高的讀寫速度,,該設(shè)計方案的顯示緩存采用1片IS61LV51216AL型SRAM,,其容量為512 KB,讀寫速度為10ns左右,。而顯示一幀圖像的大小為125 KB(320x240x2/l024),,F(xiàn)PGA對顯存的讀寫速度約為200 ns,因此滿足系統(tǒng)要求,。圖2為LCD控制器電路連接圖,。

LCD控制器電路連接圖

  2.2 ARM9微控制器

  該系統(tǒng)設(shè)計的主控單元采用ATMEL公司的AT9lRM9200(簡稱9200)作為MCU,該處理器是基于ARM920T內(nèi)核,,工作主頻為180 MHz,。性能可達到200 MI/s,系統(tǒng)采用開源的LINUX OS,。但是ARM9作為系統(tǒng)的控制終端,,需要完成信息采集、處理以及與外部通信等多項工作,而LCD控制器如果也要從內(nèi)存中讀出數(shù)據(jù)顯示,,這就會造成處理器負擔(dān),,從而降低顯示緩存讀入數(shù)據(jù)的速率,影響LCD的實時顯示,。因此這里提出一種基于LINUX 0S下的Framebuffer接口的應(yīng)用方法,,大大提升顯存讀入數(shù)據(jù)的速率,從而提升整個顯示系統(tǒng)的實時性,。圖3為AT91RM9200接口電路連接,。

AT91RM9200接口電路連接

  3 系統(tǒng)軟件設(shè)計

  系統(tǒng)的軟件設(shè)計主要分為基于FPGA的LCD控制器設(shè)計與LINUX OS下Framebuffer驅(qū)動程序設(shè)計2部分。

  3.1 LCD控制器設(shè)計

  3.1.1 LCD控制器組成

  該設(shè)計方案的LCD控制器主要由緩存讀寫,、MCU接口及LCD時序控制等模塊組成,,具體組成如圖4所示。

LCD控制器組成

  3.1.2 LCD控制器設(shè)計原理

  由TFT-LCD液晶屏顯示原理可知,,顯示所需的主要控制信號有像素時鐘信號,、行/場同步信號以及使能信號。該方案的顯示屏分辨率為320x240,,要求設(shè)計液晶顯示屏的刷新頻率為60 Hz,,即場同步信號(VSYNC)為60Hz,刷新一屏所需時間為1/60 s,,而一場則由240個行同步信號組成,,那么一個行同步信號的周期為1/(60x240)s,即可得行同步信號(HSYNC)為15 kHz,。同理可得像素時鐘信號(CK)為5MHz,。

  采用FPGA內(nèi)置的鎖相環(huán)IP模塊(PLL)將FPGA 50 MHz時鐘信號F_CLK 10分頻為5 MHz的像素時鐘信號。應(yīng)用狀態(tài)機方法,,用Verilog硬件描述語言設(shè)計時序控制模塊,,它為LCD提供滿足時序要求的控制信號VSYNC、HSYNC以及ENAB,。設(shè)計完成后在QuatuslI環(huán)境下完成時序仿真,,得到的仿真結(jié)果滿足時序要求,仿真圖如圖5所示,。

仿真圖

點擊看原圖

 

 

  SRAM為顯存模塊,,由圖2可知LCD控制器與微控制器之間的數(shù)據(jù)傳輸是在ARM的時鐘控制下讀入,而同時LCD屏顯則是在像素時鐘信號CK的控制下從SRAM中讀取數(shù)據(jù),。針對該異時鐘域之間數(shù)據(jù)的傳輸問題本方案采用FPGA設(shè)計實現(xiàn)異步FIFO來完成,。

3.2 Framebuffer驅(qū)動設(shè)計

  Framebuffer是Linux內(nèi)核中的一種驅(qū)動程序接

口,該接口將顯示設(shè)備映射為幀緩沖區(qū),。平臺使用Linux2.6.25內(nèi)核,。在Linux2.6內(nèi)核當中,,通常采用分層的驅(qū)動設(shè)計框架。對設(shè)備進行分層和分類管理,,驅(qū)動底層為總線驅(qū)動,,上層為具體設(shè)備驅(qū)動。在Framebuffer驅(qū)動程序中,,其軟件設(shè)計流程為:首先需要針對該具體的設(shè)備和硬件連接注冊總線類型及申請系統(tǒng)總線資源,;其次,,將具體設(shè)備驅(qū)動程序注冊進入總線鏈表,,Linux內(nèi)核根據(jù)設(shè)備驅(qū)動程序中提供的探測函數(shù)檢測總線設(shè)備類型;最后在驅(qū)動探測函數(shù)中實現(xiàn)具體設(shè)備類型的注冊,。以下為其具體的實現(xiàn)過程,。

 

  1)資源申請 系統(tǒng)中,9200通過外部總線接口的BANK7與FPGA FIFO接口連接,,采用16位靜態(tài)總線方式對FIFO數(shù)據(jù)進行寫入操作,。根據(jù)驅(qū)動設(shè)計框架,驅(qū)動程序設(shè)計的第一步需要通過系統(tǒng)調(diào)用platform_device_register函數(shù)申請總線資源,,示意代碼如下:

程序

  2)驅(qū)動注冊 在具體設(shè)備驅(qū)動中,,通過使用module_init宏與module_exit定義驅(qū)動模塊的加載與卸載方法,在模塊注冊函數(shù)中使用plat-form_driver_register函數(shù)將具體設(shè)備的platform_driver結(jié)構(gòu)體注冊進入系統(tǒng)總線鏈表,,platform_driver中為總線提供具體設(shè)備的probe與remove等操作方法,,其示意代碼如下:

程序

  3)Framebuffer設(shè)備注冊 在Linux中,通過fb_info結(jié)構(gòu)體對幀緩沖設(shè)備信息進行描述,。在fb_info中,,較為重要的結(jié)構(gòu)有fb_var_scree-ninfo、fb_var_screeninfo,、fb_ops,。其中,fb_var_screeninfo記錄用戶可修改的顯示控制器參數(shù),,包括屏幕分辨率,;fb_fix_screeninfo記錄用戶不能修改的顯示控制器的參數(shù),如屏幕緩沖區(qū)的物理地址等,;fb_ops記錄了具體顯示設(shè)備IO操作的實現(xiàn)方法,。驅(qū)動通過register_-framebuffer函數(shù)將fb_info記錄的顯示設(shè)備信息注冊進Framebuffer設(shè)備鏈表。

  在Linux文件系統(tǒng)中,,F(xiàn)ramebuffer設(shè)備的主設(shè)備號為29,,次設(shè)備號為幀緩沖序號。Framebuffer設(shè)備注冊后通過mknod指令在系統(tǒng)dev目錄下創(chuàng)建Framebuffer設(shè)備文件節(jié)點,,應(yīng)用層程序可通過Framebuffer設(shè)備文件實現(xiàn)Framebuffer設(shè)備的訪問和操作,。

  4 結(jié)束語

  該設(shè)計方案的LCD控制器達到實時性及顯示幀率的要求,,每秒顯示至少25幀?;贔PGA設(shè)計的LCD控制器技術(shù)具有應(yīng)用廣泛,、移植性強、開發(fā)周期短以及成本低等優(yōu)點,,可以適用于眾多的需要LCD液晶顯示的系統(tǒng)或場合,。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。