From 93089e754c4ad778b78b235c9929fe689843b6f4 Mon Sep 17 00:00:00 2001 From: jflyper Date: Sun, 16 Jul 2017 02:32:34 +0900 Subject: [PATCH] Converted MPU6500 (SPI) and MPU9250 --- src/main/drivers/accgyro/accgyro_mpu.c | 10 ++++---- .../drivers/accgyro/accgyro_spi_mpu6500.c | 12 +++++----- .../drivers/accgyro/accgyro_spi_mpu9250.c | 24 +++++++++---------- src/main/target/OMNIBUSF4/target.mk | 2 +- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/main/drivers/accgyro/accgyro_mpu.c b/src/main/drivers/accgyro/accgyro_mpu.c index 4098e7a7ce..3a04542097 100644 --- a/src/main/drivers/accgyro/accgyro_mpu.c +++ b/src/main/drivers/accgyro/accgyro_mpu.c @@ -29,7 +29,7 @@ #include "common/maths.h" #include "common/utils.h" -#include "drivers/bus_spi.h" +#include "drivers/bus.h" #include "drivers/bus_i2c.h" #include "drivers/bus_spi.h" #include "drivers/exti.h" @@ -265,7 +265,7 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro) spiBusSetInstance(&gyro->bus, MPU6500_SPI_INSTANCE); #endif #ifdef MPU6500_CS_PIN - gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(MPU6500_CS_PIN)) : gyro->bus.spi.csnPin; + gyro->bus.busdev_u.spi.csnPin = gyro->bus.busdev_u.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(MPU6500_CS_PIN)) : gyro->bus.busdev_u.spi.csnPin; #endif sensor = mpu6500SpiDetect(&gyro->bus); // some targets using MPU_9250_SPI, ICM_20608_SPI or ICM_20602_SPI state sensor is MPU_65xx_SPI @@ -283,7 +283,7 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro) spiBusSetInstance(&gyro->bus, MPU9250_SPI_INSTANCE); #endif #ifdef MPU9250_CS_PIN - gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(MPU9250_CS_PIN)) : gyro->bus.spi.csnPin; + gyro->busdev_u.spi.csnPin = gyro->busdev_u.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(MPU9250_CS_PIN)) : gyro->busdev_u.spi.csnPin; #endif sensor = mpu9250SpiDetect(&gyro->bus); if (sensor != MPU_NONE) { @@ -301,7 +301,7 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro) spiBusSetInstance(&gyro->bus, ICM20689_SPI_INSTANCE); #endif #ifdef ICM20689_CS_PIN - gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(ICM20689_CS_PIN)) : gyro->bus.spi.csnPin; + gyro->busdev_u.spi.csnPin = gyro->busdev_u.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(ICM20689_CS_PIN)) : gyro->busdev_u.spi.csnPin; #endif sensor = icm20689SpiDetect(&gyro->bus); if (sensor != MPU_NONE) { @@ -318,7 +318,7 @@ static bool detectSPISensorsAndUpdateDetectionResult(gyroDev_t *gyro) spiBusSetInstance(&gyro->bus, BMI160_SPI_INSTANCE); #endif #ifdef BMI160_CS_PIN - gyro->bus.spi.csnPin = gyro->bus.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(BMI160_CS_PIN)) : gyro->bus.spi.csnPin; + gyro->busdev_u.spi.csnPin = gyro->busdev_u.spi.csnPin == IO_NONE ? IOGetByTag(IO_TAG(BMI160_CS_PIN)) : gyro->busdev_u.spi.csnPin; #endif sensor = bmi160Detect(&gyro->bus); if (sensor != MPU_NONE) { diff --git a/src/main/drivers/accgyro/accgyro_spi_mpu6500.c b/src/main/drivers/accgyro/accgyro_spi_mpu6500.c index 38337477cf..5b942b8d7e 100755 --- a/src/main/drivers/accgyro/accgyro_spi_mpu6500.c +++ b/src/main/drivers/accgyro/accgyro_spi_mpu6500.c @@ -44,11 +44,11 @@ static void mpu6500SpiInit(const busDevice_t *bus) return; } - IOInit(bus->spi.csnPin, OWNER_MPU_CS, 0); - IOConfigGPIO(bus->spi.csnPin, SPI_IO_CS_CFG); - IOHi(bus->spi.csnPin); + IOInit(bus->busdev_u.spi.csnPin, OWNER_MPU_CS, 0); + IOConfigGPIO(bus->busdev_u.spi.csnPin, SPI_IO_CS_CFG); + IOHi(bus->busdev_u.spi.csnPin); - spiSetDivisor(bus->spi.instance, SPI_CLOCK_FAST); + spiSetDivisor(bus->busdev_u.spi.instance, SPI_CLOCK_FAST); hardwareInitialised = true; } @@ -90,7 +90,7 @@ void mpu6500SpiAccInit(accDev_t *acc) void mpu6500SpiGyroInit(gyroDev_t *gyro) { - spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_SLOW); + spiSetDivisor(gyro->bus.busdev_u.spi.instance, SPI_CLOCK_SLOW); delayMicroseconds(1); mpu6500GyroInit(gyro); @@ -99,7 +99,7 @@ void mpu6500SpiGyroInit(gyroDev_t *gyro) spiWriteRegister(&gyro->bus, MPU_RA_USER_CTRL, MPU6500_BIT_I2C_IF_DIS); delay(100); - spiSetDivisor(gyro->bus.spi.instance, SPI_CLOCK_FAST); + spiSetDivisor(gyro->bus.busdev_u.spi.instance, SPI_CLOCK_FAST); delayMicroseconds(1); } diff --git a/src/main/drivers/accgyro/accgyro_spi_mpu9250.c b/src/main/drivers/accgyro/accgyro_spi_mpu9250.c index b397c2bb7c..8f9e1e0f6d 100644 --- a/src/main/drivers/accgyro/accgyro_spi_mpu9250.c +++ b/src/main/drivers/accgyro/accgyro_spi_mpu9250.c @@ -52,11 +52,11 @@ static bool mpuSpi9250InitDone = false; bool mpu9250SpiWriteRegister(const busDevice_t *bus, uint8_t reg, uint8_t data) { - IOLo(bus->spi.csnPin); + IOLo(bus->busdev_u.spi.csnPin); delayMicroseconds(1); - spiTransferByte(bus->spi.instance, reg); - spiTransferByte(bus->spi.instance, data); - IOHi(bus->spi.csnPin); + spiTransferByte(bus->busdev_u.spi.instance, reg); + spiTransferByte(bus->busdev_u.spi.instance, data); + IOHi(bus->busdev_u.spi.csnPin); delayMicroseconds(1); return true; @@ -64,11 +64,11 @@ bool mpu9250SpiWriteRegister(const busDevice_t *bus, uint8_t reg, 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->busdev_u.spi.csnPin); delayMicroseconds(1); - spiTransferByte(bus->spi.instance, reg | 0x80); // read transaction - spiTransfer(bus->spi.instance, data, NULL, length); - IOHi(bus->spi.csnPin); + spiTransferByte(bus->busdev_u.spi.instance, reg | 0x80); // read transaction + spiTransfer(bus->busdev_u.spi.instance, data, NULL, length); + IOHi(bus->busdev_u.spi.csnPin); delayMicroseconds(1); return true; @@ -168,10 +168,10 @@ static void mpu9250AccAndGyroInit(gyroDev_t *gyro) { uint8_t mpu9250SpiDetect(const busDevice_t *bus) { - IOInit(bus->spi.csnPin, OWNER_MPU_CS, 0); - IOConfigGPIO(bus->spi.csnPin, SPI_IO_CS_CFG); + IOInit(bus->busdev_u.spi.csnPin, OWNER_MPU_CS, 0); + IOConfigGPIO(bus->busdev_u.spi.csnPin, SPI_IO_CS_CFG); - spiSetDivisor(bus->spi.instance, SPI_CLOCK_INITIALIZATON); //low speed + spiSetDivisor(bus->busdev_u.spi.instance, SPI_CLOCK_INITIALIZATON); //low speed mpu9250SpiWriteRegister(bus, MPU_RA_PWR_MGMT_1, MPU9250_BIT_RESET); uint8_t attemptsRemaining = 20; @@ -186,7 +186,7 @@ uint8_t mpu9250SpiDetect(const busDevice_t *bus) } } while (attemptsRemaining--); - spiSetDivisor(bus->spi.instance, SPI_CLOCK_FAST); + spiSetDivisor(bus->busdev_u.spi.instance, SPI_CLOCK_FAST); return MPU_9250_SPI; } diff --git a/src/main/target/OMNIBUSF4/target.mk b/src/main/target/OMNIBUSF4/target.mk index d324316d32..998b6501a2 100644 --- a/src/main/target/OMNIBUSF4/target.mk +++ b/src/main/target/OMNIBUSF4/target.mk @@ -3,9 +3,9 @@ FEATURES += VCP ONBOARDFLASH TARGET_SRC = \ drivers/accgyro/accgyro_mpu6500.c \ drivers/accgyro/accgyro_spi_mpu6000.c \ + drivers/accgyro/accgyro_spi_mpu6500.c \ drivers/barometer/barometer_bmp280.c \ drivers/compass/compass_hmc5883l.c \ drivers/max7456.c #drivers/barometer/barometer_ms5611.c \ - #drivers/accgyro/accgyro_spi_mpu6500.c \