您的位置 首页 汽车

S3C2440裸奔触摸屏

S3C2440对于触摸屏的相关interface有以下几个模式:1普通转换模式,手册是这么说的:mostlikelyusedforGeneralPurposeADCCo

S3C2440关于触摸屏的相关interface有以下几个形式:

1.一般转化形式,手册是这么说的:most likely used for General Purpose ADC Conversion.(不了解这个,所以用原文)

2.分隔X/Y转化形式,便是分隔来转化X方位和Y方位。X方位的信息会保存在ADCDAT0的低10位,而Y方位信息则保存在ADCDAT1的低10位。

3.主动X/Y转化形式,便是会把和X和Y一同转化,然后X,Y方位信息保存跟上面相同,也是在ADCDAT0,ADCDAT1的低10位。(我想一般会用这个形式)

4.等候中止形式,也便是等候触摸屏的中止,ADCTSC=0xd3便是等候笔尖放下时发生中止,而ADC=0xd3|(1<<8)便是笔尖抬起时发生中止。

参考手册弄出来也不难,仅仅提示一下ADCUPDN这个寄存器是会符号当时的中止是笔尖放下仍是抬起的。仅仅读完之后就要记得把它清0,在这个当地卡了好久,后来想到手册已然没说这个寄存器会主动清0,那就自己手动帮他清0吧。果然是这样。

下面列出要害代码,运用主动X/Y转化形式:

void __irq lhg_tsINT(void) //中止函数
{
rINTSUBMSK |= ((U32)0x1<<9); //封闭中止服务

if ( rADCUPDN&(U32)0x01 )//现在是down
{
ts=0; //这是一个全局变量,调试时会来挂号一下触摸屏是否转化了新的XY坐标
rADCUPDN=0;
uart_print_str(“/r/ndown”);//自己做的串口打印函数

//发生X、Y坐标
rADCTSC = (1<<3)|(1<<2); //上拉电阻无效,主动XY坐标转化形式敞开
rADCCON|=0x1;//开端A/D转化
while( rADCCON & 0x1 ); //等候AD转化开端
//rADCDLY = 40000; //这儿比较抑郁,网上有人用这个值,据手册里说低15位有用,www.linuxidc.com默认值是0xff,屏蔽掉,不删以免今后忘掉有这个寄存器。
while( !(rADCCON & ((U32)0x1<<15)) ); //等候AD转化完毕
x=(rADCDAT0&0x3ff); //保存x方位
y=(rADCDAT1&0x3ff);//保存y方位

//等候笔触抬起
//rADCCON=(1<<14)+(9<<6);//设置A/D预分频
rADCTSC =0xd3|(1<<8);//再次设置等候中止形式,这一次是判别触笔的抬起
}

if ( (rADCUPDN>>1)&(U32)0x01 )//现在是up
{
rADCUPDN=0;
uart_print_str(“/r/nup”);
ts=1;//标志有xy转化

rADCCON=(1<<14)+(9<<6);//设置A/D预分频
rADCTSC=0xd3;//设置触摸屏为等候中止形式。

}

rSRCPND |= (U32)0x1<<31; //清中止标志
rSUBSRCPND |=(U32)0x01<<9;
rINTPND |= (U32)0x1<<31;
rINTSUBMSK &= ~((U32)0x1<<9); //翻开中止服务

}

void init_lhg_ts(void) //初始化触摸屏
{
uart_print_str(“/r/nTouchScreen init”);

//确认中止进口地址
pISR_ADC = (U32)lhg_tsINT;
rADCCON=(1<<14)+(9<<6);//设置A/D预分频
rADCTSC=0xd3;//设置触摸屏为等候中止形式。

//清中止标志
rSRCPND |= (U32)0x1<<31;
rSUBSRCPND |= (U32)0x01<<9;
rINTPND |= (U32)0x1<<31;
rINTSUBMSK &= ~((U32)0x1<<9);//翻开中止服务
rINTMSK &= ~((U32)0x1<<31);//翻开中止屏蔽

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/257372.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部