static void SetupXferRecAndExecute(uint8_t devAddr, uint8_t *txBuffPtr, uint16_t txSize, uint8_t *rxBuffPtr, uint16_t rxSize) { /* Setup I2C transfer record */ i2cmXferRec.slaveAddr = devAddr; i2cmXferRec.status = 0; i2cmXferRec.txSz = txSize; i2cmXferRec.rxSz = rxSize; i2cmXferRec.txBuff = txBuffPtr; i2cmXferRec.rxBuff = rxBuffPtr; Chip_I2CM_Xfer(LPC_I2C0, &i2cmXferRec); /* Enable Master Interrupts */ Chip_I2C_EnableInt(LPC_I2C0, I2C_INTENSET_MSTPENDING | I2C_INTENSET_MSTRARBLOSS | I2C_INTENSET_MSTSTSTPERR); /* Wait for transfer completion */ WaitForI2cXferComplete(&i2cmXferRec); /* Clear all Interrupts */ Chip_I2C_ClearInt(LPC_I2C0, I2C_INTENSET_MSTPENDING | I2C_INTENSET_MSTRARBLOSS | I2C_INTENSET_MSTSTSTPERR); } |
static void MPU9150_writeByte(uint8_t address, uint8_t subAddress, uint8_t data) { char data_write[2]; char data_read[2]; data_write[0] = subAddress; data_write[1] = data; SetupXferRecAndExecute(address, &data_write, 2, data_read,1); } static char MPU9150_readByte(uint8_t address, uint8_t subAddress) { char data[1]; // `data` will store the register data char data_write[1]; data_write[0] = subAddress; SetupXferRecAndExecute(address, &data_write,1, data, 1); return data[0]; } static void MPU9150_readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest) { int ii; char data[14]; char data_write[1]; data_write[0] = subAddress; SetupXferRecAndExecute(address,&data_write,1,data, count); for(ii = 0; ii < count; ii++) { dest[ii] = data[ii]; } } |
//EEPROM access #define BUFF_SIZE 64 uint8_t tx_buff[BUFF_SIZE]; uint8_t rx_buff[BUFF_SIZE]; uint8_t tx_data[BUFF_SIZE]; uint16_t address; uint16_t len; //read bytes from address static int read_address(uint16_t address, uint16_t bytes) { tx_buff[0] = (address >> 8) & 0xFF; tx_buff[1] = address & 0xFF; [color=#f00] SetupXferRecAndExecute(I2C_ADDR_7BIT, &tx_buff[0], 2, &rx_buff[0], bytes);[/color] if (i2cmXferRec.status == I2CM_STATUS_OK) { return 1; } return 0; } //write bytes to address static int write_address(uint16_t address, uint16_t bytes) { tx_buff[0] = (address >> 8) & 0xFF; tx_buff[1] = address & 0xFF; memcpy(&tx_buff[2],&tx_data[0],bytes); [color=#f00]SetupXferRecAndExecute(I2C_ADDR_7BIT, &tx_buff[0], bytes+2, &rx_buff[0], 0);[/color] if (i2cmXferRec.status == I2CM_STATUS_OK) { return 1; } return 0; } |
//write data tx_data[0] = 0x12; tx_data[1] = 0x34; tx_data[2] = 0x56; tx_data[3] = 0x78; address = 0x10; len = 4; ret = write_address(address,len); printf("Write Data to Address 0x%04X-",address); if(ret)printf("Success "); else printf("Error "); for(i=0; i < len; i++){printf("%02X ",tx_data);} printf("\n"); |
//read data address = 0x10; len = 4; ret = read_address(address,len); printf("Read Data from Address 0x%04X-",address); if(ret)printf("Success "); else printf("Error "); for(i=0; i < len; i++){printf("%02X ",rx_buff);} printf("\n"); |
static void MPU9150_writeByte(uint8_t address, uint8_t subAddress, uint8_t data) { char data_write[2]; char data_read[2]; data_write[0] = subAddress; data_write[1] = data; SetupXferRecAndExecute(address, &data_write, 2, data_read,1); } static char MPU9150_readByte(uint8_t address, uint8_t subAddress) { char data[1]; // `data` will store the register data char data_write[1]; data_write[0] = subAddress; SetupXferRecAndExecute(address, &data_write,1, data, 1); return data[0]; } static void MPU9150_readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest) { int ii; char data[14]; char data_write[1]; data_write[0] = subAddress; SetupXferRecAndExecute(address,&data_write,1,data, count); for(ii = 0; ii < count; ii++) { dest[ii] = data[ii]; } } |
static void MPU9150_writeByte(uint8_t address, uint8_t subAddress, uint8_t data) { char data_write[2]; char data_read[2]; data_write[0] = subAddress; data_write[1] = data; SetupXferRecAndExecute(address, &data_write, 2, data_read,1); } static char MPU9150_readByte(uint8_t address, uint8_t subAddress) { char data[1]; // `data` will store the register data char data_write[1]; data_write[0] = subAddress; SetupXferRecAndExecute(address, &data_write,1, data, 1); return data[0]; } static void MPU9150_readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest) { int ii; char data[14]; char data_write[1]; data_write[0] = subAddress; SetupXferRecAndExecute(address,&data_write,1,data, count); for(ii = 0; ii < count; ii++) { dest[ii] = data[ii]; } } |