Hello Anthony,
Thanks a lot for the above help.
I am facing some issues though.
I am unable to read the WHO_AM_I register, it gives a value of 0x00.
When initially configured, the MMA8653 gives an interrupt by default(without motion). Below is the code for the same.
void MMA8653_init(void)
{
uint8 buffer_i2c2[2] = {0};
uint8 value = 0;
CyDelay(3);
int i , j;
buffer_i2c2[0]= M_WHO_AM_I;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 1, I2C_I2C_MODE_COMPLETE_XFER );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
(void) I2C_I2CMasterReadBuf(MMA_ADDR,&value, 1, \
I2C_I2C_MODE_COMPLETE_XFER);
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_RD_CMPLT));
value = value; //Value shown here displays 0x00
buffer_i2c2[0]=M_CTRL_REG1;
buffer_i2c2[1] = 0x00;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 2, I2C_I2C_MODE_COMPLETE_XFER );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
buffer_i2c2[0]=M_CTRL_REG2;
buffer_i2c2[1] = 0x07;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 2, I2C_I2C_MODE_REPEAT_START );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
buffer_i2c2[0]=M_CTRL_REG3;
buffer_i2c2[1] = 0x08;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 2, I2C_I2C_MODE_REPEAT_START );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
buffer_i2c2[0]=M_CTRL_REG4;
buffer_i2c2[1] = 0x04;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 2, I2C_I2C_MODE_REPEAT_START );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
buffer_i2c2[0]=M_CTRL_REG5;
buffer_i2c2[1] = 0x04;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 2, I2C_I2C_MODE_REPEAT_START );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
buffer_i2c2[0]=M_FF_MT_CFG;
buffer_i2c2[1] = 0x71;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 2, I2C_I2C_MODE_REPEAT_START );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
buffer_i2c2[0]=M_FF_MT_THS;
buffer_i2c2[1] = 0x12;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 2, I2C_I2C_MODE_REPEAT_START );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
buffer_i2c2[0]=M_FF_MT_COUNT;
buffer_i2c2[1] = 0x00;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 2, I2C_I2C_MODE_REPEAT_START );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
buffer_i2c2[0] = M_FF_MT_SRC;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_data, 1, I2C_I2C_MODE_REPEAT_START );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT));
(void) I2C_I2CMasterReadBuf(MMA_ADDR, buffer_data, 1, \
I2C_I2C_MODE_COMPLETE_XFER);
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_RD_CMPLT));
buffer_i2c2[0]=M_CTRL_REG1;
buffer_i2c2[1] = 0x21;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_i2c2, 2, I2C_I2C_MODE_REPEAT_START );
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT))
{}
}
I am also clearing the interrupt in main,
if(MMA_intr == 1)
{
buffer_data[0] = M_FF_MT_SRC;
I2C_I2CMasterWriteBuf(MMA_ADDR, buffer_data, 1, I2C_I2C_MODE_COMPLETE_XFER);
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_WR_CMPLT));
(void) I2C_I2CMasterReadBuf(MMA_ADDR, buffer_data, 1, \
I2C_I2C_MODE_COMPLETE_XFER);
while (0u == (I2C_I2CMasterStatus() & I2C_I2C_MSTAT_RD_CMPLT));
adxl_intr = 0;
LED_YELLOW_Write(0u);
}
Please help.
Shalin