天嵌 ARM开发社区

 找回密码
 注册
查看: 1942|回复: 0

tq2440触摸屏学习笔记(转)

[复制链接]
freewing 发表于 2016-3-1 10:41:58 | 显示全部楼层 |阅读模式
硬件平台:TQ2440
触摸屏检测方法可以分两种:
1.检测按下、弹起两个状态时的x y坐标值;

以检测按下状态是读取x y坐标值为例 实现代码如下
  1. void Init_Touchpanel(void)  
  2. {   
  3.     ClearPending(BIT_ADC);  
  4.     rSUBSRCPND|=BIT_SUB_TC  ;  
  5.     //清adc中断 触摸屏中断  
  6.   
  7.     rADCDLY=40000; //ADC转换间隔 (1/3.6864M)*50000=13.56ms  
  8.     //Normal conversion mode:ADC Start or interval delay 0~65535  
  9.       
  10.     rADCCON=(1<<14)+(ADCPRS<<6);   //ADCPRS En, ADCPRS Value  
  11.     //使能预分频器 预分频值 ADCPRS(9) AD转换器频率=gclk / (9+1)   
  12.   
  13.     rADCTSC=0xd3;  //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En  
  14.     //ADC触摸屏控制寄存器  检测手写笔按下的中断信号 YM输出驱动有效 YP输出无效 XM输出禁止 XP输出驱动禁止  
  15.     // XP上啦使能 adc正常转换模式 等待中断模式  
  16.   
  17.     pISR_ADC = (int)AdcTsAuto;  
  18.     //指定adc中断服务程序   
  19.   
  20.     rINTMSK=~BIT_ADC;       //ADC Touch Screen Mask bit clear  
  21.     rINTSUBMSK=~(BIT_SUB_TC);  
  22.     //使能中断 当触摸笔按下时 触发INT_TC中断  
  23. }  
  24.   
  25. //触摸屏中断函数  
  26. void __irq AdcTsAuto(void)  
  27. {  
  28.     //ADCDAT0[15]==1 触摸笔未按下  
  29.     //ADCDAT0[15]==0 触摸笔按下  
  30.     if(rADCDAT0&0X8000)  
  31.         return ;  
  32.     rINTMSK |= (BIT_ADC);     
  33.     //禁止adc中断  
  34.     rSUBSRCPND|=BIT_SUB_TC ;  
  35.     //禁止adc的子中断  
  36.   
  37.     rADCTSC=(1<<3)|(1<<2);         //Pull-up disable, Seq. X,Y postion measure.  
  38.     //xp上拉禁止 自动顺序测量x y位置  
  39.   
  40.     rADCCON|=0x1;                   //start ADC  
  41.   
  42.     while(rADCCON & 0x1);       //check if Enable_start is low  
  43.     //adc一旦开始 将自动使ADCCON[0]=0  
  44.       
  45.     while(!(rADCCON & 0x8000));        //check if EC(End of Conversion) flag is high, This line is necessary~!!  
  46.     //adc结束时,ADCCON[15]==1  
  47.          
  48.     while(!(rSRCPND & (BIT_ADC)));  //check if ADC is finished with interrupt bit  
  49.     //等待ADC结束(不管后级中断是否传递 adc完成后 此处应该被置位)  
  50.       
  51.     point.x = (rADCDAT0&0x3ff);  
  52.     point.y = (rADCDAT1&0x3ff);  
  53.     //获取x y方向的adc值 更新坐标点  
  54.   
  55.     Uart_Printf("XP=%04d, YP=%04dn",point.x, point.y);    //X-position Conversion data              
  56.   
  57.     ClearPending(BIT_ADC);  
  58.     rSUBSRCPND|=BIT_SUB_TC  ;  
  59.     //清adc中断  
  60.       
  61.     Init_Touchpanel();  
  62.     //重新初始化触摸屏  
  63. }  
复制代码

2.检测在按下~弹起两个状态中间的x y坐标值 定时检测并更新坐标;
实现:
a 将adc 触摸屏接口设置为检测按下触摸笔中断;
b 在adc按下触摸笔中断函数中 将adc的中断服务程序重新指定为弹起触摸笔中断函数;
c 在adc按下触摸笔中断函数中 启动定时器定时进行ADC 采集XY坐标值 或在每次读取坐标值的时候进行ad转换 获取坐标值;
d 在adc弹起触摸笔中断函数中 关闭定时器 停止采集x y坐标;
感谢博主s_a_n_的分享!

供货情况:
天嵌科技提供专业嵌入式板卡和行业解决方案。如有需要,可以联系天嵌科技的销售人员。
销售电话:020-38219416 38373101
技术支持:020-38219416转807 820

网址:http://www.embedsky.com


您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-5-29 18:51 , Processed in 1.046875 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表