Removed abbreviations from SPI read/write functions
This commit is contained in:
parent
1c7777ecc5
commit
6157ebe5e3
|
@ -241,8 +241,8 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
|
||||||
if (mpu6000SpiDetect(&gyro->bus)) {
|
if (mpu6000SpiDetect(&gyro->bus)) {
|
||||||
gyro->mpuDetectionResult.sensor = MPU_60x0_SPI;
|
gyro->mpuDetectionResult.sensor = MPU_60x0_SPI;
|
||||||
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
|
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
|
||||||
gyro->mpuConfiguration.readFn = spiReadRegBuf;
|
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
|
||||||
gyro->mpuConfiguration.writeFn = spiWriteReg;
|
gyro->mpuConfiguration.writeFn = spiWriteRegister;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -255,8 +255,8 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
|
||||||
if (mpu6500Sensor != MPU_NONE) {
|
if (mpu6500Sensor != MPU_NONE) {
|
||||||
gyro->mpuDetectionResult.sensor = mpu6500Sensor;
|
gyro->mpuDetectionResult.sensor = mpu6500Sensor;
|
||||||
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
|
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
|
||||||
gyro->mpuConfiguration.readFn = spiReadRegBuf;
|
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
|
||||||
gyro->mpuConfiguration.writeFn = spiWriteReg;
|
gyro->mpuConfiguration.writeFn = spiWriteRegister;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -267,8 +267,8 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
|
||||||
if (mpu9250SpiDetect(&gyro->bus)) {
|
if (mpu9250SpiDetect(&gyro->bus)) {
|
||||||
gyro->mpuDetectionResult.sensor = MPU_9250_SPI;
|
gyro->mpuDetectionResult.sensor = MPU_9250_SPI;
|
||||||
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
|
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
|
||||||
gyro->mpuConfiguration.readFn = spiReadRegBuf;
|
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
|
||||||
gyro->mpuConfiguration.writeFn = mpu9250SpiWriteReg;
|
gyro->mpuConfiguration.writeFn = spiWriteRegister;
|
||||||
gyro->mpuConfiguration.resetFn = mpu9250SpiResetGyro;
|
gyro->mpuConfiguration.resetFn = mpu9250SpiResetGyro;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -280,8 +280,8 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
|
||||||
if (icm20689SpiDetect(&gyro->bus)) {
|
if (icm20689SpiDetect(&gyro->bus)) {
|
||||||
gyro->mpuDetectionResult.sensor = ICM_20689_SPI;
|
gyro->mpuDetectionResult.sensor = ICM_20689_SPI;
|
||||||
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
|
gyro->mpuConfiguration.gyroReadXRegister = MPU_RA_GYRO_XOUT_H;
|
||||||
gyro->mpuConfiguration.readFn = spiReadRegBuf;
|
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
|
||||||
gyro->mpuConfiguration.writeFn = spiWriteReg;
|
gyro->mpuConfiguration.writeFn = spiWriteRegister;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -291,8 +291,8 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro)
|
||||||
gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(BMI160_CS_PIN)) : gyro->bus.spi.csnPin;
|
gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(BMI160_CS_PIN)) : gyro->bus.spi.csnPin;
|
||||||
if (bmi160Detect(&gyro->bus)) {
|
if (bmi160Detect(&gyro->bus)) {
|
||||||
gyro->mpuDetectionResult.sensor = BMI_160_SPI;
|
gyro->mpuDetectionResult.sensor = BMI_160_SPI;
|
||||||
gyro->mpuConfiguration.readFn = spiReadRegBuf;
|
gyro->mpuConfiguration.readFn = spiReadRegisterBuffer;
|
||||||
gyro->mpuConfiguration.writeFn = spiWriteReg;
|
gyro->mpuConfiguration.writeFn = spiWriteRegister;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -106,11 +106,11 @@ bool bmi160Detect(const busDevice_t *bus)
|
||||||
spiSetDivisor(bus->spi.instance, BMI160_SPI_DIVISOR);
|
spiSetDivisor(bus->spi.instance, BMI160_SPI_DIVISOR);
|
||||||
|
|
||||||
/* Read this address to acticate SPI (see p. 84) */
|
/* Read this address to acticate SPI (see p. 84) */
|
||||||
spiReadReg(bus, 0x7F);
|
spiReadRegister(bus, 0x7F);
|
||||||
delay(10); // Give SPI some time to start up
|
delay(10); // Give SPI some time to start up
|
||||||
|
|
||||||
/* Check the chip ID */
|
/* Check the chip ID */
|
||||||
if (spiReadReg(bus, BMI160_REG_CHIPID) != 0xd1){
|
if (spiReadRegister(bus, BMI160_REG_CHIPID) != 0xd1){
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -163,7 +163,7 @@ static int32_t BMI160_Config(const busDevice_t *bus)
|
||||||
delay(5); // can take up to 3.8ms
|
delay(5); // can take up to 3.8ms
|
||||||
|
|
||||||
// Verify that normal power mode was entered
|
// Verify that normal power mode was entered
|
||||||
uint8_t pmu_status = spiReadReg(bus, BMI160_REG_PMU_STAT);
|
uint8_t pmu_status = spiReadRegister(bus, BMI160_REG_PMU_STAT);
|
||||||
if ((pmu_status & 0x3C) != 0x14){
|
if ((pmu_status & 0x3C) != 0x14){
|
||||||
return -3;
|
return -3;
|
||||||
}
|
}
|
||||||
|
@ -192,7 +192,7 @@ static int32_t BMI160_Config(const busDevice_t *bus)
|
||||||
delay(1);
|
delay(1);
|
||||||
|
|
||||||
// Enable offset compensation
|
// Enable offset compensation
|
||||||
uint8_t val = spiReadReg(bus, BMI160_REG_OFFSET_0);
|
uint8_t val = spiReadRegister(bus, BMI160_REG_OFFSET_0);
|
||||||
if (BMI160_WriteReg(bus, BMI160_REG_OFFSET_0, val | 0xC0) != 0){
|
if (BMI160_WriteReg(bus, BMI160_REG_OFFSET_0, val | 0xC0) != 0){
|
||||||
return -7;
|
return -7;
|
||||||
}
|
}
|
||||||
|
@ -233,7 +233,7 @@ static int32_t BMI160_do_foc(const busDevice_t *bus)
|
||||||
|
|
||||||
// Wait for FOC to complete
|
// Wait for FOC to complete
|
||||||
for (int i=0; i<50; i++) {
|
for (int i=0; i<50; i++) {
|
||||||
val = spiReadReg(bus, BMI160_REG_STATUS);
|
val = spiReadRegister(bus, BMI160_REG_STATUS);
|
||||||
if (val & BMI160_REG_STATUS_FOC_RDY) {
|
if (val & BMI160_REG_STATUS_FOC_RDY) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -244,7 +244,7 @@ static int32_t BMI160_do_foc(const busDevice_t *bus)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Program NVM
|
// Program NVM
|
||||||
val = spiReadReg(bus, BMI160_REG_CONF);
|
val = spiReadRegister(bus, BMI160_REG_CONF);
|
||||||
if (BMI160_WriteReg(bus, BMI160_REG_CONF, val | BMI160_REG_CONF_NVM_PROG_EN) != 0) {
|
if (BMI160_WriteReg(bus, BMI160_REG_CONF, val | BMI160_REG_CONF_NVM_PROG_EN) != 0) {
|
||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
|
@ -255,7 +255,7 @@ static int32_t BMI160_do_foc(const busDevice_t *bus)
|
||||||
|
|
||||||
// Wait for NVM programming to complete
|
// Wait for NVM programming to complete
|
||||||
for (int i=0; i<50; i++) {
|
for (int i=0; i<50; i++) {
|
||||||
val = spiReadReg(bus, BMI160_REG_STATUS);
|
val = spiReadRegister(bus, BMI160_REG_STATUS);
|
||||||
if (val & BMI160_REG_STATUS_NVM_RDY) {
|
if (val & BMI160_REG_STATUS_NVM_RDY) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,12 +59,12 @@ bool icm20689SpiDetect(const busDevice_t *bus)
|
||||||
|
|
||||||
spiSetDivisor(bus->spi.instance, SPI_CLOCK_INITIALIZATON); //low speed
|
spiSetDivisor(bus->spi.instance, SPI_CLOCK_INITIALIZATON); //low speed
|
||||||
|
|
||||||
spiWriteReg(bus, MPU_RA_PWR_MGMT_1, ICM20689_BIT_RESET);
|
spiWriteRegister(bus, MPU_RA_PWR_MGMT_1, ICM20689_BIT_RESET);
|
||||||
|
|
||||||
uint8_t attemptsRemaining = 20;
|
uint8_t attemptsRemaining = 20;
|
||||||
do {
|
do {
|
||||||
delay(150);
|
delay(150);
|
||||||
const uint8_t whoAmI = spiReadReg(bus, MPU_RA_WHO_AM_I);
|
const uint8_t whoAmI = spiReadRegister(bus, MPU_RA_WHO_AM_I);
|
||||||
if (whoAmI == ICM20689_WHO_AM_I_CONST) {
|
if (whoAmI == ICM20689_WHO_AM_I_CONST) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,7 +108,7 @@ void mpu6000SpiGyroInit(gyroDev_t *gyro)
|
||||||
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_INITIALIZATON);
|
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_INITIALIZATON);
|
||||||
|
|
||||||
// Accel and Gyro DLPF Setting
|
// Accel and Gyro DLPF Setting
|
||||||
spiWriteReg(&gyro->bus, MPU6000_CONFIG, gyro->lpf);
|
spiWriteRegister(&gyro->bus, MPU6000_CONFIG, gyro->lpf);
|
||||||
delayMicroseconds(1);
|
delayMicroseconds(1);
|
||||||
|
|
||||||
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_FAST); // 18 MHz SPI clock
|
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_FAST); // 18 MHz SPI clock
|
||||||
|
@ -133,13 +133,13 @@ bool mpu6000SpiDetect(const busDevice_t *bus)
|
||||||
|
|
||||||
spiSetDivisor(bus->spi.instance, SPI_CLOCK_INITIALIZATON);
|
spiSetDivisor(bus->spi.instance, SPI_CLOCK_INITIALIZATON);
|
||||||
|
|
||||||
spiWriteReg(bus, MPU_RA_PWR_MGMT_1, BIT_H_RESET);
|
spiWriteRegister(bus, MPU_RA_PWR_MGMT_1, BIT_H_RESET);
|
||||||
|
|
||||||
uint8_t attemptsRemaining = 5;
|
uint8_t attemptsRemaining = 5;
|
||||||
do {
|
do {
|
||||||
delay(150);
|
delay(150);
|
||||||
|
|
||||||
const uint8_t whoAmI = spiReadReg(bus, MPU_RA_WHO_AM_I);
|
const uint8_t whoAmI = spiReadRegister(bus, MPU_RA_WHO_AM_I);
|
||||||
if (whoAmI == MPU6000_WHO_AM_I_CONST) {
|
if (whoAmI == MPU6000_WHO_AM_I_CONST) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ bool mpu6000SpiDetect(const busDevice_t *bus)
|
||||||
}
|
}
|
||||||
} while (attemptsRemaining--);
|
} while (attemptsRemaining--);
|
||||||
|
|
||||||
const uint8_t productID = spiReadReg(bus, MPU_RA_PRODUCT_ID);
|
const uint8_t productID = spiReadRegister(bus, MPU_RA_PRODUCT_ID);
|
||||||
|
|
||||||
/* look for a product ID we recognise */
|
/* look for a product ID we recognise */
|
||||||
|
|
||||||
|
@ -181,41 +181,41 @@ static void mpu6000AccAndGyroInit(gyroDev_t *gyro)
|
||||||
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_INITIALIZATON);
|
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_INITIALIZATON);
|
||||||
|
|
||||||
// Device Reset
|
// Device Reset
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_PWR_MGMT_1, BIT_H_RESET);
|
spiWriteRegister(&gyro->bus, MPU_RA_PWR_MGMT_1, BIT_H_RESET);
|
||||||
delay(150);
|
delay(150);
|
||||||
|
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_SIGNAL_PATH_RESET, BIT_GYRO | BIT_ACC | BIT_TEMP);
|
spiWriteRegister(&gyro->bus, MPU_RA_SIGNAL_PATH_RESET, BIT_GYRO | BIT_ACC | BIT_TEMP);
|
||||||
delay(150);
|
delay(150);
|
||||||
|
|
||||||
// Clock Source PPL with Z axis gyro reference
|
// Clock Source PPL with Z axis gyro reference
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_PWR_MGMT_1, MPU_CLK_SEL_PLLGYROZ);
|
spiWriteRegister(&gyro->bus, MPU_RA_PWR_MGMT_1, MPU_CLK_SEL_PLLGYROZ);
|
||||||
delayMicroseconds(15);
|
delayMicroseconds(15);
|
||||||
|
|
||||||
// Disable Primary I2C Interface
|
// Disable Primary I2C Interface
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_USER_CTRL, BIT_I2C_IF_DIS);
|
spiWriteRegister(&gyro->bus, MPU_RA_USER_CTRL, BIT_I2C_IF_DIS);
|
||||||
delayMicroseconds(15);
|
delayMicroseconds(15);
|
||||||
|
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_PWR_MGMT_2, 0x00);
|
spiWriteRegister(&gyro->bus, MPU_RA_PWR_MGMT_2, 0x00);
|
||||||
delayMicroseconds(15);
|
delayMicroseconds(15);
|
||||||
|
|
||||||
// Accel Sample Rate 1kHz
|
// Accel Sample Rate 1kHz
|
||||||
// Gyroscope Output Rate = 1kHz when the DLPF is enabled
|
// Gyroscope Output Rate = 1kHz when the DLPF is enabled
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_SMPLRT_DIV, gyroMPU6xxxGetDividerDrops(gyro));
|
spiWriteRegister(&gyro->bus, MPU_RA_SMPLRT_DIV, gyroMPU6xxxGetDividerDrops(gyro));
|
||||||
delayMicroseconds(15);
|
delayMicroseconds(15);
|
||||||
|
|
||||||
// Gyro +/- 1000 DPS Full Scale
|
// Gyro +/- 1000 DPS Full Scale
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_GYRO_CONFIG, INV_FSR_2000DPS << 3);
|
spiWriteRegister(&gyro->bus, MPU_RA_GYRO_CONFIG, INV_FSR_2000DPS << 3);
|
||||||
delayMicroseconds(15);
|
delayMicroseconds(15);
|
||||||
|
|
||||||
// Accel +/- 8 G Full Scale
|
// Accel +/- 8 G Full Scale
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_ACCEL_CONFIG, INV_FSR_8G << 3);
|
spiWriteRegister(&gyro->bus, MPU_RA_ACCEL_CONFIG, INV_FSR_8G << 3);
|
||||||
delayMicroseconds(15);
|
delayMicroseconds(15);
|
||||||
|
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 1 << 4 | 0 << 3 | 0 << 2 | 0 << 1 | 0 << 0); // INT_ANYRD_2CLEAR
|
spiWriteRegister(&gyro->bus, MPU_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 1 << 4 | 0 << 3 | 0 << 2 | 0 << 1 | 0 << 0); // INT_ANYRD_2CLEAR
|
||||||
delayMicroseconds(15);
|
delayMicroseconds(15);
|
||||||
|
|
||||||
#ifdef USE_MPU_DATA_READY_SIGNAL
|
#ifdef USE_MPU_DATA_READY_SIGNAL
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_INT_ENABLE, MPU_RF_DATA_RDY_EN);
|
spiWriteRegister(&gyro->bus, MPU_RA_INT_ENABLE, MPU_RF_DATA_RDY_EN);
|
||||||
delayMicroseconds(15);
|
delayMicroseconds(15);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,7 @@ uint8_t mpu6500SpiDetect(const busDevice_t *bus)
|
||||||
{
|
{
|
||||||
mpu6500SpiInit(bus);
|
mpu6500SpiInit(bus);
|
||||||
|
|
||||||
const uint8_t whoAmI = spiReadReg(bus, MPU_RA_WHO_AM_I);
|
const uint8_t whoAmI = spiReadRegister(bus, MPU_RA_WHO_AM_I);
|
||||||
|
|
||||||
uint8_t mpuDetected = MPU_NONE;
|
uint8_t mpuDetected = MPU_NONE;
|
||||||
switch (whoAmI) {
|
switch (whoAmI) {
|
||||||
|
@ -96,7 +96,7 @@ void mpu6500SpiGyroInit(gyroDev_t *gyro)
|
||||||
mpu6500GyroInit(gyro);
|
mpu6500GyroInit(gyro);
|
||||||
|
|
||||||
// Disable Primary I2C Interface
|
// Disable Primary I2C Interface
|
||||||
spiWriteReg(&gyro->bus, MPU_RA_USER_CTRL, MPU6500_BIT_I2C_IF_DIS);
|
spiWriteRegister(&gyro->bus, MPU_RA_USER_CTRL, MPU6500_BIT_I2C_IF_DIS);
|
||||||
delay(100);
|
delay(100);
|
||||||
|
|
||||||
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_FAST);
|
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_FAST);
|
||||||
|
|
|
@ -50,7 +50,7 @@ static void mpu9250AccAndGyroInit(gyroDev_t *gyro);
|
||||||
|
|
||||||
static bool mpuSpi9250InitDone = false;
|
static bool mpuSpi9250InitDone = false;
|
||||||
|
|
||||||
bool mpu9250SpiWriteReg(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
bool mpu9250SpiWriteRegister(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
||||||
{
|
{
|
||||||
IOLo(bus->spi.csnPin);
|
IOLo(bus->spi.csnPin);
|
||||||
delayMicroseconds(1);
|
delayMicroseconds(1);
|
||||||
|
@ -62,7 +62,7 @@ bool mpu9250SpiWriteReg(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool mpu9250SpiSlowReadRegBuf(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data)
|
static bool mpu9250SpiSlowReadRegisterBuffer(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data)
|
||||||
{
|
{
|
||||||
IOLo(bus->spi.csnPin);
|
IOLo(bus->spi.csnPin);
|
||||||
delayMicroseconds(1);
|
delayMicroseconds(1);
|
||||||
|
@ -79,7 +79,7 @@ void mpu9250SpiResetGyro(void)
|
||||||
// Device Reset
|
// Device Reset
|
||||||
#ifdef MPU9250_CS_PIN
|
#ifdef MPU9250_CS_PIN
|
||||||
busDevice_t bus = { .spi = { .csnPin = IOGetByTag(IO_TAG(MPU9250_CS_PIN)) } };
|
busDevice_t bus = { .spi = { .csnPin = IOGetByTag(IO_TAG(MPU9250_CS_PIN)) } };
|
||||||
mpu9250SpiWriteReg(&bus, MPU_RA_PWR_MGMT_1, MPU9250_BIT_RESET);
|
mpu9250SpiWriteRegister(&bus, MPU_RA_PWR_MGMT_1, MPU9250_BIT_RESET);
|
||||||
delay(150);
|
delay(150);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -107,20 +107,20 @@ void mpu9250SpiAccInit(accDev_t *acc)
|
||||||
acc->acc_1G = 512 * 8;
|
acc->acc_1G = 512 * 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool mpu9250SpiWriteRegVerify(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
bool mpu9250SpiWriteRegisterVerify(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
||||||
{
|
{
|
||||||
mpu9250SpiWriteReg(bus, reg, data);
|
mpu9250SpiWriteRegister(bus, reg, data);
|
||||||
delayMicroseconds(100);
|
delayMicroseconds(100);
|
||||||
|
|
||||||
uint8_t attemptsRemaining = 20;
|
uint8_t attemptsRemaining = 20;
|
||||||
do {
|
do {
|
||||||
uint8_t in;
|
uint8_t in;
|
||||||
mpu9250SpiSlowReadRegBuf(bus, reg, 1, &in);
|
mpu9250SpiSlowReadRegisterBuffer(bus, reg, 1, &in);
|
||||||
if (in == data) {
|
if (in == data) {
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
debug[3]++;
|
debug[3]++;
|
||||||
mpu9250SpiWriteReg(bus, reg, data);
|
mpu9250SpiWriteRegister(bus, reg, data);
|
||||||
delayMicroseconds(100);
|
delayMicroseconds(100);
|
||||||
}
|
}
|
||||||
} while (attemptsRemaining--);
|
} while (attemptsRemaining--);
|
||||||
|
@ -135,30 +135,30 @@ static void mpu9250AccAndGyroInit(gyroDev_t *gyro) {
|
||||||
|
|
||||||
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_INITIALIZATON); //low speed for writing to slow registers
|
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_INITIALIZATON); //low speed for writing to slow registers
|
||||||
|
|
||||||
mpu9250SpiWriteReg(&gyro->bus, MPU_RA_PWR_MGMT_1, MPU9250_BIT_RESET);
|
mpu9250SpiWriteRegister(&gyro->bus, MPU_RA_PWR_MGMT_1, MPU9250_BIT_RESET);
|
||||||
delay(50);
|
delay(50);
|
||||||
|
|
||||||
mpu9250SpiWriteRegVerify(&gyro->bus, MPU_RA_PWR_MGMT_1, INV_CLK_PLL);
|
mpu9250SpiWriteRegisterVerify(&gyro->bus, MPU_RA_PWR_MGMT_1, INV_CLK_PLL);
|
||||||
|
|
||||||
//Fchoice_b defaults to 00 which makes fchoice 11
|
//Fchoice_b defaults to 00 which makes fchoice 11
|
||||||
const uint8_t raGyroConfigData = gyro->gyroRateKHz > GYRO_RATE_8_kHz ? (INV_FSR_2000DPS << 3 | FCB_3600_32) : (INV_FSR_2000DPS << 3 | FCB_DISABLED);
|
const uint8_t raGyroConfigData = gyro->gyroRateKHz > GYRO_RATE_8_kHz ? (INV_FSR_2000DPS << 3 | FCB_3600_32) : (INV_FSR_2000DPS << 3 | FCB_DISABLED);
|
||||||
mpu9250SpiWriteRegVerify(&gyro->bus, MPU_RA_GYRO_CONFIG, raGyroConfigData);
|
mpu9250SpiWriteRegisterVerify(&gyro->bus, MPU_RA_GYRO_CONFIG, raGyroConfigData);
|
||||||
|
|
||||||
if (gyro->lpf == 4) {
|
if (gyro->lpf == 4) {
|
||||||
mpu9250SpiWriteRegVerify(&gyro->bus, MPU_RA_CONFIG, 1); //1KHz, 184DLPF
|
mpu9250SpiWriteRegisterVerify(&gyro->bus, MPU_RA_CONFIG, 1); //1KHz, 184DLPF
|
||||||
} else if (gyro->lpf < 4) {
|
} else if (gyro->lpf < 4) {
|
||||||
mpu9250SpiWriteRegVerify(&gyro->bus, MPU_RA_CONFIG, 7); //8KHz, 3600DLPF
|
mpu9250SpiWriteRegisterVerify(&gyro->bus, MPU_RA_CONFIG, 7); //8KHz, 3600DLPF
|
||||||
} else if (gyro->lpf > 4) {
|
} else if (gyro->lpf > 4) {
|
||||||
mpu9250SpiWriteRegVerify(&gyro->bus, MPU_RA_CONFIG, 0); //8KHz, 250DLPF
|
mpu9250SpiWriteRegisterVerify(&gyro->bus, MPU_RA_CONFIG, 0); //8KHz, 250DLPF
|
||||||
}
|
}
|
||||||
|
|
||||||
mpu9250SpiWriteRegVerify(&gyro->bus, MPU_RA_SMPLRT_DIV, gyroMPU6xxxGetDividerDrops(gyro));
|
mpu9250SpiWriteRegisterVerify(&gyro->bus, MPU_RA_SMPLRT_DIV, gyroMPU6xxxGetDividerDrops(gyro));
|
||||||
|
|
||||||
mpu9250SpiWriteRegVerify(&gyro->bus, MPU_RA_ACCEL_CONFIG, INV_FSR_8G << 3);
|
mpu9250SpiWriteRegisterVerify(&gyro->bus, MPU_RA_ACCEL_CONFIG, INV_FSR_8G << 3);
|
||||||
mpu9250SpiWriteRegVerify(&gyro->bus, MPU_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 1 << 4 | 0 << 3 | 0 << 2 | 1 << 1 | 0 << 0); // INT_ANYRD_2CLEAR, BYPASS_EN
|
mpu9250SpiWriteRegisterVerify(&gyro->bus, MPU_RA_INT_PIN_CFG, 0 << 7 | 0 << 6 | 0 << 5 | 1 << 4 | 0 << 3 | 0 << 2 | 1 << 1 | 0 << 0); // INT_ANYRD_2CLEAR, BYPASS_EN
|
||||||
|
|
||||||
#if defined(USE_MPU_DATA_READY_SIGNAL)
|
#if defined(USE_MPU_DATA_READY_SIGNAL)
|
||||||
mpu9250SpiWriteRegVerify(&gyro->bus, MPU_RA_INT_ENABLE, 0x01); //this resets register MPU_RA_PWR_MGMT_1 and won't read back correctly.
|
mpu9250SpiWriteRegisterVerify(&gyro->bus, MPU_RA_INT_ENABLE, 0x01); //this resets register MPU_RA_PWR_MGMT_1 and won't read back correctly.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_FAST);
|
spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_FAST);
|
||||||
|
@ -172,12 +172,12 @@ bool mpu9250SpiDetect(const busDevice_t *bus)
|
||||||
IOConfigGPIO(bus->spi.csnPin, SPI_IO_CS_CFG);
|
IOConfigGPIO(bus->spi.csnPin, SPI_IO_CS_CFG);
|
||||||
|
|
||||||
spiSetDivisor(bus->spi.instance, SPI_CLOCK_INITIALIZATON); //low speed
|
spiSetDivisor(bus->spi.instance, SPI_CLOCK_INITIALIZATON); //low speed
|
||||||
mpu9250SpiWriteReg(bus, MPU_RA_PWR_MGMT_1, MPU9250_BIT_RESET);
|
mpu9250SpiWriteRegister(bus, MPU_RA_PWR_MGMT_1, MPU9250_BIT_RESET);
|
||||||
|
|
||||||
uint8_t attemptsRemaining = 20;
|
uint8_t attemptsRemaining = 20;
|
||||||
do {
|
do {
|
||||||
delay(150);
|
delay(150);
|
||||||
const uint8_t in = spiReadReg(bus, MPU_RA_WHO_AM_I);
|
const uint8_t in = spiReadRegister(bus, MPU_RA_WHO_AM_I);
|
||||||
if (in == MPU9250_WHO_AM_I_CONST || in == MPU9255_WHO_AM_I_CONST) {
|
if (in == MPU9250_WHO_AM_I_CONST || in == MPU9255_WHO_AM_I_CONST) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,6 @@ bool mpu9250SpiDetect(const busDevice_t *bus);
|
||||||
bool mpu9250SpiAccDetect(accDev_t *acc);
|
bool mpu9250SpiAccDetect(accDev_t *acc);
|
||||||
bool mpu9250SpiGyroDetect(gyroDev_t *gyro);
|
bool mpu9250SpiGyroDetect(gyroDev_t *gyro);
|
||||||
|
|
||||||
bool mpu9250SpiWriteReg(const busDevice_t *bus, uint8_t reg, uint8_t data);
|
bool mpu9250SpiWriteRegister(const busDevice_t *bus, uint8_t reg, uint8_t data);
|
||||||
bool mpu9250SpiWriteRegVerify(const busDevice_t *bus, uint8_t reg, uint8_t data);
|
bool mpu9250SpiWriteRegisterVerify(const busDevice_t *bus, uint8_t reg, uint8_t data);
|
||||||
bool mpu9250SpiReadRegBuf(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data);
|
bool mpu9250SpiReadRegBuf(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data);
|
||||||
|
|
|
@ -353,7 +353,7 @@ void spiResetErrorCounter(SPI_TypeDef *instance)
|
||||||
spiHardwareMap[device].errorCount = 0;
|
spiHardwareMap[device].errorCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool spiWriteReg(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
bool spiWriteRegister(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
||||||
{
|
{
|
||||||
IOLo(bus->spi.csnPin);
|
IOLo(bus->spi.csnPin);
|
||||||
spiTransferByte(bus->spi.instance, reg);
|
spiTransferByte(bus->spi.instance, reg);
|
||||||
|
@ -363,7 +363,7 @@ bool spiWriteReg(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool spiReadRegBuf(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data)
|
bool spiReadRegisterBuffer(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data)
|
||||||
{
|
{
|
||||||
IOLo(bus->spi.csnPin);
|
IOLo(bus->spi.csnPin);
|
||||||
spiTransferByte(bus->spi.instance, reg | 0x80); // read transaction
|
spiTransferByte(bus->spi.instance, reg | 0x80); // read transaction
|
||||||
|
@ -373,7 +373,7 @@ bool spiReadRegBuf(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t spiReadReg(const busDevice_t *bus, uint8_t reg)
|
uint8_t spiReadRegister(const busDevice_t *bus, uint8_t reg)
|
||||||
{
|
{
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
IOLo(bus->spi.csnPin);
|
IOLo(bus->spi.csnPin);
|
||||||
|
|
|
@ -103,6 +103,6 @@ SPI_HandleTypeDef* spiHandleByInstance(SPI_TypeDef *instance);
|
||||||
DMA_HandleTypeDef* spiSetDMATransmit(DMA_Stream_TypeDef *Stream, uint32_t Channel, SPI_TypeDef *Instance, uint8_t *pData, uint16_t Size);
|
DMA_HandleTypeDef* spiSetDMATransmit(DMA_Stream_TypeDef *Stream, uint32_t Channel, SPI_TypeDef *Instance, uint8_t *pData, uint16_t Size);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool spiWriteReg(const busDevice_t *bus, uint8_t reg, uint8_t data);
|
bool spiWriteRegister(const busDevice_t *bus, uint8_t reg, uint8_t data);
|
||||||
bool spiReadRegBuf(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data);
|
bool spiReadRegisterBuffer(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data);
|
||||||
uint8_t spiReadReg(const busDevice_t *bus, uint8_t reg);
|
uint8_t spiReadRegister(const busDevice_t *bus, uint8_t reg);
|
||||||
|
|
|
@ -346,7 +346,7 @@ void spiResetErrorCounter(SPI_TypeDef *instance)
|
||||||
spiHardwareMap[device].errorCount = 0;
|
spiHardwareMap[device].errorCount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool spiWriteReg(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
bool spiWriteRegister(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
||||||
{
|
{
|
||||||
IOLo(bus->spi.csnPin);
|
IOLo(bus->spi.csnPin);
|
||||||
spiTransferByte(bus->spi.instance, reg);
|
spiTransferByte(bus->spi.instance, reg);
|
||||||
|
@ -356,7 +356,7 @@ bool spiWriteReg(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool spiReadRegBuf(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data)
|
bool spiReadRegisterBuffer(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t *data)
|
||||||
{
|
{
|
||||||
IOLo(bus->spi.csnPin);
|
IOLo(bus->spi.csnPin);
|
||||||
spiTransferByte(bus->spi.instance, reg | 0x80); // read transaction
|
spiTransferByte(bus->spi.instance, reg | 0x80); // read transaction
|
||||||
|
@ -366,7 +366,7 @@ bool spiReadRegBuf(const busDevice_t *bus, uint8_t reg, uint8_t length, uint8_t
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t spiReadReg(const busDevice_t *bus, uint8_t reg)
|
uint8_t spiReadRegister(const busDevice_t *bus, uint8_t reg)
|
||||||
{
|
{
|
||||||
uint8_t data;
|
uint8_t data;
|
||||||
IOLo(bus->spi.csnPin);
|
IOLo(bus->spi.csnPin);
|
||||||
|
|
|
@ -90,7 +90,7 @@ static busDevice_t *bus = NULL; // HACK
|
||||||
// Is an separate MPU9250 driver really needed? The GYRO/ACC part between MPU6500 and MPU9250 is exactly the same.
|
// Is an separate MPU9250 driver really needed? The GYRO/ACC part between MPU6500 and MPU9250 is exactly the same.
|
||||||
#if defined(MPU6500_SPI_INSTANCE) && !defined(MPU9250_SPI_INSTANCE)
|
#if defined(MPU6500_SPI_INSTANCE) && !defined(MPU9250_SPI_INSTANCE)
|
||||||
#define MPU9250_SPI_INSTANCE
|
#define MPU9250_SPI_INSTANCE
|
||||||
#define mpu9250SpiWriteRegVerify mpu6500SpiWriteRegDelayed
|
#define mpu9250SpiWriteRegisterVerify mpu6500SpiWriteRegDelayed
|
||||||
static bool mpu6500SpiWriteRegDelayed(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
static bool mpu6500SpiWriteRegDelayed(const busDevice_t *bus, uint8_t reg, uint8_t data)
|
||||||
{
|
{
|
||||||
IOLo(bus->spi.csnPin);
|
IOLo(bus->spi.csnPin);
|
||||||
|
@ -121,22 +121,22 @@ static queuedReadState_t queuedRead = { false, 0, 0};
|
||||||
|
|
||||||
static bool ak8963SensorRead(uint8_t addr_, uint8_t reg_, uint8_t len_, uint8_t *buf)
|
static bool ak8963SensorRead(uint8_t addr_, uint8_t reg_, uint8_t len_, uint8_t *buf)
|
||||||
{
|
{
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_ADDR, addr_ | READ_FLAG); // set I2C slave address for read
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_ADDR, addr_ | READ_FLAG); // set I2C slave address for read
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_REG, reg_); // set I2C slave register
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_REG, reg_); // set I2C slave register
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_CTRL, len_ | 0x80); // read number of bytes
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_CTRL, len_ | 0x80); // read number of bytes
|
||||||
delay(10);
|
delay(10);
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
bool ack = spiReadRegBuf(bus, MPU_RA_EXT_SENS_DATA_00, len_, buf); // read I2C
|
bool ack = spiReadRegisterBuffer(bus, MPU_RA_EXT_SENS_DATA_00, len_, buf); // read I2C
|
||||||
__enable_irq();
|
__enable_irq();
|
||||||
return ack;
|
return ack;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ak8963SensorWrite(uint8_t addr_, uint8_t reg_, uint8_t data)
|
static bool ak8963SensorWrite(uint8_t addr_, uint8_t reg_, uint8_t data)
|
||||||
{
|
{
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_ADDR, addr_); // set I2C slave address for write
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_ADDR, addr_); // set I2C slave address for write
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_REG, reg_); // set I2C slave register
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_REG, reg_); // set I2C slave register
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_DO, data); // set I2C salve value
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_DO, data); // set I2C salve value
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_CTRL, 0x81); // write 1 byte
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_CTRL, 0x81); // write 1 byte
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,9 +148,9 @@ static bool ak8963SensorStartRead(uint8_t addr_, uint8_t reg_, uint8_t len_)
|
||||||
|
|
||||||
queuedRead.len = len_;
|
queuedRead.len = len_;
|
||||||
|
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_ADDR, addr_ | READ_FLAG); // set I2C slave address for read
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_ADDR, addr_ | READ_FLAG); // set I2C slave address for read
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_REG, reg_); // set I2C slave register
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_REG, reg_); // set I2C slave register
|
||||||
mpu9250SpiWriteRegVerify(bus, MPU_RA_I2C_SLV0_CTRL, len_ | 0x80); // read number of bytes
|
mpu9250SpiWriteRegisterVerify(bus, MPU_RA_I2C_SLV0_CTRL, len_ | 0x80); // read number of bytes
|
||||||
|
|
||||||
queuedRead.readStartedAt = micros();
|
queuedRead.readStartedAt = micros();
|
||||||
queuedRead.waiting = true;
|
queuedRead.waiting = true;
|
||||||
|
@ -185,7 +185,7 @@ static bool ak8963SensorCompleteRead(uint8_t *buf)
|
||||||
|
|
||||||
queuedRead.waiting = false;
|
queuedRead.waiting = false;
|
||||||
|
|
||||||
spiReadRegBuf(bus, MPU_RA_EXT_SENS_DATA_00, queuedRead.len, buf); // read I2C buffer
|
spiReadRegisterBuffer(bus, MPU_RA_EXT_SENS_DATA_00, queuedRead.len, buf); // read I2C buffer
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -334,13 +334,13 @@ bool ak8963Detect(magDev_t *mag)
|
||||||
bus->spi.instance = MPU9250_SPI_INSTANCE;
|
bus->spi.instance = MPU9250_SPI_INSTANCE;
|
||||||
// initialze I2C master via SPI bus (MPU9250)
|
// initialze I2C master via SPI bus (MPU9250)
|
||||||
|
|
||||||
mpu9250SpiWriteRegVerify(&mag->bus, MPU_RA_INT_PIN_CFG, MPU6500_BIT_INT_ANYRD_2CLEAR | MPU6500_BIT_BYPASS_EN);
|
mpu9250SpiWriteRegisterVerify(&mag->bus, MPU_RA_INT_PIN_CFG, MPU6500_BIT_INT_ANYRD_2CLEAR | MPU6500_BIT_BYPASS_EN);
|
||||||
delay(10);
|
delay(10);
|
||||||
|
|
||||||
mpu9250SpiWriteRegVerify(&mag->bus, MPU_RA_I2C_MST_CTRL, 0x0D); // I2C multi-master / 400kHz
|
mpu9250SpiWriteRegisterVerify(&mag->bus, MPU_RA_I2C_MST_CTRL, 0x0D); // I2C multi-master / 400kHz
|
||||||
delay(10);
|
delay(10);
|
||||||
|
|
||||||
mpu9250SpiWriteRegVerify(&mag->bus, MPU_RA_USER_CTRL, 0x30); // I2C master mode, SPI mode only
|
mpu9250SpiWriteRegisterVerify(&mag->bus, MPU_RA_USER_CTRL, 0x30); // I2C master mode, SPI mode only
|
||||||
delay(10);
|
delay(10);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue