天天看點

五點觸摸屏的實作

原理圖的了解

五點觸摸屏的實作

它通過四根線連接配接在底闆上,其中這四根的線連接配接的的是一個管理觸摸屏,其中

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