《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 高清嵌入式系統中的DVI驅動開發
高清嵌入式系統中的DVI驅動開發
單片機與嵌入式系統
郭小梅,南京曉莊學院
摘要: 以飛思卡爾半導體的MX51為系統硬件平臺,給出了高清嵌入式產品中DVI視頻顯示接口的實現方案;通過處理器的LCD1接口,外擴TFP410芯片實現DVI視頻輸出;分析了framebuffer的實現機制及其在驅動中的應用;詳細講述Linux2.6.28內核下基于framebuffer開發DVI驅動的方法及步驟。該設計應用于高清機頇盒等產品中,效果良好。
Abstract:
Key words :

引言
DVI是Digital VisualInterface(數字視頻接口)的縮寫。在嵌入式電子領域,像DVI這樣的高清接口應用越來越多,很多嵌入式產品采用H.264視頻編碼技術,支持播放H.264格式的720P分辨率的視頻文件,這就需要至少1024×768分辨率的顯示輸出設備。
MX51是飛思卡爾半導體的基于ARM Cortex-A8內核的高端ARM嵌入式多媒體處理器,支持720P視頻多種格式的硬解碼,可以用來開發高清機頂盒、上網本等產品,很多情況下需要集成DVI這樣的高清視頻端子。
在嵌入式電子產品中,Linux操作系統占有越來越多的市場份額。本文采用Linux2.6.28內核和MX51作為系統的軟、硬件平臺,詳細論述了基于framebtffer技術開發DVI顯示驅動程序的方法。

1 DVI概述
DVI接口只在一些高端顯示器上可以看到,一般常見的液晶顯示器只有VGA接口。VGA接口顯示的是模擬信號,而DVI接口顯示的是數字信號,它傳輸沒有經過壓縮的數字信號,最高速率可達4.9 Gbps,對高清視頻顯示可以達到較好的保真度,減少模擬信號傳輸時的信號損失。
DVI基于TMDS(Transition Minimized Differential Signaling,轉換最小差分信號)技術來傳輸數字信號,TMDS運用先進的編碼算法把8位數據(R、G、B中的每路基色信號)通過最小轉換編碼為10位數據(包含行場同步信息、時鐘信息、數據DE、糾錯等),經過DC平衡后,采用差分信號傳輸數據。DVI和LVDS、TTL相比有較好的電磁兼容性能,可以用低成本的專用電纜實現長距離、高質量的數字信號傳輸。

2 硬件接口
本設計采用的硬件平臺是基于飛思卡爾半導體的MX51多媒體應用處理器開發板。該處理器集成了多種外設接口,其中包括兩個液晶顯示控制器(LCDC)及其接口,可以連接各類LCD,分辨率最大支持1280×800像素。通過MX51的LCD1接口,外擴德州儀器公司的TFP410芯片實現DVI視頻輸出,MX51的高清720P視頻解碼能力需要較大分辨率的顯示輸出設備。圖1為MX51的LCD1接口與TFP410的連接圖。

a.jpg


圖1中的TX2±、TX1±、TX0±、TXC±信號是DVI視頻輸出信號4對,8個信號。DATA[23:0]是視頻數據輸入信號,對應MX51 LCD1的DATA[23:0];DE、VSYNC、HSYNC、IDCK±等時鐘信號分別對應LCD1的相應的引腳。SCL、SDA是I2C總線時鐘和數據信號,接MX51 I2C接口的2個引腳。以上硬件電路連接,可實現MX51輸出高清視頻到DVI芯片,再通過外接LCD顯示。MX51處理器內部集成的LCD控制器包括如下主要寄存器:
①LSSAR寄存器。設置顯示緩沖區的首地址。
②LSR寄存器。設置顯示緩沖區的大小。
③LPCR寄存器。設置像素時鐘頻率PCD、同步時鐘極性FB_SYNC_CLK_INVERT、OE信號極性FB_SYNC_OE_ACT_HIGH、垂直信號時鐘極性FB_SY NC_VERT_HIGH_ACT、水平信號時鐘極性FB_SYNC_HOR_HIGH_ACT。
④LHCR寄存器。設置行同步信號的hsync_len、left_margin和right_margin。
⑤LVCR寄存器。設置幀同步信號的vsync_len、upper_margin和lower_margin。
⑥LPCCR寄存器。設置屏幕的顯示亮度,LPCCR的低8位控制PWM的脈沖高電平占空比,調節范圍為0x00~0xFF。

3 Linux的幀緩沖設備
3.1 framebuffer機制
framebuffer(幀緩沖)是出現在Linux2.2.xx之后版本內核的一種驅動程序接口,在Linux體系中它居于上層應用程序和底層顯示設備之間。framebuffer屏蔽了不同顯示設備間的差異,將顯示設備抽象為幀緩沖區,它是一種供用戶態實現直接寫屏的抽象設備。framebuffer可
以看成是顯存的一個映像,用戶通過內存映射將其映射到進程的地址空間后,通過對顯示緩沖區的讀寫操作可直接控制LCD的屏幕輸出。
frameBuffer設備驅動主要基于linux/include/linux/fb.h和linux/drivers/video/fbmem.c這兩個文件。fb.h中包含了與幀緩沖設備相關的重要的數據結構。fbmem.c是framebuffer機制的核心程序,它為上層應用程序提供了通用接口,同時也為下層特定硬件提供了接口。其內的函數可對具體硬件進行操作,比如對寄存器進行設置,對顯示緩沖進行映射等。
3.2 幾個重要的數據結構
(1)struct fb_info
這個結構是Linux為幀緩沖區設備定義的驅動層接口,它包含了關于幀緩沖設備屬性和操作的完整描述,部分成員定義如下:
b.jpg
其中,var記錄用戶可以修改的顯示控制器參數,包括屏幕分辨率和每個像素的位寬等;fix記錄用戶不能修改的顯示控制器參數;cmap為當前的顏色表;fbops指向對底層硬件操作的函數集;dev表示幀緩沖設備;screen_base為I/O映射的虛擬基地址。
(2)struct fb_ops
該結構提供了指向底層操作的函數指針,其成員函數最終與LCD控制器硬件打交道,這些函數需要驅動開發者根據LCD控制器的硬件設置及LCD顯示屏的硬件參數進行設計。該結構部分成員定義如下:
c.jpg
其中,fb_check_var用于檢查可變的屏幕參數,并調整其為硬件支持的值;fb_set_par根據屏幕參數設置具體讀寫LCD控制器的寄存器以使其進入相應的工作狀態,fb_setcolreg設置color寄存器來實現偽顏色表和顏色表的填充。
(3)struct fb_var_screeninfo
這是fb_info的成員結構體。它記錄了幀緩沖設備和指定顯示模式的可修改信息,包括屏幕分辨率、每個像素的位寬、幀延時、行延時等。
(4)struct fb_fix_screeninfo
這是fb_info的成員結構體,它描述顯示卡的屬性,并且在系統運行時不能被修改,例如緩沖區的首地址、長度等。當一種模式被設定后,內存信息由顯示卡硬件給出,內存的位置等信息就不可修改。
MX51將LCD控制器直接嵌入到處理器芯片內部,這為嵌入式系統關于顯示功能的擴展提供了直接接口。LCD控制器驅動是DVI設備驅動的核心,它是一個標準的framebuffer設備驅動。設計驅動程序,首要的是配置LCD控制器,設置幀緩沖區,這在很大程度上要依賴于上述的數據結構,驅動設計需填寫相關結構體并完成系統指定的接口函數。

4 DVI驅動程序設計
4.1 平臺驅動
從Linux2.6起引入了一套新的驅動管理和注冊機制:platform_device和platform_driver。
設備用platform_device表示,驅動用platform_driver注冊。平臺設備包括基于端口的設備、外圍總線和集成在片上系統中的大多數控制器,作為MX51片上的獨立硬件模塊。LCD控制器是一個平臺設備,因此驅動設計中需包含平臺驅動。平臺驅動的任務是向系統注冊用到的設備,此處包括MX51的LCD控制器和TFP410 DVI視頻輸出芯片,使得設備驅動加載時可以從系統中查詢到相應的設備是已注冊的狀態,然后執行設備驅動程序中的probe函數。
在arch/arm/mach-mx51/rex51_3stack.C中,沒置platform_device結構變量mxc_fb_device和i2c_board_info。結構變量mxc_i2cl_ board_info定義LCD控制器和TFP410設備。
調用函數platform_device_register(&mxc_fb_device)和i2c_register_board_info(1,mxc_i2cl_board_info,ARRAY_SIZE(mxc_i2cl_ board_info))向系統注冊以上設備。
4.2 設備驅動
4.2.1 LCD控制器驅動
LCD控制器驅動是一個標準的幀緩沖設備驅動。首先在drivers/video/mxc/mxc_ipuv3_fb.c中定義全局結構變量mxcfb_driver:
d.jpg
然后,在驅動入口函數mxcfb_init(void)中調用platform_driver_register(&mxcfb_driver)注冊驅動,當驅動加載成功后,會自動調用探測函數mxcfb_probe。
mxcfb_probe是驅動設計中的重要函數。主要負責初始化硬件。申請中斷、分配framebuffer所需的內存、注冊幀緩沖設備等,以下是與framebuffer相關的操作。
①調用mxcfb_init_fbinfo(&pdev->dev,&mxcfb_ops)函數,在其內通過framebuffer_alloc函數,為mx51幀緩沖信息結構體struct mxcfb_info分配所需空間。參數mxcfb_ops的定義如下:
e.jpg
mxcfb_ops定義了指向底層操作的一系列函數,這些函數針對MX51幀緩沖操作,是framebuffer核心驅動操作的具體實現。

②初始化幀緩沖信息結構體fb_info的固定和可變參數,填充fb_var_screeninfo var和fb_fix_screeninfo fix成員。
定義fbi為struct fb_info類型的指針,通過fbi->fbops=&mxcfb_ops語句,將已定義的文件操作接口mxcfb_ops賦予fb-info結構的fbops成員。
調用mxcfb_check_var(&fbi->var,fbi)函數,檢查和調整fb_info結構中變量var的值。var是一個struct fb_var_screeninfo類型的變量,表示顯示控制器參數,其中與顯示輸出狀態有關的信息,如屏幕分辨率等將在后面的DVI驅動中設置。
調用mxcfb_set_fix(fbi)函數,用于填充一個struct fb_fix_screeninfo結構變量fbi->fix,它描述了顯示輸出設備自身的屬性。
③調用register_framebuffer(fbi)函數,注冊幀緩沖驅動程序,該函數只有一個參數,即前面已定義的、指向struct fb_info結構的指針fbi。
4.2.2 DVI設備驅動
LCD控制器將DVI芯片作為它所連接的顯示外設,在完成LCD控制器驅動后還需編寫DVI設備驅動。在文件drivers/video/mxc/mxcfb_ dvi.c中定義驅動結構體:
f.jpg
然后,在外設驅動入口函數dvi_init(void)中調用platform_driver_regtster(&dvi_driver)注冊DVI驅動,驅動加載后,系統自動調用探測函數dvi_probe,該函數主要實現以下操作:一是指定framebuffer設備,由于MX51IPU(圖像處理單元)支持多個framebuffer設備,此處要確定DVI究竟使用Mx51 IPU framebuffer的哪一個設備;二是填充fb_var_screeninfo結構變量var中有關顯示輸出狀態的信息,如屏幕的顯示分辨率、畫面位置等,為此在程序中定義結構數組video_modes:
g.jpg
結構struct fb_videomode用于描述顯示輸出狀態,調用函數“fb_videomode_to_var(&var,&video_modes[0])”將屏幕顯示參數轉換為var結構變量的相關成員,由于var的部分成員值已在前面LCD控制器驅動中確定,此處完成了對var全部成員的設置。
一個frambuffer設備由一個struct fb_info結構表示,本設計用fb_info結構的全局變量regtstered_fb表示系統注冊的frambuffer設備,驅動程序的主要任務之一是填充這個結構變量。LCD控制器驅動與DVI外設驅動之間的信息傳遞,通過該全局變量實現。

5 DVI驅動測試
首先,通過顯示一幅圖片測試DVI輸出是否正常。通過轉換工具(如Image21cd)把一幅1024×768大小的jpg圖片轉換為RGB 888分辨率、1024x 768的RGB格式的二進制圖片。然后鍵入命令:cp pic.bin/dev/fb0,此時圖片顯示于屏幕上。接下來,再使用MX51的視頻解碼測試程序播放一個720P的視頻H.264文件,可以看到視頻播放清晰流暢,效果很好。

結語
經測試,DVI驅動程序在MX51平臺上成功實現。framebuffer是Linux提供給用戶的一個直接面向顯示緩沖區的接口,本設計是一個面向應用的framebuffer驅動,文中給出了DVI驅動的整體架構,對主要模塊的設計思想和實現方法進行了詳細的介紹。

此內容為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>
          亚洲二区在线视频| 国产精品第2页| 欧美美女喷水视频| 欧美日韩综合视频| 亚洲免费视频一区二区| 国产精品免费看| 久久精品国语| 欧美午夜不卡影院在线观看完整版免费| 欧美日韩性视频在线| 国内综合精品午夜久久资源| 亚洲欧美日韩中文播放| 欧美精品一区在线| 国产人成一区二区三区影院| 国产精品国产自产拍高清av| 欧美日韩国产va另类| 男人天堂欧美日韩| 亚洲精品久久久久中文字幕欢迎你| 国产欧美日韩不卡免费| 欧美日韩18| 性欧美大战久久久久久久免费观看| av不卡免费看| 久久久噜噜噜久久狠狠50岁| 亚洲欧洲一区二区在线播放| 国内精品一区二区三区| 国产一级一区二区| 国产精品黄视频| 午夜一区二区三区不卡视频| 亚洲在线视频一区| 欧美成年人网| 麻豆精品视频在线观看视频| 亚洲视频999| 久久综合网络一区二区| 亚洲欧美电影在线观看| 国产日韩欧美综合精品| 国产伦精品一区二区三区在线观看| 嫩模写真一区二区三区三州| 麻豆成人91精品二区三区| 免费欧美日韩| 影音先锋中文字幕一区二区| 国产欧美日韩综合一区在线观看| 亚洲综合色噜噜狠狠| 亚洲风情亚aⅴ在线发布| 欧美日韩一区二区三区视频| 亚洲精品一区在线观看香蕉| 欧美日韩免费观看中文| 欧美日本三区| 久久久蜜桃一区二区人| 免费国产自线拍一欧美视频| 在线看片欧美| 亚洲大片在线| 亚洲理伦电影| 欧美精品九九99久久| 久久精品免费看| 欧美日韩网站| 噜噜噜躁狠狠躁狠狠精品视频| 欧美日韩视频专区在线播放| 国产精品日韩欧美一区二区| 亚洲精品一二区| 国产乱码精品一区二区三区忘忧草| 欧美二区在线| 欧美成年人视频| 一本色道精品久久一区二区三区| 狠狠色伊人亚洲综合成人| 蜜桃av噜噜一区二区三区| 欧美日韩精品一区二区天天拍小说| 国产乱码精品一区二区三区五月婷| 嫩草成人www欧美| 一本高清dvd不卡在线观看| 欧美www视频| 国产欧美午夜| 国产又爽又黄的激情精品视频| 久久aⅴ国产欧美74aaa| 久久久久免费视频| 久久久久久久久久久成人| 欧美日韩国产bt| 欧美精品久久久久久久| 欧美色图一区二区三区| 国产自产女人91一区在线观看| 亚洲国产精品成人一区二区| 亚洲精品欧美在线| 精品成人一区二区三区| 中日韩在线视频| 在线播放中文字幕一区| 欧美日韩三级在线| 在线成人免费视频| 亚洲一区日本| 国产精品美女www爽爽爽视频| 日韩午夜精品| 亚洲国产电影| 一区二区视频免费完整版观看| 国产一区导航| 亚洲激情一区二区| 国产精自产拍久久久久久| 久久久蜜桃精品| 国产香蕉97碰碰久久人人| 一区二区三区视频在线| 一本色道久久综合狠狠躁的推荐| 亚洲一级特黄| 欧美日韩免费观看一区=区三区| 久久久久久久国产| 国产精品视频免费在线观看| 欧美日韩免费观看一区=区三区| 久久尤物视频| 亚洲欧洲免费视频| 欧美国产1区2区| 亚洲免费视频在线观看| 欧美fxxxxxx另类| 欧美精品成人一区二区在线观看| 一区在线免费| 国产丝袜一区二区| 亚洲女同性videos| 亚洲毛片在线| 米奇777超碰欧美日韩亚洲| 亚洲韩国日本中文字幕| 久久久国产午夜精品| 亚洲开发第一视频在线播放| 午夜一级在线看亚洲| 欧美主播一区二区三区美女 久久精品人| 欧美日韩免费一区二区三区视频| 亚洲午夜av| 你懂的视频一区二区| 欧美精品v日韩精品v国产精品| 香蕉久久a毛片| 亚洲综合电影一区二区三区| 亚洲国产裸拍裸体视频在线观看乱了中文| 亚洲综合日本| 欧美日韩免费视频| 欧美在线不卡视频| aa亚洲婷婷| 久热精品视频在线观看一区| 国产视频一区免费看| 欧美深夜影院| 欧美激情第六页| 国产精品色在线| 久久久水蜜桃| 国产亚洲二区| 国产色综合久久| 欧美视频免费看| 欧美成人免费全部观看天天性色| 极品少妇一区二区三区精品视频| 午夜在线不卡| 国产精品伦理| 国产精品二区二区三区| 99精品视频一区二区三区| 亚洲欧美综合国产精品一区| 欧美日韩亚洲免费| 欧美亚洲综合另类| 欧美视频国产精品| 久久超碰97中文字幕| 国产亚洲a∨片在线观看| 国产一区久久久| 国精品一区二区三区| 国产午夜亚洲精品羞羞网站| 亚洲尤物在线| 午夜亚洲视频| 亚洲福利一区| 亚洲欧洲偷拍精品| 亚洲精品资源| 欧美在线高清| 久久久久成人精品| 亚洲精品久久久久中文字幕欢迎你| 久久成人精品一区二区三区| 亚洲精品乱码久久久久久蜜桃麻豆| 蜜臀久久久99精品久久久久久| 久久国产精品色婷婷| 亚洲免费在线视频| 红桃视频成人| 蜜桃久久精品乱码一区二区| 曰韩精品一区二区| 欧美一区二区视频观看视频| 亚洲欧美中文在线视频| 欧美日韩视频不卡| 免费亚洲一区二区| 欧美精品色一区二区三区| 中文一区二区| 亚洲欧洲日韩综合二区| 亚洲第一福利在线观看| 激情成人中文字幕| 黄色工厂这里只有精品| 久久婷婷综合激情| 久久久之久亚州精品露出| 国产农村妇女精品| 亚洲精品乱码久久久久久蜜桃91| 在线电影欧美日韩一区二区私密| 国产精品视频网| 国产精品稀缺呦系列在线| 91久久精品www人人做人人爽| 久久不射电影网| 国产精品你懂得| 欧美一区永久视频免费观看| 国产精品看片你懂得| 亚洲第一在线视频| 国产精品www| 国产欧美一区二区三区沐欲| 麻豆精品视频在线观看视频| 久久精品国产v日韩v亚洲| 国产欧美一区二区三区在线看蜜臀| 亚洲免费综合| 亚洲欧美精品在线| 国产情人节一区| 亚洲少妇中出一区| 一区二区欧美视频| 欧美中文字幕在线播放| 国产伊人精品| 欧美韩日一区二区三区| 亚洲香蕉视频| 欧美理论电影网| 看片网站欧美日韩| 一区二区三区免费看| 国产精品欧美经典| 亚洲人成网站在线播| 国产精品海角社区在线观看| 激情综合久久| 欧美视频在线一区二区三区| 亚洲欧美不卡| 欧美日韩在线播放三区| 欧美不卡视频| 国产午夜精品福利| 久久欧美中文字幕| 国产精品一区二区久久久久| 精品动漫3d一区二区三区| 亚洲精品欧美激情| 国产精品视频在线观看| 欧美综合77777色婷婷| 国产主播精品| 一区二区欧美日韩| 国产精品手机在线| 欧美高清在线精品一区| 国产日韩欧美三级| 欧美高清不卡在线| 在线播放日韩欧美| 欧美在线视频免费播放| 亚洲国产日日夜夜| 久久免费国产精品1| 在线亚洲高清视频| 欧美成人69av| 国产精品久久久久久久电影| 最新国产乱人伦偷精品免费网站| 噜噜噜噜噜久久久久久91| 国产农村妇女毛片精品久久莱园子| 欧美激情精品久久久久久久变态| 欧美一级片一区| 欧美va亚洲va日韩∨a综合色| 久久精品国产精品亚洲综合| 一区在线观看| 欧美黄色一区| 亚洲一区二区综合| 欧美一级理论片| 久久精品久久综合| 亚洲欧美日韩国产综合在线| 国产精品久久7| 欧美亚洲成人精品| 亚洲电影在线观看| 国产精品亚洲片夜色在线| 欧美精品乱码久久久久久按摩| 欧美精品999| 亚洲国产综合在线看不卡| 99视频热这里只有精品免费| 久久精品国产99国产精品澳门| 亚洲精品日韩综合观看成人91| 欧美经典一区二区三区| 亚洲清纯自拍| 国产乱码精品一区二区三区五月婷| 午夜精品在线视频| 久久综合精品国产一区二区三区| 欧美精品在线观看一区二区| 亚洲专区在线视频| 欧美激情1区2区3区| 欧美成人一区二区三区片免费| 国产精品美女主播在线观看纯欲| 中文久久乱码一区二区| 在线精品福利| 亚洲私人黄色宅男| 国产精品色午夜在线观看| 欧美一级黄色录像| 伊人久久亚洲美女图片| 美日韩免费视频| 日韩视频中午一区| 蜜桃精品一区二区三区| 欧美日韩免费观看一区二区三区| 亚洲视频www| 亚洲美女在线观看| 国产麻豆精品在线观看| 亚洲国产精品久久久久秋霞不卡| 欧美日韩一区二区三区免费| 亚洲欧美日韩国产综合在线| 国产精品视频免费在线观看| 午夜精品婷婷| 国产精品久久午夜| 欧美一区二区三区视频免费| 一区二区三区视频在线观看| 欧美专区日韩专区| 亚洲精品国产精品国自产观看| 久久九九免费视频| 国产主播一区| 一区二区三区在线视频播放| 国产精品综合久久久| 欧美日韩在线看| 欧美日韩一区二区三区高清| 欧美国产日韩二区| 亚洲国产裸拍裸体视频在线观看乱了| 男人的天堂亚洲在线| 国产精品久久影院| 欧美日韩亚洲一区二| 一本大道久久a久久精二百| 久久久999精品视频| 亚洲国产成人av| 欧美国产综合| 亚洲国语精品自产拍在线观看| 国产精品va在线播放我和闺蜜| 一本一本久久a久久精品综合妖精| 欧美日韩国产bt| 亚洲国产免费看| 久久综合网色—综合色88| 最近中文字幕mv在线一区二区三区四区| 欧美精品在线免费观看| 亚洲日本无吗高清不卡| 国产精品日韩二区| 加勒比av一区二区| 国产精品国产福利国产秒拍| 久久久久久色| 午夜精品久久久久久久男人的天堂| 国产欧美日韩高清| 欧美日韩国产a| 欧美三级在线视频| 欧美理论电影在线观看| 在线播放中文字幕一区| 久久夜色精品国产|