目录

开发环境

配置过程

一、配置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要设置成开漏输出模式,带有100K的下拉电阻。注意要使能pull模式。

按照如上步骤设置后,单片机与触摸芯片就可以进行IIC通信了。但是在驱动触摸屏时,还需要一个IO作为GT911的中断,以及一个IO作为GT11的RST。GT911的具体用法可见参考文档。

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通讯时序是相同的,也就是说驱动程序是兼容的。 与主机的接口共有6PIN,分别为: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

Logo

更多推荐