[Linux]
嵌入式开发之ARM9--TQ2440触摸屏学习笔记(转)
嵌入式系统
 
4559 人阅读
|
10 人回复
|
2016-03-01 
 
 
 
 
TA的每日心情  | 奋斗 2018-3-5 10:57 | 
|---|
 
  签到天数: 112 天 连续签到: 1 天 [LV.6]常住居民II 
进士 
 
 
	- 积分
 - 1990
 
 
 
 
 | 
 
 
  硬件平台:TQ2440 
  触摸屏检测方法可以分两种: 
  1.检测按下、弹起两个状态时的x y坐标值; 
  以检测按下状态是读取x y坐标值为例 实现代码如下 
  void Init_Touchpanel(void) 
  { 
  ClearPending(BIT_ADC); 
  rSUBSRCPND|=BIT_SUB_TC ; 
  //清adc中断 触摸屏中断 
  rADCDLY=40000; //ADC转换间隔 (1/3.6864M)*50000=13.56ms 
  //Normal conversion mode:ADC Start or interval delay 0~65535 
  rADCCON=(1<<14)+(ADCPRS<<6); //ADCPRS En, ADCPRS Value 
  //使能预分频器 预分频值 ADCPRS(9) AD转换器频率=gclk / (9+1) 
  rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En 
  //ADC触摸屏控制寄存器 检测手写笔按下的中断信号 YM输出驱动有效 YP输出无效 XM输出禁止 XP输出驱动禁止 
  // XP上啦使能 adc正常转换模式 等待中断模式 
  pISR_ADC = (int)AdcTsAuto; 
  //指定adc中断服务程序 
  rINTMSK=~BIT_ADC; //ADC Touch Screen Mask bit clear 
  rINTSUBMSK=~(BIT_SUB_TC); 
  //使能中断 当触摸笔按下时 触发INT_TC中断 
  } 
  //触摸屏中断函数 
  void __irq AdcTsAuto(void) 
  { 
  //ADCDAT0[15]==1 触摸笔未按下 
  //ADCDAT0[15]==0 触摸笔按下 
  if(rADCDAT0&0X8000) 
  return ; 
  rINTMSK |= (BIT_ADC); 
  //禁止adc中断 
  rSUBSRCPND|=BIT_SUB_TC ; 
  //禁止adc的子中断 
  rADCTSC=(1<<3)|(1<<2); //Pull-up disable, Seq. X,Y postion measure. 
  //xp上拉禁止 自动顺序测量x y位置 
  rADCCON|=0x1; //start ADC 
  while(rADCCON & 0x1); //check if Enable_start is low 
  //adc一旦开始 将自动使ADCCON[0]=0 
  while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high, This line is necessary~!! 
  //adc结束时,ADCCON[15]==1 
  while(!(rSRCPND & (BIT_ADC))); //check if ADC is finished with interrupt bit 
  //等待ADC结束(不管后级中断是否传递 adc完成后 此处应该被置位) 
  point.x = (rADCDAT0&0x3ff); 
  point.y = (rADCDAT1&0x3ff); 
  //获取x y方向的adc值 更新坐标点 
  Uart_Printf("XP=%04d, YP=%04dn",point.x, point.y); //X-position Conversion data 
  ClearPending(BIT_ADC); 
  rSUBSRCPND|=BIT_SUB_TC ; 
  //清adc中断 
  Init_Touchpanel(); 
  //重新初始化触摸屏 
  } 
  2.检测在按下~弹起两个状态中间的x y坐标值 定时检测并更新坐标; 
  实现: 
  a 将adc 触摸屏接口设置为检测按下触摸笔中断; 
  b 在adc按下触摸笔中断函数中 将adc的中断服务程序重新指定为弹起触摸笔中断函数; 
  c 在adc按下触摸笔中断函数中 启动定时器定时进行ADC 采集XY坐标值 或在每次读取坐标值的时候进行ad转换 获取坐标值; 
  d 在adc弹起触摸笔中断函数中 关闭定时器 停止采集x y坐标; 
  感谢博主s_a_n_的分享! 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 奋斗 2021-3-13 10:11 | 
|---|
 
  签到天数: 1088 天 连续签到: 2 天 [LV.10]以坛为家III 
状元 
 
 
	- 积分
 - 5341
 
 
      
 
 
 | 
沙发
 
 
yanhaijian 
 
发表于 2016-3-1 16:06:49
|
只看该作者
 
 
 
 
 
 
| 
我感觉之所以Linux发展缓慢,主要是大公司没有加入其中,底下的小公司还没有能力构建更好的开发环境。 |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 怒 2021-12-7 12:35 | 
|---|
 
  签到天数: 1354 天 连续签到: 1 天 [LV.10]以坛为家III 
状元 
 
 
	- 积分
 - 9907
 
 
 
 
 | 
板凳
 
 
jwdxu2009 
 
发表于 2016-3-1 22:42:42
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 奋斗 2016-8-17 17:27 | 
|---|
 
  签到天数: 4 天 连续签到: 1 天 [LV.2]偶尔看看I 
童生 
 
 
	- 积分
 - 61
 
 
 
 
 | 
地板
 
 
lzh2 
 
发表于 2016-3-3 09:32:34
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
5#
 
 
sally_cheng 
 
发表于 2016-3-3 09:51:49
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
6#
 
 
lyt2851297573 
 
发表于 2016-3-3 15:38:09
|
只看该作者
 
 
 
 
 
 
 哈哈,我刚买了套2440的板子,谢谢版主资料共享! |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
7#
 
 
张晓然 
 
发表于 2016-3-7 09:41:37
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
| 
 | 
8#
 
 
yeah26 
 
发表于 2016-3-8 09:07:03
|
只看该作者
 
 
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 奋斗 2018-3-5 10:57 | 
|---|
 
  签到天数: 112 天 连续签到: 1 天 [LV.6]常住居民II 
进士 
 
 
	- 积分
 - 1990
 
 
 
 
 | 
9#
 
 
embedsky007 
 
发表于 2016-3-9 10:42:44
|
只看该作者
 
 
 
 
 
 
yanhaijian 发表于 2016-3-1 16:06 ![]()  
我感觉之所以Linux发展缓慢,主要是大公司没有加入其中,底下的小公司还没有能力构建更好的开发环境。 ...  
呵呵这可能就需要师傅领进门,发展靠个人了,青出于蓝而胜于蓝,才能发展更快 
 |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 | 
 
 
 
TA的每日心情  | 奋斗 2018-3-5 10:57 | 
|---|
 
  签到天数: 112 天 连续签到: 1 天 [LV.6]常住居民II 
进士 
 
 
	- 积分
 - 1990
 
 
 
 
 | 
10#
 
 
embedsky007 
 
发表于 2016-3-9 10:43:25
|
只看该作者
 
 
 
 
 
 
yeah26 发表于 2016-3-8 09:07 ![]()  
看到天嵌昨天有 促销活动,买了一套,先保存着!  
是的,为支持学生开学,我们做了一个助学活动,谢谢支持了哈 
 |  
     
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |