S8 I2C1_READ_String(U8 DevAdd, U8 RegAdd, U8 *RegValue, U8 len) { int DataWait = len*100; char ComRes,DevAddr; DevAddr = (DevAdd<<1)|M_I2C_Write; StartI2C1(); // Send the start bit IdleI2C1(); // Wait to complete while(I2C1STATbits.ACKSTAT); //wait for acknowledgement ComRes=MasterWriteI2C1(DevAddr); // Adress with write mode IdleI2C1(); // Wait to complete while(I2C1STATbits.ACKSTAT); //wait for acknowledgement ComRes=MasterWriteI2C1(RegAdd); // Write the chip ID register loaction for read IdleI2C1(); // Send the start bit while(I2C1STATbits.ACKSTAT); //wait for acknowledgement RestartI2C1(); // Send the start bit IdleI2C1(); // Wait to complete while(I2C1STATbits.ACKSTAT); //wait for acknowledgement DevAddr = (DevAdd<<1)|M_I2C_Read; MasterWriteI2C1(DevAddr); // Adress with write mode IdleI2C1(); // Wait to complete while(I2C1STATbits.ACKSTAT); //wait for acknowledgement MastergetsI2C1(len, RegValue, DataWait); // Read the Register value IdleI2C1(); // Wait to complete NotAckI2C1(); // Not Acknowledge I2C IdleI2C1(); // Wait to complete StopI2C1(); // Stop I2C communication IdleI2C1(); // Wait to complete; return ComRes; }
void LDByteReadI2C(unsigned char SlaveAddress, unsigned char reg, unsigned char *data, int num){ StartI2C1(); //Send the Start Bit IdleI2C1(); //Wait to complete MasterWriteI2C1(SlaveAddress); //transmit write command IdleI2C1(); //Wait to complete MasterWriteI2C1(reg); IdleI2C1(); StopI2C1(); IdleI2C1(); StartI2C1(); //Send the Start Bit IdleI2C1(); //Wait to complete MasterWriteI2C1(SlaveAddress|0x01); //transmit read command IdleI2C1(); //Wait to complete MastergetsI2C1(num, data, 30); StopI2C1(); //Send the Stop condition IdleI2C1(); //Wait to complete }
unsigned int i2cReadString(unsigned char channel, unsigned length, unsigned char * data, unsigned int data_wait) { if (channel == 1) { return MastergetsI2C1(length, data, data_wait); } else { return MastergetsI2C2(length, data, data_wait); } }