基于DM6446的Windows CE顯示驅動設計實現(xiàn)
摘 要: DM6446是一款有著豐富外設資源和強大計算能力的多媒體處理芯片,一般需要通過操作系統(tǒng)對其復雜資源進行有效管理。由于多數(shù)多媒體應用需要有圖形界面,但現(xiàn)有平臺操作系統(tǒng)Linux 其內核和圖形界面是分離的,需要另外移植,相比之下WINCE本身自帶了較為優(yōu)秀的圖形界面,只需對其進行顯示驅動的開發(fā)就能擁有一個優(yōu)秀的圖形界面。詳細闡述了WINCE顯示驅動原理和在DM6446上的設計與實現(xiàn)。系統(tǒng)啟動后WINCE圖形界面運行穩(wěn)定,表明驅動程序實現(xiàn)良好。
本文引用地址:http://www.ex-cimer.com/article/167501.htm作為一款多媒體處理芯片,TI公司推出的DM6446 采用ARM+DSP 的雙內核架構,有著豐富的外設資源和強大的計算能力,因此一般通過操作系統(tǒng)對其復雜資源進行有效管理。DM6446現(xiàn)有平臺操作系統(tǒng)主要基于嵌入式linux 系統(tǒng),但同時也有支持其他主流嵌入式操作系統(tǒng)的能力。
由于多媒體應用常常需要有圖形界面,而現(xiàn)有平臺操作系統(tǒng)Linux其內核和圖形界面是分離的,需要進行另外移植,相比之下Windows CE本身自帶了較為優(yōu)秀的圖形界面,只需對其進行顯示驅動的開發(fā)就能擁有一個優(yōu)秀的圖形界面。因此選擇在DM6446進行其他系統(tǒng)的移植開發(fā)無疑能使該平臺程序開發(fā)具有更多的選擇余地和更高的性價比。
Windows CE是Microsoft公司專門針對嵌入式產(chǎn)品領域開發(fā)的嵌入式操作系統(tǒng),具有圖形用戶界面出色、多任務處理能力、可裁剪性和可移植性、應用軟件支持豐富、實時性良好等特點。本文選用的Windows CE版本為Windows CE.NET 5.0,以下簡稱為WINCE.
1 DM6446芯片及其顯示模塊介紹
1.1 DM6446芯片簡介
DM6446 芯片,如下圖1所示,由ARM子系統(tǒng)、DSP子系統(tǒng)、VICP協(xié)處理器、視頻處理子系統(tǒng)和眾多的芯片外設組成。其中ARM 核用作整個系統(tǒng)的控制功能,DSP 子系統(tǒng)用于復雜的數(shù)據(jù)和圖像處理功能,視頻處理子系統(tǒng)用于和圖像輸入和輸出。這些模塊的聯(lián)系通過中心資源交換通道(Switch CentralResources,SCR) 進行管理。
圖1 DM6446 芯片總體架構
1.2 芯片顯示模塊功能介紹
DM6446 顯示模塊又稱為視頻處理后端(VPBE,Video Processing Back End),為芯片視頻處理子系統(tǒng)的一部分。VPBE 總體結構如圖2 所示。由圖2 可以看出,VPBE主要由1 個OSD (On Screen Display)引擎和1 個視頻編碼器(VENC,Video ENCoder)組成。OSD引擎可以處理2個獨立的視頻窗口和兩個獨立的OSD窗口,VENC視頻編碼器則能提供四路視頻數(shù)據(jù)轉換,工作頻率高達54MHz,兼容NTSC/PAL制式視頻和S-Video.
圖2 DM6446 顯示模塊總體架構。
DM6446 視頻編碼器還能夠向RGB888 的顯示設備提供24 bit的數(shù)字視頻輸出接口,支持8/16為的BT.656 輸出和垂直/水平同步分離的CCIR.601.
OSD 模塊的視頻信號在輸出之前會經(jīng)過合成然后送到VENC最終轉變成YCbCr格式輸出。視頻數(shù)據(jù)是建立在外部存儲器DDR2的,并直接送到顯示設備作顯示。從DAC出來就可以通過RCA端子接上LCD液晶電視。更詳細的硬件說明可參考TI 的官方數(shù)據(jù)手冊TMS320DM644x DMSoC Video Processing BackEnd (VPBE) User's Guide.pdf.
2 WINCE驅動架構分析
將WINCE 移植到DM6446 上面除了需要進行OAL層的代碼和源碼配置文件的編寫以外,還需進行大量的設備驅動程序開發(fā)。
2.1 WINCE驅動原理
設備驅動程序作為一個抽象物理設備或虛擬設備的功能程序,它管理設備的操作,并將設備的功能導出給應用程序和操作系統(tǒng)。因此用戶程序訪問這些硬件設備只需要通過調用驅動程序提供的接口函數(shù)。
WINCE 的所有設備驅動程序都是以用戶態(tài)下動態(tài)鏈接庫(Dynamic Linkable Library,DLL)文件形式存在的。像所有的Windows DLL一樣,DLL是無法單獨被加載和運行的。如果要運行DLL 中的代碼,必須有一個EXE 進程首先把該 DLL 加載到自己的地址空間內,然后才可以執(zhí)行DLL 中的代碼。WINCE 下的驅動程序也必須被其他EXE加載。
2.2 WINCE驅動分類
基于WINCE的驅動程序有兩種模型:本地設備驅動程序(Native Device Driver) 和流接口驅動( Streams Device Driver) 程序。本機設備驅動程序適用于集成到WINCE平臺的設備,總是在WINCE的平臺啟動時被加載;流接口驅動程序也稱為可安裝的驅動程序,它們使用流接口驅動并借助于文件系統(tǒng)調用(如Createfile,DeviceIoControl等)從設備管理器或應用程序獲得命令。本文討論的顯示驅動屬于本地設備驅動程序。
而從驅動實現(xiàn)方式來區(qū)分,無論流接口驅動還是本地驅動設備驅動,都可以采用兩種實現(xiàn)方式:單體結構方式和分層結構方式,它們都向上提供DDI (Device Driver Interface)調用,供其他模塊或應用程序調用。無論采用哪種結構,驅動程序都必須與其控制設備的DDI 相一致。DDI是與WINCE 系統(tǒng)的接口,流接口設備的DDI 都是流接口函數(shù)。
3 顯示驅動的實現(xiàn)
3.1 顯示驅動的加載管理
圖3 WINCE顯示驅動主體架構示意圖。
WINCE下的驅動程序必須被其他EXE加載,顯示驅動也不例外。WINCE 顯示驅動在系統(tǒng)啟動時由GWES.exe 加載和管理,并駐留在GWES 的進程地址空間內。如圖3 所示,GWES 子系統(tǒng),由GDI 和DirectDraw兩部分組成,為運行在操作系統(tǒng)之上的應用程序提供圖形功能的系統(tǒng)調用,例如CreateDC,ReleaseDC等等。GWES加載顯示驅動的具體過程如下:GWES啟動時將去訪問候選顯示設備列表(該列表在注冊表HKEY_LOCAL_MACHINESystemGDIDisplayCandidates下面),看看是否有驅動程序已經(jīng)在本機上實例化,如果有的話GWES 會使用它找到的第一個已經(jīng)實例化的驅動;如果驅動程序沒有在本機上實例話或者找不到合適的驅動程序,接下來GWES嘗試加載Ddi.dll.默認情況下加載的是Ddi.dll,但如果存在KEY_LOCAL_MACHINESystemGDIDriversDisplay項,GWES會加載此注冊表項所指定的顯示驅動。
評論