Quantcast
Channel: Infineon Forums
Viewing all articles
Browse latest Browse all 9892

I2C - MPU 9150 Problem

$
0
0
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.

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

The received buffer is always 0x00.

What can be the problem? I attached the I2C intterupt to NVIC2 module.

Viewing all articles
Browse latest Browse all 9892

Trending Articles