Hi,
I want to communicate over I2C with MPU9150.
I have a XMC1100 Boot kit and Dave3.
I implemented some functions but i cant trigger the FIFO standard receive interrupt to retrieve read data. A ssample code is here.
The received buffer is always 0x00.
What can be the problem? I attached the I2C intterupt to NVIC2 module.
I want to communicate over I2C with MPU9150.
I have a XMC1100 Boot kit and Dave3.
I implemented some functions but i cant trigger the FIFO standard receive interrupt to retrieve read data. A ssample code is here.
Code:
#include <DAVE3.h> //Declarations from DAVE3 Code Generation (includes SFR declaration)
#define MPU9150_I2C_ADDRESS 0xD0
#define MPU9150_WHO_AM_I 0x75
#define MPU9150_PWR_MGMT_1 0x6B
uint16_t DataReceive1 = 0x0000;
void receive_data_handler(void);
int write(uint8_t address, uint8_t payload );
int read(uint8_t address);
int main(void)
{
// status_t status; // Declaration of return variable for DAVE3 APIs (toggle comment if required)
DAVE_Init(); // Initialization of DAVE Apps
uint16_t Expect;
write(MPU9150_PWR_MGMT_1,0x00 );
while(1)
{
read(MPU9150_WHO_AM_I);
Expect= DataReceive1;
}
return 0;
}
int write(uint8_t address, uint8_t payload ){
// Configure message data length
I2C001_DataType data1,data2,data3,data4;
// Write access IO expander device PCA9502
// Transmission by the master with start condition,
// I2C write condition and slave address
data1.Data1.TDF_Type = I2C_TDF_MStart;
data1.Data1.Data = (MPU9150_I2C_ADDRESS | I2C_WRITE);
I2C001_WriteData(&I2C001_Handle0,&data1);
// Write to the direction register
data2.Data1.TDF_Type = I2C_TDF_MTxData;
data2.Data1.Data = address;
I2C001_WriteData(&I2C001_Handle0,&data2);
// Write data to configure one bit as output
data3.Data1.TDF_Type = I2C_TDF_MTxData;
data3.Data1.Data = payload;
I2C001_WriteData(&I2C001_Handle0,&data3);
// Stop condition by the master
data4.Data1.TDF_Type = I2C_TDF_MStop;
data4.Data1.Data = ubyteFF;
I2C001_WriteData(&I2C001_Handle0,&data4);
return 1;
}
int read(uint8_t address){
// Configure message data length
I2C001_DataType data1,data2,data3,data4,data5;
// Read access IO expander device PCA9502
// Transmission by the master with start condition,
// I2C write condition and slave address
data1.Data1.TDF_Type = I2C_TDF_MStart;
data1.Data1.Data = (MPU9150_I2C_ADDRESS | I2C_WRITE);
I2C001_WriteData(&I2C001_Handle0,&data1);
// Write data to the device
data2.Data1.TDF_Type = I2C_TDF_MTxData;
data2.Data1.Data = address;
I2C001_WriteData(&I2C001_Handle0,&data2);
// Transmit repeated start condition and slave address
data3.Data1.TDF_Type = I2C_TDF_MRStart;
data3.Data1.Data = MPU9150_I2C_ADDRESS | I2C_READ;
I2C001_WriteData(&I2C001_Handle0,&data3);
// Read one data from slave
data4.Data1.TDF_Type = I2C_TDF_MRxAck1;
data4.Data1.Data = ubyteFF;
I2C001_WriteData(&I2C001_Handle0,&data4);
// Stop condition by the master
data5.Data1.TDF_Type = I2C_TDF_MStop;
data5.Data1.Data = ubyteFF;
I2C001_WriteData(&I2C001_Handle0,&data5);
return 1;
}
// Event Handler( FIFO receive interrupt event) registered with NVIC002 App
void receive_data_handler(void)
{
uint16_t DataReceive1 = 0x0000;
// Read receive buffer, put the data in DataReceive1
I2C001_ReadData(&I2C001_Handle0,&DataReceive1);
}
What can be the problem? I attached the I2C intterupt to NVIC2 module.