int RcvIMUData(unsigned int reg_addr) { // //see page 92 of https://www.adafruit.com/datasheets/BST_BNO055_DS000_12.pdf rcv = 0; StartI2C2(); //Send line start condition IdleI2C2(); //Wait to complete MasterWriteI2C2(0x50); //Write slave addr WRITE (OR 0) IdleI2C2(); MasterWriteI2C2(reg_addr); //BNO055_QUATERNION_DATA_W_LSB_ADDR IdleI2C2(); RestartI2C2(); IdleI2C2(); MasterWriteI2C2(0x51); //Write the slave address, READ (OR 1) IdleI2C2(); rcv |= MasterReadI2C2(); //Read in LSB IdleI2C2(); AckI2C2(); IdleI2C2(); rcv |= MasterReadI2C2()<<8; //Read in MSB NotAckI2C2(); IdleI2C2(); StopI2C2(); //Send line stop condition IdleI2C2(); return rcv; }
/** * Reads temperature from IR sensor of an object in front of sensor * @return A hex value from 0x27AD (-70 ?C) to 0x7fff (382.19?C) */ int RcvIRTemp(void){ rcv = 0; StartI2C2(); //Send line start condition IdleI2C2(); //Wait to complete MasterWriteI2C2(0xb4); //Write slave addr WRITE (OR 0) IdleI2C2(); MasterWriteI2C2(0x07); //0x07 = read RAM for TObj1 temperature IdleI2C2(); RestartI2C2(); IdleI2C2(); MasterWriteI2C2(0xb5); //Write the slave address, READ (OR 1) IdleI2C2(); rcv |= MasterReadI2C2(); //Read in LSB IdleI2C2(); AckI2C2(); //Acknowledge LSB IdleI2C2(); rcv |= MasterReadI2C2()<<8; //Read in MSB AckI2C2(); //Acknowledge MSB IdleI2C2(); MasterReadI2C2(); //Read in PEC AckI2C2(); //Acknowledge MSB IdleI2C2(); StopI2C2(); //Send line stop condition IdleI2C2(); return rcv; //Return read value }
int RcvData2(unsigned int address){ rcv = 0; StartI2C2(); //Send line start condition IdleI2C2(); //Wait to complete MasterWriteI2C2((address << 1) | 1); //Write out slave address OR 1 (read command) IdleI2C2(); //Wait to complete rcv = MasterReadI2C2()<<8; //Read in a value AckI2C2(); rcv |= MasterReadI2C2(); StopI2C2(); //Send line stop condition IdleI2C2(); //Wait co complete return rcv; //Return read value }
void sleepIRTemp(){ StartI2C2(); //Send line start condition IdleI2C2(); //Wait to complete MasterWriteI2C2(0xb4); //Write slave addr WRITE (OR 0) IdleI2C2(); MasterWriteI2C2(0xff); //sleep command IdleI2C2(); MasterReadI2C2(); //Read in PEC IdleI2C2(); AckI2C2(); //Acknowledge PEC IdleI2C2(); StopI2C2(); }
int RcvIRTemp(unsigned int address){ rcv = 0; StartI2C2(); //Send line start condition IdleI2C2(); //Wait to complete MasterWriteI2C2(0xb4); //Write slave addr WRITE (OR 0) IdleI2C2(); MasterWriteI2C2(0xf0); //command // //Command to read Tobj1 on ir sensor's ram: 000 = read ram; 0x07 = tobj1 IdleI2C2(); //Wait to complete // StopI2C2(); //restart // IdleI2C2(); // StartI2C2(); // IdleI2C2(); // // MasterWriteI2C2(0xb5); //Write the slave address, READ (OR 1) // IdleI2C2(); MasterReadI2C2(); //Read in LSB IdleI2C2(); AckI2C2(); //Acknowledge LSB IdleI2C2(); MasterReadI2C2(); //Read in MSB IdleI2C1(); AckI2C2(); //Acknowledge MSB IdleI2C2(); MasterReadI2C2(); //Read in PEC IdleI2C1(); AckI2C2(); //Acknowledge MSB IdleI2C2(); StopI2C2(); //Send line stop condition IdleI2C2(); //Wait co complete return rcv; //Return read value }
/***************************************************************************** * Function Name : gyroReceiveByte * Description : Receive a byte from gyroscope * Parameters : None * Return Value : None *****************************************************************************/ static inline unsigned char gyroReceiveByte(void) { return MasterReadI2C2(); }
unsigned char i2cReceiveByte(unsigned char channel) { if (channel == 1) { return MasterReadI2C1(); } else { return MasterReadI2C2(); } }