mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-19 22:35:23 +03:00
Converted MPU6500 (SPI) and MPU9250
This commit is contained in:
parent
f1322d1920
commit
93089e754c
4 changed files with 24 additions and 24 deletions
|
@ -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) {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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 \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue