s3c2440裸机-电阻触摸屏-4-isr设计_获取触摸屏坐标

发布者:Turquoise最新更新时间:2024-07-03 来源: elecfans关键字:电阻触摸屏 手机看文章 扫描二维码
随时随地手机看文章

1.进入自动测量模式

上一节介绍了TSC的初始化,以及中断服务程序框架,能够对的触摸屏进行基本的按下松开检测。



那让bit[2] =1, bit[1:0]=00,则会进入auto measurement。如果bit[2]=0,则需配置bit[1::0]=01 or 10是手动测量x,y坐标。

#define AUTO_PST (1<<2) /*自动转换*/ #define WAIT_INT_MODE (3) /*等待中断模式*/ #define NO_OPR_MODE (0) /*禁止模式*/ void enter_auto_measure_mode(void) {   ADCTSC = AUTO_PST | NO_OPR_MODE; }

2.启动ADC


ADCCON |= (1<<0);

所以TSC isr程序如下:

void Isr_Tc(void)/*触摸屏中断服务程序*/ {   if (ADCDAT0 & (1<<15))   {     printf('pen upnr');     enter_wait_pen_down_mode();   }   else   {     printf('pen downnr');     /* 进入'自动测量'模式 */     enter_auto_measure_mode();     /* 启动ADC */     ADCCON |= (1<<0);   } }

那么当检测到按下后,需要进入auto measure mode,启动adc,然后就会进行自动坐标转换,转换结束后又会触发ADC中断,再次进入AdcTsIntHandle函数,进而进入Isr_Adc,如下:

SUBSRCPND可以区分中断源 。

void AdcTsIntHandle(int irq) {   if (SUBSRCPND & (1<

3. ADC isr

我们知道ADC进行坐标转换结束后,那么会产生ADC中断,在Isr_Adc中即可获取我们的x,y坐标数据。由于我们按下后是进入了“自动测量”模式,因此那当数据获取完后我们得进入“等待松开”模式。

void Isr_Adc(void) {   int x = ADCDAT0;   int y = ADCDAT1;   if (!(ADCDAT0 & (1<<15))) /* 在isr_Tc按下后,如果仍然按下才打印 */   {     x &= 0x3ff;     y &= 0x3ff;     printf('x = %08d, y = %08dnr', x, y);   }   enter_wait_pen_up_mode(); }

有可能触摸屏的测量过程非常长,那当ADC转换结束后,它已经松开了,这时不应该进行打印出坐标,所以这里在isr_Tc按下后,如果仍然按下才打印。

4.ADCDLY

由于可能触摸屏采样的转换速率问题,按下后需要过一段电压才能稳定下来,那么数据才能稳定可能需要一定的延迟,所以需要配置ADC delay,让ADC慢一点产生中断,也就是等坐标稳定后在通知用户。


那么ADCDLY就是用来延时ADC启动的时间,让数据稳定后再进行转换。


可以看到可以看到,进行auto or manual measure 坐标转换的时序要满足:A = Dx,D表示ADCDLY的值。 现在晶振的频率是12Mhz, 那么根据触摸屏规格书我们取A= 5ms,那么D= 0.005s *12*1000000 = 60000,所以ADCDLY配置成60000.

修改前面的adc_ts_reg_init函数。

void adc_ts_reg_init(void) {   /* [15] : ECFLG, 1 = End of A/D conversion   * [14] : PRSCEN, 1 = A/D converter prescaler enable    * [13:6]: PRSCVL, adc clk = PCLK / (PRSCVL + 1)   * [5:3] : SEL_MUX, 000 = AIN 0    * [2] : STDBM    * [0] : 1 = A/D conversion starts and this bit is cleared after the startup.    */   ADCCON = (1<<14) | (49<<6) | (0<<3);   /* 按下触摸屏, 延时一会再发出TC中断   * 延时时间 = ADCDLY * 晶振周期 = ADCDLY * 1 / 12000000 = 5ms    */   ADCDLY = 60000; }

5.结果展示

从左往右依次点击触摸屏,可以看到x坐标没有明显变化,y坐标反而线性变大。


同理,从上往下依次按下触摸屏,可以看到y坐标没有明显变化,x坐标反而线性变大.


这里是由于硬件上xp与yp接反了,ym与xm接反了,如下图:但这里并不影响我们的时候,这里我们软件上可以进行x,y坐标的转换。


我们软件上可以对x,y轴进行flip /mirror, rotaion旋转等一系列操作即可。比如:

Case1:ts与lcd吻合。


Case2: ts与lcd方向相反


这些case都能处理。


关键字:电阻触摸屏 引用地址:s3c2440裸机-电阻触摸屏-4-isr设计_获取触摸屏坐标

上一篇:s3c2440裸机-电阻触摸屏-4.2-isr设计_支持长按和滑动
下一篇:s3c2440裸机-电阻触摸屏-3-触摸屏TSC初始化和中断服务程序框架

推荐阅读最新更新时间:2026-03-25 16:27

s3c2440裸机-电阻触摸屏-4-isr设计_获取触摸屏坐标
1.进入自动测量模式 上一节介绍了 TSC的初始化,以及中断服务程序框架 ,能够对的触摸屏进行基本的按下松开检测。 那让bit =1, bit =00,则会进入auto measurement。如果bit =0,则需配置bit =01 or 10是手动测量x,y坐标。 #define AUTO_PST (1 2) /*自动转换*/ #define WAIT_INT_MODE (3) /*等待中断模式*/ #define NO_OPR_MODE (0) /*禁止模式*/ void enter_auto_measure_mode(void) {   ADCTSC = AUTO_PST | NO_OPR_MODE; } 2.
[单片机]
s3c2440裸机-电阻触摸屏-4.2-isr设计_支持长按和滑动
1.改进定时器 五. irq之定时器中断这记一节中,是在handle_irq_c()中去区分中断源,执行不同的isr。那现在通过register_timer注册对应的定时器中断服务程序,timer_irq进行执行不同的定时器中断服务程序。 #define TIMER_NUM 32 #define NULL ((void *)0) typedef void(*timer_func)(void); typedef struct timer_desc {   char *name;   timer_func fp; }timer_desc, *p_timer_desc; timer_desc timer_array ; int regi
[单片机]
S3C2440裸机------触摸屏_利用ADC读取触摸屏坐标
前面我们在按下触摸屏时只是打印调试信息,现在我们再按下的中断处理函数里面增加ADC的配置代码,当我们按下后利用ADC读取触摸屏的坐标。 #include ../s3c2440_soc.h #define ADC_INT_BIT (10) #define TC_INT_BIT (9) #define INT_ADC_TC (31) /* ADCTSC's bits */ #define WAIT_PEN_DOWN (0 8) #define WAIT_PEN_UP (1 8) #define YM_ENABLE (1 7) #define YM_DISABLE (0 7) #de
[单片机]
s3c2440裸机-电阻触摸屏-6-触摸屏校准实现-五点校准法
前面我们讲过触摸屏触摸屏校准原理就是让lcd能够与触摸屏坐标对应起来。 一、五点法校准实现 一、我们取A,B,C,D,E这五个点,那么这个时候我们需要把该5个点的触摸屏和LCD的坐标对应起来,这就是校准的过程。 ①在LCD显示屏上A点显示一个“十字”形状 ②用户在触摸屏上点击对应A点的“十字”形状 ③记录触摸屏的数据坐标 同理在B,C, D, E点循环该①②③过程,就能得到这五点触摸屏坐标。 二 、然后根据这5个触摸屏坐标数据确定公式。 三 、以后得到TS触点坐标,即可校准出期待的TS坐标。 下面开始函数实现: 在LCD上显示 十字 形状,定义为函数fb_disp_cross() 记录触摸屏坐标,定义函数为ts_read
[单片机]
<font color='red'>s3c2440</font><font color='red'>裸机</font>-<font color='red'>电阻</font><font color='red'>触摸屏</font>-6-<font color='red'>触摸屏</font>校准实现-五点校准法
s3c2440裸机-电阻触摸屏编程(3.触摸屏TSC的初始化和中断服务程序框架)
1. ADC中断产生流程 中断源: 这里是ADC和TSC共用一个中断源。 SRCPND表示哪个中断源产生了中断请求。 INTMODE:配置中断模式 配置中断屏蔽寄存器 中断挂起寄存器(用来显示当前优先级最高的、正在发生的中断, 需要清除对应位) 从SRCPND寄存器可以读到ADC和TSC复用的同一个中断源,那么如何区分呢? 可以从SUBSRCPND寄存器配置,如下: 当bit 9被置1时,表示TSC中断。那么我们需要打开subsrcmask寄存器 所以TSC中断的产生流程如下: 2. TSC编程实现   ①初始化TSC,ADCTSC寄存器   ②设定TSC处于“等待中断模式”
[单片机]
<font color='red'>s3c2440</font><font color='red'>裸机</font>-<font color='red'>电阻</font><font color='red'>触摸屏</font>编程(3.<font color='red'>触摸屏</font>TSC的初始化和中断服务程序框架)
s3c2440裸机-电阻触摸屏编程(5.触摸屏校准原理-五点校准法)
1.触摸屏校准原理 之前点的触摸屏解析出来的ADCDATA的bit 表示坐标ADC的转换结果,那么这些结果都是通过电压值来转换过来的。 所谓触摸屏校准,就是让触摸屏坐标(电压值)与LCD的坐标能够对应起来,所以校准就是要找到一个公式把电压值转换成和LCD宽高相符合的坐标值。 如下图,上面一层膜是TS触摸屏,下面一层是LCD显示屏,如果我们的LCD size是480*272,那么当我们点击触摸屏上的原点,那它的坐标可能不是(0,0),而是(X1', Y1'),因此我们需要对触摸屏进行校准,期望把x', y’的坐标能够映射成和lcd一样的坐标0,0. 那么如何较准呢,如下图以X方向为为例。 如果触摸
[单片机]
<font color='red'>s3c2440</font><font color='red'>裸机</font>-<font color='red'>电阻</font><font color='red'>触摸屏</font>编程(5.<font color='red'>触摸屏</font>校准原理-五点校准法)
十四、s3c2440裸机—中断控制器
14.1 中断体系 ARM 体系的CPU 有 7 种工作模式 用户模式(usr):ARM 处理器正常的程序执行状态 快速中断模式(fiq):用于高速数据传输或通道处理 中断模式(irq):用户通用的中断处理   管理模式(svc):操作系统使用的保护模式 数据访问终止模式(abt):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护 系统模式(sys):运行具有特权的操作系统任务 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真   可通过软件来进行模式切换,或者发生各类中断、异常时CPU自动进入相应的模式。除用户模式外,其他6种工作模式都属于特权模式,
[单片机]
十四、<font color='red'>s3c2440</font><font color='red'>裸机</font>—中断控制器
s3c2440裸机开发调试环境(MDK4.72,Jlink v8,mini2440)
我的开发环境:windows 7 32位,J-linkv8,mini2440开发板一块。最后选择了:MDK4.72版本,J-ink v8的当前最新版本J-linkARM v4.94。 1)打开Keil uVision4新建一个工程: 2)新建一个目录用于存放我们的工程文件,这样我用新建一个test目录:并且取工程名为test并保存: 3)接下来选择CUP database:我们选择samsung的S3C2440A,点击OK;之后会出现第二个图问你是否拷贝'S3C2440.s'到工程文件夹并加入到工程里,S3C2440.s是启动代码我们选择YES 4)然后我们需要对S3C2440.s进行一些
[单片机]
<font color='red'>s3c2440</font><font color='red'>裸机</font>开发调试环境(MDK4.72,Jlink v8,mini2440)
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved