基于嵌入式觸摸屏驅(qū)動(dòng)程序的研究與開(kāi)
3 WinCE下驅(qū)動(dòng)程序模型
要編寫(xiě)驅(qū)動(dòng)程序還要確定它是屬于哪種驅(qū)動(dòng)。Windows CE驅(qū)動(dòng)程序分本機(jī)設(shè)備驅(qū)動(dòng)和流設(shè)備驅(qū)動(dòng)。本機(jī)設(shè)備驅(qū)動(dòng)程序是被靜態(tài)地鏈接到GWES,它們不作為一個(gè)單獨(dú)的DLL存在。有一些類(lèi)型的設(shè)備,如鍵盤(pán)、顯示器和PC卡插槽等對(duì)操作系統(tǒng)都有一定的接口,是專(zhuān)門(mén)用于Windows CE.NET的,所以它們都屬本機(jī)設(shè)備驅(qū)動(dòng)。若是按照結(jié)構(gòu)分,又可分為分層的驅(qū)動(dòng)程序和不分層的驅(qū)動(dòng)程序。分層的驅(qū)動(dòng)程序由兩個(gè)設(shè)置好的層組成:上層是模型設(shè)備驅(qū)動(dòng)程序(MDD),下層是依賴(lài)平臺(tái)的驅(qū)動(dòng)程序(PDD)。流接口驅(qū)動(dòng)程序是以動(dòng)態(tài)鏈接庫(kù)形式存在的,由設(shè)備管理器統(tǒng)一加載、管理和卸載。其驅(qū)動(dòng)模型見(jiàn)圖3。本文采用分層的驅(qū)動(dòng)程序來(lái)完成基于S3C2410的觸摸屏驅(qū)動(dòng)[2-3]。
圖3 WinCE下驅(qū)動(dòng)程序模型
4 Windows CE下觸摸屏驅(qū)動(dòng)程序的實(shí)現(xiàn)
4.1 配置硬件
對(duì)于分層的驅(qū)動(dòng)程序只需要編寫(xiě)對(duì)應(yīng)于特定硬件平臺(tái)的PDD層代碼。首先是配置控制器硬件,這是完成驅(qū)動(dòng)程序的第一件事,即對(duì)觸摸屏進(jìn)行硬件初始化。也就是通過(guò)向映射到存儲(chǔ)器的寄存器中寫(xiě)入數(shù)據(jù)將觸摸屏控制器設(shè)置成某個(gè)確定的狀態(tài)。配置硬件之前,我們需要事先決定是否采用中斷驅(qū)動(dòng),這里我們采用中斷驅(qū)動(dòng)方式。要說(shuō)明的是,并不是采用中斷永遠(yuǎn)是最好的設(shè)計(jì)方式。配置硬件這一過(guò)程是由TouchPanalPowerOn()函數(shù)完成的。下面是部分實(shí)現(xiàn)代碼:
TouchPanelPowerOn()
{
......
// Setup GPIOs for touch為觸摸屏設(shè)置輸入/輸出口
v_pIOPregs->rGPGCON = ~((0x03 30)|(0x03 28)|(0x03 26)|(0x03 24));
// Set GPG15 to use as nYPON, GPG14 to use as YMON, GPG13 to use as nXPON, GPG12 to use as XMON 配置PORT G的管腳
......
// Setup ADC register
// Down Int, YMON:0, nYPON:1, XMON:0;nXPON:1, Pullup:1, Auto Conv.,Waiting.
v_pADCregs->rADCTSC = (08)|(17)|(16)|(05)|(14)|(03)|(02)|(3);
......
}
評(píng)論