/** * @file i2c_custom.h * @brief Fonctions de communication I2C * * Routines d'écriture et de lecture I2C. * @date 6 janv. 2017 * @authors Dmitry Prokofyev (dmitry.prokofyev@free.fr) Etienne Lejolus * @version 1.0 */ #ifndef IC2_CUSTOM_H_ #define IC2_CUSTOM_H_ //----------------------------------------------------------------------------- /// @brief Ecriture de data dans reg d'un module i2c esclave. /// /// @param reg : registre dans lequelle seront écris les données /// @param data : données à écrire dans le registre reg /// /// void writedataMAG(uint8_t reg, uint8_t data){ uint8_t values[2] = {0,0}; // Prepare for a write of 2 bytes I2C_TransferSeq_TypeDef i2cTransfert; values[0] = reg; values[1] = data; i2cTransfert.addr = 0x3C; i2cTransfert.flags = I2C_FLAG_WRITE_WRITE; i2cTransfert.buf[0].len = 1; i2cTransfert.buf[0].data = &values[0]; i2cTransfert.buf[1].len = 1; i2cTransfert.buf[1].data = &values[1]; // Start I2C read int _status = I2C_TransferInit(I2C0, &i2cTransfert); while ( _status == i2cTransferInProgress) { _status = I2C_Transfer(I2C0); } } //----------------------------------------------------------------------------- /// @brief Lecture de data depuis un registre d'un module i2c esclave. /// /// @param reg : registre depuis lequelle il faut lire la donnée. ///@return data: données lue depuis le registre reg. /// uint8_t readdataMAG(uint8_t reg){ uint8_t values[2] = {0,0}; // Prepare for a write of 2 bytes I2C_TransferSeq_TypeDef i2cTransfert; values[0] = reg; values[1] = 0; i2cTransfert.addr = (0x3D>>1); i2cTransfert.flags = I2C_FLAG_WRITE_READ; i2cTransfert.buf[0].len = 1; i2cTransfert.buf[0].data = &values[0]; i2cTransfert.buf[1].len = 1; i2cTransfert.buf[1].data = &values[1]; // Start I2C read int _status = I2C_TransferInit(I2C0, &i2cTransfert); while ( _status == i2cTransferInProgress) { _status = I2C_Transfer(I2C0); } return values[1]; } //----------------------------------------------------------------------------- /// @brief Routine Ecriture,Lecture I2C. /// /// @param addr : adresse I2C de l'esclave /// @param reg : registre à partir duquel lire les données. /// @param len : longueure des données en octets à lire. ///@return data: données lue depuis le registre reg. /// uint16_t I2C_WriteRead(uint8_t addr, uint8_t reg, int len){ uint8_t values[2] = {0,0}; // Prepare for a write of 2 bytes I2C_TransferSeq_TypeDef i2cTransfert; values[0] = reg; i2cTransfert.addr = addr; i2cTransfert.flags = I2C_FLAG_WRITE_READ; i2cTransfert.buf[0].len = 1; i2cTransfert.buf[0].data = &values[0]; i2cTransfert.buf[1].len = len; i2cTransfert.buf[1].data = &values[1]; // Start I2C read int _status = I2C_TransferInit(I2C0, &i2cTransfert); while ( _status == i2cTransferInProgress) { _status = I2C_Transfer(I2C0); } //tfp_printf("le status dans WriteRead : %d\n\r",_status); return values[1]; } #endif /* IC2_CUSTOM_H_ */