概要
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
B、把RST、INT拉低,延时10ms,把RST拉高,就可以把IIC地址设为0xBA/0xBB
我们操作以设备地址为 0xBA/0xBB 为例,
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,不能及时回复