//从FT5206读出一次数据 //reg:起始寄存器地址 //buf:数据缓缓存区 //len:读数据长度 void FT5206_RD_Reg(u16 reg,u8 *buf,u8 len) { u8 i; CT_IIC_Start(); CT_IIC_Send_Byte(FT_CMD_WR); //发送写命令 CT_IIC_Wait_Ack(); CT_IIC_Send_Byte(reg&0XFF); //发送低8位地址 CT_IIC_Wait_Ack(); CT_IIC_Start(); CT_IIC_Send_Byte(FT_CMD_RD); //发送读命令 CT_IIC_Wait_Ack(); for(i=0;i<len;i++) { buf[i]=CT_IIC_Read_Byte(i==(len-1)?0:1); //发数据 } CT_IIC_Stop();//产生一个停止条件 }
//向FT5206写入一次数据 //reg:起始寄存器地址 //buf:数据缓缓存区 //len:写数据长度 //返回值:0,成功;1,失败. u8 FT5206_WR_Reg(u16 reg,u8 *buf,u8 len) { u8 i; u8 ret=0; CT_IIC_Start(); CT_IIC_Send_Byte(FT_CMD_WR); //发送写命令 CT_IIC_Wait_Ack(); CT_IIC_Send_Byte(reg&0XFF); //发送低8位地址 CT_IIC_Wait_Ack(); for(i=0;i<len;i++) { CT_IIC_Send_Byte(buf[i]); //发数据 ret=CT_IIC_Wait_Ack(); if(ret)break; } CT_IIC_Stop(); //产生一个停止条件 return ret; }
//等待应答信号到来 //返回值:1,接收应答失败 // 0,接收应答成功 u8 CT_IIC_Wait_Ack(void) { u8 ucErrTime=0; CT_SDA_IN(); //SDA设置为输入 CT_IIC_SDA=1;delay_us(1); CT_IIC_SCL=1;delay_us(1); while(CT_READ_SDA) { ucErrTime++; if(ucErrTime>250) { CT_IIC_Stop(); return 1; } } CT_IIC_SCL=0;//时钟输出0 return 0; }