uint32_t I2C_MS5637_Read(uint8_t osr) { uint8_t data[3] = {0,0,0}; uint8_t adc_read_reg = MS5637_ADC_READ; I2C_DRV_MasterSendDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, &osr, 1, 1000); //initiate a pressure conversion switch (osr) { case D1_OSR_256: OSA_TimeDelay(1); break; // delay for conversion to complete case D1_OSR_512: OSA_TimeDelay(2); break; case D1_OSR_1024: OSA_TimeDelay(3); break; case D1_OSR_2048: OSA_TimeDelay(5); break; case D1_OSR_4096: OSA_TimeDelay(10); break; case D1_OSR_8192: OSA_TimeDelay(18); break; case D2_OSR_256: OSA_TimeDelay(1); break; case D2_OSR_512: OSA_TimeDelay(2); break; case D2_OSR_1024: OSA_TimeDelay(3); break; case D2_OSR_2048: OSA_TimeDelay(5); break; case D2_OSR_4096: OSA_TimeDelay(10); break; case D2_OSR_8192: OSA_TimeDelay(18); break; } I2C_DRV_MasterSendDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, &adc_read_reg, 1, 1000); //initiate ADC read sequence I2C_DRV_MasterReceiveDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, data, 3, 1000); //Read ADC registers return (uint32_t) (((uint32_t) data[0] << 16) | (uint32_t) data[1] << 8 | data[2]); // construct PROM data for return to main program }
/////////////////////////////////////////////////////////////////////////////// // Accu configuration /////////////////////////////////////////////////////////////////////////////// void configureAccuAndMag(struct i2c_device_t *device){ PRINTF("\rConfiguring Accu\n"); //Stendby On I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,ACCU_CTR_1, 1, STN_ON, 1, 1000); PRINTF("\rOnStendby\n"); //Setting Mag reg I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,MAG_CTR_1, 1, MAG_REG_1, 1, 1000); I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,MAG_CTR_2, 1, MAG_REG_2, 1, 1000); //Setting Data I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,XYZ_DATA_REG, 1, XYZ_DATA, 1, 1000); //Standby off I2C_DRV_MasterSendDataBlocking(I2C_INSTANCE_0, &device,ACCU_CTR_1, 1, STN_OFF, 1, 1000); }
uint8_t I2cMcuWriteBuffer(I2c_t *obj, uint8_t deviceAddr, uint16_t addr, uint8_t *buffer, uint16_t size) { /* Adjust address */ if (obj->I2c->slave.address != deviceAddr) obj->I2c->slave.address = deviceAddr; /* Write data */ if (I2C_DRV_MasterSendDataBlocking(obj->I2c->instance, &obj->I2c->slave, (const uint8_t*) &addr, 1, buffer, size, 200) != kStatus_I2C_Success) return FAIL; return SUCCESS; }
void MS5637_Prom_Read(uint16_t *destination) { uint8_t prom_cmd; uint8_t temp[2] = {0,0}; static uint8_t i = 0; for(i=0; i<7; ++i) { prom_cmd = MS5637_PROM | (i<<1); I2C_DRV_MasterSendDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, &prom_cmd, 1, 1000); //Send read prom command I2C_DRV_MasterReceiveDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, temp, 2, 1000); //Read Prom registers destination[i] = (uint16_t) (((int16_t)temp[0] << 8) | temp[1]) ; } }
void MS5637_Reset() { uint8_t reset_cmd = MS5637_RESET; I2C_DRV_MasterSendDataBlocking(FSL_I2CCOM1, &MS5637_config, NULL, 0, &reset_cmd, 1, 1000); //Reset MS5637 }
/*! * @brief main function */ int main(void) { uint8_t i; uint8_t index, indexChar, value; uint8_t cmdBuff[1] = {0xFF}; uint8_t sendBuff[1] = {0xFF}; // save data sent to i2c slave uint8_t receiveBuff[1] = {0xFF}; // save data received from i2c slave i2c_master_state_t master; i2c_status_t returnValue; i2c_device_t slave = { .address = 0x3A, .baudRate_kbps = 100 }; hardware_init(); dbg_uart_init(); // Configure I2C pins configure_i2c_pins(BOARD_I2C_COMM_INSTANCE); OSA_Init(); GPIO_DRV_Init(0, ledPins); // Init I2C module I2C_DRV_MasterInit(BOARD_I2C_COMM_INSTANCE, &master); printf("\r\n====== I2C Master ======\r\n\r\n"); OSA_TimeDelay(500); LED_toggle_master(); OSA_TimeDelay(500); LED_toggle_master(); OSA_TimeDelay(500); LED_toggle_master(); OSA_TimeDelay(500); LED_toggle_master(); while (1) { printf("\r\nI2C Master reads values from I2C Slave sub address:\r\n"); printf("\r\n------------------------------------"); printf("\r\nSlave Sub Address | Character "); printf("\r\n------------------------------------"); for (i=Subaddress_Index_0; i<Invalid_Subaddress_Index; i++) { cmdBuff[0] = i; returnValue = I2C_DRV_MasterReceiveDataBlocking( BOARD_I2C_COMM_INSTANCE, &slave, cmdBuff, 1, receiveBuff, sizeof(receiveBuff), 500); if (returnValue == kStatus_I2C_Success) { printf("\r\n[%d] %c", i, receiveBuff[0]); } else { printf("\r\nI2C communication failed, error code: %d", returnValue); } } printf("\r\n------------------------------------"); printf("\r\n"); printf("\r\nPlease input Slave sub address and the new character."); do { printf("\r\nSlave Sub Address: "); indexChar = getchar(); putchar(indexChar); printf("\r\nInput New Character: "); value = getchar(); putchar(value); printf("\n"); index = (uint8_t)(indexChar - '0'); if (index >= Invalid_Subaddress_Index) { printf("\r\nInvalid Sub Address."); } } while (index >= Invalid_Subaddress_Index); cmdBuff[0] = index; sendBuff[0] = value; returnValue = I2C_DRV_MasterSendDataBlocking( BOARD_I2C_COMM_INSTANCE, &slave, cmdBuff, 1, sendBuff, sizeof(sendBuff), 500); if (returnValue != kStatus_I2C_Success) { printf("\r\nI2C communication failed, error code: %d", returnValue); } } }