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];
}
}
|