电阻屏驱动设计---ok6410


触摸屏初始化

1、设置AD转换时钟;

1.1使能预分频 
1.2设置预分频值(设置的PCLK为66HZ)
1.3关闭第[2]位:静态模式设置为普通模式;否则无法进行AD转换
1.4 设置 AD转换之间的延时,这里使用轮询的方式查看AD是否转换完成,则参考别的代码设置
ADCDLY = 0xffff;


2、设置中断


2.1 将中断处理函数写入中断向量表中对应地址( VIC1VECTADDR30 ),中断发生时从对应地址找出中断处理函数;


2.2 设置中断屏蔽位--即使能其中断源( VIC1INTENABLE [30] )(TC中断、关闭 ADC中断);



注:中断包括两个中断:1  、ADC中断,AD转换完成产生中断   。2、tc中断:按下或弹起屏幕产 生中断 本次选用TC中断

3、进入等待中断模式

---->当触摸笔按下或弹起;ADCTSC寄存器的值为0Xd3,且当产生中断之后,等待中断模式被清除, ADCTSC寄存器的值为0Xd3时,表示等待按下中断; ADCTSC寄存器的值为0X1d3时,表示等待弹起中断;注意观察ADCTSC寄存器的第[8]位


对应代码:
void ts_init(void)
{
 /* 一般的设置:比如时钟 */
 ADCCON &= ~((0xff << 6) | (1<<2));
 
 ADCCON |= (1<<14) | (65<<6);
 
 //ADCCLRINT = 1;//清除AD中断
 ADCCLRINTPNDNUP = 1;
 ADCDLY = 0xffff;
 
 /* 中断设置 */
 VIC1VECTADDR30 = irq_pen_down_up;
 VIC1INTENABLE |= (1<<30); /* 使能INT_PENDNUP, INT_ADC */

 wait_for_pen_down();
 
}




TC中断处理    (注意处理中断时环境的保存与恢复

先判断是按下中断还是弹起中断:

一: 若为按下中断则进行以下步奏1、2、3:


1、启动XY坐标自动转换( 使能AD自动转换--ADCTSC[2] ,并启动自动 自动转换--ADCCON[0] );
                               图4:ADCTSC[2]


                                                                        图5: ADCCON[0]

2、等待转换完成-- ADCCON[15](此步换成检测是否启动自动转换也可---ADCCON[0]被清除)
                               图6: ADCCON[15]


3、获取坐标---ADCDAT0[9:0]、ADCDAT1[9:0](可在此设置串口输出)
ADCDAT0[9:0]

ADCDAT1[9:0]


4、进入等待弹起中断
5、清除中断向量表
6、再次进入等待按下中断模式

二:若为弹起中断则直接进入等待按下中断模式;并清除中断向量表

对应代码:
void irq_pen_down_up(void)
{
 //1、保存环境
 __asm__(
 "sub lr, lr, #4\n"
 "stmfd sp!, {r0-r12,lr}\n"
 );
 //2、处理部分
 if (ADCDAT0 & (1<<15))//弹起
 {
  printf("pen up\n\r");
  wait_for_pen_down();
 }
 else
 {
  printf("pen down\n\r");
  auto_measure_xy_mode();
  start_adc();
  while(ADCCON & 0x01);//设置AD自动转换,启动转换后此位自动清零;貌似ADCCON[0]位未自动清零
  x = (ADCDAT0&0X3FF);
  y = (ADCDAT1&0X3FF);
  wait_for_pen_up();
  printf("[x,y] = [%d, %d]\n\r", x, y);
 
 }
 //3、清除中断
 ADCUPDN = 0;
 ADCCLRINTPNDNUP = 0;
 VIC1ADDRESS = 0;
 VIC0ADDRESS = 0;
 
 //4、恢复环境
 __asm__(
 "ldmfd sp!, {r0-r12,pc}^\n"
 :
 :
 );
}



注意事项:

使用中断时注意2410与6410的中断模式不一致。6410采用中断向量表的方式存放,将同一中断源对应的中断放入该中断源的中断向量表地址内



注:触摸屏与LCD为两个独立的硬 件,所以存在校准问题
未使用AD中断模式去采样数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值