Nothing happens on the SDA and SCL-Lines.
They are always LOW.
I post the Code:
void i2c_master_init(void)
{
SIM_SCGC4 |= 0xC0; //Turn on clock to I2C0 and I2C1 module
PORTE_PCR0 = PORT_PCR_MUX(6); // SDA
PORTE_PCR1 = PORT_PCR_MUX(6); //SCL
// I2C1 clock configuration
I2C1_F = 0x23; // I2C bus clock 100 kHz
}
char i2c_get_data(unsigned char register_address, unsigned char SlaveID){
char data=0;
unsigned char slaveID_read =0;
unsigned char slaveID_write=0;
/* shift ID in right possition */
slaveID_write = (unsigned char) SlaveID << 1;
slaveID_read = (unsigned char) SlaveID << 1;
/* Set R/W bit at end of Slave Address */
slaveID_write |= (unsigned char)MWSR;
slaveID_read |= (unsigned char)MRSW;
// read out register
I2C1_C1 |= I2C_C1_IICEN_MASK; // enable I2C1
I2C1_C1 |= I2C_C1_MST_MASK; // I2C1 is master, start condition
for (i = 0; i < 100; i++); // wait
I2C1_C1 |= I2C_C1_TX_MASK; // transmit mode
I2C1_D = slaveID_write; // write address
transfer_complete(); // wait until transfer is complete
I2C1_D = register_address; // address register
transfer_complete(); // wait until transfer is complete
I2C1_C1 |= I2C_C1_RSTA_MASK; // repeat start condition
for (i = 0; i < 100; i++); // wait
I2C1_D = slaveID_read; // read address
transfer_complete(); // wait until transfer is complete
I2C1_C1 &= ~I2C_C1_TX_MASK; // receive mode
I2C1_C1 |= I2C_C1_TXAK_MASK; // no acknowledge needed
data = I2C1_D; // dummy read to start receiving
transfer_complete(); // wait until transfer is complete
I2C1_C1 &= ~I2C_C1_MST_MASK; // send stop condition
data = I2C1_D; // read out data
I2C1_C1 &= ~I2C_C1_IICEN_MASK; // disable I2C0
return data;
}
void transfer_complete(void)
{
char test = 1;
while (test)
{
if (I2C1_S & I2C_S_TCF_MASK)
{
test = 0;
}
}
}