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_IDPointer to a TPDC_SAMPLE_RATE structure.
TPDC_CALIBRATION_POINT_IDPointer to a TPDC_CALIBRATION_POINT structure.
TPDC_CALIBRATION_POINT_COUNT_IDPointer 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).

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值