ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TP屏幕适配

2022-09-09 19:04:21  阅读:237  来源: 互联网

标签:SCI 引脚 适配 VK TP GPIO 屏幕 PROD


@

目录

前言

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);
}

标签:SCI,引脚,适配,VK,TP,GPIO,屏幕,PROD
来源: https://www.cnblogs.com/Wei-Ting/p/16673709.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有