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