2019 4 12 触摸屏驱动
使用输入子系统,参考源码S3c2410_ts.c (c:\嵌入式学习\b盘\system\system\linux-3.4.2\linux-3.4.2\drivers\input\touchscreen)
输入子系统框架input_dev
- 分配input_dev结构体
- 设置能产生那类事件,这类事件的哪些操作
- 注册
- 硬件操作
- 使能时钟
- 设置S3C2440 ADC/TS寄存器
先写出框架
填充硬件操作,注册TS中断,测试是否能进入中断打印触摸屏按下松开信息
注册ADC中断,在TS中断中进入测量数值模式,启动ADC,在ADC中断中打印XY值
进行优化
- init函数中设置ADCDLY为最大值
- 在ADC中断中进去时判断触摸屏是否仍被按下,若已松开则继续进入等待按下模式
- ADC中断中输出XY值前进行求平均
- 在求平均前进行软件过滤
添加定时器支持连按
init中
init_timer(&ts_timer);
ts_timer.function = s3c_ts_timer_function;
add_timer(&ts_timer);
在ADC中断中
/* 启动定时器处理长按/滑动的情况 */
mod_timer(&ts_timer, jiffies + HZ/100);//HZ是1S,当前为10ms
在其中断函数中依然对按键是否按下进行判断,若仍按下,启动进入测量模式,启动ADC