Linux下自己完成的ft5x06触摸屏驱动(tiny4412开发板)

触摸屏驱动
a.先来了解下基本知识
1.ft5x6触摸屏驱动通过I2C接口与CPU进行连接,服务于I2C总线,同时触摸屏属于又是输入设备,因此又隶属于输入子系统。
2.ft5x06通过I2C接口连接CPU,直接将数字信号放入内部寄存器,(一些触摸屏管脚发出电压值为模拟信号,需要接ADC转换至数字信号供CPU读取)
3.ft5x06触摸屏的各个寄存器如下图
在这里插入图片描述
在这里插入图片描述
由寄存器表可以知道,当前按键的个数在02h地址的第四位,每个触摸点的X值的高8位都是在该地址内容的低4位,低8位在下一个地址中(用于之后的原始数据拼凑成X,Y值和触摸点个数值)

b.直接上代码(代码中有很详细的注释)
1.触摸屏驱动程序(文件名:tiny_ts.c)

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/i2c.h>
#include <linux/input.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/gpio.h>
#include <linux/platform_device.h>


#include <mach/gpio.h>
#include <plat/gpio-cfg.h>
#include <plat/ctouch.h>
#include <plat/ft5x0x_touch.h>

#define TS_NAME "ft5x0x_ts"
#define FT_FT5X0X_PT_MAX 5 //多点触摸最大值

struct ts_info{
	int x;
	int y;
	int id;
};

struct ts_desc{
	int irq;
	struct i2c_client* ts_cli;
	struct input_dev* ts_input;
	int x_max; //触摸屏最大的X值,用于设置input_dev
	int y_max; //触摸屏最大的Y值, 用于设置input_dev
	int pressure_max; //触摸屏最大的压力值
	int ts_num; //当前触摸的点数
	struct ts_info ts_info[FT_FT5X0X_PT_MAX]; //触摸点信息的数组,最大可产生5个触摸点
	struct work_struct ts_work_queue;
};

static struct ts_desc *ts;



/*I2C读取函数
*client:i2c_lient结构体
*buf:需要读取的地址
*count:需要读取寄存器的个数
*/
static int ts_i2c_read(struct i2c_client* client, char *buf, int count)
{
	/*分析:传参过来buf[0] == 0
	*然后先写,当len = 1时,表示写入buf数组的第一个元素buf[0]
	*写入的第一个元素为0值,意思是告诉寄存器我要从0x00地址开始读取数据了
	*然后再读,读取长度为count,表示我要从我刚才写入进去的0x00地址开始读取
	*读取count字节数据(等于读取了0x00地址到0x00偏移了count-1地址空间的数据)
	*/
	struct i2c_adapter *adapt;
	struct i2c_msg ts_msg[2];
	
	adapt = client->adapter;
	ts_msg[0].addr = client->addr;
	ts_msg[0].flags = 0; //写,告诉触摸屏我要读哪个地址的数据
	ts_msg[0].buf = buf; 
	ts_msg[0].
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值