<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Linux的液晶顯示屏驅動(dòng)設計

基于Linux的液晶顯示屏驅動(dòng)設計

作者: 時(shí)間:2012-02-16 來(lái)源:網(wǎng)絡(luò ) 收藏

引 言

本文引用地址:http://dyxdggzs.com/article/149661.htm

設備程序屬于內核的一部分,并在內核中扮演著(zhù)十分重要的角色。它們像一個(gè)個(gè)“黑盒子”,使某個(gè)特定的硬件響應一個(gè)定義良好的內部編程接口,同時(shí)完全隱蔽了設備的工作細節。用戶(hù)通過(guò)一組和具體設備無(wú)關(guān)的標準化的調用來(lái)完成相關(guān)操作,程序的任務(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操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程


led顯示器相關(guān)文章:led顯示器原理




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>