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

  0 引言

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

  1 液晶顯示器原理

  1.1 液晶顯示器種類

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

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

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

  1.2 液晶顯示器時序

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

LCD的典型時序圖

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

  2 硬件平臺

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

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

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

  3 L i nux驅動軟件設計實現

  3.1 驅動核心結構體的介紹

  3.1.1.fb_jnfo結構體

  幀緩沖設備最關鍵的一個數據結構體是fb info結構體,其中包含了關于幀緩沖設備屬性和操作的完整描述,定義如下:

程序

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

  3.1.2.fb_ops結構體

  本結構體為指向底層操作的函數的指針,這些函數是需要驅動程序開發人員編寫填充的,部分成員定義如下

程序

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

  3.1.3.fb_var_screeni nfo

  本結構體定義了用戶可以修改的顯示控制器參數,部分成員如下:

 

程序

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

  3.2 Linux幀緩沖設備的模塊加載和卸載函數

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

程序

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

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

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

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

  3.3 提供給應用程序的接口

  本驅動設計定義了如下幾個接口供應用程序調用:fb_ioctl,fb_blank,fb_fillrect.

  部分代碼如下:

程序

  sep4020_blank函數主要實現了將液晶屏清屏的功能。

  sep4020fb_fillrect函數實現了填充液晶屏一塊矩形區域的功能。

 

  sep4020fb_ioctl函數則為上層應用提供了更多的功能,部分可供上層調用的命令如下:

  FBIOGET_VSCREENINFO表示用戶獲取屏幕的可變參數;

  FBIOPUT_VSCREENINFO表示用戶設置可變的屏幕參數;

  FBIOGET_FSCREENINFO表示用戶獲得屏幕的固定參數;

  FBIOBLANK表示調用sep4020fb_blank函數清空液晶屏;

  FBIOPUTCMAP表示設置屏幕的顏色表;

  FBIOGETCMAP表示獲得顏色表。

  3.4 用戶空間對幀緩沖設備進行訪問

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

  4 測試與結論

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

在屏幕上顯示如下圖像

  測試結果顯示,在本課題驅動模塊的支持下,可以向屏幕緩沖區寫入數據并正確地在屏幕上顯示出來,工作完全正常。本文所提出的設計方案已經應用在本單位某產品上。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          一区二区三区产品免费精品久久75| 欧美一区二区性| a91a精品视频在线观看| 一卡二卡3卡四卡高清精品视频| 欧美成人四级电影| 在线播放日韩专区| 91久久精品一区二区三区| 亚洲欧洲一区二区三区| 国产精品久久午夜| 久久国产精品一区二区| 国产精品theporn| 国产又爽又黄的激情精品视频| 亚洲丁香婷深爱综合| 午夜精品三级视频福利| 午夜日韩视频| 久久av红桃一区二区小说| 亚洲人体大胆视频| 欧美性做爰毛片| 欧美中日韩免费视频| 久久精品国产91精品亚洲| 精东粉嫩av免费一区二区三区| 欧美另类99xxxxx| 国产精品青草综合久久久久99| 欧美美女喷水视频| 亚洲国产精品综合| 老司机凹凸av亚洲导航| 欧美一区亚洲| 欧美激情一二区| 亚洲影视中文字幕| 国产精品日韩在线播放| 欧美一区综合| 久久久久久久999| 9l视频自拍蝌蚪9l视频成人| 欧美精品情趣视频| 亚洲精品社区| 一区二区三区四区国产| 免费毛片一区二区三区久久久| 国产日韩欧美制服另类| 亚洲男人影院| 亚洲天堂av图片| 亚洲福利国产精品| 国产亚洲在线观看| 欧美日韩国产大片| 国产视频精品va久久久久久| 欧美日韩另类在线| 欧美在线视频播放| 亚洲夜晚福利在线观看| 欧美日韩国产精品成人| 亚洲品质自拍| 国产精品麻豆欧美日韩ww| 国内一区二区在线视频观看| 亚洲精选大片| 亚洲人成免费| 久久综合色天天久久综合图片| 国产精品免费区二区三区观看| 国产一区视频在线看| 老司机精品视频网站| 一本色道久久88精品综合| 国产精品福利网| 久久久97精品| 国产一区视频在线观看免费| 亚洲网址在线| 欧美手机在线视频| 欧美与欧洲交xxxx免费观看| 国产亚洲成精品久久| 欧美日韩四区| 国产亚洲欧洲| 久久精品久久99精品久久| 国产亚洲精品资源在线26u| 欧美日韩第一页| 亚洲区在线播放| 激情亚洲网站| 99re视频这里只有精品| 蜜桃久久精品一区二区| 欧美精品久久久久久久免费观看| 久久成人18免费网站| 99视频在线观看一区三区| 欧美国产三级| 免费毛片一区二区三区久久久| 国产欧美精品在线| 亚洲国产精品精华液网站| 欧美日韩精品免费观看| 久久久午夜电影| 国产视频一区二区三区在线观看| 可以看av的网站久久看| 日韩一级片网址| 亚洲日本一区二区三区| 久久五月天婷婷| 欧美午夜视频| 久久成人精品无人区| 极品尤物久久久av免费看| 99re6热只有精品免费观看| 欧美日韩国产色站一区二区三区| 久久视频精品在线| 久久国产精品久久久| 欧美午夜在线观看| 精品电影一区| 久久综合伊人77777蜜臀| 欧美一区久久| 亚洲免费中文| 欧美精品免费看| 日韩视频三区| 欧美日韩精品欧美日韩精品一| 夜夜嗨网站十八久久| 亚洲精品一线二线三线无人区| 久久爱www.| 午夜一区二区三区不卡视频| 国产有码在线一区二区视频| 亚洲高清网站| 欧美精品www| 巨乳诱惑日韩免费av| 欧美理论片在线观看| 亚洲大胆在线| 久久久青草青青国产亚洲免观| 精品成人一区二区三区四区| 国内精品美女av在线播放| 欧美日韩性生活视频| 在线电影欧美日韩一区二区私密| 国产亚洲精品7777| 9i看片成人免费高清| 国产日韩精品一区二区三区| 亚洲乱码国产乱码精品精| 亚洲影院在线| 久久激情五月激情| 欧美日韩免费一区二区三区| 国产午夜精品美女毛片视频| 国产视频久久久久久久| 欧美三级乱人伦电影| 亚洲国产精品成人一区二区| 午夜精品一区二区在线观看| 一区二区三区在线观看视频| 日韩一区二区精品葵司在线| 国产精品裸体一区二区三区| 免费观看久久久4p| 欧美中文字幕精品| 欧美在线你懂的| 中文亚洲免费| 国产精品入口夜色视频大尺度| 亚洲缚视频在线观看| 午夜精品在线视频| 亚洲国产欧美一区二区三区久久| 久久久久久国产精品一区| 久久精品av麻豆的观看方式| 夜夜嗨av一区二区三区免费区| 国产精品视频自拍| 艳女tv在线观看国产一区| 亚洲日本中文字幕免费在线不卡| 国产视频一区免费看| 欧美天堂亚洲电影院在线播放| 欧美日韩在线第一页| 国产欧美精品在线| 午夜久久一区| 国产精品99久久久久久久女警| 夜夜爽av福利精品导航| 久久精品二区亚洲w码| 99v久久综合狠狠综合久久| 国产午夜精品美女视频明星a级| 欧美日韩和欧美的一区二区| 午夜精品视频在线| 亚洲三级性片| 另类av导航| 国产精品一区二区你懂的| 久久综合国产精品台湾中文娱乐网| 欧美高清在线一区| 亚洲香蕉伊综合在人在线视看| 一本一本久久| 国产欧美日韩亚洲一区二区三区| 国模大胆一区二区三区| 欧美日韩日本视频| 亚洲小少妇裸体bbw| 99在线精品视频| 欧美阿v一级看视频| 亚洲高清不卡在线观看| 欧美日韩精品免费观看视频完整| 国产日韩av一区二区| 欧美波霸影院| 欧美日本久久| 欧美日韩一区二区三区免费看| 欧美日韩日本国产亚洲在线| 欧美一区二区三区四区高清| 亚洲视频在线观看| 欧美精品一二三| 亚洲无亚洲人成网站77777| 国产一区二区三区四区三区四| 欧美日韩另类字幕中文| 亚洲成色www8888| 中文一区在线| 欧美国产日韩精品| 亚洲手机成人高清视频| 亚洲素人一区二区| 久久久久久久久一区二区| 伊人成人在线视频| 狠狠爱综合网| 在线日韩中文字幕| 国产精品福利av| 国产精品黄色在线观看| 亚洲国产综合在线看不卡| 伊大人香蕉综合8在线视| 欧美不卡视频一区| 一区二区国产日产| 欧美日韩和欧美的一区二区| 欧美午夜片在线免费观看| 蜜桃久久精品乱码一区二区| 亚洲国产中文字幕在线观看| 欧美激情精品久久久久久| 麻豆国产va免费精品高清在线| 在线免费观看欧美| 欧美性猛交xxxx免费看久久久| 国产精品日韩欧美综合| 国产日韩精品一区观看| 久久一区欧美| 欧美激情欧美狂野欧美精品| 国内成+人亚洲| 黄色成人91| 欧美色视频日本高清在线观看| 激情六月婷婷久久| 亚洲在线视频免费观看| 久久精品成人一区二区三区| 亚洲欧美激情一区二区| 久久精品国产欧美亚洲人人爽| 亚洲欧美日韩电影| 中国亚洲黄色| 欧美v亚洲v综合ⅴ国产v| 性欧美超级视频| 一区二区三区回区在观看免费视频| 国产精品亚洲网站| 欧美mv日韩mv国产网站| 性色av一区二区三区在线观看| 亚洲国产黄色片| 在线观看日韩欧美| 欧美日韩国产成人高清视频| 篠田优中文在线播放第一区| 激情综合激情| 欧美在线一级va免费观看| 欧美电影美腿模特1979在线看| 久久久久久亚洲精品中文字幕| 欧美在线综合| 欧美日韩伦理在线免费| 欧美区二区三区| 午夜精彩视频在线观看不卡| 免费观看欧美在线视频的网站| 亚洲欧洲一区二区三区| 久久精品噜噜噜成人av农村| 葵司免费一区二区三区四区五区| 欧美日韩中文另类| 亚洲综合三区| 亚洲午夜久久久| 国产欧美日韩在线视频| 久久久国产精品一区二区三区| 亚洲欧美日韩另类精品一区二区三区| 久久天天躁夜夜躁狠狠躁2022| 99视频在线观看一区三区| 亚洲午夜激情网页| 国产精品久久一级| 性色av一区二区三区红粉影视| 欧美午夜激情在线| 欧美日韩国产精品一区| 国产一区二区三区高清| 欧美成人网在线| 在线观看亚洲a| 欧美成人免费在线观看| 欧美精选在线| 久久亚洲欧美| 欧美另类视频在线| 一区二区三区产品免费精品久久75| 麻豆国产精品va在线观看不卡| 快射av在线播放一区| 亚洲精品综合久久中文字幕| 欧美激情 亚洲a∨综合| 激情欧美日韩一区| 欧美成人黑人xx视频免费观看| 欧美午夜一区| 久久er99精品| 一区免费观看视频| 一区二区视频在线观看| 国产精品99免视看9| 欧美日韩精品国产| 亚洲自拍电影| 狠狠色狠狠色综合日日tαg| 久久婷婷激情| 欧美日精品一区视频| 亚洲欧美日韩国产综合精品二区| 亚洲国语精品自产拍在线观看| 亚洲精品久久久久久久久| 精品91视频| 国产日韩高清一区二区三区在线| 亚洲欧洲三级| 另类天堂av| 国产精品自拍网站| 亚洲高清免费在线| 经典三级久久| 国精产品99永久一区一区| 欧美96在线丨欧| 国产视频精品xxxx| 亚洲欧美国产毛片在线| 欧美日韩国语| 99在线热播精品免费99热| 久久久噜久噜久久综合| 久久精品av麻豆的观看方式| 亚洲夜晚福利在线观看| 亚洲韩国日本中文字幕| 亚洲人午夜精品| 欧美在线一级va免费观看| 亚洲理论在线观看| 欧美香蕉大胸在线视频观看| 久久久免费av| 国产亚洲永久域名| 狠久久av成人天堂| 亚洲一区bb| 久久久久国色av免费看影院| 国产欧美一区二区色老头| 欧美韩国日本综合| 在线日韩av永久免费观看| 亚洲永久在线观看| 极品尤物av久久免费看| 亚洲精品影院在线观看| 最近中文字幕mv在线一区二区三区四区| 国产精品久久久久久久第一福利| 亚洲精品少妇30p| 国产婷婷色一区二区三区| 欧美片第1页综合| 99精品国产热久久91蜜凸| 麻豆成人91精品二区三区| 国语自产精品视频在线看| 国内精品久久久久久久97牛牛| 亚洲一区二区av电影| 亚洲欧美亚洲| 久久久久久高潮国产精品视|