Windows CE 觸摸屏(TouchPanel)驅動簡析(2)-DDSI函數-(基於WinCE5.0 SMDK2410 BSP的TouchPanel驅動)

接下來我們來看看具體的DDSI函數.
1.DdsiTouchPanelAttach和DdsiTouchPanelDetach
DLL entry進入或結束執行,這裏不需要任何工作,直接返回0

2.DdsiTouchPanelEnable
DdsiTouchPanelEnable使能觸摸屏並進行相應的初始化工作.
首先調用TSP_VirtualAlloc給寄存器(GPIO,ADC,INTR,PWM)分配虛擬地址空間.調用TSP_RegAlloc,而TSP_RegAlloc則調用VirtualAlloc和VirtualCopy進行分配虛擬地址.
TSP_VirtualAlloc:

TSP_RegAlloc:

然和調用KernelIoControl來申請ADC和TIMER3的邏輯中斷號,獲得CPU的時鐘,從而計算出給Timer3的分頻值.
最後調用TSP_PowerOn來初始化GPIO,ADC,INTR,TIMER3寄存器.
關於具體寄存器引腳的含義可以參考s3c2410的datasheet.
TSP_PowerOn:

DdsiTouchPanelEnable:

3.DdsiTouchPanelDisable
對應的就有DdsiTouchPanelDisable函數,將DdsiTouchPanelEnable申請的資源進行釋放.屏蔽中斷.

4.DdsiTouchPanelSetMode
DdsiTouchPanelSetMode用來設置觸摸屏的採樣率週期.函數傳入TPSM_SAMPLERATE_LOW_ID或TPSM_SAMPLERATE_HIGH_ID來進行相應的設置.這裏只有一個採樣率週期,所以函數不做實際工作.

5.DdsiTouchPanelPowerHandler
DdsiTouchPanelPowerHandler用來通知驅動系統正進入或離開掛起狀態.
參數bOff爲TRUE表明系統正在關閉, FALSE表明系統正在開啓.
該函數調用TSP_PowerOff和TSP_PowerOn來處理關閉或開啓狀態.
TSP_PowerOn前面已經看到了,TSP_PowerOff如下,屏蔽了INT_TC觸摸屏中斷(這裏定義爲IRQ_SUB_TC):
TSP_PowerOff:

DdsiTouchPanelPowerHandler:

6.DdsiTouchPanelGetDeviceCaps
DdsiTouchPanelGetDeviceCaps用來查詢觸摸屏設備的性能參數.
iIndex可能爲以下3個參數:
TPDC_SAMPLE_RATE_ID: 返回採樣週期,這裏TSP_SAMPLE_RATE_LOW,TSP_SAMPLE_RATE_HIGH,TSP_CurRate都爲100,即一直使用同一個採樣週期.
TPDC_CALIBRATION_POINT_ID:返回需要校準點的XY座標.校準點座標索引在PointNumber(lpOutput傳遞的結構成員).調用TSP_CalibrationPointGet來獲得.這5個點分別位於四個角和中間,也就是我們調用觸摸屏校準程序時會調用到的函數.
TPDC_CALIBRATION_POINT_COUNT_ID:返回用來校準觸摸屏的校準點數目.這裏的數目設置爲5.
lpOutput傳遞iIndex值對應的結構.

TPDC_SAMPLE_RATE_ID Pointer to a TPDC_SAMPLE_RATE structure.
TPDC_CALIBRATION_POINT_ID Pointer to a TPDC_CALIBRATION_POINT structure.
TPDC_CALIBRATION_POINT_COUNT_ID Pointer to a TPDC_CALIBRATION_POINT_COUNT structure.
CalibrationPointGet:
用來計算校準觸摸屏時的5個校準點的位置:


DdsiTouchPanelGetDeviceCaps:

7.DdsiTouchPanelGetPoint
返回最近查詢點的信息,如座標等.這個函數被TouchPanelpISR調用,而TouchPanelpISR就是觸摸屏中斷IST.在TouchPanelEnable中會進行中斷線程IST的創建.TouchPanelpISR會等待hTouchPanelEvent事件的發生.hTouchPanelEvent關聯了兩個中斷,觸摸屏中斷(INT_TC)和TIMER3中斷.即觸點中斷和觸點變化中斷.當中斷髮生時,TouchPanelpISR調用DdsiTouchPanelGetPoint來獲得採樣點信息.
詳情可參考tchmain.c(/WINCE500/PUBLIC/COMMON/OAK/DRIVERS/TOUCH/TCHMAIN)
代碼及註釋如下:

TSP_GetXY:
TSP_GetXY從觸摸屏的ADC寄存器讀取觸摸點數據,讀4次計算平均值.

TSP_TransXY:

讀到的座標數據最終交由MDD層的函數進行諸如最小二乘法的數學運算,這裏就不仔細分析了,有興趣可以參考tchmdd.lib和tch_cal.lib裏的代碼(/WINCE500/PUBLIC/COMMON/OAK/DRIVERS).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章