diff --git a/docs/Settings.md b/docs/Settings.md index 7c6bf6ed565..7376041e511 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -2140,7 +2140,7 @@ Gyro processing anti-aliasing filter cutoff frequency. In normal operation this ### gyro_data_ready -Read the gyro when it signals a new sample, on its data-ready interrupt, instead of polling it: every sample once, and the CPU no longer waits on the bus. Needs a supported IMU (ICM-42605, ICM-42688-P) and a target that declares the interrupt pin. AUTO and ON do it, OFF polls the gyro. +Read the gyro when it signals a new sample, on its data-ready interrupt, instead of polling it: every sample once, and the CPU no longer waits on the bus. Needs a supported IMU and a target that declares the interrupt pin; without interrupts the gyro is read as before. AUTO does it with the ICM-42605, ICM-42688-P, BMI270 and LSM6DXX; ON also with the ICM-45686, MPU6000, MPU6500 (and the ICM-20602 and ICM-20608 it drives), MPU9250 and ICM-20689, not yet run on hardware. OFF polls the gyro. | Allowed Values | | | --- | --- | diff --git a/src/main/drivers/accgyro/accgyro.h b/src/main/drivers/accgyro/accgyro.h index 310696517f0..7bf8ac1eb01 100644 --- a/src/main/drivers/accgyro/accgyro.h +++ b/src/main/drivers/accgyro/accgyro.h @@ -42,7 +42,7 @@ typedef struct { // Whether a driver that can reads its gyro on the data-ready interrupt (gyro_data_ready) typedef enum { GYRO_DEV_DATA_READY_OFF = 0, - GYRO_DEV_DATA_READY_WHERE_TESTED, // only where that driver has been tested + GYRO_DEV_DATA_READY_WHERE_TESTED, // where the driver turns it on for AUTO GYRO_DEV_DATA_READY_ON, } gyroDevDataReady_e; diff --git a/src/main/drivers/accgyro/accgyro_bmi270.c b/src/main/drivers/accgyro/accgyro_bmi270.c index 1dc4d3fc590..84f48fc4290 100644 --- a/src/main/drivers/accgyro/accgyro_bmi270.c +++ b/src/main/drivers/accgyro/accgyro_bmi270.c @@ -38,6 +38,7 @@ #include "drivers/sensor.h" #include "drivers/accgyro/accgyro.h" +#include "drivers/accgyro/accgyro_data_ready.h" #include "drivers/accgyro/accgyro_bmi270.h" #define BMI270_CONFIG_SIZE 328 @@ -257,6 +258,17 @@ static bool bmi270yroReadScratchpad(gyroDev_t *gyro) static bool bmi270AccReadScratchpad(accDev_t *acc) { +#if defined(USE_SPI_DATA_READY) + // The read on data-ready brought the accelerometer too + int16_t v[XYZ_AXIS_COUNT]; + if (gyroDataReadyAcc(acc->busDev, v)) { + acc->ADCRaw[X] = v[X]; + acc->ADCRaw[Y] = v[Y]; + acc->ADCRaw[Z] = v[Z]; + return true; + } +#endif + bmi270ContextData_t * ctx = busDeviceGetScratchpadMemory(acc->busDev); if (ctx->lastReadStatus) { @@ -284,9 +296,38 @@ static bool bmi270TemperatureRead(gyroDev_t *gyro, int16_t * data) return false; } +#if defined(USE_SPI_DATA_READY) +// After a dummy byte, from ACC_DATA_X_LSB: accelerometer X, Y, Z and gyro X, Y, Z, little-endian. +// INT1 flags new data of either sensor, so the gyro-only read takes the accelerometer too +static void bmi270DataReadyParse(const uint8_t *data, bool withAccAndTemp, int16_t *gyro, int16_t *acc, int16_t *temp) +{ + UNUSED(temp); + data++; + if (withAccAndTemp) { + acc[X] = int16_val_little_endian(data, 0); + acc[Y] = int16_val_little_endian(data, 1); + acc[Z] = int16_val_little_endian(data, 2); + } + gyro[X] = int16_val_little_endian(data, 3); + gyro[Y] = int16_val_little_endian(data, 4); + gyro[Z] = int16_val_little_endian(data, 5); +} + +static const gyroDataReadyDriver_t bmi270DataReady = { + .withAccAndTemp = { BMI270_REG_ACC_DATA_X_LSB | 0x80, 13 }, + .gyroOnly = { BMI270_REG_ACC_DATA_X_LSB | 0x80, 13 }, + .parse = bmi270DataReadyParse, + .registerRead = bmi270yroReadScratchpad, + .tested = true, +}; +#endif + static void bmi270GyroInit(gyroDev_t *gyro) { bmi270AccAndGyroInit(gyro); +#if defined(USE_SPI_DATA_READY) + gyro->dataReadyDriver = &bmi270DataReady; +#endif } static void bmi270AccInit(accDev_t *acc) diff --git a/src/main/drivers/accgyro/accgyro_data_ready.c b/src/main/drivers/accgyro/accgyro_data_ready.c index 4b46ca9cd6b..37e9cd32d67 100644 --- a/src/main/drivers/accgyro/accgyro_data_ready.c +++ b/src/main/drivers/accgyro/accgyro_data_ready.c @@ -179,12 +179,19 @@ void gyroDataReadySuspend(void) } } +bool gyroDataReadyWanted(const gyroDev_t *gyro) +{ + const gyroDataReadyDriver_t *driver = gyro->dataReadyDriver; + const busDevice_t *dev = gyro->busDev; + return driver && dev && dev->irqPin && gyro->readOnDataReady != GYRO_DEV_DATA_READY_OFF && + (gyro->readOnDataReady != GYRO_DEV_DATA_READY_WHERE_TESTED || driver->tested); +} + void gyroDataReadyStart(gyroDev_t *gyro) { const gyroDataReadyDriver_t *driver = gyro->dataReadyDriver; busDevice_t *dev = gyro->busDev; - if (!driver || !dev || !dev->irqPin || gyro->readOnDataReady == GYRO_DEV_DATA_READY_OFF || - (gyro->readOnDataReady == GYRO_DEV_DATA_READY_WHERE_TESTED && !driver->tested)) { + if (!gyroDataReadyWanted(gyro)) { return; } // A pin already owned stays with its owner; a wrong but free pin only means polling as before @@ -216,7 +223,11 @@ void gyroDataReadyStart(gyroDev_t *gyro) IOInit(dev->irqPin, OWNER_MPU, RESOURCE_EXTI, RESOURCE_INDEX(gyro->imuSensorToUse)); EXTIHandlerInit(&d->exti, gyroDataReadyExti); - EXTIConfig(dev->irqPin, &d->exti, NVIC_PRIO_GYRO_DATA_READY, IOCFG_IN_FLOATING); +#if defined(STM32F7) || defined(STM32H7) + EXTIConfig(dev->irqPin, &d->exti, NVIC_PRIO_GYRO_DATA_READY, IOCFG_IN_FLOATING); // always on the rising edge +#else + EXTIConfig(dev->irqPin, &d->exti, NVIC_PRIO_GYRO_DATA_READY, EXTI_Trigger_Rising); +#endif EXTIEnable(dev->irqPin, true); gyro->dataReadyState = d; diff --git a/src/main/drivers/accgyro/accgyro_data_ready.h b/src/main/drivers/accgyro/accgyro_data_ready.h index 721817c74e0..ff10c03ae5b 100644 --- a/src/main/drivers/accgyro/accgyro_data_ready.h +++ b/src/main/drivers/accgyro/accgyro_data_ready.h @@ -45,6 +45,8 @@ typedef struct gyroDataReadyDriver_s { typedef struct gyroDataReady_s gyroDataReady_t; #if defined(USE_SPI_DATA_READY) +// Whether gyroDataReadyStart() will try, for a driver whose rate depends on it +bool gyroDataReadyWanted(const gyroDev_t *gyro); void gyroDataReadyStart(gyroDev_t *gyro); void gyroDataReadySuspend(void); // For the driver's acc and temperature reads: true when the last data-ready read brought them diff --git a/src/main/drivers/accgyro/accgyro_icm20689.c b/src/main/drivers/accgyro/accgyro_icm20689.c index bd78f161332..161ff2d3433 100644 --- a/src/main/drivers/accgyro/accgyro_icm20689.c +++ b/src/main/drivers/accgyro/accgyro_icm20689.c @@ -109,6 +109,10 @@ static void icm20689AccAndGyroInit(gyroDev_t *gyro) busWrite(busDev, MPU_RA_SMPLRT_DIV, config->gyroConfigValues[1]); // Get Divider Drops delay(100); +#if defined(USE_SPI_DATA_READY) + mpuDataReadySetup(gyro); +#endif + // Switch SPI to fast speed busSetSpeed(busDev, BUS_SPEED_FAST); } diff --git a/src/main/drivers/accgyro/accgyro_icm42605.c b/src/main/drivers/accgyro/accgyro_icm42605.c index 1c657aa8b87..4b70849c3a1 100644 --- a/src/main/drivers/accgyro/accgyro_icm42605.c +++ b/src/main/drivers/accgyro/accgyro_icm42605.c @@ -183,9 +183,7 @@ static const gyroDataReadyDriver_t icm426xxDataReady = { .hasTemp = true, .parse = icm426xxDataReadyParse, .registerRead = icm42605GyroRead, -#if defined(STM32H7) .tested = true, -#endif }; #endif diff --git a/src/main/drivers/accgyro/accgyro_icm45686.c b/src/main/drivers/accgyro/accgyro_icm45686.c index 9b249fb607f..18d99aa275b 100644 --- a/src/main/drivers/accgyro/accgyro_icm45686.c +++ b/src/main/drivers/accgyro/accgyro_icm45686.c @@ -34,6 +34,7 @@ #include "drivers/sensor.h" #include "drivers/accgyro/accgyro_mpu.h" #include "drivers/accgyro/accgyro.h" +#include "drivers/accgyro/accgyro_data_ready.h" #include "accgyro_icm45686.h" #if defined(USE_IMU_ICM45686) @@ -309,6 +310,17 @@ static void icm45686AccInit(accDev_t *acc) static bool icm45686AccRead(accDev_t *acc) { +#if defined(USE_SPI_DATA_READY) + // The read on data-ready brought the accelerometer too + int16_t v[XYZ_AXIS_COUNT]; + if (gyroDataReadyAcc(acc->busDev, v)) { + acc->ADCRaw[X] = v[X]; + acc->ADCRaw[Y] = v[Y]; + acc->ADCRaw[Z] = v[Z]; + return true; + } +#endif + uint8_t data[6]; const bool ack = busReadBuf(acc->busDev, ICM456XX_ACCEL_DATA_X1_UI, data, 6); @@ -341,6 +353,14 @@ static bool icm45686GyroRead(gyroDev_t *gyro) static bool icm45686ReadTemperature(gyroDev_t *gyro, int16_t * temp) { +#if defined(USE_SPI_DATA_READY) + int16_t raw; + if (gyroDataReadyTemperature(gyro->busDev, &raw)) { + *temp = (raw / 12.8f) + 250.0f; // as below, degC*10 + return true; + } +#endif + uint8_t data[2]; const bool ack = busReadBuf(gyro->busDev, ICM456XX_TEMP_DATA1, data, 2); @@ -353,6 +373,34 @@ static bool icm45686ReadTemperature(gyroDev_t *gyro, int16_t * temp) return true; } +#if defined(USE_SPI_DATA_READY) +// From ACCEL_DATA_X1_UI: accelerometer X, Y, Z, gyro X, Y, Z and temperature, little-endian +static void icm45686DataReadyParse(const uint8_t *data, bool withAccAndTemp, int16_t *gyro, int16_t *acc, int16_t *temp) +{ + if (withAccAndTemp) { + acc[X] = int16_val_little_endian(data, 0); + acc[Y] = int16_val_little_endian(data, 1); + acc[Z] = int16_val_little_endian(data, 2); + data += 6; + } + gyro[X] = int16_val_little_endian(data, 0); + gyro[Y] = int16_val_little_endian(data, 1); + gyro[Z] = int16_val_little_endian(data, 2); + if (withAccAndTemp) { + *temp = int16_val_little_endian(data, 3); + } +} + +static const gyroDataReadyDriver_t icm45686DataReady = { + .withAccAndTemp = { ICM456XX_ACCEL_DATA_X1_UI | 0x80, 14 }, + .gyroOnly = { ICM456XX_GYRO_DATA_X1_UI | 0x80, 6 }, + .hasTemp = true, + .parse = icm45686DataReadyParse, + .registerRead = icm45686GyroRead, + .tested = false, // not run on hardware yet +}; +#endif + static void icm45686AccAndGyroInit(gyroDev_t *gyro) { busDevice_t * dev = gyro->busDev; @@ -402,6 +450,10 @@ static void icm45686AccAndGyroInit(gyroDev_t *gyro) delay(ICM456XX_INT_CONFIG_DELAY_MS); busSetSpeed(dev, BUS_SPEED_FAST); + +#if defined(USE_SPI_DATA_READY) + gyro->dataReadyDriver = &icm45686DataReady; +#endif } static bool icm45686DeviceDetect(busDevice_t * dev) diff --git a/src/main/drivers/accgyro/accgyro_lsm6dxx.c b/src/main/drivers/accgyro/accgyro_lsm6dxx.c index 18ff17969d9..66a96baa5cb 100644 --- a/src/main/drivers/accgyro/accgyro_lsm6dxx.c +++ b/src/main/drivers/accgyro/accgyro_lsm6dxx.c @@ -35,6 +35,7 @@ #include "drivers/accgyro/accgyro.h" #include "drivers/accgyro/accgyro_mpu.h" #include "drivers/accgyro/accgyro_lsm6dxx.h" +#include "drivers/accgyro/accgyro_data_ready.h" #if defined(USE_IMU_LSM6DXX) @@ -180,6 +181,12 @@ static void lsm6dxxConfig(gyroDev_t *gyro) busDevice_t * dev = gyro->busDev; const gyroFilterAndRateConfig_t * config = mpuChooseGyroConfig(gyro->lpf, 1000000 / gyro->requestedSampleIntervalUs); gyro->sampleRateIntervalUs = 1000000 / config->gyroRateHz; +#if defined(USE_SPI_DATA_READY) + // On data-ready every sample reaches the gyro task and its first filter, so they run at the 6664 Hz set below + if (gyroDataReadyWanted(gyro)) { + gyro->sampleRateIntervalUs = 150; + } +#endif busSetSpeed(dev, BUS_SPEED_INITIALIZATION); // Reset the device (wait 100ms before continuing config) @@ -272,6 +279,17 @@ static void lsm6dxxSpiAccInit(accDev_t *acc) static bool lsm6dxxAccRead(accDev_t *acc) { +#if defined(USE_SPI_DATA_READY) + // The read on data-ready brought the accelerometer too + int16_t v[XYZ_AXIS_COUNT]; + if (gyroDataReadyAcc(acc->busDev, v)) { + acc->ADCRaw[X] = v[X]; + acc->ADCRaw[Y] = v[Y]; + acc->ADCRaw[Z] = v[Z]; + return true; + } +#endif + uint8_t data[6]; const bool ack = busReadBuf(acc->busDev, LSM6DXX_REG_OUTX_L_A, data, 6); if (!ack) { @@ -296,6 +314,31 @@ static bool lsm6dxxGyroRead(gyroDev_t *gyro) return true; } +#if defined(USE_SPI_DATA_READY) +// From OUTX_L_G: gyro X, Y, Z, then accelerometer X, Y, Z, little-endian +static void lsm6dxxDataReadyParse(const uint8_t *data, bool withAccAndTemp, int16_t *gyro, int16_t *acc, int16_t *temp) +{ + UNUSED(temp); + gyro[X] = int16_val_little_endian(data, 0); + gyro[Y] = int16_val_little_endian(data, 1); + gyro[Z] = int16_val_little_endian(data, 2); + if (withAccAndTemp) { + acc[X] = int16_val_little_endian(data, 3); + acc[Y] = int16_val_little_endian(data, 4); + acc[Z] = int16_val_little_endian(data, 5); + } +} + +static const gyroDataReadyDriver_t lsm6dxxDataReady = { + .withAccAndTemp = { LSM6DXX_REG_OUTX_L_G | 0x80, 12 }, + .gyroOnly = { LSM6DXX_REG_OUTX_L_G | 0x80, 6 }, + .hasTemp = false, + .parse = lsm6dxxDataReadyParse, + .registerRead = lsm6dxxGyroRead, + .tested = true, +}; +#endif + // Init Gyro first,then Acc bool lsm6dGyroDetect(gyroDev_t *gyro) { @@ -317,6 +360,10 @@ bool lsm6dGyroDetect(gyroDev_t *gyro) gyro->intStatusFn = gyroCheckDataReady; gyro->gyroAlign = gyro->busDev->param; gyro->scale = 1.0f / 16.4f; // 2000 dps +#if defined(USE_SPI_DATA_READY) + // Both register maps configure gyro data-ready, pulsed, on INT1 + gyro->dataReadyDriver = &lsm6dxxDataReady; +#endif return true; } diff --git a/src/main/drivers/accgyro/accgyro_mpu.c b/src/main/drivers/accgyro/accgyro_mpu.c index a52606946b1..b9daf344302 100644 --- a/src/main/drivers/accgyro/accgyro_mpu.c +++ b/src/main/drivers/accgyro/accgyro_mpu.c @@ -39,6 +39,7 @@ #include "drivers/sensor.h" #include "drivers/accgyro/accgyro.h" #include "drivers/accgyro/accgyro_mpu.h" +#include "drivers/accgyro/accgyro_data_ready.h" // Check busDevice scratchpad memory size STATIC_ASSERT(sizeof(mpuContextData_t) < BUS_SCRATCHPAD_MEMORY_SIZE, busDevice_scratchpad_memory_too_small); @@ -96,6 +97,17 @@ bool mpuGyroReadScratchpad(gyroDev_t *gyro) bool mpuAccReadScratchpad(accDev_t *acc) { +#if defined(USE_SPI_DATA_READY) + // The read on data-ready brought the accelerometer too + int16_t v[XYZ_AXIS_COUNT]; + if (gyroDataReadyAcc(acc->busDev, v)) { + acc->ADCRaw[X] = v[X]; + acc->ADCRaw[Y] = v[Y]; + acc->ADCRaw[Z] = v[Z]; + return true; + } +#endif + mpuContextData_t * ctx = busDeviceGetScratchpadMemory(acc->busDev); if (ctx->lastReadStatus) { @@ -110,6 +122,14 @@ bool mpuAccReadScratchpad(accDev_t *acc) bool mpuTemperatureReadScratchpad(gyroDev_t *gyro, int16_t * data) { +#if defined(USE_SPI_DATA_READY) + int16_t raw; + if (gyroDataReadyTemperature(gyro->busDev, &raw)) { + *data = raw / 34 + 365; + return true; + } +#endif + mpuContextData_t * ctx = busDeviceGetScratchpadMemory(gyro->busDev); if (ctx->lastReadStatus) { @@ -120,3 +140,43 @@ bool mpuTemperatureReadScratchpad(gyroDev_t *gyro, int16_t * data) return false; } + +#if defined(USE_SPI_DATA_READY) +// From ACCEL_XOUT_H: accelerometer X, Y, Z, temperature, gyro X, Y, Z, big-endian +static void mpuDataReadyParse(const uint8_t *data, bool withAccAndTemp, int16_t *gyro, int16_t *acc, int16_t *temp) +{ + if (withAccAndTemp) { + acc[X] = int16_val_big_endian(data, 0); + acc[Y] = int16_val_big_endian(data, 1); + acc[Z] = int16_val_big_endian(data, 2); + *temp = int16_val_big_endian(data, 3); + data += 8; + } + gyro[X] = int16_val_big_endian(data, 0); + gyro[Y] = int16_val_big_endian(data, 1); + gyro[Z] = int16_val_big_endian(data, 2); +} + +static const gyroDataReadyDriver_t mpuDataReady = { + .withAccAndTemp = { MPU_RA_ACCEL_XOUT_H | 0x80, 14 }, + .gyroOnly = { MPU_RA_GYRO_XOUT_H | 0x80, 6 }, + .hasTemp = true, + .parse = mpuDataReadyParse, + .registerRead = mpuGyroReadScratchpad, + .tested = false, // not run on hardware yet +}; + +// A 50 us pulse on INT at each new sample, only where data-ready will read it: otherwise the MPU stays as it was. +// Written at the initialisation speed: the MPU6000 takes register writes at 1 MHz at most +void mpuDataReadySetup(gyroDev_t *gyro) +{ + gyro->dataReadyDriver = &mpuDataReady; + if (!gyroDataReadyWanted(gyro)) { + return; + } + busWrite(gyro->busDev, MPU_RA_INT_PIN_CFG, MPU_INT_ANYRD_2CLEAR); + delayMicroseconds(15); + busWrite(gyro->busDev, MPU_RA_INT_ENABLE, MPU_RF_DATA_RDY_EN); + delayMicroseconds(15); +} +#endif diff --git a/src/main/drivers/accgyro/accgyro_mpu.h b/src/main/drivers/accgyro/accgyro_mpu.h index b382c2c331c..0db604aee42 100644 --- a/src/main/drivers/accgyro/accgyro_mpu.h +++ b/src/main/drivers/accgyro/accgyro_mpu.h @@ -128,6 +128,7 @@ // RF = Register Flag #define MPU_RF_DATA_RDY_EN (1 << 0) +#define MPU_INT_ANYRD_2CLEAR (1 << 4) #define MPU_DLPF_10HZ 0x05 #define MPU_DLPF_20HZ 0x04 @@ -185,3 +186,6 @@ bool mpuGyroRead(struct gyroDev_s *gyro); bool mpuGyroReadScratchpad(struct gyroDev_s *gyro); bool mpuAccReadScratchpad(struct accDev_s *acc); bool mpuTemperatureReadScratchpad(struct gyroDev_s *gyro, int16_t * data); +#if defined(USE_SPI_DATA_READY) +void mpuDataReadySetup(struct gyroDev_s *gyro); +#endif diff --git a/src/main/drivers/accgyro/accgyro_mpu6000.c b/src/main/drivers/accgyro/accgyro_mpu6000.c index 4ad6d99b5de..f25593a6f59 100644 --- a/src/main/drivers/accgyro/accgyro_mpu6000.c +++ b/src/main/drivers/accgyro/accgyro_mpu6000.c @@ -111,6 +111,10 @@ static void mpu6000AccAndGyroInit(gyroDev_t *gyro) busWrite(busDev, MPU_RA_CONFIG, config->gyroConfigValues[0]); delayMicroseconds(1); +#if defined(USE_SPI_DATA_READY) + mpuDataReadySetup(gyro); +#endif + busSetSpeed(busDev, BUS_SPEED_FAST); mpuGyroRead(gyro); diff --git a/src/main/drivers/accgyro/accgyro_mpu6500.c b/src/main/drivers/accgyro/accgyro_mpu6500.c index 5a2207a498b..31e74a92118 100644 --- a/src/main/drivers/accgyro/accgyro_mpu6500.c +++ b/src/main/drivers/accgyro/accgyro_mpu6500.c @@ -96,6 +96,10 @@ static void mpu6500AccAndGyroInit(gyroDev_t *gyro) busWrite(dev, MPU_RA_SMPLRT_DIV, config->gyroConfigValues[1]); delay(100); +#if defined(USE_SPI_DATA_READY) + mpuDataReadySetup(gyro); +#endif + busSetSpeed(dev, BUS_SPEED_FAST); } diff --git a/src/main/drivers/accgyro/accgyro_mpu9250.c b/src/main/drivers/accgyro/accgyro_mpu9250.c index 1e9360f4b36..5b82e0abae7 100644 --- a/src/main/drivers/accgyro/accgyro_mpu9250.c +++ b/src/main/drivers/accgyro/accgyro_mpu9250.c @@ -96,6 +96,10 @@ static void mpu9250AccAndGyroInit(gyroDev_t *gyro) busWrite(dev, MPU_RA_SMPLRT_DIV, config->gyroConfigValues[1]); delay(100); +#if defined(USE_SPI_DATA_READY) + mpuDataReadySetup(gyro); +#endif + busSetSpeed(dev, BUS_SPEED_FAST); } diff --git a/src/main/drivers/adc.h b/src/main/drivers/adc.h index 1749c9fa63e..6955bbb987b 100644 --- a/src/main/drivers/adc.h +++ b/src/main/drivers/adc.h @@ -45,6 +45,12 @@ typedef struct drv_adc_config_s { void adcInit(drv_adc_config_t *init); uint16_t adcGetChannel(uint8_t channel); +#if defined(STM32F4) || defined(STM32F7) +struct dmaChannelDescriptor_s; +// ADC1 can use DMA2 stream 0 or stream 4. If it has `stream` and the other one is free, it moves +// there, for a user that can have only `stream`. For users that take their streams after everyone else +bool adcDmaMoveOff(struct dmaChannelDescriptor_s *stream); +#endif bool adcIsFunctionAssigned(uint8_t function); int adcGetFunctionChannelAllocation(uint8_t function); diff --git a/src/main/drivers/adc_stm32f4xx.c b/src/main/drivers/adc_stm32f4xx.c index 42f9583ed8c..f9ef7eb15cc 100644 --- a/src/main/drivers/adc_stm32f4xx.c +++ b/src/main/drivers/adc_stm32f4xx.c @@ -153,6 +153,32 @@ static void adcInstanceInit(ADCDevice adcDevice) ADC_SoftwareStartConv(adc->ADCx); } +bool adcDmaMoveOff(DMA_t stream) +{ + adcDevice_t *adc = &adcHardware[ADCDEV_1]; + if (!adc->enabled || dmaGetByRef(adc->DMAy_Streamx) != stream) { + return false; + } + DMA_Stream_TypeDef *other = adc->DMAy_Streamx == DMA2_Stream0 ? DMA2_Stream4 : DMA2_Stream0; + DMA_t otherDma = dmaGetByRef(other); + if (!otherDma || dmaGetOwner(otherDma) != OWNER_FREE) { + return false; + } + + // Stopped first: a conversion the DMA misses would be an overrun, which stops its requests + ADC_Cmd(adc->ADCx, DISABLE); + ADC_DMACmd(adc->ADCx, DISABLE); + DMA_Cmd(adc->DMAy_Streamx, DISABLE); + while (DMA_GetCmdStatus(adc->DMAy_Streamx) != DISABLE) { + } + ADC_ClearFlag(adc->ADCx, ADC_FLAG_OVR); + dmaInit(stream, OWNER_FREE, 0); + + adc->DMAy_Streamx = other; + adcInstanceInit(ADCDEV_1); + return true; +} + void adcHardwareInit(drv_adc_config_t *init) { UNUSED(init); diff --git a/src/main/drivers/adc_stm32f7xx.c b/src/main/drivers/adc_stm32f7xx.c index c680f2c379f..b9bea381237 100644 --- a/src/main/drivers/adc_stm32f7xx.c +++ b/src/main/drivers/adc_stm32f7xx.c @@ -164,6 +164,27 @@ static void adcInstanceInit(ADCDevice adcDevice) } } +bool adcDmaMoveOff(DMA_t stream) +{ + adcDevice_t *adc = &adcHardware[ADCDEV_1]; + if (!adc->enabled || dmaGetByRef(adc->DMAy_Streamx) != stream) { + return false; + } + DMA_Stream_TypeDef *other = adc->DMAy_Streamx == DMA2_Stream0 ? DMA2_Stream4 : DMA2_Stream0; + DMA_t otherDma = dmaGetByRef(other); + if (!otherDma || dmaGetOwner(otherDma) != OWNER_FREE) { + return false; + } + + HAL_ADC_Stop_DMA(&adc->ADCHandle); + HAL_DMA_DeInit(&adc->DmaHandle); + dmaInit(stream, OWNER_FREE, 0); + + adc->DMAy_Streamx = other; + adcInstanceInit(ADCDEV_1); + return true; +} + void adcHardwareInit(drv_adc_config_t *init) { UNUSED(init); diff --git a/src/main/drivers/bus_spi.c b/src/main/drivers/bus_spi.c index 8220ad01cd9..634772b285e 100644 --- a/src/main/drivers/bus_spi.c +++ b/src/main/drivers/bus_spi.c @@ -18,11 +18,14 @@ #include #include +#include + #include #ifdef USE_SPI #include "drivers/bus_spi.h" +#include "drivers/bus_spi_data_ready_impl.h" #include "drivers/exti.h" #include "drivers/io.h" #include "drivers/io_impl.h" @@ -248,6 +251,86 @@ bool spiTransfer(SPI_TypeDef *instance, uint8_t *out, const uint8_t *in, int len return true; } +#if defined(USE_SPI_DATA_READY) +// Data-ready reads (see bus_spi_data_ready.c). The F4 SPI has no FIFO, so every read uses two +// DMA streams; the buffers stay out of the CCM RAM, which the DMA can not reach + +// Longest read, address included +#define SPI_DATA_READY_MAX 32 + +typedef struct { + uint8_t len; // bytes after the address + spiDataReadyDma_t streams; +} spiDataReadyHw_t; + +static spiDataReadyHw_t spiDataReadyHw[SPIDEV_COUNT]; +static uint8_t spiDataReadyTx[SPIDEV_COUNT][SPI_DATA_READY_MAX]; +static uint8_t spiDataReadyRx[SPIDEV_COUNT][SPI_DATA_READY_MAX]; + +static void spiDataReadyDmaDone(DMA_t rx) +{ + const SPIDevice device = (SPIDevice)rx->userParam; + if (!spiDataReadyDmaEnded(rx)) { + // The read never ends: the main loop takes it off the bus when it next needs it + return; + } + + // A copy: a data-ready that came meanwhile starts the next read into the same buffer + uint8_t data[SPI_DATA_READY_MAX]; + memcpy(data, spiDataReadyRx[device] + 1, spiDataReadyHw[device].len); + spiDataReadyDone(device, data); +} + +bool spiDataReadyHwInit(SPIDevice device, uint8_t reg, uint8_t len) +{ + spiDataReadyHw_t *h = &spiDataReadyHw[device]; + if (!spiHardwareMap[device].dev || len + 1 > SPI_DATA_READY_MAX) { + return false; + } + if (!spiDataReadyDmaInit(device, &h->streams, spiDataReadyDmaDone, device)) { + return false; + } + + h->len = len; + memset(spiDataReadyTx[device], 0xFF, SPI_DATA_READY_MAX); + spiDataReadyTx[device][0] = reg; + return true; +} + +// Setting the DMA requests starts the read: receive first, as the reference manual has it +void spiDataReadyHwStart(SPIDevice device) +{ + const spiDataReadyHw_t *h = &spiDataReadyHw[device]; + SPI_TypeDef *instance = spiHardwareMap[device].dev; + + // A byte left in the data register would be taken for the first one of this read + (void)instance->DR; + spiDataReadyDmaStart(&h->streams, &instance->DR, &instance->DR, spiDataReadyTx[device], spiDataReadyRx[device], h->len + 1); + instance->CR2 |= SPI_CR2_RXDMAEN; + instance->CR2 |= SPI_CR2_TXDMAEN; +} + +void spiDataReadyHwStop(SPIDevice device) +{ + const spiDataReadyHw_t *h = &spiDataReadyHw[device]; + SPI_TypeDef *instance = spiHardwareMap[device].dev; + + spiDataReadyDmaStop(&h->streams); + instance->CR2 &= ~(SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); + + // A read stopped half way may leave a byte going out: let it finish and drop the echo. + // DR then SR also clears an overrun, which would hand the next transfer a stale byte + for (int timeout = 1000; timeout && (!(instance->SR & SPI_SR_TXE) || (instance->SR & SPI_SR_BSY)); timeout--); + (void)instance->DR; + (void)instance->SR; +} + +void spiDataReadyHwDisable(SPIDevice device) +{ + spiDataReadyDmaDisable(&spiDataReadyHw[device].streams); +} +#endif + void spiSetSpeed(SPI_TypeDef *instance, SPIClockSpeed_e speed) { #define BR_CLEAR_MASK 0xFFC7 diff --git a/src/main/drivers/bus_spi_data_ready_dma.c b/src/main/drivers/bus_spi_data_ready_dma.c index 3cec396c896..844e3127ec7 100644 --- a/src/main/drivers/bus_spi_data_ready_dma.c +++ b/src/main/drivers/bus_spi_data_ready_dma.c @@ -26,19 +26,24 @@ #include "drivers/bus_spi.h" -#if defined(USE_SPI_DATA_READY) && defined(STM32H7) +#if defined(USE_SPI_DATA_READY) && (defined(STM32F4) || defined(STM32F7) || defined(STM32H7)) #include "drivers/bus_spi_data_ready_impl.h" +#include "drivers/adc.h" #include "drivers/dma.h" #include "drivers/nvic.h" #include "drivers/resource.h" +#if defined(STM32H7) #include "stm32h7xx_ll_dma.h" +#endif // DMA streams for data-ready reads, taken at the end of init from those nobody owns; a bus with -// no free pair reads without DMA. H7 routes any request through its DMAMUX +// no free pair reads without DMA. H7 routes any request through its DMAMUX, F4/F7 have fixed ones #define SPI_DMA_FLAGS (DMA_IT_TCIF | DMA_IT_HTIF | DMA_IT_TEIF | DMA_IT_DMEIF | DMA_IT_FEIF) +// F4 and F7: the request's channel in the stream's CR (CHSEL) +#define SPI_DMA_CHSEL(ch) ((uint32_t)(ch) << 25) // Streams named for serial ports stay theirs: a port may open after init static const dmaTag_t spiDmaReserved[] = { @@ -106,6 +111,7 @@ static bool spiDmaIsFree(DMA_t d) return true; } +#if defined(STM32H7) static const uint32_t spiDmaRequest[SPIDEV_COUNT][2] = { { DMA_REQUEST_SPI1_RX, DMA_REQUEST_SPI1_TX }, { DMA_REQUEST_SPI2_RX, DMA_REQUEST_SPI2_TX }, @@ -125,9 +131,44 @@ static DMA_t spiDmaFindFree(DMA_t other) } return NULL; } +#else +// The streams, with their channel, each SPI's receive and transmit requests can use +static const dmaTag_t spiDmaOptions[SPIDEV_COUNT][2][2] = { + { { DMA_TAG(2, 0, 3), DMA_TAG(2, 2, 3) }, { DMA_TAG(2, 3, 3), DMA_TAG(2, 5, 3) } }, // SPI1 + { { DMA_TAG(1, 3, 0), DMA_NONE }, { DMA_TAG(1, 4, 0), DMA_NONE } }, // SPI2 + { { DMA_TAG(1, 0, 0), DMA_TAG(1, 2, 0) }, { DMA_TAG(1, 5, 0), DMA_TAG(1, 7, 0) } }, // SPI3 +#if defined(STM32F7) + { { DMA_TAG(2, 0, 4), DMA_TAG(2, 3, 5) }, { DMA_TAG(2, 1, 4), DMA_TAG(2, 4, 5) } }, // SPI4 +#endif +}; + +static DMA_t spiDmaFindFree(const dmaTag_t *options, uint32_t *channel) +{ + for (int i = 0; i < 2; i++) { + DMA_t d = options[i] ? dmaGetByTag(options[i]) : NULL; + if (spiDmaIsFree(d)) { + *channel = SPI_DMA_CHSEL(DMATAG_GET_CHANNEL(options[i])); + return d; + } + } +#if defined(USE_ADC) + // Both taken: move the ADC to its other stream (many boards give it DMA2 stream 0, and a timer + // the other stream SPI1 could receive on) + for (int i = 0; i < 2; i++) { + DMA_t d = options[i] ? dmaGetByTag(options[i]) : NULL; + if (d && dmaGetOwner(d) == OWNER_ADC && adcDmaMoveOff(d) && spiDmaIsFree(d)) { + *channel = SPI_DMA_CHSEL(DMATAG_GET_CHANNEL(options[i])); + return d; + } + } +#endif + return NULL; +} +#endif bool spiDataReadyDmaInit(SPIDevice device, spiDataReadyDma_t *dma, dmaCallbackHandlerFuncPtr done, uint32_t userParam) { +#if defined(STM32H7) DMA_t rx = spiDmaFindFree(NULL); DMA_t tx = spiDmaFindFree(rx); if (!rx || !tx) { @@ -135,6 +176,19 @@ bool spiDataReadyDmaInit(SPIDevice device, spiDataReadyDma_t *dma, dmaCallbackHa } LL_DMA_SetPeriphRequest(rx->dma, DMATAG_GET_STREAM(rx->tag), spiDmaRequest[device][0]); LL_DMA_SetPeriphRequest(tx->dma, DMATAG_GET_STREAM(tx->tag), spiDmaRequest[device][1]); +#else + DMA_t rx = spiDmaFindFree(spiDmaOptions[device][0], &dma->rxChannel); + if (!rx) { + return false; + } + // Owned before the transmit search: moving the ADC for that one must not put it back here + dmaInit(rx, OWNER_SPI, device + 1); + DMA_t tx = spiDmaFindFree(spiDmaOptions[device][1], &dma->txChannel); + if (!tx) { + dmaInit(rx, OWNER_FREE, 0); + return false; + } +#endif dmaInit(rx, OWNER_SPI, device + 1); dmaInit(tx, OWNER_SPI, device + 1); @@ -168,8 +222,13 @@ static void spiDmaStreamStart(DMA_t d, uint32_t cr, volatile void *periph, const void spiDataReadyDmaStart(const spiDataReadyDma_t *dma, volatile void *txReg, volatile void *rxReg, const uint8_t *tx, uint8_t *rx, uint16_t n) { - spiDmaStreamStart(dma->rx, DMA_SxCR_MINC | DMA_SxCR_PL_1 | DMA_SxCR_TCIE | DMA_SxCR_TEIE, rxReg, rx, n); - spiDmaStreamStart(dma->tx, DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PL_0, txReg, tx, n); +#if defined(STM32H7) + const uint32_t rxChannel = 0, txChannel = 0; // the DMAMUX routes the requests +#else + const uint32_t rxChannel = dma->rxChannel, txChannel = dma->txChannel; +#endif + spiDmaStreamStart(dma->rx, rxChannel | DMA_SxCR_MINC | DMA_SxCR_PL_1 | DMA_SxCR_TCIE | DMA_SxCR_TEIE, rxReg, rx, n); + spiDmaStreamStart(dma->tx, txChannel | DMA_SxCR_DIR_0 | DMA_SxCR_MINC | DMA_SxCR_PL_0, txReg, tx, n); } void spiDataReadyDmaStop(const spiDataReadyDma_t *dma) diff --git a/src/main/drivers/bus_spi_data_ready_impl.h b/src/main/drivers/bus_spi_data_ready_impl.h index 216219f9187..ce0f18a6001 100644 --- a/src/main/drivers/bus_spi_data_ready_impl.h +++ b/src/main/drivers/bus_spi_data_ready_impl.h @@ -40,13 +40,17 @@ void spiTimeoutUserCallback(SPI_TypeDef *instance); uint32_t spiTimeoutUserCallback(SPI_TypeDef *instance); #endif -#if defined(STM32H7) +#if defined(STM32F4) || defined(STM32F7) || defined(STM32H7) #include "drivers/dma.h" // Reads longer than the SPI FIFO go through two DMA streams (bus_spi_data_ready_dma.c) typedef struct { DMA_t rx; DMA_t tx; +#if defined(STM32F4) || defined(STM32F7) + uint32_t rxChannel; // the stream's channel for this SPI + uint32_t txChannel; +#endif } spiDataReadyDma_t; // Takes a free stream for each direction. done() runs at the end of each read, or when the diff --git a/src/main/drivers/bus_spi_hal_ll.c b/src/main/drivers/bus_spi_hal_ll.c index a68c5e799c0..aeb67f2e28e 100644 --- a/src/main/drivers/bus_spi_hal_ll.c +++ b/src/main/drivers/bus_spi_hal_ll.c @@ -519,7 +519,7 @@ bool spiTransfer(SPI_TypeDef *instance, uint8_t *rxData, const uint8_t *txData, #if defined(USE_SPI_DATA_READY) // Data-ready reads (see bus_spi_data_ready.c). On H7 a read that fits the SPI FIFO (16 bytes on // SPI1-3, 8 on SPI4-6) needs no DMA: the end-of-transfer interrupt takes it all back. Longer -// reads use two DMA streams +// reads, and all on F7 (4-byte FIFO), use two DMA streams // Longest read, address included #define SPI_DATA_READY_MAX 32 @@ -568,6 +568,7 @@ static bool spiDataReadyDmaSetup(SPIDevice device) return true; } +#if defined(STM32H7) static const IRQn_Type spiIrq[SPIDEV_COUNT] = { SPI1_IRQn, SPI2_IRQn, SPI3_IRQn, SPI4_IRQn }; static uint8_t spiFifoSize(SPI_TypeDef *instance) @@ -676,6 +677,57 @@ void SPI3_IRQHandler(void) { spiDataReadyIrqHandler(SPIDEV_3); } void SPI4_IRQHandler(void) { spiDataReadyIrqHandler(SPIDEV_4); } #endif +#else // STM32F7 + +bool spiDataReadyHwInit(SPIDevice device, uint8_t reg, uint8_t len) +{ + SPI_TypeDef *instance = spiHardwareMap[device].dev; + spiDataReadyHw_t *h = &spiDataReadyHw[device]; + if (!instance || len + 1 > SPI_DATA_READY_MAX) { + return false; + } + + h->reg = reg; + h->len = len; + return spiDataReadyDmaSetup(device); +} + +// Setting the DMA requests starts the read: receive first, as the reference manual has it +void spiDataReadyHwStart(SPIDevice device) +{ + const spiDataReadyHw_t *h = &spiDataReadyHw[device]; + SPI_TypeDef *instance = spiHardwareMap[device].dev; + + // A byte left in the receive FIFO would be taken for the first one of this read + for (int n = 0; n < 8 && LL_SPI_GetRxFIFOLevel(instance) != LL_SPI_RX_FIFO_EMPTY; n++) { + (void)LL_SPI_ReceiveData8(instance); + } + spiDataReadyDmaStart(&h->streams, &instance->DR, &instance->DR, spiDataReadyTx[device], spiDataReadyRx[device], h->len + 1); + SET_BIT(instance->CR2, SPI_CR2_RXDMAEN); + SET_BIT(instance->CR2, SPI_CR2_TXDMAEN); +} + +void spiDataReadyHwStop(SPIDevice device) +{ + const spiDataReadyHw_t *h = &spiDataReadyHw[device]; + SPI_TypeDef *instance = spiHardwareMap[device].dev; + + spiDataReadyDmaStop(&h->streams); + CLEAR_BIT(instance->CR2, SPI_CR2_TXDMAEN | SPI_CR2_RXDMAEN); + + // A read stopped half way leaves bytes behind: send them and drop what comes back, or the main + // loop's next transfer would take it for its own + for (int timeout = 1000; timeout && (LL_SPI_GetTxFIFOLevel(instance) != LL_SPI_TX_FIFO_EMPTY || LL_SPI_IsActiveFlag_BSY(instance)); timeout--); + for (int n = 0; n < 8 && LL_SPI_GetRxFIFOLevel(instance) != LL_SPI_RX_FIFO_EMPTY; n++) { + (void)LL_SPI_ReceiveData8(instance); + } +} + +void spiDataReadyHwDisable(SPIDevice device) +{ + spiDataReadyDmaDisable(&spiDataReadyHw[device].streams); +} +#endif #endif void spiSetSpeed(SPI_TypeDef *instance, SPIClockSpeed_e speed) diff --git a/src/main/fc/settings.yaml b/src/main/fc/settings.yaml index 749f348429e..db3f48d7bc8 100644 --- a/src/main/fc/settings.yaml +++ b/src/main/fc/settings.yaml @@ -353,7 +353,7 @@ groups: field: gyro_secondary_enabled type: bool - name: gyro_data_ready - description: "Read the gyro when it signals a new sample, on its data-ready interrupt, instead of polling it: every sample once, and the CPU no longer waits on the bus. Needs a supported IMU (ICM-42605, ICM-42688-P) and a target that declares the interrupt pin. AUTO and ON do it, OFF polls the gyro." + description: "Read the gyro when it signals a new sample, on its data-ready interrupt, instead of polling it: every sample once, and the CPU no longer waits on the bus. Needs a supported IMU and a target that declares the interrupt pin; without interrupts the gyro is read as before. AUTO does it with the ICM-42605, ICM-42688-P, BMI270 and LSM6DXX; ON also with the ICM-45686, MPU6000, MPU6500 (and the ICM-20602 and ICM-20608 it drives), MPU9250 and ICM-20689, not yet run on hardware. OFF polls the gyro." default_value: "AUTO" condition: USE_SPI_DATA_READY field: gyro_data_ready diff --git a/src/main/target/AIKONF4/target.h b/src/main/target/AIKONF4/target.h index cd057f8b871..3fe4a0e8aee 100644 --- a/src/main/target/AIKONF4/target.h +++ b/src/main/target/AIKONF4/target.h @@ -30,11 +30,13 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW0_DEG #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 #define SERIAL_PORT_COUNT 7 //VCP, UART1, UART2, UART3, UART4, SOFTSERIAL1, SOFTSERIAL2 diff --git a/src/main/target/AIKONF4V2/target.h b/src/main/target/AIKONF4V2/target.h index a93415371bd..121e908ed4f 100644 --- a/src/main/target/AIKONF4V2/target.h +++ b/src/main/target/AIKONF4V2/target.h @@ -92,10 +92,12 @@ // Gyro & ACC #define USE_IMU_MPU6000 #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define IMU_MPU6000_ALIGN CW0_DEG #define USE_IMU_ICM42605 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 #define IMU_ICM42605_ALIGN CW90_DEG // OSD diff --git a/src/main/target/AIKONF7/target.h b/src/main/target/AIKONF7/target.h index b29a2c9366c..8b2c3e5ef4e 100644 --- a/src/main/target/AIKONF7/target.h +++ b/src/main/target/AIKONF7/target.h @@ -87,10 +87,12 @@ // Gyro & ACC #define USE_IMU_BMI270 #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 #define IMU_BMI270_ALIGN CW0_DEG #define USE_IMU_MPU6000 #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define IMU_MPU6000_ALIGN CW0_DEG // BARO diff --git a/src/main/target/AIRBOTF4/target.h b/src/main/target/AIRBOTF4/target.h index 9d5b0eef8bb..f4a3a5e784f 100644 --- a/src/main/target/AIRBOTF4/target.h +++ b/src/main/target/AIRBOTF4/target.h @@ -32,11 +32,13 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW270_DEG #define MPU6500_CS_PIN PA4 +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 #define USE_MAG diff --git a/src/main/target/ALIENFLIGHTF4/target.h b/src/main/target/ALIENFLIGHTF4/target.h index 52cd4cf4a9d..d3e8c116ff6 100644 --- a/src/main/target/ALIENFLIGHTF4/target.h +++ b/src/main/target/ALIENFLIGHTF4/target.h @@ -33,9 +33,11 @@ #define INVERTER_PIN_USART2 PC15 #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PC14 #define MPU6500_SPI_BUS BUS_SPI1 #define MPU9250_CS_PIN SPI1_NSS_PIN +#define MPU9250_EXTI_PIN PC14 #define MPU9250_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 diff --git a/src/main/target/ALIENFLIGHTNGF7/target.h b/src/main/target/ALIENFLIGHTNGF7/target.h index 1c8e0f901ef..a5ed2c92ad4 100644 --- a/src/main/target/ALIENFLIGHTNGF7/target.h +++ b/src/main/target/ALIENFLIGHTNGF7/target.h @@ -31,9 +31,11 @@ #define BEEPER_INVERTED #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PC14 #define MPU6500_SPI_BUS BUS_SPI1 #define MPU9250_CS_PIN SPI1_NSS_PIN +#define MPU9250_EXTI_PIN PC14 #define MPU9250_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 diff --git a/src/main/target/ANYFCF7/target.h b/src/main/target/ANYFCF7/target.h index 179a7211f02..aa2625f1044 100644 --- a/src/main/target/ANYFCF7/target.h +++ b/src/main/target/ANYFCF7/target.h @@ -28,6 +28,9 @@ #define BEEPER_INVERTED #define MPU6000_CS_PIN PA4 +#if defined(ANYFCF7) +#define MPU6000_EXTI_PIN PC4 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 diff --git a/src/main/target/ANYFCM7/target.h b/src/main/target/ANYFCM7/target.h index 2013ca40cb5..19e51904cb6 100644 --- a/src/main/target/ANYFCM7/target.h +++ b/src/main/target/ANYFCM7/target.h @@ -28,6 +28,7 @@ #define BEEPER_INVERTED #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 diff --git a/src/main/target/AOCODARCF405AIO/target.c b/src/main/target/AOCODARCF405AIO/target.c index d2f3d67c427..a8e8607180a 100644 --- a/src/main/target/AOCODARCF405AIO/target.c +++ b/src/main/target/AOCODARCF405AIO/target.c @@ -24,9 +24,9 @@ #include "drivers/timer.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { // DEF_TIM(TIM2, CH2, PA10, TIM_USE_PPM, 0, 0), // PPM diff --git a/src/main/target/AOCODARCF405AIO/target.h b/src/main/target/AOCODARCF405AIO/target.h index d732ebdd042..f7593f11ffd 100644 --- a/src/main/target/AOCODARCF405AIO/target.h +++ b/src/main/target/AOCODARCF405AIO/target.h @@ -65,19 +65,19 @@ #define USE_IMU_MPU6500 #define MPU6500_CS_PIN PA4 #define MPU6500_SPI_BUS BUS_SPI1 -#define MPU6500_EXTI_PIN PC5 +#define MPU6500_EXTI_PIN PC4 #define IMU_MPU6500_ALIGN CW90_DEG #define USE_IMU_MPU6000 #define MPU6000_CS_PIN PA4 #define MPU6000_SPI_BUS BUS_SPI1 -#define MPU6000_EXTI_PIN PC5 +#define MPU6000_EXTI_PIN PC4 #define IMU_MPU6000_ALIGN CW90_DEG #define USE_IMU_BMI270 #define BMI270_CS_PIN PA4 #define BMI270_SPI_BUS BUS_SPI1 -#define BMI270_EXTI_PIN PC5 +#define BMI270_EXTI_PIN PC4 #define IMU_BMI270_ALIGN CW90_DEG /*** I2C (Baro & Mag) ***/ diff --git a/src/main/target/AOCODARCF722AIO/target.c b/src/main/target/AOCODARCF722AIO/target.c index 84ccbfd6708..6633a275959 100644 --- a/src/main/target/AOCODARCF722AIO/target.c +++ b/src/main/target/AOCODARCF722AIO/target.c @@ -24,9 +24,9 @@ #include "drivers/timer.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_icm42605, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_icm42605, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, ICM42605_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); timerHardware_t timerHardware[] = { // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM diff --git a/src/main/target/AOCODARCF7DUAL/target.c b/src/main/target/AOCODARCF7DUAL/target.c index 395d985f8d1..c810fb09270 100644 --- a/src/main/target/AOCODARCF7DUAL/target.c +++ b/src/main/target/AOCODARCF7DUAL/target.c @@ -26,8 +26,8 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { // DEF_TIM(TIM1, CH3, PA10, TIM_USE_PPM, 0, 0), //PPM diff --git a/src/main/target/AOCODARCF7DUAL/target.h b/src/main/target/AOCODARCF7DUAL/target.h index 5d4b0fda527..774789ac898 100644 --- a/src/main/target/AOCODARCF7DUAL/target.h +++ b/src/main/target/AOCODARCF7DUAL/target.h @@ -46,6 +46,7 @@ #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_CS_PIN PA13 +#define BMI270_EXTI_PIN PA8 #define BMI270_SPI_BUS BUS_SPI2 // *************** I2C /Baro/Mag ********************* diff --git a/src/main/target/AXISFLYINGF7PRO/target.h b/src/main/target/AXISFLYINGF7PRO/target.h index 39c94e47e9a..56359dea6ce 100644 --- a/src/main/target/AXISFLYINGF7PRO/target.h +++ b/src/main/target/AXISFLYINGF7PRO/target.h @@ -52,16 +52,19 @@ #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 // *************** SPI2 OSD ***************// #define USE_MAX7456 diff --git a/src/main/target/BEEROTORF4/target.h b/src/main/target/BEEROTORF4/target.h index 73f9e029116..4b13357b8fe 100644 --- a/src/main/target/BEEROTORF4/target.h +++ b/src/main/target/BEEROTORF4/target.h @@ -26,6 +26,7 @@ #define BEEPER_INVERTED #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PA8 #define MPU6500_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 diff --git a/src/main/target/BETAFLIGHTF4/target.h b/src/main/target/BETAFLIGHTF4/target.h index 05f35872986..a929804c04b 100755 --- a/src/main/target/BETAFLIGHTF4/target.h +++ b/src/main/target/BETAFLIGHTF4/target.h @@ -28,6 +28,7 @@ #define BEEPER_INVERTED #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 diff --git a/src/main/target/BETAFPVF411/target.h b/src/main/target/BETAFPVF411/target.h index 1f57281d2f4..8f0d8e4f732 100644 --- a/src/main/target/BETAFPVF411/target.h +++ b/src/main/target/BETAFPVF411/target.h @@ -40,6 +40,7 @@ // *************** SPI Gyro & ACC ********************** #define USE_IMU_MPU6000 #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PA1 #define MPU6000_SPI_BUS BUS_SPI1 #define IMU_MPU6000_ALIGN CW180_DEG @@ -47,6 +48,7 @@ #define IMU_BMI270_ALIGN CW90_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PA1 // *************** Baro ***************************** diff --git a/src/main/target/BETAFPVF722/target.h b/src/main/target/BETAFPVF722/target.h index cab6d2ff146..6a07e63cf0b 100755 --- a/src/main/target/BETAFPVF722/target.h +++ b/src/main/target/BETAFPVF722/target.h @@ -35,6 +35,7 @@ #define SPI1_MOSI_PIN PA7 #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 @@ -44,11 +45,13 @@ #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PC4 // *************** I2C/Baro/Mag ********************* #define USE_I2C diff --git a/src/main/target/BLADE_F4/target.h b/src/main/target/BLADE_F4/target.h index 71cf76cc0cf..0bd267d760a 100644 --- a/src/main/target/BLADE_F4/target.h +++ b/src/main/target/BLADE_F4/target.h @@ -62,6 +62,7 @@ #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 // ICM42605/ICM42688P @@ -69,12 +70,14 @@ #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 //BMI270 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW270_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 /*** OSD ***/ diff --git a/src/main/target/BLUEJAYF4/target.h b/src/main/target/BLUEJAYF4/target.h index e62120bdc86..52710e6fdcd 100644 --- a/src/main/target/BLUEJAYF4/target.h +++ b/src/main/target/BLUEJAYF4/target.h @@ -35,6 +35,7 @@ // MPU6500 #define MPU6500_CS_PIN PC4 +#define MPU6500_EXTI_PIN PC5 #define MPU6500_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW0_DEG diff --git a/src/main/target/BOTWINGF405/target.h b/src/main/target/BOTWINGF405/target.h index f4860c653a5..7e4312c753f 100644 --- a/src/main/target/BOTWINGF405/target.h +++ b/src/main/target/BOTWINGF405/target.h @@ -73,6 +73,7 @@ */ #define USE_IMU_ICM42605 #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 #define IMU_ICM42605_ALIGN CW0_DEG diff --git a/src/main/target/BOTWINGF722/target.h b/src/main/target/BOTWINGF722/target.h index 2d3823f2a04..e31d6859074 100644 --- a/src/main/target/BOTWINGF722/target.h +++ b/src/main/target/BOTWINGF722/target.h @@ -46,6 +46,7 @@ // #define ICM42605_CS_PIN SPI3_NSS_PIN #define ICM42605_CS_PIN PD2 +#define ICM42605_EXTI_PIN PC13 #define ICM42605_SPI_BUS BUS_SPI3 #define USE_BEEPER diff --git a/src/main/target/BRAHMA_F405/target.h b/src/main/target/BRAHMA_F405/target.h index f9e59ea3ef9..f6896b09007 100644 --- a/src/main/target/BRAHMA_F405/target.h +++ b/src/main/target/BRAHMA_F405/target.h @@ -36,6 +36,7 @@ #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_SPI_BUS BUS_SPI3 #define BMI270_CS_PIN SPI3_NSS_PIN +#define BMI270_EXTI_PIN PB8 // *************** Baro ************************** #define USE_I2C diff --git a/src/main/target/BROTHERHOBBYF405V3/target.h b/src/main/target/BROTHERHOBBYF405V3/target.h index 9a9115bbf36..d01b4789af9 100644 --- a/src/main/target/BROTHERHOBBYF405V3/target.h +++ b/src/main/target/BROTHERHOBBYF405V3/target.h @@ -97,6 +97,7 @@ // Gyro & ACC #define USE_IMU_ICM42605 #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 #define IMU_ICM42605_ALIGN CW90_DEG diff --git a/src/main/target/CADDXF4_AIO_ELRS/target.h b/src/main/target/CADDXF4_AIO_ELRS/target.h index 85a1718f684..d6fd6f4520c 100644 --- a/src/main/target/CADDXF4_AIO_ELRS/target.h +++ b/src/main/target/CADDXF4_AIO_ELRS/target.h @@ -30,11 +30,13 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 #define USE_BARO diff --git a/src/main/target/COLIBRI/target.h b/src/main/target/COLIBRI/target.h index 6898448809d..7b2f72f3990 100755 --- a/src/main/target/COLIBRI/target.h +++ b/src/main/target/COLIBRI/target.h @@ -37,6 +37,9 @@ #define BEEPER PC5 #define MPU6000_CS_PIN PC4 +#if defined(COLIBRI) +#define MPU6000_EXTI_PIN PC0 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 diff --git a/src/main/target/DAKEFPVF405/target.h b/src/main/target/DAKEFPVF405/target.h index 30834b7682b..2d855d6c78c 100644 --- a/src/main/target/DAKEFPVF405/target.h +++ b/src/main/target/DAKEFPVF405/target.h @@ -55,27 +55,32 @@ #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW90_DEG #define MPU6500_CS_PIN PA4 +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW90_DEG #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW90_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW90_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PC4 #define USE_IMU_LSM6DXX #define IMU_LSM6DXX_ALIGN CW90_DEG #define LSM6DXX_SPI_BUS BUS_SPI1 #define LSM6DXX_CS_PIN PA4 +#define LSM6DXX_EXTI_PIN PC4 // ICM42688P driver handled by USE_IMU_ICM42605 above (shares WHO_AM_I detection) // LSM6DSV16X / LSM6DSK320X driver handled by USE_IMU_LSM6DXX above (shares WHO_AM_I detection) diff --git a/src/main/target/DAKEFPVF722/target.h b/src/main/target/DAKEFPVF722/target.h index 7d993971a40..0111e1b65b7 100644 --- a/src/main/target/DAKEFPVF722/target.h +++ b/src/main/target/DAKEFPVF722/target.h @@ -55,27 +55,32 @@ #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW90_DEG #define MPU6500_CS_PIN PA4 +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW90_DEG #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW90_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW90_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PC4 #define USE_IMU_LSM6DXX #define IMU_LSM6DXX_ALIGN CW90_DEG #define LSM6DXX_SPI_BUS BUS_SPI1 #define LSM6DXX_CS_PIN PA4 +#define LSM6DXX_EXTI_PIN PC4 // LSM6DSV16X / LSM6DSK320X driver handled by USE_IMU_LSM6DXX above (shares WHO_AM_I detection) diff --git a/src/main/target/DAKEFPVH743/target.c b/src/main/target/DAKEFPVH743/target.c index 4040aa0fcaa..9aeef364505 100644 --- a/src/main/target/DAKEFPVH743/target.c +++ b/src/main/target/DAKEFPVH743/target.c @@ -35,8 +35,8 @@ BUSDEV_REGISTER_SPI_TAG(busdev_1_BMI270, DEVHW_BMI270, IMU_1_SPI_BUS, IMU_ BUSDEV_REGISTER_SPI_TAG(busdev_1_lsm6dxx, DEVHW_LSM6D, IMU_1_SPI_BUS, IMU_1_CS_PIN, IMU_1_IRQ_PIN, 0, DEVFLAGS_NONE, IMU_1_ALIGN); // // Board hardware definitions - IMU2 slot -BUSDEV_REGISTER_SPI_TAG(busdev_2_mpu6000, DEVHW_MPU6000, IMU_2_SPI_BUS, IMU_2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_2_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_2_mpu6500, DEVHW_MPU6500, IMU_2_SPI_BUS, IMU_2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_2_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_2_mpu6000, DEVHW_MPU6000, IMU_2_SPI_BUS, IMU_2_CS_PIN, PB2, 1, DEVFLAGS_NONE, IMU_2_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_2_mpu6500, DEVHW_MPU6500, IMU_2_SPI_BUS, IMU_2_CS_PIN, PB2, 1, DEVFLAGS_NONE, IMU_2_ALIGN); BUSDEV_REGISTER_SPI_TAG(busdev_2_ICM42605, DEVHW_ICM42605, IMU_2_SPI_BUS, IMU_2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_2_ALIGN); BUSDEV_REGISTER_SPI_TAG(busdev_2_BMI270, DEVHW_BMI270, IMU_2_SPI_BUS, IMU_2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_2_ALIGN); BUSDEV_REGISTER_SPI_TAG(busdev_2_lsm6dxx, DEVHW_LSM6D , IMU_2_SPI_BUS, IMU_2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_2_ALIGN); diff --git a/src/main/target/DALRCF405/target.h b/src/main/target/DALRCF405/target.h index 6a9a5494ffe..f051f93a0ee 100644 --- a/src/main/target/DALRCF405/target.h +++ b/src/main/target/DALRCF405/target.h @@ -33,11 +33,13 @@ #define SPI1_MOSI_PIN PA7 #define MPU6500_CS_PIN PA4 +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW90_DEG #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW90_DEG diff --git a/src/main/target/DALRCF722DUAL/target.h b/src/main/target/DALRCF722DUAL/target.h index 5c6dc15a3d7..eba741ae7d2 100644 --- a/src/main/target/DALRCF722DUAL/target.h +++ b/src/main/target/DALRCF722DUAL/target.h @@ -30,6 +30,7 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN PB0 +#define MPU6000_EXTI_PIN PB10 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_VCP diff --git a/src/main/target/DYSF4/target.h b/src/main/target/DYSF4/target.h index 76e79106afa..4fd4f3abf0b 100644 --- a/src/main/target/DYSF4/target.h +++ b/src/main/target/DYSF4/target.h @@ -48,6 +48,9 @@ #define UG2864_I2C_BUS I2C_EXT_BUS #define MPU6000_CS_PIN PA4 +#if defined(DYSF4PRO) +#define MPU6000_EXTI_PIN PC4 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 diff --git a/src/main/target/F4BY/target.h b/src/main/target/F4BY/target.h index 21f91c1d49b..b36d2a2e91c 100644 --- a/src/main/target/F4BY/target.h +++ b/src/main/target/F4BY/target.h @@ -28,8 +28,10 @@ #define BEEPER_INVERTED #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PB0 #define MPU6000_SPI_BUS BUS_SPI1 #define ICM20689_CS_PIN PA4 +#define ICM20689_EXTI_PIN PB0 #define ICM20689_SPI_BUS BUS_SPI1 diff --git a/src/main/target/FF_FORTINIF4/target.h b/src/main/target/FF_FORTINIF4/target.h index 5af579aba89..38d43dde1ec 100644 --- a/src/main/target/FF_FORTINIF4/target.h +++ b/src/main/target/FF_FORTINIF4/target.h @@ -35,6 +35,7 @@ /*---------------------------------*/ #define MPU6500_CS_PIN PA8 +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 diff --git a/src/main/target/FISHDRONEF4/target.h b/src/main/target/FISHDRONEF4/target.h index 86206826c38..483b47440fc 100644 --- a/src/main/target/FISHDRONEF4/target.h +++ b/src/main/target/FISHDRONEF4/target.h @@ -34,8 +34,10 @@ // *************** ICM20608 ***************************** #define USE_SPI_DEVICE_1 #define MPU6500_CS_PIN PA4 +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 #define MPU9250_CS_PIN PA4 +#define MPU9250_EXTI_PIN PC4 #define MPU9250_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 diff --git a/src/main/target/FLASHHOBBYF405/target.h b/src/main/target/FLASHHOBBYF405/target.h index 937917c95c1..dc384e6bcd0 100644 --- a/src/main/target/FLASHHOBBYF405/target.h +++ b/src/main/target/FLASHHOBBYF405/target.h @@ -39,16 +39,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/FLASHHOBBYF722/target.h b/src/main/target/FLASHHOBBYF722/target.h index f0cc7881352..c8f622e9423 100644 --- a/src/main/target/FLASHHOBBYF722/target.h +++ b/src/main/target/FLASHHOBBYF722/target.h @@ -37,16 +37,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/FLYCOLORF4/target.h b/src/main/target/FLYCOLORF4/target.h index 42112ee297f..5729fa84fb7 100644 --- a/src/main/target/FLYCOLORF4/target.h +++ b/src/main/target/FLYCOLORF4/target.h @@ -51,6 +51,7 @@ #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW180_DEG #define MPU6500_CS_PIN PA4 +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 /*** Onboard flash ***/ diff --git a/src/main/target/FLYCOLORF7MINI/target.c b/src/main/target/FLYCOLORF7MINI/target.c index 411a4fbe403..f178d09a4a3 100644 --- a/src/main/target/FLYCOLORF7MINI/target.c +++ b/src/main/target/FLYCOLORF7MINI/target.c @@ -26,7 +26,7 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, PC3, 0, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH4, PB1, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 diff --git a/src/main/target/FLYCOLORF7V2/target.h b/src/main/target/FLYCOLORF7V2/target.h index 8222e379d8d..bf593287764 100644 --- a/src/main/target/FLYCOLORF7V2/target.h +++ b/src/main/target/FLYCOLORF7V2/target.h @@ -37,6 +37,7 @@ #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW180_DEG_FLIP #define MPU6500_CS_PIN PA4 +#define MPU6500_EXTI_PIN PC3 #define MPU6500_SPI_BUS BUS_SPI1 // *************** I2C /Baro/Mag ********************* diff --git a/src/main/target/FLYWOOF405PRO/target.h b/src/main/target/FLYWOOF405PRO/target.h index 22ddd0a6fd2..c28f8ee0f73 100644 --- a/src/main/target/FLYWOOF405PRO/target.h +++ b/src/main/target/FLYWOOF405PRO/target.h @@ -40,16 +40,21 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW90_DEG #define MPU6000_CS_PIN PB12 +#if defined(FLYWOOF405PRO) +#define MPU6000_EXTI_PIN PB13 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG_FLIP #define BMI270_CS_PIN PB12 +#define BMI270_EXTI_PIN GYRO_INT_EXTI #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW180_DEG_FLIP #define ICM42605_CS_PIN PB12 +#define ICM42605_EXTI_PIN GYRO_INT_EXTI #define ICM42605_SPI_BUS BUS_SPI1 #define USE_EXTI diff --git a/src/main/target/FLYWOOF405S_AIO/target.h b/src/main/target/FLYWOOF405S_AIO/target.h index 4250943633e..60231587a79 100644 --- a/src/main/target/FLYWOOF405S_AIO/target.h +++ b/src/main/target/FLYWOOF405S_AIO/target.h @@ -36,16 +36,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN PB12 +#define MPU6000_EXTI_PIN PB13 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW270_DEG #define BMI270_CS_PIN PB12 +#define BMI270_EXTI_PIN GYRO_INT_EXTI #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_CS_PIN PB12 +#define ICM42605_EXTI_PIN PB13 #define ICM42605_SPI_BUS BUS_SPI1 #define USE_EXTI diff --git a/src/main/target/FLYWOOF411/target.h b/src/main/target/FLYWOOF411/target.h index ed263d5ee3d..242c88e9759 100644 --- a/src/main/target/FLYWOOF411/target.h +++ b/src/main/target/FLYWOOF411/target.h @@ -48,11 +48,17 @@ #define USE_IMU_MPU6000 #define MPU6000_CS_PIN PA4 +#if defined(FLYWOOF411_V2) +#define MPU6000_EXTI_PIN PB5 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define IMU_MPU6000_ALIGN CW180_DEG #define USE_IMU_ICM20689 #define ICM20689_CS_PIN PA4 +#if defined(FLYWOOF411_V2) +#define ICM20689_EXTI_PIN PB5 +#endif #define ICM20689_SPI_BUS BUS_SPI1 #define IMU_ICM20689_ALIGN CW180_DEG diff --git a/src/main/target/FLYWOOF722PRO/target.c b/src/main/target/FLYWOOF722PRO/target.c index e8b78979f95..0b9b1a7f2c4 100644 --- a/src/main/target/FLYWOOF722PRO/target.c +++ b/src/main/target/FLYWOOF722PRO/target.c @@ -26,9 +26,9 @@ #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_ICM42605, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_BMI270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC3, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_ICM42605, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, ICM42605_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_BMI270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { //DEF_TIM(TIM8, CH1, PC6, TIM_USE_PPM,0, 0), // PPM&SBUS diff --git a/src/main/target/FLYWOOF722PRO/target.h b/src/main/target/FLYWOOF722PRO/target.h index 3f11b44e317..69119763877 100644 --- a/src/main/target/FLYWOOF722PRO/target.h +++ b/src/main/target/FLYWOOF722PRO/target.h @@ -42,11 +42,13 @@ #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC3 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PC3 #define USE_SPI_DEVICE_2 // MAX7456 diff --git a/src/main/target/FLYWOOF745/target.h b/src/main/target/FLYWOOF745/target.h index d00c2455945..2efc3790296 100644 --- a/src/main/target/FLYWOOF745/target.h +++ b/src/main/target/FLYWOOF745/target.h @@ -39,16 +39,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN SPI4_NSS_PIN +#define MPU6000_EXTI_PIN PE1 #define MPU6000_SPI_BUS BUS_SPI4 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW270_DEG #define BMI270_CS_PIN SPI4_NSS_PIN +#define BMI270_EXTI_PIN PE1 #define BMI270_SPI_BUS BUS_SPI4 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_CS_PIN SPI4_NSS_PIN +#define ICM42605_EXTI_PIN PE1 #define ICM42605_SPI_BUS BUS_SPI4 #define USB_IO diff --git a/src/main/target/FLYWOOF7DUAL/target.c b/src/main/target/FLYWOOF7DUAL/target.c index 28d5a2ee471..67be532ce9b 100644 --- a/src/main/target/FLYWOOF7DUAL/target.c +++ b/src/main/target/FLYWOOF7DUAL/target.c @@ -30,12 +30,12 @@ #include "io/piniobox.h" // IMU 1 -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000_1, DEVHW_MPU6000, GYRO_1_SPI_BUS, GYRO_1_CS_PIN, NONE, 0, DEVFLAGS_NONE, GYRO_1_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_1, DEVHW_MPU6500, GYRO_1_SPI_BUS, GYRO_1_CS_PIN, NONE, 0, DEVFLAGS_NONE, GYRO_1_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000_1, DEVHW_MPU6000, GYRO_1_SPI_BUS, GYRO_1_CS_PIN, PC3, 0, DEVFLAGS_NONE, GYRO_1_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_1, DEVHW_MPU6500, GYRO_1_SPI_BUS, GYRO_1_CS_PIN, PC3, 0, DEVFLAGS_NONE, GYRO_1_ALIGN); // IMU 2 -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000_2, DEVHW_MPU6000, GYRO_2_SPI_BUS, GYRO_2_CS_PIN, NONE, 1, DEVFLAGS_NONE, GYRO_2_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_2, DEVHW_MPU6500, GYRO_2_SPI_BUS, GYRO_2_CS_PIN, NONE, 1, DEVFLAGS_NONE, GYRO_2_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000_2, DEVHW_MPU6000, GYRO_2_SPI_BUS, GYRO_2_CS_PIN, PC4, 1, DEVFLAGS_NONE, GYRO_2_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_2, DEVHW_MPU6500, GYRO_2_SPI_BUS, GYRO_2_CS_PIN, PC4, 1, DEVFLAGS_NONE, GYRO_2_ALIGN); timerHardware_t timerHardware[] = { // DEF_TIM(TIM8, CH1, PC6, TIM_USE_PPM, 0, 0), // PPM&SBUS diff --git a/src/main/target/FOXEERF405/target.h b/src/main/target/FOXEERF405/target.h index a5b74bcd3b5..6ceb0d48361 100644 --- a/src/main/target/FOXEERF405/target.h +++ b/src/main/target/FOXEERF405/target.h @@ -29,12 +29,14 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW90_DEG #define MPU6000_CS_PIN PB2 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 // ICM20689 - handled by MPU6500 driver #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW90_DEG #define MPU6500_CS_PIN PB2 +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 /*** SPI/I2C bus ***/ diff --git a/src/main/target/FOXEERF405V2/target.h b/src/main/target/FOXEERF405V2/target.h index 1b0a3e65134..c0c30322272 100644 --- a/src/main/target/FOXEERF405V2/target.h +++ b/src/main/target/FOXEERF405V2/target.h @@ -66,16 +66,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW270_DEG #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 diff --git a/src/main/target/FOXEERF722DUAL/target.c b/src/main/target/FOXEERF722DUAL/target.c index e81731651e3..7a2ac090aba 100644 --- a/src/main/target/FOXEERF722DUAL/target.c +++ b/src/main/target/FOXEERF722DUAL/target.c @@ -24,7 +24,7 @@ #include "drivers/pwm_mapping.h" #include "drivers/pinio.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); #if defined(FOXEERF722DUAL) BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); #endif diff --git a/src/main/target/FOXEERF722V4/target.h b/src/main/target/FOXEERF722V4/target.h index fe6d4279d26..14c24e33e66 100644 --- a/src/main/target/FOXEERF722V4/target.h +++ b/src/main/target/FOXEERF722V4/target.h @@ -31,15 +31,22 @@ #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PB2 +#define ICM42605_EXTI_PIN PC4 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN PB2 +#if defined(FOXEERF722V4) +#define MPU6000_EXTI_PIN PC4 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW270_DEG #define MPU6500_CS_PIN PB2 +#if defined(FOXEERF722V4) +#define MPU6500_EXTI_PIN PC4 +#endif #define MPU6500_SPI_BUS BUS_SPI1 /*** SPI/I2C bus ***/ diff --git a/src/main/target/FOXEERF745AIO/target.h b/src/main/target/FOXEERF745AIO/target.h index 860ea18d861..f725ba7b318 100644 --- a/src/main/target/FOXEERF745AIO/target.h +++ b/src/main/target/FOXEERF745AIO/target.h @@ -32,6 +32,7 @@ #define IMU_ICM42605_ALIGN CW90_DEG #define ICM42605_SPI_BUS BUS_SPI3 #define ICM42605_CS_PIN PA15 +#define ICM42605_EXTI_PIN PD0 #else @@ -39,6 +40,9 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN PA15 +#if defined(FOXEERF745AIO) +#define MPU6000_EXTI_PIN PD0 +#endif #define MPU6000_SPI_BUS BUS_SPI3 #endif diff --git a/src/main/target/FOXEERH743/target.h b/src/main/target/FOXEERH743/target.h index f2e2f83eb40..40692c17c26 100644 --- a/src/main/target/FOXEERH743/target.h +++ b/src/main/target/FOXEERH743/target.h @@ -48,6 +48,7 @@ #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_SPI_BUS BUS_SPI2 #define MPU6000_CS_PIN PB12 +#define MPU6000_EXTI_PIN PD0 // *************** SPI3 FLASH *********************** #define USE_SPI_DEVICE_3 diff --git a/src/main/target/FRSKYF4/target.h b/src/main/target/FRSKYF4/target.h index c014283f33e..5e3b47efe59 100755 --- a/src/main/target/FRSKYF4/target.h +++ b/src/main/target/FRSKYF4/target.h @@ -23,6 +23,7 @@ #define BEEPER_INVERTED #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG diff --git a/src/main/target/FURYF4OSD/target.h b/src/main/target/FURYF4OSD/target.h index 71abc9a8c68..85ce3ab2c1c 100644 --- a/src/main/target/FURYF4OSD/target.h +++ b/src/main/target/FURYF4OSD/target.h @@ -38,11 +38,17 @@ #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW180_DEG #define MPU6500_CS_PIN PA4 +#if defined(FURYF4OSD) +#define MPU6500_EXTI_PIN PC4 +#endif #define MPU6500_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN PA4 +#if defined(FURYF4OSD) +#define MPU6000_EXTI_PIN PC4 +#endif #define MPU6000_SPI_BUS BUS_SPI1 // ICM42605/ICM42688P @@ -50,6 +56,9 @@ #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PA4 +#ifndef MAMBAF405 +#define ICM42605_EXTI_PIN PC4 +#endif #define ENABLE_BLACKBOX_LOGGING_ON_SPIFLASH_BY_DEFAULT #define USE_SPI_DEVICE_3 diff --git a/src/main/target/GEPRCF405/target.h b/src/main/target/GEPRCF405/target.h index 0b96d5b8b1e..e13bae3ce9f 100644 --- a/src/main/target/GEPRCF405/target.h +++ b/src/main/target/GEPRCF405/target.h @@ -44,16 +44,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN PA15 +#define MPU6000_EXTI_PIN PC3 #define MPU6000_SPI_BUS BUS_SPI3 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_CS_PIN PA15 +#define BMI270_EXTI_PIN PC3 #define BMI270_SPI_BUS BUS_SPI3 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42605_CS_PIN PA15 +#define ICM42605_EXTI_PIN PC3 #define ICM42605_SPI_BUS BUS_SPI3 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/GEPRCF405_BT_HD/target.h b/src/main/target/GEPRCF405_BT_HD/target.h index 185a3970a11..d1e5676559e 100644 --- a/src/main/target/GEPRCF405_BT_HD/target.h +++ b/src/main/target/GEPRCF405_BT_HD/target.h @@ -42,16 +42,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN PA15 +#define MPU6000_EXTI_PIN PC3 #define MPU6000_SPI_BUS BUS_SPI3 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_CS_PIN PA15 +#define BMI270_EXTI_PIN PC3 #define BMI270_SPI_BUS BUS_SPI3 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42605_CS_PIN PA15 +#define ICM42605_EXTI_PIN PC3 #define ICM42605_SPI_BUS BUS_SPI3 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/GEPRCF722/target.h b/src/main/target/GEPRCF722/target.h index df7cc6d3eca..27949faa381 100644 --- a/src/main/target/GEPRCF722/target.h +++ b/src/main/target/GEPRCF722/target.h @@ -41,16 +41,19 @@ #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN PA15 +#define MPU6000_EXTI_PIN PC3 #define MPU6000_SPI_BUS BUS_SPI3 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_CS_PIN PA15 +#define BMI270_EXTI_PIN PC3 #define BMI270_SPI_BUS BUS_SPI3 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42605_CS_PIN PA15 +#define ICM42605_EXTI_PIN PC3 #define ICM42605_SPI_BUS BUS_SPI3 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/GEPRCF722_BT_HD/target.h b/src/main/target/GEPRCF722_BT_HD/target.h index e388203c6aa..d0b4a76ab3e 100644 --- a/src/main/target/GEPRCF722_BT_HD/target.h +++ b/src/main/target/GEPRCF722_BT_HD/target.h @@ -39,16 +39,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN PA15 +#define MPU6000_EXTI_PIN PA8 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_CS_PIN PA15 +#define BMI270_EXTI_PIN PA8 #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_CS_PIN PA15 +#define ICM42605_EXTI_PIN PA8 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/GEPRCF745_BT_HD/target.c b/src/main/target/GEPRCF745_BT_HD/target.c index 91f9957fefc..de23e37be15 100644 --- a/src/main/target/GEPRCF745_BT_HD/target.c +++ b/src/main/target/GEPRCF745_BT_HD/target.c @@ -26,11 +26,11 @@ #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, IMU1_SPI_BUS, IMU1_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU1_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000_2, DEVHW_MPU6000, IMU2_SPI_BUS, IMU2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU2_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, IMU1_SPI_BUS, IMU1_CS_PIN, IMU1_EXTI_PIN, 0, DEVFLAGS_NONE, IMU1_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000_2, DEVHW_MPU6000, IMU2_SPI_BUS, IMU2_CS_PIN, IMU2_EXTI_PIN, 1, DEVFLAGS_NONE, IMU2_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, IMU1_SPI_BUS, IMU1_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU1_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_icm42688_2, DEVHW_ICM42605, IMU2_SPI_BUS, IMU2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU2_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, IMU1_SPI_BUS, IMU1_CS_PIN, IMU1_EXTI_PIN, 0, DEVFLAGS_NONE, IMU1_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_icm42688_2, DEVHW_ICM42605, IMU2_SPI_BUS, IMU2_CS_PIN, IMU2_EXTI_PIN, 1, DEVFLAGS_NONE, IMU2_ALIGN); diff --git a/src/main/target/GEPRCF745_BT_HD/target.h b/src/main/target/GEPRCF745_BT_HD/target.h index c6c84a32ad3..dbd5772c40e 100644 --- a/src/main/target/GEPRCF745_BT_HD/target.h +++ b/src/main/target/GEPRCF745_BT_HD/target.h @@ -65,6 +65,7 @@ #define IMU1_ALIGN CW180_DEG #define IMU1_SPI_BUS BUS_SPI1 #define IMU1_CS_PIN PA4 +#define IMU1_EXTI_PIN PD0 @@ -72,6 +73,7 @@ #define IMU2_ALIGN CW0_DEG #define IMU2_SPI_BUS BUS_SPI2 #define IMU2_CS_PIN PB12 +#define IMU2_EXTI_PIN PD8 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/GEPRC_F722_AIO/target.h b/src/main/target/GEPRC_F722_AIO/target.h index ee2b9330552..9f964084933 100644 --- a/src/main/target/GEPRC_F722_AIO/target.h +++ b/src/main/target/GEPRC_F722_AIO/target.h @@ -43,16 +43,21 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW90_DEG #define MPU6000_CS_PIN PA15 +#if defined(GEPRC_F722_AIO) +#define MPU6000_EXTI_PIN PA8 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW90_DEG #define BMI270_CS_PIN PA15 +#define BMI270_EXTI_PIN PA8 #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW90_DEG #define ICM42605_CS_PIN PA15 +#define ICM42605_EXTI_PIN PA8 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/HAKRCF405D/target.c b/src/main/target/HAKRCF405D/target.c index 14447efed4b..cda185ce71a 100644 --- a/src/main/target/HAKRCF405D/target.c +++ b/src/main/target/HAKRCF405D/target.c @@ -24,9 +24,9 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, ICM42605_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC3, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); timerHardware_t timerHardware[] = { diff --git a/src/main/target/HAKRCF405D/target.h b/src/main/target/HAKRCF405D/target.h index d47ec61dc99..43349a06823 100644 --- a/src/main/target/HAKRCF405D/target.h +++ b/src/main/target/HAKRCF405D/target.h @@ -67,12 +67,14 @@ #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC3 //BMI270 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW270_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC3 /*** OSD ***/ #define USE_MAX7456 diff --git a/src/main/target/HAKRCF405V2/target.h b/src/main/target/HAKRCF405V2/target.h index 85cc164230b..81f34522f10 100644 --- a/src/main/target/HAKRCF405V2/target.h +++ b/src/main/target/HAKRCF405V2/target.h @@ -61,6 +61,7 @@ #define IMU_MPU6000_ALIGN CW90_DEG #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 // ICM42605/ICM42688P @@ -68,12 +69,14 @@ #define IMU_ICM42605_ALIGN CW90_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 //BMI270 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW90_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 /*** OSD ***/ diff --git a/src/main/target/HAKRCF411D/target.h b/src/main/target/HAKRCF411D/target.h index 5b3a479ed19..db6dfe9f201 100644 --- a/src/main/target/HAKRCF411D/target.h +++ b/src/main/target/HAKRCF411D/target.h @@ -53,18 +53,21 @@ #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PA1 // ICM42605/ICM42688P #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PA1 //BMI270 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PA1 /*** OSD ***/ #define USE_MAX7456 diff --git a/src/main/target/HAKRCF722V2/target.c b/src/main/target/HAKRCF722V2/target.c index 9738db56d0c..14ef569f08f 100644 --- a/src/main/target/HAKRCF722V2/target.c +++ b/src/main/target/HAKRCF722V2/target.c @@ -23,14 +23,14 @@ #include "drivers/sensor.h" #include "drivers/pwm_mapping.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, GYRO_SPI_BUS, GYRO1_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000_2, DEVHW_MPU6000, GYRO_SPI_BUS, GYRO2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, GYRO_SPI_BUS, GYRO1_CS_PIN, GYRO1_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000_2, DEVHW_MPU6000, GYRO_SPI_BUS, GYRO2_CS_PIN, GYRO2_EXTI_PIN, 1, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, GYRO_SPI_BUS, GYRO1_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_icm42688_2, DEVHW_ICM42605, GYRO_SPI_BUS, GYRO2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, GYRO_SPI_BUS, GYRO1_CS_PIN, GYRO1_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_icm42688_2, DEVHW_ICM42605, GYRO_SPI_BUS, GYRO2_CS_PIN, GYRO2_EXTI_PIN, 1, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, GYRO_SPI_BUS, GYRO1_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270_2, DEVHW_BMI270, GYRO_SPI_BUS, GYRO2_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, GYRO_SPI_BUS, GYRO1_CS_PIN, GYRO1_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270_2, DEVHW_BMI270, GYRO_SPI_BUS, GYRO2_CS_PIN, GYRO2_EXTI_PIN, 1, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { DEF_TIM(TIM8, CH3, PC8, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 diff --git a/src/main/target/HAKRCF722V2/target.h b/src/main/target/HAKRCF722V2/target.h index 52c07b6545a..814cfa65d5a 100644 --- a/src/main/target/HAKRCF722V2/target.h +++ b/src/main/target/HAKRCF722V2/target.h @@ -63,7 +63,9 @@ #define GYRO_SPI_BUS BUS_SPI1 #define GYRO1_CS_PIN SPI1_NSS1_PIN +#define GYRO1_EXTI_PIN PC4 #define GYRO2_CS_PIN SPI1_NSS2_PIN +#define GYRO2_EXTI_PIN PB10 // MPU6000 #define USE_IMU_MPU6000 diff --git a/src/main/target/HGLRCF405V2/target.h b/src/main/target/HGLRCF405V2/target.h index 9f3a02b48f7..fa4afebf8bd 100644 --- a/src/main/target/HGLRCF405V2/target.h +++ b/src/main/target/HGLRCF405V2/target.h @@ -60,12 +60,14 @@ #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 // ICM42605/ICM42688P #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 /*** OSD ***/ #define USE_MAX7456 diff --git a/src/main/target/HGLRCF722/target.c b/src/main/target/HGLRCF722/target.c index e0e4a73e2ad..41ecf6315f0 100644 --- a/src/main/target/HGLRCF722/target.c +++ b/src/main/target/HGLRCF722/target.c @@ -33,8 +33,8 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 UP1-2 D(1, 4, 5) diff --git a/src/main/target/HGLRCF722/target.h b/src/main/target/HGLRCF722/target.h index 348f30d2416..17bea753c84 100644 --- a/src/main/target/HGLRCF722/target.h +++ b/src/main/target/HGLRCF722/target.h @@ -54,6 +54,7 @@ #define IMU_BMI270_ALIGN CW180_DEG_FLIP #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PB2 +#define BMI270_EXTI_PIN PC4 // *************** I2C /Baro/Mag ********************* #define USE_I2C diff --git a/src/main/target/HUMMINGBIRD_FC305/target.c b/src/main/target/HUMMINGBIRD_FC305/target.c index 476d31c71b3..e2fe703a85f 100644 --- a/src/main/target/HUMMINGBIRD_FC305/target.c +++ b/src/main/target/HUMMINGBIRD_FC305/target.c @@ -24,7 +24,7 @@ #include "drivers/bus.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, ICM42605_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); BUSDEV_REGISTER_SPI(busdev_sdcard_spi, DEVHW_SDCARD, SDCARD_SPI_BUS, SDCARD_CS_PIN, NONE, DEVFLAGS_SPI_MODE_0, 0); BUSDEV_REGISTER_SPI(busdev_max7456, DEVHW_MAX7456, MAX7456_SPI_BUS, MAX7456_CS_PIN, NONE, DEVFLAGS_USE_RAW_REGISTERS, 0); BUSDEV_REGISTER_I2C(busdev_dps310_0, DEVHW_DPS310_0, BARO_I2C_BUS, DPS310_I2C_ADDR, NONE, DEVFLAGS_NONE, 0); diff --git a/src/main/target/HUMMINGBIRD_FC305/target.h b/src/main/target/HUMMINGBIRD_FC305/target.h index 7b121a775b2..52fd3e7fddf 100644 --- a/src/main/target/HUMMINGBIRD_FC305/target.h +++ b/src/main/target/HUMMINGBIRD_FC305/target.h @@ -46,6 +46,7 @@ #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_SPI_BUS BUS_SPI2 #define ICM42605_CS_PIN SPI2_NSS_PIN +#define ICM42605_EXTI_PIN PB6 // *************** I2C /Baro/Mag ********************* #define USE_I2C diff --git a/src/main/target/IFLIGHT_BLITZ_F722/target.h b/src/main/target/IFLIGHT_BLITZ_F722/target.h index cea6b4422ac..4ca8a4eaef4 100644 --- a/src/main/target/IFLIGHT_BLITZ_F722/target.h +++ b/src/main/target/IFLIGHT_BLITZ_F722/target.h @@ -35,17 +35,20 @@ #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 // *************** I2C /Baro/Mag ********************* #define USE_I2C diff --git a/src/main/target/IFLIGHT_BLITZ_F722_X1/target.h b/src/main/target/IFLIGHT_BLITZ_F722_X1/target.h index 03196254420..3f346faa721 100644 --- a/src/main/target/IFLIGHT_BLITZ_F722_X1/target.h +++ b/src/main/target/IFLIGHT_BLITZ_F722_X1/target.h @@ -35,6 +35,7 @@ #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW90_DEG_FLIP #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 // ICM42605 @@ -42,6 +43,7 @@ #define IMU_ICM42605_ALIGN CW90_DEG_FLIP #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 // *************** I2C /Baro/Mag ********************* #define USE_I2C diff --git a/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.h b/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.h index 69ea37e5357..e88ae211504 100644 --- a/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.h +++ b/src/main/target/IFLIGHT_BLITZ_F7_AIO/target.h @@ -62,11 +62,13 @@ #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PD0 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PD0 // *************** I2C/Baro/Mag ********************* #define USE_I2C diff --git a/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.c b/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.c index 664ff354b4c..e6245d39288 100644 --- a/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.c +++ b/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.c @@ -26,8 +26,8 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PA8, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { // DEF_TIM(TIM9, CH2, PA3, TIM_USE_PPM, 0, 0), // PPM diff --git a/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.h b/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.h index a5361a51904..7cb714798d8 100644 --- a/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.h +++ b/src/main/target/IFLIGHT_BLITZ_F7_PRO/target.h @@ -47,6 +47,7 @@ #define IMU_BMI270_ALIGN CW0_DEG_FLIP #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PA15 +#define BMI270_EXTI_PIN PA8 // *************** I2C/Baro/Mag ********************* #define USE_I2C diff --git a/src/main/target/IFLIGHT_H743_AIO_V2/target.h b/src/main/target/IFLIGHT_H743_AIO_V2/target.h index a5257993798..90bfae915de 100644 --- a/src/main/target/IFLIGHT_H743_AIO_V2/target.h +++ b/src/main/target/IFLIGHT_H743_AIO_V2/target.h @@ -39,11 +39,13 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PD0 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PD0 #define BMI270_SPI_BUS BUS_SPI1 // *************** I2C1 Baro/Mag ********************* diff --git a/src/main/target/JHEF405PRO/target.h b/src/main/target/JHEF405PRO/target.h index 43547cd2efa..4d288f83a44 100644 --- a/src/main/target/JHEF405PRO/target.h +++ b/src/main/target/JHEF405PRO/target.h @@ -33,6 +33,7 @@ #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW90_DEG #define ICM42605_CS_PIN PB12 +#define ICM42605_EXTI_PIN GYRO_INT_EXTI #define ICM42605_SPI_BUS BUS_SPI1 #define USE_EXTI diff --git a/src/main/target/KAKUTEF4/target.h b/src/main/target/KAKUTEF4/target.h index 92cbcf13414..7dd557ed32b 100644 --- a/src/main/target/KAKUTEF4/target.h +++ b/src/main/target/KAKUTEF4/target.h @@ -50,16 +50,25 @@ #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW270_DEG #define MPU6500_CS_PIN PC4 +#if defined(KAKUTEF4) || defined(KAKUTEF4V2) +#define MPU6500_EXTI_PIN PC5 +#endif #define MPU6500_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN PC4 +#if defined(KAKUTEF4) || defined(KAKUTEF4V2) +#define MPU6000_EXTI_PIN PC5 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_CS_PIN PC4 +#if defined(KAKUTEF4) || defined(KAKUTEF4V2) +#define ICM42605_EXTI_PIN PC5 +#endif #define ICM42605_SPI_BUS BUS_SPI1 #if defined(KAKUTEF4V2) || defined(KAKUTEF4V23) || defined(KAKUTEF4V24) diff --git a/src/main/target/KAKUTEF4WING/target.h b/src/main/target/KAKUTEF4WING/target.h index 70eb125646a..fde9f45fbd8 100644 --- a/src/main/target/KAKUTEF4WING/target.h +++ b/src/main/target/KAKUTEF4WING/target.h @@ -37,7 +37,7 @@ #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PA4 -#define ICM42605_EXTI_PIN PB12 +#define ICM42605_EXTI_PIN PB2 // *************** I2C **************** #define USE_I2C diff --git a/src/main/target/KAKUTEF7/target.h b/src/main/target/KAKUTEF7/target.h index 79f9d079353..45c2b6f2eef 100644 --- a/src/main/target/KAKUTEF7/target.h +++ b/src/main/target/KAKUTEF7/target.h @@ -42,11 +42,13 @@ #define USE_IMU_ICM20689 #define IMU_ICM20689_ALIGN CW270_DEG #define ICM20689_CS_PIN SPI4_NSS_PIN +#define ICM20689_EXTI_PIN PE1 #define ICM20689_SPI_BUS BUS_SPI4 #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN SPI4_NSS_PIN +#define MPU6000_EXTI_PIN PE1 #define MPU6000_SPI_BUS BUS_SPI4 diff --git a/src/main/target/KAKUTEF7MINIV3/target.h b/src/main/target/KAKUTEF7MINIV3/target.h index 89ba7c632b5..3cfb1039921 100644 --- a/src/main/target/KAKUTEF7MINIV3/target.h +++ b/src/main/target/KAKUTEF7MINIV3/target.h @@ -87,6 +87,7 @@ #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN PB2 +#define MPU6000_EXTI_PIN PA4 // ICM42688 #define USE_IMU_ICM42605 diff --git a/src/main/target/KAKUTEH7/target.h b/src/main/target/KAKUTEH7/target.h index 2265abd509a..d218efd36ec 100644 --- a/src/main/target/KAKUTEH7/target.h +++ b/src/main/target/KAKUTEH7/target.h @@ -101,11 +101,13 @@ #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_SPI_BUS BUS_SPI4 #define MPU6000_CS_PIN PE4 +#define MPU6000_EXTI_PIN PE1 //BMI270 #define USE_IMU_BMI270 #define BMI270_SPI_BUS BUS_SPI4 #define BMI270_CS_PIN PE4 +#define BMI270_EXTI_PIN PE1 #ifdef KAKUTEH7MINI #define IMU_BMI270_ALIGN CW270_DEG diff --git a/src/main/target/MAMBAF405US/target.h b/src/main/target/MAMBAF405US/target.h index 1b21fe60e3d..00bfb36523e 100644 --- a/src/main/target/MAMBAF405US/target.h +++ b/src/main/target/MAMBAF405US/target.h @@ -39,11 +39,17 @@ #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN PA4 +#if defined(MAMBAF405US) +#define MPU6000_EXTI_PIN PC4 +#endif #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW180_DEG #define MPU6500_SPI_BUS BUS_SPI1 #define MPU6500_CS_PIN PA4 +#if defined(MAMBAF405US) +#define MPU6500_EXTI_PIN PC4 +#endif // *************** Baro ************************** #define USE_I2C diff --git a/src/main/target/MAMBAF405_2022A/target.h b/src/main/target/MAMBAF405_2022A/target.h index 5a24771288d..843b9440cae 100644 --- a/src/main/target/MAMBAF405_2022A/target.h +++ b/src/main/target/MAMBAF405_2022A/target.h @@ -41,11 +41,13 @@ #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 //MPU6500 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW180_DEG #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 //BMI270 @@ -53,6 +55,7 @@ #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 #ifdef MAMBAF405_2022B @@ -60,6 +63,7 @@ #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #endif diff --git a/src/main/target/MAMBAF722/target.h b/src/main/target/MAMBAF722/target.h index 20e907fa87c..0d8d4d905cd 100644 --- a/src/main/target/MAMBAF722/target.h +++ b/src/main/target/MAMBAF722/target.h @@ -35,6 +35,7 @@ #define BEEPER_INVERTED #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 @@ -44,6 +45,7 @@ #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW180_DEG #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 #define USE_I2C diff --git a/src/main/target/MAMBAF722_2022A/target.h b/src/main/target/MAMBAF722_2022A/target.h index cf834b11ea6..474e304b377 100644 --- a/src/main/target/MAMBAF722_2022A/target.h +++ b/src/main/target/MAMBAF722_2022A/target.h @@ -44,12 +44,14 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 //MPU6500 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW180_DEG #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PC4 #define MPU6500_SPI_BUS BUS_SPI1 //BMI270 @@ -57,6 +59,7 @@ #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 #ifdef MAMBAF722_2022B @@ -64,6 +67,7 @@ #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #endif diff --git a/src/main/target/MAMBAF722_X8/target.h b/src/main/target/MAMBAF722_X8/target.h index 1a89d3bf31f..12048c2dd28 100644 --- a/src/main/target/MAMBAF722_X8/target.h +++ b/src/main/target/MAMBAF722_X8/target.h @@ -31,6 +31,7 @@ #define BEEPER_INVERTED #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 diff --git a/src/main/target/MAMBAH743/target.c b/src/main/target/MAMBAH743/target.c index 30db292ae9f..a5c96fc27d5 100644 --- a/src/main/target/MAMBAH743/target.c +++ b/src/main/target/MAMBAH743/target.c @@ -27,7 +27,7 @@ #include "drivers/sensor.h" BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); #ifdef USE_IMU_ICM42605 BUSDEV_REGISTER_SPI_TAG(busdev_icm42605, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, ICM42605_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); diff --git a/src/main/target/MAMBAH743/target.h b/src/main/target/MAMBAH743/target.h index cac57dfe6f6..fab5a29ac22 100644 --- a/src/main/target/MAMBAH743/target.h +++ b/src/main/target/MAMBAH743/target.h @@ -62,6 +62,7 @@ #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PC4 #define USE_SPI_DEVICE_4 #define SPI4_SCK_PIN PE12 diff --git a/src/main/target/MATEKF405/target.h b/src/main/target/MATEKF405/target.h index a33807c06a5..3c308b63e13 100644 --- a/src/main/target/MATEKF405/target.h +++ b/src/main/target/MATEKF405/target.h @@ -36,9 +36,15 @@ #define SPI1_MOSI_PIN PA7 #define MPU6500_CS_PIN PC2 +#if defined(MATEKF405MINI) +#define MPU6500_EXTI_PIN PC3 +#endif #define MPU6500_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN PC2 +#if defined(MATEKF405MINI) +#define MPU6000_EXTI_PIN PC3 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 diff --git a/src/main/target/MATEKF405SE/target.h b/src/main/target/MATEKF405SE/target.h index 38c8f56f5d9..c31dab3f058 100644 --- a/src/main/target/MATEKF405SE/target.h +++ b/src/main/target/MATEKF405SE/target.h @@ -40,12 +40,16 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN PA4 +#if defined(MATEKF405SE) +#define MPU6000_EXTI_PIN PC4 +#endif #define MPU6000_SPI_BUS BUS_SPI1 // ICM42688P #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG_FLIP #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C /Baro/Mag ********************* diff --git a/src/main/target/MATEKF405TE/target.h b/src/main/target/MATEKF405TE/target.h index fc7c1ad0ce9..808f26607e1 100644 --- a/src/main/target/MATEKF405TE/target.h +++ b/src/main/target/MATEKF405TE/target.h @@ -45,11 +45,13 @@ #define IMU_ICM42605_ALIGN CW270_DEG_FLIP #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PC14 +#define ICM42605_EXTI_PIN PC15 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW270_DEG_FLIP #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PC14 +#define BMI270_EXTI_PIN PC15 diff --git a/src/main/target/MATEKF411/target.h b/src/main/target/MATEKF411/target.h index 6be5949419c..40d5f6143da 100755 --- a/src/main/target/MATEKF411/target.h +++ b/src/main/target/MATEKF411/target.h @@ -38,11 +38,17 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN PA4 +#if defined(MATEKF411) +#define MPU6000_EXTI_PIN PA1 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW180_DEG #define MPU6500_CS_PIN PA4 +#if defined(MATEKF411) +#define MPU6500_EXTI_PIN PA1 +#endif #define MPU6500_SPI_BUS BUS_SPI1 // *************** SPI2 OSD ***************************** diff --git a/src/main/target/MATEKF411SE/target.h b/src/main/target/MATEKF411SE/target.h index db5652e0cac..371937184cd 100755 --- a/src/main/target/MATEKF411SE/target.h +++ b/src/main/target/MATEKF411SE/target.h @@ -37,6 +37,9 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN PA4 +#if defined(MATEKF411SE) +#define MPU6000_EXTI_PIN PA14 +#endif #define MPU6000_SPI_BUS BUS_SPI1 // *************** SPI2 OSD ***************************** diff --git a/src/main/target/MATEKF722/target.h b/src/main/target/MATEKF722/target.h index 1908c6a5b4c..8b535d644ca 100644 --- a/src/main/target/MATEKF722/target.h +++ b/src/main/target/MATEKF722/target.h @@ -38,6 +38,7 @@ #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW180_DEG #define MPU6500_CS_PIN PC2 +#define MPU6500_EXTI_PIN PC3 #define MPU6500_SPI_BUS BUS_SPI1 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/MATEKF722SE/target.c b/src/main/target/MATEKF722SE/target.c index 585f3bb3994..2358427f8e2 100644 --- a/src/main/target/MATEKF722SE/target.c +++ b/src/main/target/MATEKF722SE/target.c @@ -26,8 +26,8 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, NONE, 1, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, PC3, 1, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); timerHardware_t timerHardware[] = { DEF_TIM(TIM3, CH1, PB4, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 UP1-2 D(1, 4, 5) diff --git a/src/main/target/OMNIBUSF4/target.h b/src/main/target/OMNIBUSF4/target.h index af906bb8b12..1abedae9ac1 100644 --- a/src/main/target/OMNIBUSF4/target.h +++ b/src/main/target/OMNIBUSF4/target.h @@ -34,6 +34,7 @@ #define UG2864_I2C_BUS I2C_EXT_BUS #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 diff --git a/src/main/target/PRINCIPIOTF7/target.h b/src/main/target/PRINCIPIOTF7/target.h index 0208f55a361..5e241023fde 100644 --- a/src/main/target/PRINCIPIOTF7/target.h +++ b/src/main/target/PRINCIPIOTF7/target.h @@ -113,6 +113,7 @@ #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW90_DEG #define ICM42605_CS_PIN PB2 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // BARO diff --git a/src/main/target/RADIOLINKF405/target.h b/src/main/target/RADIOLINKF405/target.h index 9a1afd47739..44a170e420d 100644 --- a/src/main/target/RADIOLINKF405/target.h +++ b/src/main/target/RADIOLINKF405/target.h @@ -39,16 +39,19 @@ #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW90_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 #define USE_IMU_MPU6500 #define IMU_MPU6500_ALIGN CW90_DEG #define MPU6500_SPI_BUS BUS_SPI1 #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PC4 // *************** SPI2 OSD **************** #define USE_SPI_DEVICE_2 diff --git a/src/main/target/RADIOLINKF722/target.c b/src/main/target/RADIOLINKF722/target.c index 6ebb384b046..18e99f1182d 100644 --- a/src/main/target/RADIOLINKF722/target.c +++ b/src/main/target/RADIOLINKF722/target.c @@ -28,8 +28,8 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, ICM42688_SPI_BUS, ICM42688_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, ICM42688_SPI_BUS, ICM42688_CS_PIN, ICM42688_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); timerHardware_t timerHardware[] = { diff --git a/src/main/target/RADIOLINKF722/target.h b/src/main/target/RADIOLINKF722/target.h index efa3bdea750..ff8532f90b7 100644 --- a/src/main/target/RADIOLINKF722/target.h +++ b/src/main/target/RADIOLINKF722/target.h @@ -76,12 +76,14 @@ #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42688_SPI_BUS BUS_SPI1 #define ICM42688_CS_PIN PB2 +#define ICM42688_EXTI_PIN PC4 //BMI270 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PB2 +#define BMI270_EXTI_PIN PC4 // *************** I2C(Baro & I2C) ************************** #define USE_I2C diff --git a/src/main/target/REVO/target.h b/src/main/target/REVO/target.h index 713c1a8ce38..1eeff29fbb1 100644 --- a/src/main/target/REVO/target.h +++ b/src/main/target/REVO/target.h @@ -35,6 +35,7 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW270_DEG #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_MAG diff --git a/src/main/target/SEQUREH7/target.h b/src/main/target/SEQUREH7/target.h index 1502aa82cbd..0fc50b0e715 100644 --- a/src/main/target/SEQUREH7/target.h +++ b/src/main/target/SEQUREH7/target.h @@ -121,6 +121,7 @@ #else #define USE_IMU_MPU6000 #define MPU6000_CS_PIN PB12 +#define MPU6000_EXTI_PIN PD0 #define MPU6000_SPI_BUS BUS_SPI2 #define IMU_MPU6000_ALIGN CW0_DEG #endif diff --git a/src/main/target/SKYSTARSF405HD/target.h b/src/main/target/SKYSTARSF405HD/target.h index c3711fcb4c2..166cc332d70 100644 --- a/src/main/target/SKYSTARSF405HD/target.h +++ b/src/main/target/SKYSTARSF405HD/target.h @@ -38,14 +38,23 @@ #define USE_IMU_MPU6000 #define MPU6000_SPI_BUS BUS_SPI1 #define MPU6000_CS_PIN PA4 +#if defined(SKYSTARSF405AIO) +#define MPU6000_EXTI_PIN PC4 +#endif #define USE_IMU_BMI270 #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PA4 +#if defined(SKYSTARSF405AIO) +#define BMI270_EXTI_PIN PC4 +#endif #define USE_IMU_ICM42605 #define ICM42605_SPI_BUS BUS_SPI1 #define ICM42605_CS_PIN PA4 +#if defined(SKYSTARSF405AIO) +#define ICM42605_EXTI_PIN PC4 +#endif // *************** M25P256 flash ******************** #define USE_FLASHFS diff --git a/src/main/target/SKYSTARSF405V2/target.h b/src/main/target/SKYSTARSF405V2/target.h index 1fe4e2614c4..1591e4ff3e3 100644 --- a/src/main/target/SKYSTARSF405V2/target.h +++ b/src/main/target/SKYSTARSF405V2/target.h @@ -37,6 +37,7 @@ #define SPI1_MOSI_PIN PA7 #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW270_DEG diff --git a/src/main/target/SOLOGOODF722/target.h b/src/main/target/SOLOGOODF722/target.h index dd017691ef3..efeec61a896 100644 --- a/src/main/target/SOLOGOODF722/target.h +++ b/src/main/target/SOLOGOODF722/target.h @@ -39,16 +39,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW180_DEG #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW180_DEG #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/SPARKY2/target.h b/src/main/target/SPARKY2/target.h index 78f80cd609d..037055d32d8 100644 --- a/src/main/target/SPARKY2/target.h +++ b/src/main/target/SPARKY2/target.h @@ -34,6 +34,7 @@ #define MPU9250_SPI_BUS BUS_SPI1 #define MPU9250_CS_PIN PC4 +#define MPU9250_EXTI_PIN PC5 #define USE_MAG diff --git a/src/main/target/SPEDIXF405/target.h b/src/main/target/SPEDIXF405/target.h index 3f46890b48d..7b484c5a554 100644 --- a/src/main/target/SPEDIXF405/target.h +++ b/src/main/target/SPEDIXF405/target.h @@ -38,16 +38,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/SPEDIXF722/target.h b/src/main/target/SPEDIXF722/target.h index 511381587a0..c9c4edfbda8 100644 --- a/src/main/target/SPEDIXF722/target.h +++ b/src/main/target/SPEDIXF722/target.h @@ -39,16 +39,19 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN SPI1_NSS_PIN +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_CS_PIN SPI1_NSS_PIN +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/SPEEDYBEEF4/target.h b/src/main/target/SPEEDYBEEF4/target.h index 310f6e9b456..9352a9f6ec3 100644 --- a/src/main/target/SPEEDYBEEF4/target.h +++ b/src/main/target/SPEEDYBEEF4/target.h @@ -30,6 +30,9 @@ /*** MPU6000 ***/ #define USE_IMU_MPU6000 #define MPU6000_CS_PIN PB11 +#if defined(SPEEDYBEEF4) +#define MPU6000_EXTI_PIN PC4 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define IMU_MPU6000_ALIGN CW0_DEG diff --git a/src/main/target/SPEEDYBEEF405MINI/target.h b/src/main/target/SPEEDYBEEF405MINI/target.h index c20ee9aa0ff..52541254a31 100644 --- a/src/main/target/SPEEDYBEEF405MINI/target.h +++ b/src/main/target/SPEEDYBEEF405MINI/target.h @@ -94,6 +94,7 @@ #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 /* diff --git a/src/main/target/SPEEDYBEEF405V3/target.c b/src/main/target/SPEEDYBEEF405V3/target.c index 2a7b6272dae..633f36454f4 100644 --- a/src/main/target/SPEEDYBEEF405V3/target.c +++ b/src/main/target/SPEEDYBEEF405V3/target.c @@ -32,7 +32,7 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); timerHardware_t timerHardware[] = { DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 0, 0), // S1 diff --git a/src/main/target/SPEEDYBEEF405V3/target.h b/src/main/target/SPEEDYBEEF405V3/target.h index 6653ea56c0c..d3a6c5c05d0 100644 --- a/src/main/target/SPEEDYBEEF405V3/target.h +++ b/src/main/target/SPEEDYBEEF405V3/target.h @@ -80,6 +80,7 @@ #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PA4 +#define BMI270_EXTI_PIN PC4 // *************** I2C(Baro & I2C) ************************** #define USE_I2C diff --git a/src/main/target/SPEEDYBEEF405V4/target.c b/src/main/target/SPEEDYBEEF405V4/target.c index 2d398bd1bbe..926589f4482 100644 --- a/src/main/target/SPEEDYBEEF405V4/target.c +++ b/src/main/target/SPEEDYBEEF405V4/target.c @@ -32,7 +32,7 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_icm42688, DEVHW_ICM42605, ICM42605_SPI_BUS, ICM42605_CS_PIN, ICM42605_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_ICM42605_ALIGN); timerHardware_t timerHardware[] = { DEF_TIM(TIM4, CH1, PB6, TIM_USE_OUTPUT_AUTO, 1, 0), // S1 diff --git a/src/main/target/SPEEDYBEEF405V4/target.h b/src/main/target/SPEEDYBEEF405V4/target.h index 1c5c847597f..2130ddde499 100644 --- a/src/main/target/SPEEDYBEEF405V4/target.h +++ b/src/main/target/SPEEDYBEEF405V4/target.h @@ -88,6 +88,7 @@ #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW90_DEG #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C(Baro & I2C) ************************** diff --git a/src/main/target/SPEEDYBEEF7/target.h b/src/main/target/SPEEDYBEEF7/target.h index 032f7479b5b..c5d94cb27ec 100644 --- a/src/main/target/SPEEDYBEEF7/target.h +++ b/src/main/target/SPEEDYBEEF7/target.h @@ -63,6 +63,7 @@ #define IMU_ICM20689_ALIGN CW0_DEG #define ICM20689_CS_PIN PA4 +#define ICM20689_EXTI_PIN PC4 #define ICM20689_SPI_BUS BUS_SPI1 #define SPI1_SCK_PIN PA5 diff --git a/src/main/target/SPEEDYBEEF745AIO/target.h b/src/main/target/SPEEDYBEEF745AIO/target.h index 3e82678f552..f090069f462 100644 --- a/src/main/target/SPEEDYBEEF745AIO/target.h +++ b/src/main/target/SPEEDYBEEF745AIO/target.h @@ -74,6 +74,7 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW90_DEG #define MPU6000_CS_PIN PE4 +#define MPU6000_EXTI_PIN PE1 #define MPU6000_SPI_BUS BUS_SPI4 //BMI270 @@ -81,6 +82,7 @@ #define IMU_BMI270_ALIGN CW90_DEG #define BMI270_SPI_BUS BUS_SPI4 #define BMI270_CS_PIN PE4 +#define BMI270_EXTI_PIN PE1 // *************** I2C(Baro & I2C) ************************** #define USE_I2C diff --git a/src/main/target/SPEEDYBEEF7MINI/target.c b/src/main/target/SPEEDYBEEF7MINI/target.c index 2b0777ab573..b5291e4a968 100644 --- a/src/main/target/SPEEDYBEEF7MINI/target.c +++ b/src/main/target/SPEEDYBEEF7MINI/target.c @@ -27,9 +27,9 @@ #include "drivers/sensor.h" #ifdef SPEEDYBEEF7MINIV2 -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); #else -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); #endif timerHardware_t timerHardware[] = { diff --git a/src/main/target/SPEEDYBEEF7MINI/target.h b/src/main/target/SPEEDYBEEF7MINI/target.h index d267ade336d..49bad659f6c 100644 --- a/src/main/target/SPEEDYBEEF7MINI/target.h +++ b/src/main/target/SPEEDYBEEF7MINI/target.h @@ -45,6 +45,7 @@ #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_CS_PIN PB2 +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 #else diff --git a/src/main/target/SPEEDYBEEF7V2/target.h b/src/main/target/SPEEDYBEEF7V2/target.h index 9dfcdf232b8..222cb1775df 100644 --- a/src/main/target/SPEEDYBEEF7V2/target.h +++ b/src/main/target/SPEEDYBEEF7V2/target.h @@ -70,6 +70,7 @@ #define SPI1_MOSI_PIN PA7 #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_BEEPER diff --git a/src/main/target/SPEEDYBEEF7V3/target.c b/src/main/target/SPEEDYBEEF7V3/target.c index 5d5b064f81d..a10d7d924f0 100644 --- a/src/main/target/SPEEDYBEEF7V3/target.c +++ b/src/main/target/SPEEDYBEEF7V3/target.c @@ -28,8 +28,8 @@ #include "drivers/pinio.h" #include "drivers/sensor.h" -BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, 0, DEVFLAGS_NONE, IMU_BMI270_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, PC4, 0, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); timerHardware_t timerHardware[] = { diff --git a/src/main/target/SPEEDYBEEF7V3/target.h b/src/main/target/SPEEDYBEEF7V3/target.h index 87eeb7114f7..f35d716844b 100644 --- a/src/main/target/SPEEDYBEEF7V3/target.h +++ b/src/main/target/SPEEDYBEEF7V3/target.h @@ -81,6 +81,7 @@ #define IMU_BMI270_ALIGN CW0_DEG_FLIP #define BMI270_SPI_BUS BUS_SPI1 #define BMI270_CS_PIN PC15 +#define BMI270_EXTI_PIN PC3 // *************** I2C(Baro & I2C) ************************** #define USE_I2C diff --git a/src/main/target/SPRACINGF4EVO/target.h b/src/main/target/SPRACINGF4EVO/target.h index 8af6981e54f..1201f18af46 100755 --- a/src/main/target/SPRACINGF4EVO/target.h +++ b/src/main/target/SPRACINGF4EVO/target.h @@ -116,9 +116,11 @@ #define SDCARD_CS_PIN SPI2_NSS_PIN #define MPU6500_CS_PIN SPI1_NSS_PIN +#define MPU6500_EXTI_PIN PC13 #define MPU6500_SPI_BUS BUS_SPI1 #define MPU9250_CS_PIN SPI1_NSS_PIN +#define MPU9250_EXTI_PIN PC13 #define MPU9250_SPI_BUS BUS_SPI1 #define USE_ADC diff --git a/src/main/target/SPRACINGF7DUAL/target.c b/src/main/target/SPRACINGF7DUAL/target.c index ead356956a4..94231637271 100644 --- a/src/main/target/SPRACINGF7DUAL/target.c +++ b/src/main/target/SPRACINGF7DUAL/target.c @@ -30,8 +30,8 @@ #include "drivers/sensor.h" // Register both MPU6500 -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_1, DEVHW_MPU6500, MPU6500_1_SPI_BUS, MPU6500_1_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_1_ALIGN); -BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_2, DEVHW_MPU6500, MPU6500_2_SPI_BUS, MPU6500_2_CS_PIN, NONE, 0, DEVFLAGS_NONE, IMU_2_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_1, DEVHW_MPU6500, MPU6500_1_SPI_BUS, MPU6500_1_CS_PIN, PC13, 0, DEVFLAGS_NONE, IMU_1_ALIGN); +BUSDEV_REGISTER_SPI_TAG(busdev_mpu6500_2, DEVHW_MPU6500, MPU6500_2_SPI_BUS, MPU6500_2_CS_PIN, PC14, 0, DEVFLAGS_NONE, IMU_2_ALIGN); timerHardware_t timerHardware[] = { diff --git a/src/main/target/TAKERF722SE/target.h b/src/main/target/TAKERF722SE/target.h index 599d5610ad4..f2da5225824 100644 --- a/src/main/target/TAKERF722SE/target.h +++ b/src/main/target/TAKERF722SE/target.h @@ -98,12 +98,14 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // *************** I2C/Baro/Mag ********************* diff --git a/src/main/target/TMOTORF7/target.h b/src/main/target/TMOTORF7/target.h index a62b42d0990..acbaaaa45e2 100644 --- a/src/main/target/TMOTORF7/target.h +++ b/src/main/target/TMOTORF7/target.h @@ -42,16 +42,25 @@ #define USE_IMU_MPU6000 #define IMU_MPU6000_ALIGN CW0_DEG #define MPU6000_CS_PIN PA4 +#if defined(TMOTORF7) +#define MPU6000_EXTI_PIN PC4 +#endif #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_CS_PIN PA4 +#ifdef TMOTORF7 +#define ICM42605_EXTI_PIN PC4 +#endif #define ICM42605_SPI_BUS BUS_SPI1 #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW0_DEG #define BMI270_CS_PIN PA4 +#ifdef TMOTORF7 +#define BMI270_EXTI_PIN PC4 +#endif #define BMI270_SPI_BUS BUS_SPI1 // *************** I2C Mag ********************* diff --git a/src/main/target/TMOTORF7V2/target.h b/src/main/target/TMOTORF7V2/target.h index f5def98a403..fe42ebc07e4 100644 --- a/src/main/target/TMOTORF7V2/target.h +++ b/src/main/target/TMOTORF7V2/target.h @@ -62,6 +62,7 @@ #define SPI1_MOSI_PIN PA7 #define MPU6000_CS_PIN PA4 +#define MPU6000_EXTI_PIN PC4 #define MPU6000_SPI_BUS BUS_SPI1 #define USE_IMU_MPU6000 @@ -70,6 +71,7 @@ #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW0_DEG #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // OSD -- SPI2 diff --git a/src/main/target/TMOTORVELOXF7V2/target.h b/src/main/target/TMOTORVELOXF7V2/target.h index 09f30857ec8..9207e5e88e5 100644 --- a/src/main/target/TMOTORVELOXF7V2/target.h +++ b/src/main/target/TMOTORVELOXF7V2/target.h @@ -50,6 +50,7 @@ #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_CS_PIN PB2 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 diff --git a/src/main/target/TUNERCF405/target.h b/src/main/target/TUNERCF405/target.h index b359545e697..48ad9e90604 100644 --- a/src/main/target/TUNERCF405/target.h +++ b/src/main/target/TUNERCF405/target.h @@ -43,6 +43,7 @@ #define USE_IMU_BMI270 #define IMU_BMI270_ALIGN CW180_DEG #define BMI270_CS_PIN SPI1_NSS_PIN +#define BMI270_EXTI_PIN PC4 #define BMI270_SPI_BUS BUS_SPI1 // OSD diff --git a/src/main/target/WARPF7/target.h b/src/main/target/WARPF7/target.h index e06d6e2ae1d..b535af98f33 100644 --- a/src/main/target/WARPF7/target.h +++ b/src/main/target/WARPF7/target.h @@ -107,6 +107,7 @@ #define USE_IMU_ICM42605 #define IMU_ICM42605_ALIGN CW270_DEG #define ICM42605_CS_PIN PA4 +#define ICM42605_EXTI_PIN PC4 #define ICM42605_SPI_BUS BUS_SPI1 // BARO diff --git a/src/main/target/common.h b/src/main/target/common.h index 5239e5ac65e..1096b56b74a 100644 --- a/src/main/target/common.h +++ b/src/main/target/common.h @@ -18,7 +18,7 @@ #pragma once // SPI reads started by a device's data-ready interrupt (drivers/bus_spi_data_ready.c) -#if defined(STM32H7) +#if defined(STM32F4) || defined(STM32F7) || defined(STM32H7) #define USE_SPI_DATA_READY #endif diff --git a/src/main/target/common_hardware.c b/src/main/target/common_hardware.c index bb3bef5b419..197dfb193c2 100755 --- a/src/main/target/common_hardware.c +++ b/src/main/target/common_hardware.c @@ -30,12 +30,18 @@ #endif #if defined(USE_IMU_MPU6000) - BUSDEV_REGISTER_SPI(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, NONE, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); + #if !defined(MPU6000_EXTI_PIN) + #define MPU6000_EXTI_PIN NONE + #endif + BUSDEV_REGISTER_SPI(busdev_mpu6000, DEVHW_MPU6000, MPU6000_SPI_BUS, MPU6000_CS_PIN, MPU6000_EXTI_PIN, DEVFLAGS_NONE, IMU_MPU6000_ALIGN); #endif #if defined(USE_IMU_MPU6500) #if defined(MPU6500_SPI_BUS) - BUSDEV_REGISTER_SPI(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, NONE, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); + #if !defined(MPU6500_EXTI_PIN) + #define MPU6500_EXTI_PIN NONE + #endif + BUSDEV_REGISTER_SPI(busdev_mpu6500, DEVHW_MPU6500, MPU6500_SPI_BUS, MPU6500_CS_PIN, MPU6500_EXTI_PIN, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); #elif defined(MPU6500_I2C_BUS) BUSDEV_REGISTER_I2C(busdev_mpu6500, DEVHW_MPU6500, MPU6500_I2C_BUS, MPU_ADDRESS, NONE, DEVFLAGS_NONE, IMU_MPU6500_ALIGN); #endif @@ -43,14 +49,20 @@ #if defined(USE_IMU_MPU9250) #if defined(MPU9250_SPI_BUS) - BUSDEV_REGISTER_SPI(busdev_mpu9250, DEVHW_MPU9250, MPU9250_SPI_BUS, MPU9250_CS_PIN, NONE, DEVFLAGS_NONE, IMU_MPU9250_ALIGN); + #if !defined(MPU9250_EXTI_PIN) + #define MPU9250_EXTI_PIN NONE + #endif + BUSDEV_REGISTER_SPI(busdev_mpu9250, DEVHW_MPU9250, MPU9250_SPI_BUS, MPU9250_CS_PIN, MPU9250_EXTI_PIN, DEVFLAGS_NONE, IMU_MPU9250_ALIGN); #elif defined(MPU9250_I2C_BUS) BUSDEV_REGISTER_I2C(busdev_mpu9250, DEVHW_MPU9250, MPU9250_I2C_BUS, MPU_ADDRESS, NONE, DEVFLAGS_NONE, IMU_MPU9250_ALIGN); #endif #endif #if defined(USE_IMU_ICM20689) - BUSDEV_REGISTER_SPI(busdev_icm20689, DEVHW_ICM20689, ICM20689_SPI_BUS, ICM20689_CS_PIN, NONE, DEVFLAGS_NONE, IMU_ICM20689_ALIGN); + #if !defined(ICM20689_EXTI_PIN) + #define ICM20689_EXTI_PIN NONE + #endif + BUSDEV_REGISTER_SPI(busdev_icm20689, DEVHW_ICM20689, ICM20689_SPI_BUS, ICM20689_CS_PIN, ICM20689_EXTI_PIN, DEVFLAGS_NONE, IMU_ICM20689_ALIGN); #endif #if defined(USE_IMU_ICM42605) @@ -78,15 +90,24 @@ #endif #if defined(USE_IMU_BMI270) - BUSDEV_REGISTER_SPI(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, NONE, DEVFLAGS_NONE, IMU_BMI270_ALIGN); + #if !defined(BMI270_EXTI_PIN) + #define BMI270_EXTI_PIN NONE + #endif + BUSDEV_REGISTER_SPI(busdev_bmi270, DEVHW_BMI270, BMI270_SPI_BUS, BMI270_CS_PIN, BMI270_EXTI_PIN, DEVFLAGS_NONE, IMU_BMI270_ALIGN); #endif #if defined(USE_IMU_LSM6DXX) - BUSDEV_REGISTER_SPI(busdev_lsm6dxx, DEVHW_LSM6D, LSM6DXX_SPI_BUS, LSM6DXX_CS_PIN, NONE, DEVFLAGS_NONE, IMU_LSM6DXX_ALIGN); + #if !defined(LSM6DXX_EXTI_PIN) + #define LSM6DXX_EXTI_PIN NONE + #endif + BUSDEV_REGISTER_SPI(busdev_lsm6dxx, DEVHW_LSM6D, LSM6DXX_SPI_BUS, LSM6DXX_CS_PIN, LSM6DXX_EXTI_PIN, DEVFLAGS_NONE, IMU_LSM6DXX_ALIGN); #endif #if defined(USE_IMU_ICM45686) - BUSDEV_REGISTER_SPI(busdev_icm45686, DEVHW_ICM45686, ICM45686_SPI_BUS, ICM45686_CS_PIN, NONE, DEVFLAGS_NONE, IMU_ICM45686_ALIGN); + #if !defined(ICM45686_EXTI_PIN) + #define ICM45686_EXTI_PIN NONE + #endif + BUSDEV_REGISTER_SPI(busdev_icm45686, DEVHW_ICM45686, ICM45686_SPI_BUS, ICM45686_CS_PIN, ICM45686_EXTI_PIN, DEVFLAGS_NONE, IMU_ICM45686_ALIGN); #endif #endif