五点触摸屏的实现

原理图的理解

在这里插入图片描述
它通过四根线连接在底板上,其中这四根的线连接的的是一个管理触摸屏,其中
EINT14:是一个普通的是gpio接口,他和按键一样,可以产生一个外部中断
nRESET: 他是一个复位引脚
SDA2:i2c的数据总线
SCL2:i2c的时钟总线
在这里插入图片描述
通过电平转换芯片,连接到主板上
在这里插入图片描述

i2c控制原理

在这里插入图片描述
发数据的时候,第一个数据是主机开始选择从机,第一个数据是第一个自己的地址,第二个数据是从机的地址,一次八位数据,所有的停止和开始都是主机说了算
在这里插入图片描述
写的时候,主机申请读信号,从机开始发送,然后主机开始响应

寄存器的配置

在这里插入图片描述
通过I2C控制器对对数据进行管理,其中I2CSTAT这个寄存器前四位是使能收发,后四位是状态位ui
在这里插入图片描述
上面的图描述的是我们对数据读取的流程,我们通过操作寄存器来对他进行读写

int read_data(char *data, int len)
 {

     int i, ret = -1;
     //参照数据帧格式,从机地址放7-1位,读写方向放1位
    //I2CADD1 = (DEV_ADDR <<1) | 1<<0;
    I2CDS1 = (DEV_ADDR <<1) | 1<<0;
    //写0XB0到I2CSTAT 开始读取数据
    I2CSTAT1 = 0XB0;
    //需要进行防错判断
    if (wait_until_iic_irq() < 0)
    {
        goto END;
    }
    if (I2CSTAT1 & 0x1)
    {
        ret = -2; //有连接但无应答
        goto END;
    }
    for ( i = 0; i < len; i++)
    {
        clr_iic_int();
        if (wait_until_iic_irq() < 0)
        {
            goto END;
        }
        data[i] = I2CDS1;
    }
void do_tp(void)
{
    int i;
    char data[32];
    //清中断
    EXT_INT41_PEND = EXT_INT41_PEND;
    if (read_data(data, sizeof(data))== -2)
    {
        if (read_data(data, sizeof(data))== -2)
        {
            printf("no ack\n");
            return;
        }
        
    }
    
    if (data[2] <= 0)
    {
        return;
    }
    printf("\rpoints_count=%d\n",data[2]);

    for ( i = 0; i < data[2]; i++)
    {
        printf("x%d=%d,y%d=%d;", i, ((data[i*6+3]&0xf<<8) | (data[i*6+4])),\
        i,((data[i*6+5]&0xf<<8) | (data[i*6+6])) );
    }
    printf("\n\n%d\n",(data[3]>>6)&0x3);
    printf("\n");
       
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值