/******************************************************************************* * Function Name : I2C_ReadRegister * Description : Reads the specified I2C register and returns its value. * Input1 : - I2C_Register: specifies the register to read. * This parameter can be one of the following values: * - I2C_Register_CR1: CR1 register. * - I2C_Register_CR2: CR2 register. * - I2C_Register_OAR1: OAR1 register. * - I2C_Register_OAR2: OAR2 register. * - I2C_Register_DR: DR register. * - I2C_Register_SR1: SR1 register. * - I2C_Register_SR2: SR2 register. * - I2C_Register_CCR: CCR register. * - I2C_Register_TRISE: TRISE register. * Output : None * Return : The value of the read register. *******************************************************************************/ u16 I2C_ReadRegister(I2C_TypeDef* I2Cx, u8 I2C_Register) { /* Check the parameters */ assert_param(IS_I2C_REGISTER(I2C_Register)); /* Return the selected register value */ return (*(u16 *)(*((u32 *)&I2Cx) + I2C_Register)); }
/** * @brief Reads the specified I2C register and returns its value. * @param I2C_Register: specifies the register to read. * This parameter can be one of the following values: * @arg I2C_Register_CR1: CR1 register. * @arg I2C_Register_CR2: CR2 register. * @arg I2C_Register_OAR1: OAR1 register. * @arg I2C_Register_OAR2: OAR2 register. * @arg I2C_Register_DR: DR register. * @arg I2C_Register_SR1: SR1 register. * @arg I2C_Register_SR2: SR2 register. * @arg I2C_Register_CCR: CCR register. * @arg I2C_Register_TRISE: TRISE register. * @retval The value of the read register. */ uint16_t I2C_ReadRegister(I2C_TypeDef* I2Cx, uint8_t I2C_Register) { __IO uint32_t tmp = 0; /* Check the parameters */ assert_param(IS_I2C_ALL_PERIPH(I2Cx)); assert_param(IS_I2C_REGISTER(I2C_Register)); tmp = (uint32_t)I2Cx; tmp += I2C_Register; /* Return the selected register value */ return (*(__IO uint16_t*)tmp); }