unsigned char I2C_Read (int ack) { /* Enable/disable Master acknowledge */ if (ack) I2C1->CR1 |= 0x0400; else I2C1->CR1 &= ~0x0400; while (!(I2C_sr() & 0x00000040)); /* Wait until RxNE bit set */ return (I2C1->DR); }
/*----------------------------------------------------------------------------- * WaitFlagSet: Wait until flag is cleared or timeout occured * * Parameters: fl - flag to check * * Return: 0 - flag is cleared * 1 - flag not cleared, timeout occured *----------------------------------------------------------------------------*/ static uint32_t WaitFlagClr (uint32_t fl) { uint32_t i; for (i = I2C_TOUT; i; i--) { if (!(I2C_sr() & fl)) { return (0); } } return (1); }
void I2C_Addr (unsigned char adr) { I2C1->DR = adr; while (!(I2C_sr() & 0x0002)); }
void I2C_Stop (void) { I2C1->CR1 |= 0x0200; while (I2C_sr() & 0x00020000); /* Wait until BUSY bit reset */ }
void I2C_Start (void) { I2C1->CR1 |= 0x0100; while (!(I2C_sr() & 0x0001)); }
void I2C_Write (unsigned char c) { I2C1->DR = c; while (!(I2C_sr() & 0x00000004)); /* Wait until BTF bit set */ }