VOID i2c_test(VOID)
{
U8 ret;
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_HIGH, PIN_SDA); //SDA = 1;
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_HIGH, PIN_SCL); //SCL = 1;
I2C_Start();
I2C_Send_Byte(0X78 | 0X00);
ret = I2C_Wait_Ack();
}
void I2C_Start(void)
{
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_HIGH, PIN_SDA); //SDA =1
//delay_us(2);
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_HIGH, PIN_SCL); //SCL=1
//delay_us(2);
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_LOW, PIN_SDA); //SDA=0
//delay_us(5);
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_LOW, PIN_SCL); //SCL=0
}
void I2C_Send_Byte(U8 txd)
{
unsigned char Sdata;
U8 t;
Sdata = 0;
for(t=0;t<8;t++)
{
//delay_us(5);
if((txd&0x80)==0x80)
{
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_HIGH, PIN_SDA); //SDA=1,写 1
}
else
{
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_LOW, PIN_SDA); //SDA=0,写 0
}
txd<<=1;
//delay_us(5);
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_HIGH, PIN_SCL);
//delay_us(5);
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_LOW, PIN_SCL);
//delay_us(5);
}
}
//等待应答信号到来
//返回值:1,接收应答失�?
// 0,接收应答成�?
U8 I2C_Wait_Ack(void)
{
U8 bOk;
U8 ret;
U8 ucErrTime=0;
SDK_GPIO_SetIO(PIN_SET_INPUT, LEVEL_HIGH, PIN_SDA);
//delay_us(3);
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_HIGH, PIN_SCL);
bOk = TRUE;
while(bOk)
{
ret = SDK_GPIO_GetInputHighLow(PIN_SDA);
if(ret == LEVEL_LOW) {
bOk = FALSE; //SDA被垃低说明回复了ACK
}
else if(ret == LEVEL_HIGH){
//fail
}
ucErrTime++;
if(ucErrTime>250)
{
//I2C_Stop();
return 1;
}
}
SDK_GPIO_SetIO(PIN_SET_OUTPUT, LEVEL_LOW, PIN_SCL);
return 0;
}