Files
lishanpi/bsp/device/touch/touch.h
T
hm cbad06d616 refactor(touch): 集成硬件 I2C 驱动并添加 EXTI 中断支持
- 将 touch 底层从软件 I2C 位冲切换为硬件 I2C0 (PB6/PB7)
- 修复 i2c_driver I2C0 引脚映射 (PB8/PB9 -> PB6/PB7)
- 重写 master_write_read() 实现正确的重复起始条件
- 添加 i2c_driver.h C API 声明供 C 代码调用
- 添加 GT1151 EXTI 中断 (PD11, EXTI11 下降沿触发)
- 删除 touch.h 中废弃的软件 I2C 函数声明
- test_touch() 改为中断驱动,无触摸时 I2C 总线空闲
2026-04-26 20:36:54 +08:00

95 lines
3.2 KiB
C

#ifndef __TOUCH_H__
#define __TOUCH_H__
#include "gd32f4xx.h"
#include "systick.h"
#define SCL_RCU RCU_GPIOB
#define SCL_PORT GPIOB
#define SCL_PIN GPIO_PIN_6
#define SCL_ON gpio_bit_set(SCL_PORT,SCL_PIN)
#define SCL_OFF gpio_bit_reset(SCL_PORT,SCL_PIN)
#define SCL_TOGGLE gpio_bit_toggle(SCL_PORT,SCL_PIN)
#define SDA_RCU RCU_GPIOB
#define SDA_PORT GPIOB
#define SDA_PIN GPIO_PIN_7
#define SDA_ON gpio_bit_set(SDA_PORT,SDA_PIN)
#define SDA_OFF gpio_bit_reset(SDA_PORT,SDA_PIN)
#define SDA_TOGGLE gpio_bit_toggle(SDA_PORT,SDA_PIN)
//IO方向设置
#define CT_SDA_IN() gpio_mode_set(SDA_PORT, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, SDA_PIN)
#define CT_SDA_OUT() gpio_mode_set(SDA_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, SDA_PIN)
//IO操作函数
#define CT_IIC_SCL //PBout(0) //SCL
#define CT_IIC_SDA(val) ((val)==1?SDA_ON:SDA_OFF)//PFout(11) //SDA
#define CT_READ_SDA gpio_input_bit_get(SDA_PORT,SDA_PIN) //PFin(11) //输入SDA
#define RST_RCU RCU_GPIOD
#define RST_PORT GPIOD
#define RST_PIN GPIO_PIN_12
#define RST_ON gpio_bit_set(RST_PORT,RST_PIN)
#define RST_OFF gpio_bit_reset(RST_PORT,RST_PIN)
#define RST_TOGGLE gpio_bit_toggle(RST_PORT,RST_PIN)
#define INT_RCU RCU_GPIOD
#define INT_PORT GPIOD
#define INT_PIN GPIO_PIN_11
#define INT_ON gpio_bit_set(INT_PORT,INT_PIN)
#define INT_OFF gpio_bit_reset(INT_PORT,INT_PIN)
#define INT_TOGGLE gpio_bit_toggle(INT_PORT,INT_PIN)
// EXTI 中断配置
#define TOUCH_EXTI_LINE EXTI_11
#define TOUCH_EXTI_IRQn EXTI10_15_IRQn
extern volatile uint8_t g_touch_irq_flag;
//I2C读写命令
#define GT_CMD_WR 0X28 //写命令
#define GT_CMD_RD 0X29 //读命令
//GT1151 部分寄存器定义
#define GT_CTRL_REG 0X8040 //GT1151控制寄存器
#define GT_CFGS_REG 0X8050 //GT1151地址寄存器
#define GT_CHECK_REG 0X813C //GT1151验和寄存器
#define GT_PID_REG 0X8140 //GT1151产品ID寄存器
#define GT_GSTID_REG 0X814E //GT1151前检测到的触摸情况
#define GT_TP1_REG 0X8150 //第一个触摸点数据地址
#define GT_TP2_REG 0X8158 //第二个触摸点数据地址
#define GT_TP3_REG 0X8160 //第三个触摸点数据地址
#define GT_TP4_REG 0X8168 //第四个触摸点数据地址
#define GT_TP5_REG 0X8170 //第五个触摸点数据地址
#define TP_PRES_DOWN 0x80 //触屏被按下
#define TP_CATH_PRES 0x40 //有按键按下了
#define CT_MAX_TOUCH 5 //电容屏支持的点数,固定为5点
//触摸屏控制器
typedef struct
{
// uint8_t (*init)(void); //初始化触摸屏控制器
// uint8_t (*scan)(uint8_t); //扫描触摸屏.0,屏幕扫描;1,物理坐标;
// void (*adjust)(void); //触摸屏校准
uint16_t x[CT_MAX_TOUCH]; //当前坐标
uint16_t y[CT_MAX_TOUCH]; //电容屏有最多5组坐标,电阻屏则用x[0],y[0]代表:此次扫描时,触屏的坐标,用
uint8_t sta; //笔的状态
float xfac;
float yfac;
short xoff;
short yoff;
uint8_t touchtype;
}_m_tp_dev;
extern _m_tp_dev tp_dev; //触屏控制器在touch.c里面定义
uint8_t GT1151_Send_Cfg(uint8_t mode);
uint8_t GT1151_WR_Reg(uint16_t reg,uint8_t *buf,uint8_t len);
void GT1151_RD_Reg(uint16_t reg,uint8_t *buf,uint8_t len);
uint8_t GT1151_Init(void);
uint8_t GT1151_Scan(uint8_t mode);
#endif