Removed abbreviations from SPI read/write functions

This commit is contained in:
Martin Budden 2017-06-29 10:48:32 +01:00
parent 1c7777ecc5
commit 6157ebe5e3
11 changed files with 81 additions and 81 deletions

View File

@ -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

View File

@ -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;
} }

View File

@ -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;
} }

View File

@ -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

View File

@ -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);

View File

@ -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;
} }

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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