TSC触摸屏


默认情况下,输入通道已被接到触摸屏上 

 

 

nXPON  

Plus X-axis on-off control signal     

x轴正极开关控制信号

XMON

Minus X-axis on-off control signal

x轴负极开关控制信号

nYPON

Plus Y-axis on-off control signal

y轴正极开关控制信号

YMON

Minus Y-axis on-off control signal

y轴负极开关控制信号

 

 

 /*触摸屏初始化*/

void Test_Touchpanel( void)
{
   
    rADCDLY= 50000;   // ADC启动延时 (1/3.6864M)*50000=13.56ms
    
     /* 设置AD 转频率 */
    preScaler = ADC_FREQ;
    preScaler =  50000000/ADC_FREQ -  1// PCLK=50M
    rADCCON = ( 1<< 14)|(preScaler<< 6);  // 使能分频,  分频值PRSCVL=19
                                                          
// 转换频率=50MHz/(19+1)=2.5HMz
                                                          
// 转换时间=1/(2.5MHz/5)=2×10^(-6)秒 
                                                          
// 一秒钟转换5×10^5次
     /* 设置触摸屏为 等待中断模式 ,等待触摸笔被按下 */
    rADCTSC= 0xd3;   // Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En                           第一次设置中断
                              
// 11010011  来自2440手册
    
     /* clear irq */
    rSRCPND =  0x80000000;      // 清除挂起 状态
    rINTPND =  0x80000000;
    ClearSubPending(BIT_SUB_TC);  

    pISR_ADC = (U32)AdcTsAuto;    // 中断服务 函数

     /* enable INT_TC irq */ 
    rINTMSK =  0x7fffffff;             // 打开屏蔽
    EnableSubIrq(BIT_SUB_TC);
}

static  void __irq AdcTsAuto( void)   // 中断服务函数
{
    U32 saveAdcdly;
     /* ***************stylus down*********************** */
     /* 检测子中断源,判断是否是INT_TC中断,且触摸笔按下 */
     if(rSUBSRCPND & (BIT_SUB_TC))
    {
if( !(rADCDAT0& 0x8000))   // 是否落下状态
   Uart_Printf( " \nStylus down\n ");
else 
            Uart_Printf( " \nStylus up\n "); 
    }
    rADCTSC = (1<<3)|(1<<2);      关闭上拉电阻, X,Y方向自动转换
    saveAdcdly=rADCDLY;
    rADCDLY= 40000;     // ADC启动延迟    (1/50M)*40000=0.8ms

      rADCCON|= 0x1;                    // 开始ADC
     while(rADCCON &  0x1);       // 转换 是否开始   
   while(!(rADCCON &  0x8000));   // 转换 是否结束
while(!(rSRCPND &  0x80000000));   // 检测 是否产生INT_ADC中断

     /* 获取X,Y坐标 */
    xdata=(rADCDAT0& 0x3ff);    // [9:0]存储X值
    ydata=(rADCDAT1& 0x3ff);    // [9:0]存储Y值
 Uart_Printf( " count=%03d  XP=%04d, YP=%04d\n ", count++, xdata, ydata);    
     
      /* 3个PND         2个MSK */ 
    ClearSubPending(BIT_SUB_TC);
    rSRCPND =  0x80000000;
    rINTPND =  0x80000000;  
    EnableSubIrq(BIT_SUB_TC);
    rINTMSK =  0x7fffffff;
     /* ***************stylus down*********************** */

/* ????????????,??????? */
    rADCTSC = 0xd3;     // Waiting for interrupt                                     第二次设置中断
rADCTSC=rADCTSC|( 1<< 8);  //  设置成检测 抬起信号

while( 1)   // to check Pen-up state
{
if(rSUBSRCPND & (BIT_SUB_TC)) // check if ADC is finished with interrupt bit
{
Uart_Printf( " Stylus Up Interrupt~!\n ");
break;   // if Stylus is up(1) state
}

/* ***************stylus up************************* */

Uart_Printf( " count=%03d  XP=%04d, YP=%04d\n ", count++, xdata, ydata);  

rADCDLY=saveAdcdly; 
/* ????????????,????????? */
    rADCTSC = 0xd3;     // Waiting for interrupt                                     第三次设置中断
    
ClearSubPending(BIT_SUB_TC);  
     // ClearPending(BIT_ADC);
    rSRCPND =  0x80000000;
rINTPND =  0x80000000;


    EnableSubIrq(BIT_SUB_TC);
     // EnableIrq(BIT_ADC);
    rINTMSK =  0x7fffffff;
}
   

转载于:https://www.cnblogs.com/liuchengchuxiao/p/4197389.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值