cbad06d616
- 将 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 总线空闲
95 lines
3.2 KiB
C
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
|