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