article from : http://blog.sina.com.cn/s/blog_684e87fa0101005c.html

#include "def.h"
#include "2440addr.h"
#include "2440lib.h"

#define REQCNT 30
#define ADCPRS 9                //YH0627,AD转换器预分频器值
#define LOOP 1
void __irq AdcTsAuto(void);    //中断程序
int count=0;                   //触摸屏次数的记录
volatile int xdata, ydata;     //x、y坐标
   
void Test_Touchpanel(void)
{  
;ADC转换之前Touch Screen使用3.68MHZ的X-TAL CLOCK作为时钟信号源
;ADC转换延迟时间设置
;那么延迟时间为(1/3.68M)*rADCDLY
开始中断前的第一步(延迟):
   rADCDLY=50000;   //Normal conversion mode delay about (1/3.6864M)*50000=13.56ms,即ADC延时寄存器,设置等待转换测量时间(从中断开始,到转换开始时间)
开始中断前的第二步(使能):
    rADCCON=(1<<14)+(ADCPRS<<6);   //预分频:PCLK/10,分频位使能,A/D 转换器频率 = PCLK / (预分频值+1);//转换时间 = 1/(AD转换频率/ 5 周期)
   Uart_Printf("ADC touch screen test\n");  
开始中断前的第三步(配置):      
   rADCTSC=0xd3;  //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En.为等待触笔按下中断模式
开始中断前的第四步(开中断):
   pISR_ADC = (int)AdcTsAuto;   //安装中断处理程序,把真正的中断函数写进去
    rINTMSK=~BIT_ADC;     //ADC中断屏蔽位无效,ADC总中断INT_ADC开启
    rINTSUBMSK=~(BIT_SUB_TC);  //ADC触摸屏子中断开启
   Uart_Printf("\nType any key to exit!!!\n");
    Uart_Printf("\nStylus Down, please...... \n");
    Uart_Getch();  //该函数作用在于等待用户的触摸,然后触发中断,其实为等待触摸中断,直到用户从键盘随便输入一个字符后,结束该死循环,然后往下继续执行
最后关闭中断:
   rINTSUBMSK|=BIT_SUB_TC; //关闭ADC触摸屏子中断
    rINTMSK|=BIT_ADC;     //关闭ADC总中断
    Uart_Printf("Touch Screen Test is Finished!!!\n");
}
==============================================================================
中断开始了!!!!
==============================================================================
;进入中断,进行转换,每触摸一下屏幕,就进入该函数,进行A/D转换,一个触摸中断为:触摸笔按下到触摸笔抬起,不抬起的话,中断就没结束.
void __irq AdcTsAuto(void)
{
 int i;                 
U32 saveAdcdly;
   1.设置为按下触发中断
   if(rADCDAT0&0x8000)  //ADCDAT0[15]=1光标提起状态,ADCDAT0[15]=0光标按下状态
    {
   //Uart_Printf("\nStylus Up!!\n");
  rADCTSC&=0xff;        // Set stylus down interrupt bit
    }
    //else 
   //Uart_Printf("\nStylus Down!!\n");
  2.重新配置
 rADCTSC=(1<<3)|(1<<2);  //得到转换数据,XP上拉禁止,自动连续XY坐标转换模式开启,清XY_PST
  saveAdcdly=rADCDLY;
  rADCDLY=40000;          //Normal conversion mode delay about (1/50M)*40000=0.8ms,即重设等待转换测量时间
  rADCCON|=0x1;                   //start ADC
 
 while(rADCCON & 0x1);     //检测ADC转换是否开始,开始后,该位会被自动清零
  while(!(rADCCON & 0x8000));   //等待转换结束,可以读取转换后的数值了
  
            while(!(rSRCPND & (BIT_ADC)));  //判断ADC的中断悬挂位BIT_ADC,若为1,则说明该中断已经产生,可以处理按下的数据了
            xdata=(rADCDAT0&0x3ff);  //读取X方向的转换数值   
           ydata=(rADCDAT1&0x3ff);
 //YH 0627, To check Stylus Up Interrupt.
  rSUBSRCPND|=BIT_SUB_TC;  //清除子中断标志
  ClearPending(BIT_ADC);
  rINTSUBMSK=~(BIT_SUB_TC); //重新打开中断,为触摸笔抬起中断做准备
  rINTMSK=~(BIT_ADC);
  //这一次的中断设为触笔抬起中断,触摸笔抬起了,一个触摸中断才算结束,才可以读取数据 
    
  rADCTSC =0xd3;   //再设为等待中断模式
  rADCTSC=rADCTSC|(1<<8); //设置为触笔抬起中断,但不读取此中断的数据,因为按下和抬起是同一点,上面已经处理了按下的数据
  while(1)  //等待触笔的抬起
   {
    if(rSUBSRCPND & (BIT_SUB_TC))  //判断ADC子中断BIT_SUB_TC    
  {
     //Uart_Printf("Stylus Up Interrupt~!\n");
     break; //说明笔尖已经抬起,一个触摸中断终于结束,下面读取数据,跳出循环
   }
   } 
   Uart_Printf("count=d  XP=d, YP=d\n", count++, xdata, ydata);  //输出坐标信息
   rADCDLY=saveAdcdly;         //延时,等待串口输出
    rADCTSC=rADCTSC&~(1<<8);    //重新设为触摸笔按下中断,为下次的触摸做准备
    rSUBSRCPND|=BIT_SUB_TC;     //清除中断标志
    rINTSUBMSK=~(BIT_SUB_TC);   //重新开启中断
    ClearPending(BIT_ADC);
}

mini2440裸机之Touchpanel相关推荐

  1. MINI2440裸机实验之SDRAM

    MINI2440裸机实验之SDRAM 参考文章 <嵌入式应用开发完全指南> S3C2440 SDRAM SDRAM介绍 有关SDRAM的介绍以及S3C2440的SDRAM操作下面的文章介绍 ...

  2. mini2440 裸机编程 -led

    又重新做回了嵌入式,想把以前学到的东西从头复习一下.首先从裸机编程开始. 本系列使用的硬件环境是友善之臂的 mini2440,百问网的OpenJtag,所有程序在 linux gcc下编译, 具体硬件 ...

  3. mini2440裸机音乐播放器(非常久曾经的笔记)

    [这是好久曾经写的.有点乱,没时间整理.当做记录用的.] 图片粘贴失效.没上传图,想要的直接下载文档吧. 项目目的:通过IIS,触摸屏,LCD模块实现音乐播放器功能(button上一首.下一首.播放. ...

  4. 一起学mini2440裸机开发(十)--mini2440外部中断实验

    我今天一整天都在试着将TQ2440的那种处理中断的方法(即安装中断向量表)移植到MDK中的mini2440,但是一直没成功,这种方法一直没成功,后来又想,还是先从最简单的开始吧,就是不利用中断向量表, ...

  5. 八、mini2440裸机程序之UART(2)UART0与PC串口通信【转】

    转自:http://blog.csdn.net/shengnan_wu/article/details/8309417 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.相关原理图 2.相关寄 ...

  6. 九.mini2440实现I2C协议裸机程序(完成)

    ** I2C协议的mini2440裸机程序实现 ** 上篇博客说道了I2C的理论知识,但是实际应用的时候,遇到很多的问题,加上程序的庞大,一直在调试.这几天重新看了一下,最终解决问题. 首先的问题是程 ...

  7. 使用 NOR Flash 中的supervivi 下载裸机程序到NandFlash

    不容易啊,终于把 将MDK程序下载到我的mini2440开发板上的nand flash的方法找到了,我是利用韦东山老师的那套方法即利用DNW和supervivi下载到nand flash的.当然,只是 ...

  8. MINI2440 MPLL

    MINI2440裸机实验之MPLL 1. S3C2440时钟系统 s3c2410/s3c2440的时钟控制逻辑既可以外接晶振,然后通过内部电路产生时钟源:也可以直接使用外部提供的时钟源,他们通过引脚的 ...

  9. u-boot,linux,文件系统移植笔记1

    今天把u-boot,linux,yaffs2文件系统的移植全部搞定了,在我的mini2440板子上跑起来了,呵呵,兴奋啊!现在回头看看自己花了这么长时间所作的工作,结论就是,只要坚持下去就一定会成功的 ...

  10. aiku基于mini2440下裸机程序开发《概述与SDRAM运行》

    大家好,我是aiku,今天主要跟大家介绍一些 基于mini2440下裸机程序开发<概述与SDRAM运行> 有什么问题:都可以联系我们,谢谢! 我是aiku,本博客主要写一些我们的项目经验与 ...

最新文章

  1. 多媒体广告的底线在哪里
  2. 程序猿充电的五本优质编程技术书
  3. mfc 找到字符串中字符_利用滑动窗口解LeetCode438题:找到字符串中所有字母异位词...
  4. 抓取手机https_python爬虫入门02:教你通过 Fiddler 进行手机抓包
  5. 名片管理系统python详解_名的解释|名的意思|汉典“名”字的基本解释
  6. 怎么让图片手机上排列_荣耀手机系列档次怎么排列?
  7. 关于Breeze's MapHack 2.0的一些重要说明
  8. CentOS7.4安装及断网问题解决方案
  9. 2017-2018-1 20155222 《信息安全系统设计基础》课上实验2、3
  10. 如何使用火狐下的两款接口测试工具RESTClient和HttpRequester发送post请求
  11. 蔚蓝网上书店项目js/jQuery部分
  12. 高纬度思考法读书笔记
  13. 【C#】分享一个可携带附加消息的增强消息框MessageBoxEx
  14. 第五次作业:项目分类
  15. 知识融合中几种计算文本相似度的方法(代码)
  16. 鼠标右键点击文件夹、bat文件、txt文档,指针出现假死转圈的解决方法(Adobe Acrobat右键邮件选项引起的win10假死)
  17. 【语音之家】AI产业沙龙—语音技术在贝壳的应用
  18. S32K144 bootloader 方案设计
  19. 区块链跨境支付解决方案
  20. idea的使用6——项目的打包处理

热门文章

  1. 股票指标matlab函数,股票函数,通达信编程3000例
  2. 企业级多用户发卡平台源码 源码完全开源 无任何加密
  3. 【老生谈算法】matlab实现图像复原算法源码——图像复原
  4. linux服务器网卡查看,Linux操作系统下如何查看网卡当前版本
  5. 【8015】对做产品有帮助的行外书
  6. JSP学科竞赛管理系统
  7. ProGuard详解 - Java代码混淆
  8. cad转dxf格式文件太大_DWG格式怎么转换成DXF格式?实测好用的转换工具都在这了...
  9. Windows-caffe安装
  10. STM32F407——串口通信