bool ak8963SPIRead(uint8_t addr_, uint8_t reg_, uint8_t len_, uint8_t *buf) { verifympu9250WriteRegister(MPU_RA_I2C_SLV0_ADDR, addr_ | READ_FLAG); // set I2C slave address for read verifympu9250WriteRegister(MPU_RA_I2C_SLV0_REG, reg_); // set I2C slave register verifympu9250WriteRegister(MPU_RA_I2C_SLV0_CTRL, len_ | 0x80); // read number of bytes delay(8); __disable_irq(); mpu9250ReadRegister(MPU_RA_EXT_SENS_DATA_00, len_, buf); // read I2C __enable_irq(); return true; }
bool ak8963SensorCompleteRead(uint8_t *buf) { uint32_t timeRemaining = ak8963SensorQueuedReadTimeRemaining(); if (timeRemaining > 0) { delayMicroseconds(timeRemaining); } queuedRead.waiting = false; mpu9250ReadRegister(MPU_RA_EXT_SENS_DATA_00, queuedRead.len, buf); // read I2C buffer return true; }
bool mpu9250SpiDetect(void) { uint8_t in; uint8_t attemptsRemaining = 20; spiSetDivisor(MPU9250_SPI_INSTANCE, SPI_SLOW_CLOCK); //low speed mpu9250WriteRegister(MPU_RA_PWR_MGMT_1, MPU9250_BIT_RESET); do { delay(150); mpu9250ReadRegister(MPU_RA_WHO_AM_I, 1, &in); if (in == MPU9250_WHO_AM_I_CONST) { break; } if (!attemptsRemaining) { return false; } } while (attemptsRemaining--); return true; }