【LCD_Touch-GT911触摸驱动】

概要

GT911 触摸驱动,全志F1C100 平台

整体架构流程

主要讲述GT911 配置流程和操作,接口为IIC, 默认读者熟悉IIC接口,不再讲解IIC的配置和操作

TP硬件连接

接口共有6PIN,分别为:VDD、GND、SCL、SDA、INT、RESET。
INT、RESET不需要接上下拉电阻,可与主机直连。SCL、SDA需要接上拉电阻4.7K,(有些排线上已经上拉)。
RST是复位引脚, INT是GT9xx的触摸信号输出引脚。

寄存器值

#define GT911_READ_XY_REG 0x814E	      /* 坐标寄存器 */
#define GT911_CLEARBUF_REG 0x814E	      /* 清除坐标寄存器 */
#define GT911_CONFIG_REG	0x8047   	  /* 配置参数寄存器 */
#define GT911_COMMAND_REG 0x8040          /* 实时命令 */
#define GT911_PRODUCT_ID_REG 0x8140       /*productid*/
#define GT911_VENDOR_ID_REG 0x814A        /* 当前模组选项信息 */
#define GT911_CONFIG_VERSION_REG 0x8047   /* 配置文件版本号 */
#define GT911_CONFIG_CHECKSUM_REG 0x80FF  /* 配置文件校验码 */
#define GT911_FIRMWARE_VERSION_REG 0x8144 /* 固件版本号 */

TP初始化配置

1、ADDR 设置,通过INT和RST 配置ADDR

/**********************************************************************************************************
*	函 数 名: GT911_Reset_Sequence
*	功能说明: G911硬复位操作,RST为低电平时,INT持续为低电平,1ms后RST置为高电平,10ms后INT设置为输入,
*	使GT911地址设定为0xBA/0xBB。
*	形 参: 无
*	返 回 值: 无
**********************************************************************************************************/

void GT911_Reset_Sequence(unsigned char  ucAddr)
{
	int tms=40;//这个延时为30ms,根据系统速度与延时精度适当调节,延时过短将不能读取系统配置与初始化。
	GT911_RST_INT_GPIO_Init();
	switch(ucAddr)
	{
		case 0xBA:
			GT911_RST_0(); //RST引脚低电平
			GT911_INT_0(); //INT引脚低电平
			bsp_DelayMS(tms); //延时30ms,最短1
			GT911_RST_1(); //RST引脚高电平
			GT911_INT_0(); //INT引脚低电平
			bsp_DelayMS(tms); //延时30ms,最短20
			GT911_INT_0();
			bsp_DelayMS(tms); //延时30ms,最短20
			GT911_INT_1();
		break;

		case 0x28:
			GT911_RST_0(); //RST引脚低电平
			GT911_INT_1(); //INT引脚高电平
			bsp_DelayMS(tms); //延时30ms,最短1
			GT911_RST_1(); //RST引脚高电平
			GT911_INT_1(); //INT引脚高电平
			bsp_DelayMS(tms); //延时30ms,最短20
			GT911_INT_0();
			bsp_DelayMS(tms); //延时30ms,最短20
			GT911_INT_1();
		break;

		default: //缺省为0xBA
			GT911_RST_0(); //RST引脚低电平
			GT911_INT_0(); //INT引脚低电平
			bsp_DelayMS(tms); //延时30ms,最短1
			GT911_RST_1(); //RST引脚高电平
			GT911_INT_0(); //INT引脚低电平
			bsp_DelayMS(tms); //延时30ms,最短20
			GT911_INT_0();
			bsp_DelayMS(tms); //延时30ms,最短20
			GT911_INT_1();
		break;

	}
}

把RST、INT引脚配置为输出模式。

A、把RST、INT拉低,延时10ms,把INT拉高,延时100us,把RST拉高,就可以把IIC地址设为0x28/0x29
0x28/0x29 设置时
B、把RST、INT拉低,延时10ms,把RST拉高,就可以把IIC地址设为0xBA/0xBB0xBA/0xBB 设置时序

我们操作以设备地址为 0xBA/0xBB 为例,INT,RESET 初始化

读数据

2、第二步,把INT设置为悬浮输入模式(如果要用外部中断检测INT,也要在这里配置好),RST保持拉高输出。

#define SET_GT911_INT_in()    GPIO_Congif(GT911_INT_PORT,GT911_INT_PIN,GPIO_Mode_IN,GPIO_PuPd_UP)

3、第三步,更新GT9xx寄存器配置,如果不需要更新,可以直接跳过。

1)、往控制命令寄存器(0x8040)写入2,软复位GT9xx。

/**********************************************************************************************************
*	函 数 名: GT911_Soft_Reset
*	功能说明: G911软复位操作。
*	形 参: 无
*	返 回 值: 无
**********************************************************************************************************/
void GT911_Soft_Reset(void)
{
	unsigned char  buf[1];

	buf[0] = 0x04;
	GT911_WriteReg(GT911_COMMAND_REG, buf, 1);
	bsp_DelayMS(500);

	buf[0] = 0x01;
	GT911_WriteReg(GT911_COMMAND_REG, buf, 1);	
	bsp_DelayMS(500);
}

2)、把寄存器配置数组写入(0x8047-0x8100),一共186个寄存器,这些寄存器的功能可以查看数据手册。需要注意的是:

A,0X8047寄存器用于指示配置文件版本号,程序写入的版本号,必须大于等于GT9xx本地保存的版本号,才可以更新配置,否则当前写入配置无效。

B,0X80FF寄存器用于存储校验和,使得0X8047-0X80FF之间所有数据之和为0,如果校验不通过,当前配置无效。

C,0X8100用于控制是否将配置保存在本地,写0,则不保存配置,写1则保存配置。

3)、往控制命令寄存器(0x8040)写入0,结束软复位。

TP读报点

读tp坐标,以中断读TP为例,只读一个报点

/**********************************************************************************************************
*	函 数 名: GT911_OnePiontScan
*	功能说明: 读取GT911触摸数据,这里仅读取一个触摸点。
*	形 参: 无
*	返 回 值: 无
**********************************************************************************************************/
//extern GUI_PID_STATE State;
int GT911_OnePiontScan(void)
{
	unsigned char  buf[9];
	buf[8] = 0;
	GT911_ReadReg(GT911_READ_XY_REG, &buf[0], 1);
	sysprintf("S1:%d\r\n", buf[0]); //串口打印坐标值
	GT911_ReadReg(GT911_READ_XY_REG + 1, &buf[1], 7);
	GT911_WriteReg(GT911_CLEARBUF_REG, (unsigned char  *)&buf[8], 1);
	g_GT911.X1 = ((unsigned short)buf[3] << 8) + buf[2];
	g_GT911.Y1 = ((unsigned short)buf[5] << 8) + buf[4];
	g_GT911.S1 = ((unsigned short)buf[7] << 8) + buf[6];
	sysprintf("X1:%5d,Y1:%5d,S1:%02x\r\n", g_GT911.X1, g_GT911.Y1, buf[1]); //串口打印坐标值
}

ic手册已上传,没有积分的可以留邮箱,不怎么看csdn,不能及时回复

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值