原理圖的了解

它通過四根線連接配接在底闆上,其中這四根的線連接配接的的是一個管理觸摸屏,其中
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");
}