《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于SEP4O2O的Linux frame buffer驅(qū)動設(shè)計
基于SEP4O2O的Linux frame buffer驅(qū)動設(shè)計
摘要: 隨著世界經(jīng)濟的迅速發(fā)展,液晶顯示屏廣泛應(yīng)用于手機、PDA、金融終端等電子產(chǎn)品上,而在嵌入式電子領(lǐng)域,Linux操作系統(tǒng)占有越來越大的市場份額。因而本文提出在嵌入式Linux平臺上實現(xiàn)液晶顯示器的功能,詳細敘述了液晶顯示屏在SEP4020微處理器為基礎(chǔ)的平臺上的Framebuffer驅(qū)動程序設(shè)計。
Abstract:
Key words :

  0 引言

  隨著世界經(jīng)濟的迅速發(fā)展,液晶顯示屏廣泛應(yīng)用于手機、PDA、金融終端等電子產(chǎn)品上,而在嵌入式電子領(lǐng)域,Linux操作系統(tǒng)占有越來越大的市場份額。因而本文提出在嵌入式Linux平臺上實現(xiàn)液晶顯示器的功能,詳細敘述了液晶顯示屏在SEP4020微處理器為基礎(chǔ)的平臺上的Framebuffer驅(qū)動程序設(shè)計。

  1 液晶顯示器原理

  1.1 液晶顯示器種類

  液晶顯示器(LCD)根據(jù)驅(qū)動方式可以分為靜態(tài)驅(qū)動、簡單矩陣驅(qū)動以及主動矩陣驅(qū)動三種。其中,簡單矩陣型又可以再分為扭轉(zhuǎn)向列(TN)和超扭轉(zhuǎn)式向列型(STN)兩種,而主動矩陣則以薄膜式晶體管(TFT)為主流。

  TN型技術(shù)是LCD中最基本的,其他種類的LCD都以TN型為基礎(chǔ)改進而得。TN型LCD顯示質(zhì)量很差,色彩單一、對比度低,反應(yīng)速度很慢,故主要應(yīng)用于簡單的數(shù)字符與文字的顯示,如電子表以及電子計算器等。STN LCD的顯示原理與TN類似,區(qū)別在于TN型的液晶分子將入射光旋轉(zhuǎn)90°,而STN可將入射光旋轉(zhuǎn)180°到270°。STN改善了TN視角狹小的缺點,并提高了對比度,顯示品質(zhì)較TN高。

  TFT型LCD中,晶體管矩陣依顯示信號開啟或者關(guān)閉液晶分子的電壓,使液晶分子軸轉(zhuǎn)向而成"亮"或者"暗"的對比,避免了顯示器對電場效應(yīng)的依靠。因此,TFTLCD顯示質(zhì)量較TN/STN更佳,畫面顯示對比度可達150:1以上,反應(yīng)速度逼近30ms甚至更快,適用于PDA、筆記本電腦、數(shù)碼相機、MP4等。

  1.2 液晶顯示器時序

  圖1為LCD的典型時序圖。時序圖中VFRAME為幀同步信號,VLINE為行同步信號,VCLK為像素時鐘信號(用于鎖存圖像數(shù)據(jù)的像素時鐘),VM為數(shù)據(jù)有效標志信號,VD為圖像的數(shù)據(jù)信號。

LCD的典型時序圖

  作為幀同步信號的VFRAME,每發(fā)出一個脈沖,都意味著新的一屏圖像數(shù)據(jù)開始發(fā)送。而作為行同步信號的VLINE,每發(fā)出一個脈沖都表明新的一行圖像資料開始發(fā)送。在幀同步以及行同步的頭尾都必須留有回掃時間。

  2 硬件平臺

  本設(shè)計采用的硬件平臺是基于東南大學(xué)國家專用集成電路系統(tǒng)工程中心研發(fā)的SEP4020微處理器的開發(fā)板。該處理器是使用0.18μ m標準CMOS的工藝設(shè)計,內(nèi)嵌ASIX CORE(32位RISC內(nèi)核兼容ARM720T,帶8 kB指令數(shù)據(jù)cache和全功能MMU),采用馮諾依曼結(jié)構(gòu)的一款微處理器。該處理器集成了液晶控制模塊(LCDC),此模塊兼容AMBA規(guī)范,有AHB MASTER和AHB SLAVE接口,分別用于讀取需要顯示的數(shù)據(jù)和軟件配置。經(jīng)過軟件配置后,LCDC能自己獨立工作,而不再需要內(nèi)核的再次參與,從而節(jié)省內(nèi)核的處理時間。工作過程是LCDC使能后申請系統(tǒng)總線,獲得總線使用權(quán)后讀取需要顯示的數(shù)據(jù),數(shù)據(jù)經(jīng)過相應(yīng)算法的處理就得到滿足時序要求的信號,送到LCDC顯示驅(qū)動器。

  LCDC使用內(nèi)嵌的DMA方式進行數(shù)據(jù)操作,配備一個深度為16的32位FIFO用于緩存顯示數(shù)據(jù),支持1、2、4位的STN灰度顯示和16位TFT彩色顯示,分辨率軟件可配置。相關(guān)的需要配置的寄存器有:

  SSA為屏幕起始寄存器;SIZE為屏幕尺寸寄存器;PCR為面板配置寄存器;HCR為水平配置寄存器;VCR為垂直配置寄存器:PWMR為對比度控制器;LECR為使能控制寄存器;DMACR為DMA控制寄存器。

  3 L i nux驅(qū)動軟件設(shè)計實現(xiàn)

  3.1 驅(qū)動核心結(jié)構(gòu)體的介紹

  3.1.1.fb_jnfo結(jié)構(gòu)體

  幀緩沖設(shè)備最關(guān)鍵的一個數(shù)據(jù)結(jié)構(gòu)體是fb info結(jié)構(gòu)體,其中包含了關(guān)于幀緩沖設(shè)備屬性和操作的完整描述,定義如下:

程序

  限于篇幅,只列出了部分成員,其中fb_var_screeninfo記錄用戶可以修改的顯示控制器參數(shù),包括屏幕分辨率和每個像素的比特數(shù)等;fb_fix_screeninfo記錄用戶不能修改的顯示控制器參數(shù);cmap為目前的顏色表;fb_ops為幀緩沖操作函數(shù)集;screen_base為幀緩沖的虛擬基地址;i oremapped的虛擬內(nèi)存大小;pseudo_palette為偽16色的顏色表。

  3.1.2.fb_ops結(jié)構(gòu)體

  本結(jié)構(gòu)體為指向底層操作的函數(shù)的指針,這些函數(shù)是需要驅(qū)動程序開發(fā)人員編寫填充的,部分成員定義如下

程序

  fb_check_var ()用于調(diào)整可變參數(shù),并修整為硬件支持的值;fb_set_par()則根據(jù)屏幕參數(shù)設(shè)置具體讀寫LCD控制器的寄存器以使得LCD控制器進入相應(yīng)的工作狀態(tài),使用戶設(shè)置的屏幕參數(shù)在硬件上有效;f bsetcolreg ()成員函數(shù)實現(xiàn)偽顏色表和顏色表的填充。

  3.1.3.fb_var_screeni nfo

  本結(jié)構(gòu)體定義了用戶可以修改的顯示控制器參數(shù),部分成員如下:

 

程序

  本結(jié)構(gòu)體中,xres為屏幕的水平像素數(shù);yres為屏幕垂直寬度:bits_per_pixel定義每個像素由多少個位表示;pixclock定義了像素時鐘;left_margin是表示行切換中從同步到繪圖之間的延遲;right_margin表示行切換中從繪圖到同步之間的延遲;upper_margin表示幀切換中從同步到繪圖之間的延遲;lower_margin表示幀切換中從繪圖到同步之間的延遲;hsyn_len表示水平同步的長度;vsync_len表示垂直同步的長度。

  3.2 Linux幀緩沖設(shè)備的模塊加載和卸載函數(shù)

  由于LCD控制器被集成在SOC芯片上作為一個獨立的硬件模塊,也就是platform_device而存在,因此本驅(qū)動中包含平臺驅(qū)動。首先我們要定義platform_driver結(jié)構(gòu)體:

程序

  定義了此結(jié)構(gòu)體之后,在幀緩沖設(shè)備的模塊加載函數(shù)sep4020fb_init(void)中,我們只需要使用函數(shù)platform_driver_register(&sep4020fb_driver)注冊平臺驅(qū)動,而其余大部分的初始化工作移交到平臺驅(qū)動的探測函數(shù)sep4020fb_probe中完成。

  在函數(shù)sep4020fb_probe(struct platform_device*pdev)中,首先要申請SEP4020的幀緩沖信息結(jié)構(gòu)體:structsep4020fb_info*info,在此結(jié)構(gòu)體中,成員sep4020fb_ma c h_i n f o記錄了seP4020幀緩存的機器信息,sep4020fb_hw包含了sep4020微處理器LCD控制器所涉及到的所有寄存器的信息,screen_dma表示幀緩存的物理地址,而screen_cpu代表了幀緩存的虛擬地址。之后要為sep4020fb_mach_info申請內(nèi)存空間,申請完畢之后就要初始化fb_info結(jié)構(gòu)體中的固定和可變參數(shù),即填充fb_var_screeninfo var和fb_fix_screeninfo fix成員。首先通過fb_info一>fbops=&sep4020fb_ops將為sep4020微處理器定義的函數(shù)操作結(jié)構(gòu)體賦予幀緩存信息結(jié)構(gòu)體中對應(yīng)的成員,sep4020fb_ops定義了指向底層操作的一系列函數(shù),本文將在后面詳細介紹;由于本課題選用的液晶屏為320×240TFT彩屏,所以fb_info->var.xres賦值為320,fb_info一>var.yres賦值為240,fb_info一>var.bits_per_pixel賦值為16,這樣就可以算出幀緩存的長度為320×240×16/8個字節(jié),將此值賦給fbinfo->fix.smem_len成員。

  完成可變參數(shù)和固定參數(shù)的填充之后,要為本驅(qū)動申請中斷資源,具體函數(shù)為requestirq(irq,sep4020fb_irq,SA INTERRUPT,pdev一>name,info),irq為請求的中斷號,sep4020fb_irq為中斷處理服務(wù)子程序,SA_INTERRUPT表示為一個快速中斷處理,在執(zhí)行中斷的過程中禁止所有在當(dāng)前處理器上的其他中斷。申請中斷完畢之后,就要完成本驅(qū)動關(guān)鍵步驟,調(diào)用sep4020fb_map_video_memory()函數(shù)申請顯示緩沖區(qū)。在該函數(shù)中,首先調(diào)用PAGE_ALIGN()函數(shù)對齊申請的緩沖區(qū)的大小,使即將申請的顯示緩沖區(qū)大小為頁的整數(shù)倍;然后調(diào)用函數(shù)dma_all oc_writecombine(fbi->dev,fbi一>map_size,&fbi一>map_dma,GFP_KERNEL), 分配一塊寫合并的內(nèi)存區(qū)域作為幀緩存,函數(shù)返回值為申請的幀緩存的起始位置的虛擬地址,fbi一>map_dma代表的是該位置的物理地址,fbi一>map_si ze為此內(nèi)存區(qū)的大小。

  完成上面的工作之后,驅(qū)動程序在就有了一塊內(nèi)存區(qū)域作為幀緩沖,向此區(qū)域?qū)懭霐?shù)據(jù)就能顯示在液晶屏上。后面還要調(diào)用sep4020fb_init_registers(info)函數(shù)初始化L C D控制器的寄存器;然后調(diào)用sep4020fb_check_var(&fbinfo一>var,fbinfo)檢查可變參數(shù),最后調(diào)用register_framebuffer(fbinfo)注冊幀緩沖設(shè)備。

  3.3 提供給應(yīng)用程序的接口

  本驅(qū)動設(shè)計定義了如下幾個接口供應(yīng)用程序調(diào)用:fb_ioctl,fb_blank,fb_fillrect.

  部分代碼如下:

程序

  sep4020_blank函數(shù)主要實現(xiàn)了將液晶屏清屏的功能。

  sep4020fb_fillrect函數(shù)實現(xiàn)了填充液晶屏一塊矩形區(qū)域的功能。

 

  sep4020fb_ioctl函數(shù)則為上層應(yīng)用提供了更多的功能,部分可供上層調(diào)用的命令如下:

  FBIOGET_VSCREENINFO表示用戶獲取屏幕的可變參數(shù);

  FBIOPUT_VSCREENINFO表示用戶設(shè)置可變的屏幕參數(shù);

  FBIOGET_FSCREENINFO表示用戶獲得屏幕的固定參數(shù);

  FBIOBLANK表示調(diào)用sep4020fb_blank函數(shù)清空液晶屏;

  FBIOPUTCMAP表示設(shè)置屏幕的顏色表;

  FBIOGETCMAP表示獲得顏色表。

  3.4 用戶空間對幀緩沖設(shè)備進行訪問

  驅(qū)動程序經(jīng)過編譯并加載為模塊后,成為/dev/fb0設(shè)備,在應(yīng)用程序中,操作/dev/fb0一般遵循如下步驟:1)打開/dev/fb0設(shè)備文件;2)調(diào)用ioctl()操作取得屏幕的參數(shù),如屏幕分辨率和每個像素所占的比特數(shù),進而計算出顯示緩沖區(qū)的大小;3)將屏幕緩沖區(qū)映射到用戶空間;4)映射之后就可以向緩沖區(qū)寫入或者讀出數(shù)據(jù),進行繪圖了。

  4 測試與結(jié)論

  根據(jù)前面論述的步驟向屏幕緩沖區(qū)寫入數(shù)據(jù),將每個像素的值設(shè)為0xF0F0,在屏幕上顯示如下圖像:

在屏幕上顯示如下圖像

  測試結(jié)果顯示,在本課題驅(qū)動模塊的支持下,可以向屏幕緩沖區(qū)寫入數(shù)據(jù)并正確地在屏幕上顯示出來,工作完全正常。本文所提出的設(shè)計方案已經(jīng)應(yīng)用在本單位某產(chǎn)品上。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲综合成人在线| 欧美成人精品在线| 亚洲日本久久| 久久精品视频在线观看| 午夜亚洲激情| 午夜精品福利在线| 亚洲影院污污.| 亚洲一区日韩在线| 国产精品99久久久久久久女警| 亚洲人成久久| 亚洲日本中文字幕区| 亚洲黄色视屏| 亚洲黄色在线| 91久久精品国产91久久性色tv | 午夜亚洲一区| 亚洲欧美日韩国产成人| 亚洲欧美日本日韩| 欧美一区二区三区在线免费观看| 欧美亚洲色图校园春色| 欧美一区二区三区四区夜夜大片| 欧美一区二区三区四区视频| 久久狠狠亚洲综合| 久久久久久久一区| 噜噜噜在线观看免费视频日韩 | 国产精品人人做人人爽| 国产精品嫩草99a| 国产欧美在线观看| 狠狠色丁香婷婷综合久久片| 在线成人中文字幕| 最新日韩在线视频| 99视频精品全国免费| 亚洲午夜一区| 欧美在线观看视频| 亚洲精品视频在线观看免费| av成人手机在线| 亚洲欧美成人网| 久久久久国产免费免费| 欧美大胆成人| 国产精品高潮粉嫩av| 国产亚洲精品成人av久久ww| 精品不卡视频| 99精品欧美一区二区蜜桃免费| 国产精品99久久久久久久久| 亚洲专区在线视频| 亚洲国产精品久久精品怡红院| 亚洲精品亚洲人成人网| 亚洲一区综合| 久久亚洲精品中文字幕冲田杏梨| 欧美国产一区二区三区激情无套| 欧美日韩精品欧美日韩精品一 | 亚洲高清视频一区| 亚洲精选在线| 午夜视频一区二区| 毛片基地黄久久久久久天堂| 欧美日韩亚洲一区在线观看| 国产欧美日韩免费| 亚洲国产精品一区制服丝袜 | 一本久道久久综合狠狠爱| 亚洲一区三区电影在线观看| 亚洲成人直播| 亚洲一区日韩在线| 久久婷婷综合激情| 欧美日韩无遮挡| 国产真实乱偷精品视频免| 亚洲精品中文字幕在线| 亚洲欧美影音先锋| 99国产精品自拍| 久久久国产精品一区二区三区| 欧美精品1区2区3区| 国产欧美日韩视频| 日韩视频在线观看国产| 欧美在线播放高清精品| 亚洲一区在线视频| 欧美顶级大胆免费视频| 国产日韩精品一区二区三区在线| 亚洲日本一区二区| 久久福利电影| 欧美一区二区福利在线| 欧美日韩国产经典色站一区二区三区| 国产一区二区视频在线观看| 99精品视频一区二区三区| 亚洲国产精品ⅴa在线观看| 亚洲欧美中日韩| 欧美日韩国产成人精品| 一区二区三区在线视频免费观看| 亚洲性感美女99在线| 亚洲精选在线| 免费高清在线一区| 国产午夜一区二区三区| 亚洲无限av看| 亚洲图片欧美一区| 欧美成人中文字幕| 国内伊人久久久久久网站视频| 这里只有精品视频在线| 亚洲精品在线三区| 老牛嫩草一区二区三区日本| 国产麻豆午夜三级精品| 亚洲私拍自拍| 亚洲午夜小视频| 欧美理论在线| 亚洲国产清纯| 亚洲国产二区| 久久久久国产一区二区| 国产精品网站一区| 一区二区欧美日韩| 亚洲天堂久久| 欧美日韩一区二区三区视频| 亚洲精品视频免费| 亚洲精品在线电影| 欧美国产日韩免费| 亚洲国产欧美日韩另类综合| 91久久久国产精品| 欧美aa国产视频| 亚洲国产成人精品久久久国产成人一区| 欧美中文字幕第一页| 久久av一区二区三区漫画| 国产精品婷婷| 亚洲欧美激情视频在线观看一区二区三区 | 在线看无码的免费网站| 欧美专区第一页| 久久久噜噜噜久久人人看| 国产视频一区在线观看一区免费| 亚洲男人天堂2024| 欧美一级午夜免费电影| 亚洲美女在线观看| 久久久久天天天天| 国内精品模特av私拍在线观看| 亚洲女同在线| 久久狠狠亚洲综合| 狠狠色噜噜狠狠狠狠色吗综合| 久久狠狠婷婷| 玖玖综合伊人| 亚洲黄色免费网站| 一区二区三区 在线观看视| 欧美三区视频| 亚洲一区三区视频在线观看| 欧美在线观看一二区| 国产一区二区福利| 久久99在线观看| 免费观看一级特黄欧美大片| 亚洲国产第一| 在线亚洲一区二区| 国产精品久久久久999| 午夜精品久久久久久久蜜桃app | 性色av一区二区三区红粉影视| 久久精品中文字幕一区| 樱花yy私人影院亚洲| 亚洲免费观看| 国产精品卡一卡二卡三| 午夜免费电影一区在线观看| 久久久综合网| 亚洲片在线观看| 亚洲一区二区免费在线| 国产精品久在线观看| 欧美在线一区二区| 欧美国产日本韩| 亚洲性感美女99在线| 久久影院午夜论| 99国产精品视频免费观看| 亚洲欧美另类在线观看| 国内精品国产成人| 亚洲最新合集| 国产精品一区二区三区免费观看| 亚洲第一福利视频| 欧美日韩免费观看一区| 亚洲欧美精品一区| 欧美www视频| 中文在线资源观看网站视频免费不卡 | 性18欧美另类| 欧美精品免费观看二区| 亚洲午夜视频在线观看| 美女日韩在线中文字幕| 一区二区三区视频在线看| 久久精品中文字幕一区| 亚洲伦理中文字幕| 久久久精品日韩| 一区二区三区免费观看| 久久在精品线影院精品国产| 夜夜躁日日躁狠狠久久88av| 久久夜色精品一区| 中文av字幕一区| 嫩草影视亚洲| 亚洲伊人伊色伊影伊综合网| 欧美大片一区二区三区| 亚洲欧美网站| 欧美日本一区二区三区| 欧美在线视频a| 国产精品高潮视频| 最新日韩精品| 国产欧美日韩亚洲| 一本久道久久久| 精品电影一区| 欧美在线一区二区| 日韩视频在线观看免费| 久久综合久久综合九色| 亚洲欧美激情在线视频| 欧美日韩在线观看一区二区| 亚洲国产片色| 国产视频亚洲| 亚洲一区精彩视频|