MCF_I2C_I2CR |= MCF_I2C_I2CR_MTX; /* setting in Tx mode */ MCF_I2C_I2CR |= MCF_I2C_I2CR_MSTA; /* send start condition */ MCF_I2C_I2DR = adressaI2c; /* devide ID to write */ while( !(MCF_I2C_I2SR & MCF_I2C_I2SR_IIF )); /* wait until one byte transfer completion */ MCF_I2C_I2SR &= ~MCF_I2C_I2SR_IIF; /* clear the completion transfer flag */ i=50; /* Wait for a bit */ while(i--); MCF_I2C_I2DR = (adressa>>8); /* memory address */ /* wait until one byte transfer completion */ while( !(MCF_I2C_I2SR & MCF_I2C_I2SR_IIF )); /* wait until one byte transfer completion */ MCF_I2C_I2SR &= ~MCF_I2C_I2SR_IIF; /* clear the completion transfer flag */ i=50; /* Wait for a bit */ while(i--); MCF_I2C_I2DR = (adressa&0xff); /* memory address */ /* wait until one byte transfer completion */ while( !(MCF_I2C_I2SR & MCF_I2C_I2SR_IIF )); /* wait until one byte transfer completion */ MCF_I2C_I2SR &= ~MCF_I2C_I2SR_IIF; /* clear the completion transfer flag */ i=50; /* Wait for a bit */ while(i--); MCF_I2C_I2CR |= MCF_I2C_I2CR_RSTA; /* resend start */ i=50; /* Wait for a bit */ while(i--); MCF_I2C_I2DR = adressaI2c | 0x01; /* device id to read */ while( !(MCF_I2C_I2SR & MCF_I2C_I2SR_IIF )); /* wait until one byte transfer completion */ MCF_I2C_I2SR &= ~MCF_I2C_I2SR_IIF; /* clear the completion transfer flag */ MCF_I2C_I2CR &= ~MCF_I2C_I2CR_MTX; /* setting in Rx mode */ i=50; /* Wait for a bit */ while(i--); Buffer[0] = MCF_I2C_I2DR; /* dummy read */ while( !(MCF_I2C_I2SR & MCF_I2C_I2SR_IIF )); /* wait until one byte transfer completion */ MCF_I2C_I2SR &= ~MCF_I2C_I2SR_IIF; /* clear the completion transfer flag */ MCF_I2C_I2CR &= ~MCF_I2C_I2CR_TXAK; for(i=0;i<nBytes;i++) { Buffer[i + blockOffset ]= MCF_I2C_I2DR; /* read data received */ while( !(MCF_I2C_I2SR & MCF_I2C_I2SR_IIF )); /* wait until one byte transfer completion */ MCF_I2C_I2SR &= ~MCF_I2C_I2SR_IIF; /* clear the completion transfer flag */ if(i<nBytes-1) { //SCL_low(); //SDA_low(); //delay(TPLS); //SCL_high(); //delay(TPLS); /* send NO ACK */ // MCF_I2C_I2CR |= MCF_I2C_I2CR_RSTA; MCF_I2C_I2CR &= ~MCF_I2C_I2CR_TXAK; /* send ACK */ } else { MCF_I2C_I2CR |= MCF_I2C_I2CR_TXAK; /* send NO ACK */ } } i=50; /* Wait for a bit */ while(i--); MCF_I2C_I2CR &= ~MCF_I2C_I2CR_MSTA; /* generates stop condition */ return 1;