Hi,
I am using MPC5748G Controller "Core 2" for Capacitive Touch Display (Adafruit 2.8"). I am using I2C Protocol for Touch Sense. In this post I have attached the I2C init() and readReg() function. The Problem is the Display is hanging after some time i.e., randomly.
I need suggestions on wheather the function written is ok or needs some changes to solve hanging problem.
Thanks
void initI2C_1(void)
{
I2C_1.IBFD.B.IBC = 0x20; /* Division ratio to obtain SCL frequency from Platform clock/2. */
I2C_1.IBCR.B.MDIS = 0; /* I2C module is enabled */
I2C_1.IBCR.B.IBIE = 0; /* Interrupt disabled */
// I2C_1.IBCR.B.TXRX = 1; /* Transmit Data */
}
uint8_t I2C_readReg(uint8_t addr) { /* Master receive function */
SIUL2.GPDO[PJ0].B.PDO_4n = 0; /* Initialize low */
I2C_1.IBCR.B.TXRX = 1; /* Transmit Data */
I2C_1.IBCR.B.MSSL = 1; /* Master mode */
I2C_1.IBSR.B.IBIF = 0;
I2C_1.IBDR.R = 0x70;
while(I2C_1.IBSR.B.TCF != 1); /* Data transfer in progress */
while(I2C_1.IBSR.B.IBIF != 1); /* Data transfer in progress */
(void)I2C_1.IBSR.R;
while(I2C_1.IBSR.B.RXAK != 0); /* Address Received ACK */
SIUL2.GPDO[PJ0].B.PDO_4n = 1;
I2C_1.IBSR.B.IBIF = 0;
I2C_1.IBDR.R = addr;
while(I2C_1.IBSR.B.TCF != 1); /* Data transfer in progress */
while(I2C_1.IBSR.B.IBIF != 1); /* Data transfer in progress */
(void)I2C_1.IBSR.R;
while(I2C_1.IBSR.B.RXAK != 0); /* Address Received ACK */
delay(1000);
I2C_1.IBCR.B.RSTA = 1;
I2C_1.IBSR.B.IBIF = 0;
I2C_1.IBDR.R = 0x71;
while(I2C_1.IBSR.B.TCF != 1); /* Data transfer in progress */
while(I2C_1.IBSR.B.IBIF != 1); /* Data transfer in progress */
(void)I2C_1.IBSR.R;
while(I2C_1.IBSR.B.RXAK != 0); /* Address Received ACK */
delay(1000);
I2C_1.IBSR.B.IBIF = 0;
I2C_1.IBCR.B.TXRX = 0;
data = I2C_1.IBDR.R;
while(I2C_1.IBSR.B.TCF != 1); /* Data transfer in progress */
while(I2C_1.IBSR.B.IBIF != 1); /* Data transfer in progress */
(void)I2C_1.IBSR.R;
I2C_1.IBSR.B.IBIF = 0;
delay(5000);
return I2C_1.IBDR.R;
}