Hi all,
i ma trying to run I2C on kea 128 development board. the module which i am testing is I2C0 and the slave device being addressed is MPU IMU 9DOF.
I have done the mandatory setting required for configuring the i2c bus ,like the pin selection, clock rate and all,but i am not able to see anything on DSO of SDA or SCL pin. No clock generation is being done when i am doing some transaction on i2c bus.
I am using the I2C driver for KEA which have the necessary function for starting the I2C and configuring it for talking to a slave device.
I2C_ConfigType i2c_test; //object to I2C config struct in i2c.h
main()
{
/***I2C (100Khz) Configuration for Current sensor****/
SIM_PINSEL0 &= ~SIM_PINSEL_I2C0PS_MASK; //map i2c0 pins on PTA3,SCL and PTA2,SDA
i2c_test.u16F = 0x1E; //I2C baud rate = I2C module clock speed (Hz)/(mul × SCL divider) = 20Mhz/(1x192)
i2c_test.u16OwnA1 = 0x68; //slave address
i2c_test.sSetting.bI2CEn = 0x01;
I2C_Init(I2C0,&i2c_test);
while(1)
{
I2C_Start(I2C0);
I2C_WriteOneByte(I2C0,0x75); //read WHO_AM_I reg of IMU slave
I2C_ReadOneByte(I2C0,&i2c_rd,1);
Uart_SendChar(i2c_rd);
Uart_SendChar(0x0D);
I2C_Stop(I2C0);
LED0_ON;
delay_ms(500);
LED0_OFF;
delay_ms(500);
}
}
I have also attached the I2C drivers for ready reference>>>>>
when i run this code, nothing comes in uart port and led also doesn't blink. But if I disable all the I2C related functions, code runs perfect.Where am I going wrong.?????
HELP!!!!!!!!!!!
Thanks
Original Attachment has been moved to: iic.7z.zip
Dear Maharaj Shree Kumar Sood,
I apologize for the delay, please check this projects are for bareboard. you will just have to chance little things to make it works in your board.
best regards.
Jonathan
Thanks for the i2c files. They were of great help to me for cross checking my builtin i2c functions. Now i have written the code for reading a register from IMU with the help of your .h and .c files. But , the choke is that I am unable to see and clock on my SCL pin on DSO.
SIM_PINSEL1 &= 0x0000; //map i2c1 pins on PTE1,SCL and PTE0,SDA
i2c_test.u16F = 0x1E; //I2C baud rate = I2C module clock speed (Hz)/(mul × SCL divider) = 20Mhz/(1x192)
//i2c_test.u16OwnA1 = SLAVE_ADRESS; //slave address
i2c_test.sSetting.bI2CEn = 0x01;
I2C_Init(I2C1,&i2c_test);
while(1)
{
I2C_start();
I2C1_D = SLAVE_ADRESS << 1; /* Send I2C device address with W/R bit = 0 */
I2C_wait();
I2C1_D = MPU_WHO_AM_I;
I2C_repeatedStart();
I2C0_D = (SLAVE_ADRESS << 1) | 0x01; /* Send I2C device address this time with W/R bit = 1 */
I2C_wait();
I2C_enterRxMode();
I2C_disableAck();
i2c_rd_1 = I2C1_D;
I2C_wait();
I2C_stop();
i2c_rd_1 = I2C1_D;
Delay(50);
sprintf(str,"Reg val = %d",i2c_rd_1);
Uart_SendStr(str);
}
I think the problem is that my i2c is not getting configured properly on these pins. Although the pins on the sensor side are pulled up with 10k to 3.3V.
So, i think i am doing somewhere wrong with I2c configuration.
Please help....