基于ARM9的液晶驅動終端設計
1 引言
本文引用地址:http://www.ex-cimer.com/article/247437.htm液晶驅動終端是將液晶控制器、微控制器等集成在一起.并將液晶控制與圖形界面顯示等功能通過軟件封裝在一起.為用戶開放操作接口、屏蔽液晶顯示器的控制細節(jié),使用戶通過熟悉的接口(如RS232接口)發(fā)送預定義命令即可控制液晶顯示,進行圖形界面開發(fā)工作。
目前.已有的液晶驅動終端主要采用微控制器與前、后臺軟件結合的方法進行設計,該類終端只能夠顯示字模方式的圖片.該種類型的終端顯示數(shù)據(jù)存放在自帶的NANDFlash中,在人機界面設計過程中對NAND Flash中的數(shù)據(jù)管理是以扇區(qū)為基本操作單元,圖片下載需要專用的軟件工具完成,增加了界面設計的邏輯復雜性與操作性。這里采用ARM9微控制器與 Linux操作系統(tǒng)結合的方法,設計出一種新型的液晶驅動終端。該終端通過FAT文件系統(tǒng)管理CF卡中數(shù)據(jù)資源,利用多線程技術實現(xiàn)串口命令解析與圖型界面的顯示,不僅能夠顯示字模與圖片等數(shù)據(jù)資源,而且利用該設計方法可以實現(xiàn)調用MiniGUI圖型庫等資源,適用于工業(yè)測控、智能儀表等領域的人機界面設計。
2 系統(tǒng)組成及工作原理
系統(tǒng)主要有ARM9微控制器、存儲單元、LCD控制器、CF卡接口與RS422通信接口組成,系統(tǒng)組成框圖如圖l所示。工作流程:系統(tǒng)上電后,ARM9微控制器從NOR Flash中讀取、解壓Linux內(nèi)核與Ramdisk根文件系統(tǒng)到SDRAM中,律壓完成后,啟動Linux內(nèi)核并掛載根文件系統(tǒng);當軟件環(huán)境初始化完成后啟動應用程序,開始接收串口命令,應用程序接收到有效的串口命令后,圖形界面數(shù)據(jù)通過Fmmebuffer接口傳送給LCD控制器。
3 系統(tǒng)主要硬件模塊設計
3.1 ARM9微控制器
系統(tǒng)采用ATMEL公司的AT91RM9200作為MCU,該處理器基于ARM920T內(nèi)核,工作主頻為180MHz,性能高達 200MVVs。AT91RM9200包括一個高速片上SRAM工作區(qū)及一個低等待時間的外部總線接口(EBI),完成片外存儲器和內(nèi)部存儲器映射外設配置的無縫連接。EBI中設計專用電路以便SmartMedia、ComDACt Flash及NAND F1ash連接。系統(tǒng)使用一片MT公司的28F128J3型16 MB NOR Flash,用于存儲Linux內(nèi)核與根文件系統(tǒng),使用2片HY57V281620來組成32位SDRAM接口。
3.2 液晶驅動接口
系統(tǒng)選用EPSON公司的顯示控制器件S1D13506用于控制LCD的圖像數(shù)據(jù)顯示。S1D13506可與多種CPU總線兼容,支持最高為 16位數(shù)據(jù)寬度的LCD接口.可以在TFTLCD、CRT最高顯示64 K顏色。它配置一個16位內(nèi)存接口,支持最高2 MB的EDO-DRAM。系統(tǒng)中將S1D13506連接在AT91RM9200的BANK 3,數(shù)據(jù)總線寬度為16位.地址線A21與S1D13506M/R引腳相連,用于選擇訪問寄存器與顯存。AT91RM9200訪問S1D13506顯存起始地址為0x30200000.寄存器起始地址為0x30000000。使用了GM71V18163型2MBDRAM作為顯示存儲,AT91RM9200 通過訪問S1D13506數(shù)據(jù)地址空間,實現(xiàn)對DRAM的數(shù)據(jù)存儲操作,使用50 MHz的有源晶振作為DRAM的總線時鐘,25 MHz有源晶振作為LCD的像素時鐘信號,支持640x480 60 HzTFT LCD顯示,LCD行、場同步信號由S1D13506內(nèi)部通過對25 MHz像素時鐘分頻得出。LCD顯示控制硬件接口電路如圖2所示。
3.3 CF卡存儲接口
在圖形界面的設計中需要運用到位圖、字庫等數(shù)據(jù)資源,系統(tǒng)通過FAT文件系統(tǒng)管理CF中數(shù)據(jù),并且通過PC機將數(shù)據(jù)直接拷貝至CF卡。AT91RM9200與CF卡硬件接口連接如圖3所示。
4 軟件設計
4.1 整體軟件架構
系統(tǒng)軟件可以使用Linux、VxWorks等操作系統(tǒng),也可使用從直接操作低層硬件的前、后臺軟件。使用前、后臺方式的軟件雖然能夠實現(xiàn)對硬件的充分利用,但使用操作系統(tǒng)增強了系統(tǒng)的可維護性與擴展性。系統(tǒng)在運行和使用過程中需要管理CF卡中的數(shù)據(jù)以及應用程序需要多線程支持,眾多操作系統(tǒng)中,開源的Linux操作系統(tǒng)具有較為完善的文件系統(tǒng)與網(wǎng)絡協(xié)議族,并且能較好的支持多線程程序,可滿足設計需求。該系統(tǒng)使用的Linux內(nèi)核版本為 2.4.2l,交叉編譯工具鏈為ARM-Linux-cross-2.95.3。系統(tǒng)軟件架構如圖4所示。系統(tǒng)中,無論應用程序調用POSIX接口直接控制LCD顯示還是通過MiniGUI間接控制LCD,最終都要調用相應的液晶控制器驅動接口函數(shù),因此如何設計出一個S1D13506特殊硬件的驅動程序是整個軟件設計的重點。
4.2 Framebuffer驅動的實現(xiàn)
Framebuffer是Linux內(nèi)核中的一種驅動程序接口.這種接El將顯示設備抽象為幀緩沖區(qū)。在應用程序中.將其映射到進程地址空間開辟的存儲區(qū)域中,通過對存儲區(qū)域進行的數(shù)據(jù)讀寫操作可以直接的反映在LCD上。在Linux2.4版本的內(nèi)核中,F(xiàn)ramebuffer被抽象為 linuxdriversvide0下的fbcon.c文件,其主要依靠fb_info、fb_var_screeninfo、 fb_fix_screeninfo3個數(shù)據(jù)結構,這些結構定義在include/Linux/fb.h程序內(nèi)。S1D13506基于 Framebuffer的設備驅動程序主要完成AT91RM9200 EBI總線的配置工作、S1D13506內(nèi)部寄存器的初始化及Frambuffer中預定義的數(shù)據(jù)結構的填充。系統(tǒng)中使用的驅動程序是對EPSON公司 S1D13xxx系列顯示控制器件Linux驅動程序修改完成。其初始化函數(shù)示意性代碼如下:
int sldl3506fb_init()
{
init_9200_bank(); //初使化AT9lRM9200EBI總線
fb_info.RegAddr=(unsigned char*)ioremap_nocache(Ox300000000,0x200000);
fb_jnfo.VmemAddr=(unsigned char*)ioremap_nocache(0x30200000,Ox200000);
//將S1D13506的寄存器與顯示存儲的線性地址空間保存到顯卡狀態(tài)結構體
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
linux相關文章:linux教程
led顯示器相關文章:led顯示器原理
晶振相關文章:晶振原理 調光開關相關文章:調光開關原理
評論