TP屏幕适配
2022/9/9 23:23:14
本文主要是介绍TP屏幕适配,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
@
目录- 前言
- 一 硬件构成
- 二 原理
- 三 通讯方式(IIC)
- 四 引脚配置
- 五 操作处理
前言
TP是TouchPad触摸屏的意思,触控屏(Touchpanel)又称为触控面板,是个可接收触头等输入讯号的感应式液晶显示装置。
电阻式触摸屏,简称电阻屏,主要是利用压力感应进行控制,当用手指或其他物体触摸屏幕时,两个导电层发生接触,电阻产生变化,控制器根据电阻的具体变化来判断接触点的坐标并进行相应的操作。
本文主要针对电阻式触摸屏(Y89415)进行详细说明。
一 硬件构成
结构层次,如下图所示:
二 原理
在玻璃表面用ITO (一种透明的导电氧化锢锡)制作成横向与纵向电极阵列,这些横向与纵向的电极分别与地构成电容,在触屏检测时,自电容一次分别检测横向与纵向电极阵列,根据触摸前后电容的变化,分别确认横向坐标和纵向坐标,然后组成平面的触摸坐标。
三 通讯方式(IIC)
主机芯片(UM9117芯片)作为主机。
TP屏(Y89415)作为从机。
根据具体的硬件接线,选择I2C1作为通讯接口进行参数配置如下
struct SPRD_I2C sprd_i2c[I2C_DEVICE_MAX] = { ... { /*i2c1*/ CTL_I2C1_BASE, 100000, 1, 12, 1, TB_I2C1_INT, REG_AP_CLK_CORE_CGM_I2C1_CFG, I2C_26M, REG_AP_APB_APB_EB, BIT_AP_APB_I2C1_EB, REG_AP_APB_APB_RST, BIT_AP_APB_I2C1_SOFT_RST, 1, DMA_I2C1_TX, DMA_I2C1_RX, }, ... };
四 引脚配置
如下图所示,进行硬件引脚的配置,当配置完成后,如果有触屏TP屏幕,就会产生中断
通知芯片,此时有对TP屏幕进行操作,需要去处理。
// 在pinmap_cfg.c 里面增加中断引脚和电源引脚模式配置 {15,1,PM_INPUT, PM_FALLING_EDGE}, // CTP INT {34,0,PM_OUTPUT, PM_INVALID_INT}, // CTP RST // 在gpio_cfg.c 里面增加中断引脚和电源引脚触发配置 {GPIO_PROD_TP_INT_ID, GPIO_PROD_TYPE_BB0, GPIO_PROD_LOW_LEVEL, 15 , PNULL}, {GPIO_PROD_TP_WAKE_ID, GPIO_PROD_TYPE_BB0, GPIO_PROD_LOW_LEVEL, 34 , PNULL}, // 在tp_multi_drv.c 里面增加中断引脚触发函数配置 LOCAL BOOLEAN _TPM_MountGPIOHandler (void) { if (GPIO_PROD_RegGpio( //GPIO_AddCallbackToIntTable GPIO_PROD_TP_INT_ID, SCI_FALSE, SCI_FALSE, SCI_FALSE, 5, (GPIO_PROD_CALLBACK)_TPM_IntHandler)) { GPIO_TPIRQCtrl(SCI_TRUE); return TRUE; } return FALSE; }
五 操作处理
当收到中断通知的时候,芯片可以通过读取寄存器的值,来获取对应的X,Y坐标以及手势操作(按下,保持,抬起)
根据对应的操作和坐标来对应的进行LCD屏幕上面的效果显示。
Y89415TP这款设备,
读取坐标的方式是,先去往寄存器地址0x5C写入00,然后再去读取0X5D的地址,连续读取18个数据长度
其中XY的坐标获取算法如下
/* 按照TP键盘位置排列 */ const uint16 xy_keymap[] = { NULL, SCI_VK_MENU_SELECT, SCI_VK_UP, SCI_VK_MENU_CANCEL, SCI_VK_LEFT, SCI_VK_WEB, SCI_VK_RIGHT, SCI_VK_CALL, SCI_VK_DOWN, SCI_VK_POWER, SCI_VK_1, SCI_VK_2, SCI_VK_3, SCI_VK_4, SCI_VK_5, SCI_VK_6, SCI_VK_7, SCI_VK_8, SCI_VK_9, SCI_VK_STAR, SCI_VK_0, SCI_VK_POUND, }; for (i = 0; i < 2; i++) { if ((read_buf[6 * i + 3] & 0xc0) == 0xc0) { continue; } x = (int16)(read_buf[6 * i + 3] & 0x0F) << 8 | (int16)read_buf[6 * i + 4]; y = (int16)(read_buf[6 * i + 5] & 0x0F) << 8 | (int16)read_buf[6 * i + 6]; gpio_msg.wparam = xy_keymap[x]; switch (read_buf[6 * i + 3] & 0xF0) { case 0x00: case 0x80: gpio_msg.message = TB_KPD_PRESSED; break; case 0x40: gpio_msg.message = TB_KPD_RELEASED; break; default: gpio_msg.message = TB_KPD_INVALID_KEY; return TP_MULTI_ERROR; } DRV_Callback(TB_GPIO_INT, &gpio_msg); }
这篇关于TP屏幕适配的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?