b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

[开发wince驱动程序]

电脑杂谈  发布时间:2020-03-27 19:18:35  来源:网络整理

wince 启动ftp_wince ftp服务_wince ftp 加密

欢迎来到Wince技术讨论组QQ#326444254

本文介绍了WinCE中使用分层驱动程序结构实现的触摸屏驱动程序,包括对触摸屏驱动程序模型的说明,触摸屏驱动程序的实现以及接口实现的知识.

1. 触摸屏驱动器型号

1.1分层触摸屏驱动程序结构

此触摸屏驱动程序使用分层的驱动程序结构. 其驱动模型如下图所示. 此结构将驱动程序代码划分为上层模型设备驱动程序层(MDD),下层为平台相关的驱动程序层(PDD). 其中,MDD层无需修改即可直接使用. 此部分为GWES提供DDI接口,并且MDD通过指定的DDSI功能接口调用PDD. 这是我们通常要实现的部分. 除了DDSI功能集接口外,PDD部分和MDD部分还需要实现一些指定的变量定义或变量初始化动作(例如,gIntrTouch和gIntrTouchChanged在PDD层上定义,但主要在MDD层上使用) . )PDD层不一定必须在严格的分层模型中实现,有时有必要通过共享变量来完成交互.

图1 WinCE触摸屏驱动程序模型

1.2 DDI功能集(MDD层)

TouchPanelPowerHandler(BOOL boff)

触摸屏的电源管理功能,boff: TRUE表示关闭电源,FALSE表示打开电源wince 启动ftp,它仅调用DdsiTouchPanelPowerHandler()函数,该函数在进入或退出关机状态时生成.

TouchPanelCalibrationAPoint()

此函数用于校准输入的触摸屏坐标并将触摸屏坐标转换为显示坐标,使用公式Sx = A1 * Tx + B1 * Ty + C和Sy = A2 * Tx + B2 * Ty + C2

TouchPanelReadCalibrationPoint()

执行触摸屏校准程序时,使用此功能可在当前校准点的交叉点上单击触摸屏坐标.

TouchPanelReadCalibrationAbord()

取消校准(在运行触摸屏校准程序期间取消校准)并且仅设置并返回状态位和事件时,将调用此函数.

TouchPanelDisable()

禁用触摸面板设备. 此功能关闭ISR,停止中断和注销事件,以及其他同步方法. 该函数调用DdsiTouchPanelDisable()函数.

TouchPanelEnable(PFN_TOUCH_PANEL_CALLBACK pfnCallback)

PfnCallback是一个指向触摸面板事件的回调函数. 该函数执行以下操作:

⑴创建事件hTouchPanelEvent和hCalibrationSampleAvailable,其中在按下或抬高触笔或中断计时器时触发hTouchPanelEvent事件,并且在以校正状态输入校正数据时触发hCalibrationSampleAvailable事件.

⑵初始化关键部分,初始化所需的触摸屏中断gIntrTouch和gIntrTouchChanged,并将它们与事件hTouchPanelEvent相关联.

⑶创建IST TouchPanelpISR并设置其优先级.

TouchPanelSetCalibration()

此功能在运行触摸屏校准程序时,通过校准动作获得在十字形上按下的笔的显示坐标(Sx,Sy)和触摸坐标(Tx,Ty). 用于计算校准参数A1,B1,C1和A2,B2,C2.

TouchPanelGetDeviceCaps()

用于查询触摸屏设备支持的特定功能,通过DDSI功能查询对应的信息,并在查询屏幕坐标信息时保存屏幕信息,以供以后的步骤计算校准参数.

TouchPanelSetMode()

它用于设置触摸屏的工作模式(使用低采样率或高采样率). 设置IST优先级时,它是直接通过内核API完成的,其他设置则直接传递给DdsiTouchPanelSetMode()函数进行处理.

wince ftp服务_wince 启动ftp_wince ftp 加密

1.3WinCEDDSI功能集(PDD层)

DdsiTouchPanelGetDeviceCaps(INT iIndex,LPVOID lpOutput)

查询有关触摸面板设备的信息.

IIndex: 查询的索引值. 值如下:

TPDC_SAMPLE_RATE_ID: 查询采样率信息.

TPDC_CALIBRATION_POINT_COUNT_ID: 查询用于验证的点数.

TPDC_CALIBRATION_POINT_ID: 查询需要验证的点的坐标.

LpOutput: 根据iIndex值指向相关信息.

DdsiTouchPanelSetMode()

设置触摸屏工作模式.

iIndex: 模式索引

TPSM_SAMPLERATE_HIGH_ID: 高采样率

TPSM_SAMPLERATE_LOW_ID: 低采样率

lpInput: 指向包含相关信息的内存

DdsiTouchPanelEnable()

此功能执行的操作:

⑴为所需的I / O,ADC,PWM和INT寄存器分配存储空间.

⑵触摸屏控制器,中断控制器和PWM的寄存器.

(3)申请触摸屏中断gIntrTouch和计时器中断gIntrTouchChanged,对其进行初始化,然后将相应的系统逻辑中断号分配给物理中断号.

DdsiTouchPanelDisable()

屏蔽触摸屏中断并释放分配给I / O,ADC,PWM和INT寄存器的WinCE存储空间.

DdsiTouchPanelAttach()

它只是返回1.

DdsiTouchPanelDetach()

它只是返回0.

DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS * pTipStateFlags,

INT * pUncalX,

INT * pUncalY)

获取触摸面板上按下点的状态和坐标.

wince ftp服务_wince ftp 加密_wince 启动ftp

◆pTipStateFlags: 当前接触点的状态,例如无效点,有效点,按下点等.

◆pUnCalX: 触摸点的X坐标

◆pUnCalY: 触摸点的Y坐标

DdsiTouchPanelPowerHandler(BOOLbOff)

设置触摸屏的电源状态,boff: TRUE表示关闭电源,FALSE表示打开电源,

2. 触摸屏驱动程序的实现

Windows CE5.0触摸屏驱动程序使用中断方法来检测触摸笔的按下状态. 如果检测到触摸笔的触摸,将生成中断并触发事件,以通知工作线程开始收集数据. 同时,驱动程序将启动硬件计时器. 只要它检测到触摸笔仍处于按下状态,就会定期触发相同事件,以通知工作线程收集数据,直到提起触摸笔后计时器关闭并且处于按下状态被重新检测. 触摸屏中断和计时器中断是驱动程序中的两个中断源,它们不仅可以监视触摸笔的按下和抬起状态,还可以检测触摸笔按下时的拖动轨迹. 触摸屏驱动程序过程如下图所示

3. 四线电阻式触摸屏的工作原理

四线电阻式触摸屏的结构如图1所示. 玻璃或丙烯酸基板上覆盖有两个涡轮,它们是均匀导电的ITO层,分别用作X电极和Y电极. 栅格点分别绝缘. ITO的下层附着在玻璃基板上,ITO的上层附着在PET膜上. X电极和Y电极的正负两端通过“导电条”(图中的黑条)从两端引出,并且X电极和Y电极导电条的位置彼此垂直. 端子X-,X +,Y-和Y +上有四行. 这就是四线电阻式触摸屏名称的由来. 当物体接触触摸屏的表面并施加一定的压力时,上ITO导电层变形并接触下ITO. 这种结构可以等效于相应的电路.

计算联系人的X和Y坐标分为以下两个步骤:

1. 计算Y坐标,将驱动电压Vdrive施加到Y +电极,将Y-电极接地,并测量X +作为端子的接触点电压. 由于ITO层导电均匀,因此接触电压与Vdrive电压之比等于接触点. Y点坐标与屏幕高度之比.

2. 计算X坐标,将驱动电压Vdrive施加到X +电极,将X-电极接地,并测量Y +作为端子的接触点电压. 由于ITO层是均匀导电的,因此接触电压与Vdrive电压之比等于接触点. X点坐标与屏幕宽度之比.

所测量的电压由ADC转换为接触点的原始坐标(值范围由所选的A / D转换器位数确定),然后根据所用LCD屏幕的实际像素进行转换. 校准将直接转换为屏幕坐标,以供GWES使用.

4. 触摸屏的界面部分

X +: TSXP已连接到触摸屏控制器.

X-: TSXM已连接到触摸屏控制器.

Y +: TSYP连接到触摸屏控制器.

◆Y-: TSYM连接到触摸屏控制器.

使用触摸屏界面时,应将TSXM或TSYM连接到触摸屏界面.

5. 配置控制器硬件

5.1 ADCCON ----- ADC控制寄存器

ECFLG: ADCCON [15],AD转换结束标志,只读,0表示正在进行AD转换. 1表示AD转换结束.

PRSCEN: ADCCON [14],AD转换器预分频器已启用,此处已启用,因此为1.

PRSCVL: ADCCON [13: 6],AD转换器预分频值,这里是49.

SEL_MUX: ADCCON [5: 3],选择模拟信号输入通道,此处选择XP,因此为7.

STDBM: ADCCON [2],待机操作模式选择. 在这里选择了正常操作模式,因此它是0.

READ_START: ADCCON [1],通过读取开始A / D转换. 在这里,选择通过无效的读取操作开始A / D转换,因此它为0.

ENABLE_START,ADCCON [0],通过使能该位来使能A / D转换,在此不选择任何操作. 在开始A / D转换后,将启用该位.

5.2 ADCTSC ----- ADC触摸屏控制寄存器

wince ftp服务_wince 启动ftp_wince ftp 加密

UD_SEN: ADCTSC [8]. 选择此处可在按下手写笔时检测中断信号,因此它是0.

YM_SEN: ADCTSC [7],启用了YM开关,此处启用了YM输出驱动器(GND),因此为1.

YP_SEN: ADCTSC [6],启用了YP开关,此处禁用了YP输出驱动器(AIN5),因此为1.

XM_SEN: ADCTSC [5],已启用XM开关. 这里,XM输出驱动器被禁用(Hi-Z),因此它为0.

XP_SEN: ADCTSC [4],启用XP开关,此处禁用XP输出驱动器(AIN7),因此为1.

PULL_UP: ADCTSC [3]. 上拉开关已启用. 在这里,XP上拉功能已启用,因此为0.

AUTO_PST: ADCTSC [2]. 初始化时,选择自动连续地测量X和Y坐标,因此它为0,但是在开始转换时应将其设置为1.

XY_PST: ADCTSC [1: 0]. 手动测量X和Y坐标. 在这里选择等待中断模式,因此为3.

注意: 在等待触摸屏中断时,应将XP_SEN位(XP输出无效)设置为1,并将PULL_UP(XP上拉使能)位设置为0.

5.3 ADCDLY ----- ADC启动延迟寄存器

DELAY: ADCDLY [154: 0],因为选择了等待中断模式,所以该值指示在触控笔在睡眠模式下出现时,会产生启动睡眠模式的信号,其时间间隔为几个毫秒. . 这里的值是40000? ? ? ? ? ? ? ? ? (40多岁,时间太长吗?)

SUBINTMSK ----- WinCE中子中断屏蔽寄存器

该寄存器有11位,每个位与一个中断源相关. 触摸屏中断请求有效,因此第十位应设置为0.

v_pINTregs-> INTSUBMSK&=〜(1 << IRQ_SUB_TC);

5.4 TCFG1 ----- 5路复用器和DMA模式选择寄存器

MUX3: TCFG1 [15:12],为PWM定时器3选择多个​​输入并初始化其值. 每个计时器都有一个时钟分频器,可以产生5个不同的分频信号(1 / 2、1 / 4、1 / 8、1 / 16和TCLK),在这里选择1/16分频.

v_pPWMregs-> TCFG1&=〜(0xf << 12); / * Timer3的分频器值* /

v_pPWMregs-> TCFG1 | =(3 << 12); / * 1/16

TCNTB3 ----- PWM定时器3计数缓冲寄存器,选择定时器3作为时钟,例如,一次定义10ms中断,提供触摸屏采样时间参考,即10ms触摸屏采样. 这里是17×1000/100 = 170,这里PCLK = 400MHz / 6,我们可以得到定时器的时钟频率3 = PCLK /(244 + 1).16,可以算出触摸屏会产生一个定时器在10毫秒内中断,然后执行采样.

6. 确定是否触摸屏并中断处理

我们使用中断等待模式. 当按下手写笔时,触摸屏控制器将向中断控制器生成一个中断信号(INT_TC). 中断处理程序捕获该物理中断后,它将调用已注册的ISR来决定如何处理该中断. 硬件中断. ISR将与该物理中断相对应的逻辑中断号返回给内核. 例如,当我们用手写笔按下触摸屏时,会生成INT_TC物理中断. ISR将物理中断号映射到逻辑中断信号,然后操作系统根据物理中断号触发关联. WinCE事件内核对象gIntrTouch,正在等待该事件内核对象的IST(TouchPanelpISR,名称不是很合理,应更改为TouchPanelpIST)以开始中断处理.

我们在驱动程序中使用两个中断源,一个是触摸屏中断(包括笔触摸或抬起中断),它是根据ADC触摸屏控制寄存器ADCTSC的UD_SEN位确定的,代码中的名称是gIntrTouch)wince 启动ftp,也就是说,当触笔被按下或抬起时,将生成一个物理中断INT_TC,其对应的逻辑中断号为SYSINTR_TOUCH;另一个是计时器中断(此处使用timer3),只要检测到仍按下触控笔,计时器(此处为10ms,代码中的名称为gIntrTouchChanged)将生成计时器中断INT_TIMER3,其对应的逻辑为中断号为SYSINTR_TOUCH_CHANGED. 这两个中断将触发相同的事件hTouchPanelEvent,然后等待该时间的IST(TouchPanelpISR)线程将开始执行.

以下是导致中断的条件

⑴按下手写笔时,触摸屏将中断.

⑵抬高触控笔时,触摸屏会中断.

(3)按下触控笔时,在触摸屏中断产生的同时,驱动程序打开硬件计时器timer3. 只要检测到触笔仍被按下,计时器(每10毫秒产生一次计时器中断)就会被中断.

判断触控笔在触摸屏上的活动的过程如下:

7. 获取稳定和去抖动的位置测量数据

获取接触点的原始坐标(值的范围由所使用的A / D转换器位数确定)后,还根据所使用的LCD屏幕的实际像素进行转换. 转换后,通过校准将其直接转换到屏幕. 坐标以方便图形界面的后续开发,然后通过回调函数将屏幕坐标和采样状态参数传递给GWES.

wince ftp 加密_wince ftp服务_wince 启动ftp

人机界面的触摸屏上有3种操作:

⑴触摸笔在触摸屏上的位置不变.

⑵触控笔在触摸屏上连续滑动.

3触摸笔在触摸屏上跳得很大.

7.1触摸屏采样程序

按下触控笔时,将开始对触摸屏的触摸坐标进行采样. 同时,打开定时器中断以准备10毫秒后的定时器中断. 这是采样过程:

⑴ADC控制寄存器ADCCON和ADC触摸屏控制寄存器ADCTSC被设置为开始自动测量X和Y坐标.

⑵等待AD转换完成. 您可以通过访问ADCCON的ECFLG来确定AD转换是否完成.

(3)AD转换完成后,通过读取ADC转换数据寄存器ADCDAT0和ADCDAT1来读取触摸屏坐标的Y坐标和X坐标值.

⑷返回第一步,连续获取5组数据,对它们求和并计算平均值. 如果这5组数据中的平均值与最新数据之间的差大于我们指定的阈值(此阈值应基于我们使用LCD屏幕的分辨率确定时的阈值),则认为样本值无效,并修改了ADCTSC寄存器的设置,使其进入等待中断模式,以准备下一个中断(将触控笔移至中断).

7.2触摸屏过滤程序

TPS_GetXY()用于获取触控笔按下位置的触摸屏坐标,然后通过回调函数将校准后的坐标传递给GWES,其中该回调函数通过GWES调用TouchPanelEnable(pfnCallback)函数传递. 该过程包括以下步骤:

⑴通过功能TSP_GetXY()获取触控笔按下位置的触摸屏坐标.

⑵根据使用的LCD屏幕的实际像素(即通过功能)转换触摸屏的坐标

TSP_TransXY()使用公式转换通过TSP_GetXY()函数获得的触摸屏坐标

X = W *(x-x1)/(x2-x1),Y = H *(y-y1)/(y2-y1),其中(x1,y1)和(x2,y2)分别表示显示与该区域的左上角和右上角相对应的触摸屏的采样坐标. 在此显示中,分辨率为240×320.代码中的(x1,y1)和(x2,y2)的值为(85,105)和(965,980). 这些值是在分辨率为240×4和320×4之后确定的. 相应地,我们还需要处理W和H: W = 4 * W,H = 4 * H,(x,y)是任意点在触摸屏上. 坐标(这里有一个问题,为什么右下角坐标965的x值不大于240×4?).

⑶判断由obtained获得的坐标值,如果x坐标值大于或等于240×4,或者y坐标值大于或等于320×4(即,之前的x坐标值⑵转换大于或等于965,y坐标值大于或等于980),则这次我们认为采样值无效,或者最后一次对应的x坐标差或y坐标差两个采样值分别小于或等于15和40,这意味着触控笔已经两次采样了. 这段时间一直在同一位置,因此最新的采样值将被忽略;如果最后两个样本值的相应x坐标值差或y坐标值差分别大于15和40,则表示手写笔已在两个样本中采样. 触控笔在时间内滑动,此采样有效.

⑷使用Sx = A1 * Tx + B1 * Ty + C和Sy = A2 * Tx + B2 * Ty,使用TouchPanelCalibrateAPoint()函数将有效触摸屏按下点的坐标转换为相应的显示设备点坐标. + C2这两个公式,其中A1,B1,C1和A2,B2,C2是在执行触摸屏校准过程时通过TouchPanelSetCalibration()函数计算的.

⑸通过⑷变换获取显示坐标,并对这些值进行边界检查. 如果此x坐标值大于或等于.

⑹回调通过TouchPanelEnable(pfnCallback)函数传入的函数指针,还传递采样状态,并将校准后获得的坐标显示到GWES.

校准由触控笔按下的触摸屏坐标后,将采样状态和位置更改信息通过GWES发送到上级图形软件.

8. 校准触摸屏

触摸屏的校准过程如下:

⑴调用TouchPanelEnable函数以开始触摸屏采样.

⑵调用TouchPanelGetDeviceCaps函数以获取校准触点的数量.

(3)转到校准点. 对于每个校准点,都有以下过程:

I: 调用TouchPanelGetDeviceCaps函数以获取校准点的坐标.

II: 在上述校准点绘制一个十字,然后等待用户单击.

III: 用户单击十字图形后,调用TouchPanelReadCalibrationPoint函数以获取触摸屏在校准点的坐标.

⑷获取所需的校准点后,调用TouchPanelSetCalibration函数以计算校准系数A1,B1,C1和A2,B2,C2.

完成上述步骤后,WinCE平台下的触摸屏驱动程序开发已基本完成,在实际操作中需要考虑具体的硬件环境.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-154507-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 曾凯
        曾凯

        军事上等全方位对中国的遏阻

      热点图片
      拼命载入中...