解决上电和长期运行屏幕触摸无效的问题

This commit is contained in:
2025-12-05 17:42:01 +08:00
parent fe65a0c408
commit bdcc73bc2b
15 changed files with 95 additions and 40 deletions

View File

@@ -259,7 +259,7 @@ static rt_size_t gt911_read_point(struct rt_touch_device *touch, void *buf,
cmd[1] = (rt_uint8_t)(GT911_READ_STATUS & 0xFF);
if (gt911_read_regs(&gt911_client, cmd, &point_status, 1) != RT_EOK) {
LOG_D("read point failed\n");
LOG_E("read point failed\n");
read_num = 0;
goto exit_;
}
@@ -290,7 +290,7 @@ static rt_size_t gt911_read_point(struct rt_touch_device *touch, void *buf,
/* read point num is touch_num */
if (gt911_read_regs(&gt911_client, cmd, read_buf,
read_num * GT911_POINT_INFO_NUM) != RT_EOK) {
LOG_D("read point failed\n");
LOG_E("read point failed\n");
read_num = 0;
goto exit_;
}
@@ -350,7 +350,7 @@ exit_:
write_buf[0] = (rt_uint8_t)((GT911_READ_STATUS >> 8) & 0xFF);
write_buf[1] = (rt_uint8_t)(GT911_READ_STATUS & 0xFF);
write_buf[2] = 0x00;
gt911_write_reg(&gt911_client, write_buf, 3);
gt911_write_reg(&gt911_client, write_buf, 3);//读完后把0x814E寄存器清为0
return read_num;
}
@@ -495,31 +495,53 @@ static int rt_hw_gt911_init(const char *name, struct rt_touch_config *cfg)
rt_memset((void *)touch_device, 0, sizeof(struct rt_touch_device));
/* hw init*/
// // rst output 0
// rt_pin_mode(*(rt_uint8_t *)cfg->user_data, PIN_MODE_OUTPUT);
// rt_pin_write(*(rt_uint8_t *)cfg->user_data, PIN_LOW);
// rt_thread_delay(10);
// // irq output 0
// rt_pin_mode(cfg->irq_pin.pin, PIN_MODE_OUTPUT);
// rt_pin_write(cfg->irq_pin.pin, PIN_LOW);
// rt_thread_delay(2);
// // rst output 1
// rt_pin_mode(*(rt_uint8_t *)cfg->user_data, PIN_MODE_OUTPUT);
// rt_pin_write(*(rt_uint8_t *)cfg->user_data, PIN_HIGH);
// rt_thread_delay(5);
// // // rst input
// // rt_pin_mode(*(rt_uint8_t *)cfg->user_data, PIN_MODE_INPUT);
// //irq output 0
// rt_pin_mode(cfg->irq_pin.pin, PIN_MODE_OUTPUT);
// rt_pin_write(cfg->irq_pin.pin, PIN_LOW);
// rt_thread_delay(50);
// rt_pin_mode(cfg->irq_pin.pin, PIN_MODE_INPUT);
//把RST、INT拉低延时10ms把RST拉高(>5ms)就可以把IIC地址设为0xBA/0xBB
rt_thread_delay(20);//硬件RC电路采用的10k 1uf 复位需要10ms以上
// rst output 0
rt_pin_mode(*(rt_uint8_t *)cfg->user_data, PIN_MODE_OUTPUT);
rt_pin_write(*(rt_uint8_t *)cfg->user_data, PIN_LOW);
rt_thread_delay(10);
// irq output 0
rt_pin_mode(cfg->irq_pin.pin, PIN_MODE_OUTPUT);
rt_pin_write(cfg->irq_pin.pin, PIN_LOW);
rt_thread_delay(2);
rt_thread_delay(50);
// rst output 1
rt_pin_mode(*(rt_uint8_t *)cfg->user_data, PIN_MODE_OUTPUT);
rt_pin_mode(*(rt_uint8_t *)cfg->user_data, PIN_MODE_OUTPUT);
rt_pin_write(*(rt_uint8_t *)cfg->user_data, PIN_HIGH);
rt_thread_delay(200);// irq output 0 >50ms维持不变
rt_thread_delay(5);
// // rst input
// rt_pin_mode(*(rt_uint8_t *)cfg->user_data, PIN_MODE_INPUT);
//irq input 0
rt_pin_mode(cfg->irq_pin.pin, PIN_MODE_INPUT);//改成输入
//irq output 0
rt_pin_mode(cfg->irq_pin.pin, PIN_MODE_OUTPUT);
rt_pin_write(cfg->irq_pin.pin, PIN_LOW);
rt_thread_delay(50);
rt_pin_mode(cfg->irq_pin.pin, PIN_MODE_INPUT);
gt911_client.bus =
(struct rt_i2c_bus_device *)rt_device_find(cfg->dev_name);