用gpio模拟I2c通信,
uint8_t wait_for_ack(void)
{
uint8_t ACK=1;
uint8_t timer =0
GPIO_SetDir(GPIOB,GPIO_PIN10,GPIO_IN);
GPIO_Analog_I2C_SCL(0);
Delay();
while((!GPIO_GetPinLevel(GPIOB,GPIO_PIN10)) && timer<50)
{
ACK = GPIO_GetPinLevel(GPIOB,GPIO_PIN10);
Delay();
break;
}
GPIO_Analog_I2C_SCL(1);
Delay();
GPIO_Analog_I2C_SDA(1);
Delay();
return ACK;
}
void i2c_SendByte(uint16_t byte)
{
uint8_t i;
GPIO_SetDir(GPIOB,GPIO_PIN9,GPIO_OUT);
GPIO_SetDir(GPIOB,GPIO_PIN10,GPIO_OUT);
for (i=0; i<8; i++)
{
GPIO_Analog_I2C_SCL(0);
Delay();
if (byte & 0x80)
{
GPIO_Analog_I2C_SDA(1);
}
else
{
GPIO_Analog_I2C_SDA(0);
}
Delay();
GPIO_Analog_I2C_SCL(1);
Delay();
byte <<= 1;
Delay();
}
GPIO_Analog_I2C_SDA(1);
Delay();
}
|