原理图的理解
它通过四根线连接在底板上,其中这四根的线连接的的是一个管理触摸屏,其中
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");
}