基于S3C2440的WindML圖形驅(qū)動(dòng)設(shè)計(jì)
2D層與圖形驅(qū)動(dòng)程序通過ugL_ugi_driver結(jié)構(gòu)進(jìn)行通信。結(jié)構(gòu)中的每一個(gè)功能指針對(duì)應(yīng)一個(gè)執(zhí)行相應(yīng)圖形顯示操作的驅(qū)動(dòng)程序。2D層不直接調(diào)用驅(qū)動(dòng)程序,它通過結(jié)構(gòu)功能指針調(diào)用驅(qū)動(dòng)程序。實(shí)現(xiàn)如下:
VxWorks操作系統(tǒng)下,所有的設(shè)備必須通過調(diào)用xxxDevCreate()程序創(chuàng)建。這個(gè)函數(shù)是設(shè)備驅(qū)動(dòng)以及設(shè)備最初功能的主要入口,uglInit-ialize()程序在WindML初始化時(shí)調(diào)用xxxDevCreate()。xxxDevCreate()程序需要完成以下功能:
(1)分配驅(qū)動(dòng)圖形結(jié)構(gòu)。該結(jié)構(gòu)已在驅(qū)動(dòng)頭文件里定義。
(2)利用硬件抽象層打開圖形設(shè)備。分配了驅(qū)動(dòng)結(jié)構(gòu)之后,硬件抽象層將被用來(lái)打開圖形設(shè)備,校驗(yàn)是否能被寫入和映射設(shè)備到虛擬內(nèi)存。在此過程中,圖形設(shè)備的基地址和寄存器將被定義。
(3)初始化驅(qū)動(dòng)控制結(jié)構(gòu)。在確定圖形設(shè)備可以被訪問之后,初始化驅(qū)動(dòng)控制結(jié)構(gòu)。
(4)設(shè)置設(shè)備為靜止?fàn)顟B(tài)。校驗(yàn)了設(shè)備之后,驅(qū)動(dòng)對(duì)圖形設(shè)備進(jìn)行最小初始化,并設(shè)置其為靜止?fàn)顟B(tài)。圖形設(shè)備設(shè)置為靜止?fàn)顟B(tài)需要以下操作:屏蔽圖形相關(guān)中斷;調(diào)用uglGenericClutCreate()初始化調(diào)色板;初始化圖形芯片的內(nèi)存控制器;如果需要,則關(guān)閉顯示。
(5)返回指向驅(qū)動(dòng)結(jié)構(gòu)的指針。如果xxxDevCreate()函數(shù)執(zhí)行成功,則返回一個(gè)指向ugl_ugi_driver結(jié)構(gòu)的指針。如果xxxDevCreate()函數(shù)執(zhí)行失敗,則返回NULL。
此外,驅(qū)動(dòng)程序還必須支持一個(gè)信息控制程序,xxxinfo()。這個(gè)程序允許應(yīng)用訪問驅(qū)動(dòng)提供的支持,并且控制各種選項(xiàng)。在獲得畫面緩沖器的特征、獲得基色的信息和以為圖形設(shè)備擴(kuò)展一個(gè)實(shí)例等方面會(huì)用到xxxinfo()。
3 鍵盤驅(qū)動(dòng)程序設(shè)計(jì)
基于I2C總線鍵盤芯片ZLG7290的芯片內(nèi)部已實(shí)現(xiàn)鍵盤去抖動(dòng)及連擊鍵等處理,簡(jiǎn)化了驅(qū)動(dòng)程序的處理。WindML輸入設(shè)備驅(qū)動(dòng)負(fù)責(zé)完成接收連接在系統(tǒng)上設(shè)備的原始數(shù)據(jù),執(zhí)行原始數(shù)據(jù)的轉(zhuǎn)換,以及將輸入數(shù)據(jù)放到消息隊(duì)列中供高層軟件調(diào)用,如圖3所示。
評(píng)論