开发环境
配置过程
一、配置LPI2C
二、配置相关IO
程序设计
问题&总结
参考
开发环境
1.TencentOS物联网开发套件,MCU为RT1060
2.IDE:MCUXpresso v11.5
3.IIC设备为微雪4.3寸IPS屏幕上的触摸芯片,汇顶GT911
配置过程
一、配置LPI2C
二、配置相关IO
假设置不当IO的状态,SCL和SDA设置成这样RT1060不能与设备合作IIC通信。
通过手册,我们可以知道J11和K11可作为IIC通信的SCL和SDA需要将信号引脚配置为泄漏模式。
因为在这种情况下,IO带1000的开泄输出模式应设置为开泄输出模式K下拉电阻。注意使能pull模式。
按照上述步骤设置后,可以进行单片机和触摸芯片IIC通信。但是驱动触摸屏时,需要一个IO作为GT911的中断,以及一个IO作为GT11的RST。GT参考文件可见911的具体用法。
IO中断配置方法(以gpio5_pin1为例下降沿触发)
/* GPIO configuration of PMIC_ON_REQ on PMIC_ON_REQ (pin K7) */ gpio_pin_config_t PMIC_ON_REQ_config = { .direction = kGPIO_DigitalInput, .outputLogic = 0U, .interruptMode = kGPIO_IntFallingEdge }; /* Initialize GPIO functionality on PMIC_ON_REQ (pin K7) */ GPIO_PinInit(GPIO5, 1U, &PMIC_ON_REQ_config); /* Enable GPIO pin interrupt on PMIC_ON_REQ (pin K7) */ GPIO_PortEnableInterrupts(GPIO5, 1U << 1U); EnableIRQ(GPIO5_Combined_0_15_IRQn);
程序设计
配置外设后使用NXP开发官方库函数IIC程序,可参考官方SDK中的IIC示例。下面的例子是读取。GT911接触点数量的寄存器具体参考GT911的手册。
///写寄存器操作,其中0X5D为GT911的IIC地址,points_addr寄存器地址要写。 LPI2C_MasterStart(LPI2C1_PERIPHERAL, 0x5DU, kLPI2C_Write); LPI2C_MasterSend(LPI2C1_PERIPHERAL, &points_addr, 2); LPI2C_MasterStop(LPI2C1_PERIPHERAL);
///读取寄存器操作,存储读取的数据g_master_rxBuff中。读取后将寄存器中的标志位清零,代表单片机已读取触摸点坐标,具体参考GT911手册。 LPI2C_MasterStart(LPI2C1_PERIPHERAL, 0x5DU, kLPI2C_Read); if (kStatus_Success != LPI2C_MasterReceive(LPI2C1_PERIPHERAL, g_master_rxBuff, 1)) { PRINTF("ERROR\n"); } else { PRINTF("%X \n", g_master_rxBuff[0] & 0x0f); } LPI2C_MasterStop(LPI2C1_PERIPHERAL); delay_ms(1); if (g_master_rxBuff[0] & 0x80) { LPI2C_MasterStart(LPI2C1_PERIPHERAL, 0x5DU, kLPI2C_Write); LPI2C_MasterSend(LPI2C1_PERIPHERAL, &points_addr, 3); LPI2C_MasterStop(LPI2C1_PERIPHERAL); }
上一步骤中 INT 输出上升后,如果主控不在一个周期内读取坐标,下次 GT911即使检测 坐标更新将再次输出 INT 但不更新脉冲坐标;
问题&总结
遇到了IO中断不能工作的情况,原来是Handler函数名称错,程序跑了。
要把INT引脚的iomux改为浮空输入,不能单独中断。
以前更倾向于使用IO来软件模拟IIC,使用IIC外设更方便,节约程序资源,减少软件出错的可能性。
参考
4.3inch Capacitive Touch LCD - Waveshare Wikihttps://www.waveshare.net/wiki/4.3inch_Capacitive_Touch_LCD电容触摸屏GT911、GT928、GT9147的使用_【ql君】qlexcel的博客-CSDN博客_gt911触摸屏驱动详解一、介绍与硬件的连接 GT911、GT928、GT9147都属于GT9系列非单层多点触控芯片,他们支持的触控点数不同(GT928支持10个点、GT911支持5点),驱动和感应通道也可能不同。但他们的寄存器和IIC通信时序相同,即驱动程序兼容。 与主机的接口共6个PIN,分别为:VDD、GND、SCL、SDA、INT、RESET。INT、RESET...https://blog.csdn.net/qlexcel/article/details/99696108Linux下编写GT911触摸驱动_kuniqiw的博客-CSDN博客_gt911触摸屏驱动详解问题一:资源获取Gt911数据手册在韦老师给的资料里,路径为\06_Datasheet\Extend_modules\7寸LCD模块\电容触控芯片GT911 Datasheet_121120(海威思.pdf问题二:需要准备哪些知识1.能够修改设备树2.能够编写字符设备驱动3.能够在linux下编写中断程序4.能够在linux下编写IIC收发程序5.了解input子系统6.移植tslib(用于校准,测试触摸屏)gt911硬件连接(韦老师的板子):可以看到gt911只https://blog.csdn.net/kuniqiw/article/details/112390863
https://www.nxp.com/docs/en/application-note/AN5078.pdfhttps://www.nxp.com/docs/en/application-note/AN5078.pdf
开发板项目组">Embedfire-rt1052: 野火imx-rt1052开发板项目组https://gitee.com/Embedfire-rt1052