基于Linux的液晶顯示屏驅動(dòng)設計
引 言
本文引用地址:http://dyxdggzs.com/article/149661.htmLinux設備驅動(dòng)程序屬于Linux內核的一部分,并在Linux內核中扮演著(zhù)十分重要的角色。它們像一個(gè)個(gè)“黑盒子”,使某個(gè)特定的硬件響應一個(gè)定義良好的內部編程接口,同時(shí)完全隱蔽了設備的工作細節。用戶(hù)通過(guò)一組和具體設備驅動(dòng)無(wú)關(guān)的標準化的調用來(lái)完成相關(guān)操作,驅動(dòng)程序的任務(wù)就是把這些調用映射到具體設備對于實(shí)際硬件的特定操作上。
硬件設備只是一個(gè)設備文件,應用程序可以像操作普通文件一樣對硬件設備進(jìn)行操作。設備驅動(dòng)程序是內核的一部分,它實(shí)現以下功能:
?、賹υO備初始化和釋放。
?、诎褦祿膬群藗魉偷接布蛷挠布x取數據。
?、圩x取應用程序傳送給設備文件的數據和回送應用程序請求的數據。
?、軝z測和處理設備出現的錯誤。
可以把設備驅動(dòng)作為內核的一部分直接編譯到內核中(即靜態(tài)編譯),也可以單獨作為一個(gè)模塊編譯,在需要的時(shí)候動(dòng)態(tài)地插入到內核中,在不需要的時(shí)候可把它從內核中刪除(即動(dòng)態(tài)鏈接)。
目前Linux支持的設備驅動(dòng)可以分為3種:字符設備(character device)、塊設備(block device)、網(wǎng)絡(luò )接口設備(network device)。當然它們之間也并不是嚴格地加以區分。字符設備是所有能夠像字節流一樣被訪(fǎng)問(wèn)的設備(如文件等),在Linux中通過(guò)字符設備驅動(dòng)程序來(lái)實(shí)現。在Linux中它們也被映射為文件系統的1個(gè)節點(diǎn),通常在/dev目錄下。字符設備驅動(dòng)程序一般要包含open、close、read、write等幾個(gè)系統調用。
本文為開(kāi)發(fā)字符設備驅動(dòng)實(shí)例,對于其他兩類(lèi)不再贅述。
1 Linux關(guān)于字符設備的管理
驅動(dòng)程序在Linux內核中往往是以模塊形式出現的。與應用程序的執行過(guò)程不同,模塊通常只是預先向內核注冊自己,當內核需要時(shí)響應請求。模塊中包含2個(gè)重要的函數init_module和cleanup_module。前者是模塊的入口,它為模塊調用做好準備工作,而后者是在模塊即將卸載時(shí)被調用,做一些清掃工作。
驅動(dòng)程序模塊通過(guò)函數int regiSTer_chrdev(unsignedint major,const char*name,struct file_operations*fops)來(lái)完成向內核注冊。其中unsigned int major為主設備號,const char*nAME為設備名,struct file_operations*fops為驅動(dòng)設備管理中重要的結構指針,此結構中每個(gè)字段都必須指向驅動(dòng)程序中實(shí)現特定操作的操作函數。
2 FYD12864-0402B液晶模塊簡(jiǎn)介
FYD12864-0402B是一種具有4位/8位并行、2線(xiàn)或3線(xiàn)串行多種接口方式,內部含有國標一級、二級簡(jiǎn)體中文字庫的點(diǎn)陣圖形液晶顯示模塊,低電壓,低功耗。其顯示分辨率為128×64,內置8 192個(gè)16×16點(diǎn)陣的漢字,以及128個(gè)16×8點(diǎn)ASCII字符集。利用該模塊靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構成全中文人機交互圖形界面,可以顯示8×4行16×16點(diǎn)陣的漢字。也可完成圖形顯示。FYD12864-0402B液晶模塊框圖如圖1所示,其中ST7920為液晶顯示控制芯片,ST7921為液晶顯示驅動(dòng)芯片。
FYD12864-0402B控制器接口信號說(shuō)明如下:
①RS、R/W的配合選擇決定控制界面的4種模式,如表1所列。
②E信號如表2所列。
3 LCD讀寫(xiě)原理
FYD12864-0402B每屏可顯示4行8列共32個(gè)16×16點(diǎn)陣的漢字,每個(gè)顯示RAM可顯示1個(gè)中文字符或2個(gè)16×8點(diǎn)陣全高ASCII碼字符,即每屏最多可顯示32個(gè)中文字符或64個(gè)ASCII碼字符。FYD12864-0402B內部提供128×2字節的字符顯示RAM緩沖區(DDRAM)。字符顯示是通過(guò)將字符顯示編碼寫(xiě)入該字符顯示RAM實(shí)現的。根據寫(xiě)入內容的不同,可分別在液晶屏上顯示CGROM(中文字庫)、HCGROM(ASCII碼字庫)及CGRAM(自定義字形)的內容。3種不同字符/字型的選擇編碼范圍為:0000~0006H(其代碼分別是0000、0002、0004、0006,共4個(gè))顯示自定義字型,02H~7FH顯示半寬ASCII碼字符,A1A0H~F7FFH顯示8 192種GB2312中文字庫字形。字符顯示RAM在液晶模塊中的地址80H~9FH。字符顯示的RAM的地址與32個(gè)字符顯示區域有著(zhù)一一對應的關(guān)系。
4 部分代碼解析
5 編寫(xiě)Makefile和用戶(hù)級測試程序
下面2行宏變量定義使用armv41-unknown-linux-gcc編譯器編譯驅動(dòng),默認使用gcc編譯器、X86 PC平臺。
結 語(yǔ)
對Linux設備驅動(dòng)程序作了詳細的介紹,在實(shí)際開(kāi)發(fā)板AT91RM9200上加入FYD12864-0402B驅動(dòng)模塊,該液晶驅動(dòng)采用通用化接口和調用方法,對開(kāi)發(fā)Linux其他設備驅動(dòng)程序具有很好的指導意義。
linux相關(guān)文章:linux教程
led顯示器相關(guān)文章:led顯示器原理
評論