Gt9xx芯片,在规格书+Linux驱动的基础上,移植为USB裸机经验。直接用开发板,不去碰硬件的坑。
1,用内核代码和规格书来印证数据格式:
//命令3字节,IC地址 u8 end_cmd[3] = {GTP_READ_COOR_ADDR >> 8, GTP_READ_COOR_ADDR & 0xFF, 0}; //总长度 前 3个字节、最大点数*8、加1 u8 point_data[2 + 1 + 8 * GTP_MAX_TOUCH + 1]={GTP_READ_COOR_ADDR >> 8, GTP_READ_COOR_ADDR & 0xFF};
2,读数据:调用STM32的方法,转换原来的方法。并用于读版本号
1, Read data from the i2c slave device. Input: client: i2c device. buf[0~1]: read start address. 地址 buf[2~len-1]: read data buffer.数据 len: GTP_ADDR_LENGTH + read bytes count 即buf总长度 Output: numbers of i2c_msgs to transfer: 返回数据 2: succeed, otherwise: failed *********************************************************/ s32 gtp_i2c_read(struct i2c_client *client, u8 *buf, s32 len)
//2,在AT24CXX里面的指定地址开始读出指定个数的数据 // DevAddr ,设置I2C地址,如ft是0x36 //ReadAddr :开始读出的地址 //pdata1:接收数据的buf //size,buf长度 u8 I2C_Read0(u8 DevAddr,u16 ReadAddr,u8 *pdata1,u8 size)
3,转换实例,在main.c里来调用,验证一下是否成功:
u8 buf[8] = {GTP_REG_VERSION >> 8, GTP_REG_VERSION & 0xff};//version是双字节的,这里是取出了高字节,低字节 ret = gtp_i2c_read(client, buf, sizeof(buf)); => u8 buf[8] = {GTP_REG_VERSION >> 8, GTP_REG_VERSION & 0xff}; //前2字节已经存放了GTP_REG_VERSION,从buf[2]开始存,这里为了后面代码,数据结构保持一致也使用了 buf[8] ret =I2C_Read0(0x5c,GTP_REG_VERSION ,buf[2],6) I2C_Read0(0x5c,GTP_REG_VERSION )//直接原封不动用双字节u16了
3,改写中断函数处理,
看驱动代码,把不会执行的通通删掉,仅保留#if GTP_SLIDE_WAKEUP #endif标示,以方便和驱动代码对照
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?