基于S3C2410的Windows CE 5.0 BSP移植
⑶ 實(shí)現OEMInit(),該函數將調用以下函數:OALCacheGlobalsInit(),OALIntrInit(),OALTimerInit(),OALKitlStart()來(lái)初始化Cache Global,中斷,時(shí)鐘,啟動(dòng)KITL,實(shí)現代碼如下:
void OEMInit()
{
OALCacheGlobalsInit();// 初試化cache globals
if (!OALIntrInit()) {
OALMSG(OAL_ERROR, (
LERROR: OEMInit: failed to initialize interruptsrn
));
} // 初試化中斷
OALTimerInit(1, S3C2410X_PCLK/2000, 0); // 初始化時(shí)鐘
OALKitlStart();// 初始化KITL
}
⑷ 實(shí)現OALTimerInit(),該函數用于初始化OS TIMER,設置每毫秒產(chǎn)生一個(gè)System tick,為系統計數,觸發(fā)進(jìn)程調度。由CPU的運行主頻和硬件定時(shí)器資源來(lái)確定,執行過(guò)程有:初始化時(shí)鐘狀態(tài)全局變量,初始化高分辨率時(shí)鐘函數指針,使能TIMER。
⑸ 實(shí)現中斷處理處理函數:OALIntrInit(),該函數通常先初始化中斷映射表,因為WINCE為了模塊化,把平臺相關(guān)物理中斷號和系統中斷號建立映射。然后清除外部中斷,內部中斷等。
3.3 驅動(dòng)移植
以觸摸屏為例,來(lái)探討Windows CE 5.0系統驅動(dòng)程序移植。這里以三星公司ARM9內核芯片S3C2410觸摸屏接口為基礎,通過(guò)外接4線(xiàn)電阻式觸摸屏構成硬件基礎,整個(gè)觸摸屏由橫向電阻線(xiàn)和縱向電阻線(xiàn)組成。觸摸屏驅動(dòng)的主要函數組成有:
TSP_Poweron 該函數將執行觸摸屏的一些初始化,主要是寄存器的配置。
DdsiTouchPanelEnable:使能DDSI接口,使得硬件能將流數據提供給DDSI接口,就可以實(shí)現觸摸的操作了。
DdsiTouchPanelSetMode:模式設置函數,設置觸摸屏是高采樣率還是低采樣率
DdsiTouchPanelGetPoint :觸摸屏進(jìn)行采樣函數
TSP_CalibrationPointGet:坐標轉換函數,該函數實(shí)現將從AD采樣植轉換成坐標。
移植主要過(guò)程:
⑴ 修改source文件,要添加如下庫文件:
TARGETLIBS=$(_COMMONSDKROOT)lib$(_CPUINDPATH)coredll.lib
SOURCELIBS=
$(_COMMONOAKROOT)lib$(_CPUINDPATH)tch_cal.lib
$(_COMMONOAKROOT)lib$(_CPUINDPATH)tchmdd.lib
因為這個(gè)驅動(dòng)在Windows CE 4.2下面是在Public目錄,而這里將該觸摸屏移到了Platform下面,在Windows CE4.2下面是沒(méi)有以上三條鏈接庫,但Platform,Public編譯路徑,先決條件都不同。因此引用的庫不一樣。
⑵ 刪除如下庫文件:
$(_TARGETPLATROOT)lib$(_CPUINDPATH)drvlib.lib
該庫在Windows CE 4.2系統下為觸摸屏與音頻共用庫,但在Windows CE5.0系統下,這個(gè)庫已經(jīng)不是必要的并且已經(jīng)不存在了,所以刪除掉,否則系統會(huì )出編譯錯誤。
⑶修改platform.bib,將我們移植過(guò)來(lái)的驅動(dòng)dll包含到nk.bin中
⑷修改platform.reg,其中CalibrationData是觸摸屏的一個(gè)參數:
[HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPTOUCH]
MaxCalError=dword:7
portrait
CalibrationData=517,610 897,934 142,936 129,290 891,285
其他驅動(dòng)的過(guò)程與觸摸屏類(lèi)似。
評論