diff --git a/src/main/drivers/exti.c b/src/main/drivers/exti.c index 5d0812547c..9e7d96f510 100644 --- a/src/main/drivers/exti.c +++ b/src/main/drivers/exti.c @@ -36,13 +36,13 @@ typedef struct { extiChannelRec_t extiChannelRecs[16]; -// IRQ gouping, same on F103, F303, F40x, F7xx and H7xx. +// IRQ gouping, same on F103, F303, F40x, F7xx, H7xx and G4xx. #define EXTI_IRQ_GROUPS 7 // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 static const uint8_t extiGroups[16] = { 0, 1, 2, 3, 4, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6 }; static uint8_t extiGroupPriority[EXTI_IRQ_GROUPS]; -#if defined(STM32F1) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) +#if defined(STM32F1) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4) static const uint8_t extiGroupIRQn[EXTI_IRQ_GROUPS] = { EXTI0_IRQn, EXTI1_IRQn, @@ -67,7 +67,7 @@ static const uint8_t extiGroupIRQn[EXTI_IRQ_GROUPS] = { #endif static uint32_t triggerLookupTable[] = { -#if defined(STM32F7) || defined(STM32H7) +#if defined(STM32F7) || defined(STM32H7) || defined(STM32G4) [BETAFLIGHT_EXTI_TRIGGER_RISING] = GPIO_MODE_IT_RISING, [BETAFLIGHT_EXTI_TRIGGER_FALLING] = GPIO_MODE_IT_FALLING, [BETAFLIGHT_EXTI_TRIGGER_BOTH] = GPIO_MODE_IT_RISING_FALLING @@ -85,6 +85,9 @@ static uint32_t triggerLookupTable[] = { #if defined(STM32H7) #define EXTI_REG_IMR (EXTI_D1->IMR1) #define EXTI_REG_PR (EXTI_D1->PR1) +#elif defined(STM32G4) +#define EXTI_REG_IMR (EXTI->IMR1) +#define EXTI_REG_PR (EXTI->PR1) #else #define EXTI_REG_IMR (EXTI->IMR) #define EXTI_REG_PR (EXTI->PR) @@ -128,7 +131,7 @@ void EXTIConfig(IO_t io, extiCallbackRec_t *cb, int irqPriority, ioConfig_t conf extiChannelRec_t *rec = &extiChannelRecs[chIdx]; rec->handler = cb; -#if defined(STM32F7) || defined(STM32H7) +#if defined(STM32F7) || defined(STM32H7) || defined(STM32G4) GPIO_InitTypeDef init = { .Pin = IO_Pin(io), .Mode = GPIO_MODE_INPUT | IO_CONFIG_GET_MODE(config) | triggerLookupTable[trigger], @@ -197,7 +200,7 @@ void EXTIRelease(IO_t io) void EXTIEnable(IO_t io, bool enable) { -#if defined(STM32F1) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) +#if defined(STM32F1) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4) uint32_t extiLine = IO_EXTI_Line(io); if (!extiLine) { @@ -254,7 +257,7 @@ void EXTI_IRQHandler(void) _EXTI_IRQ_HANDLER(EXTI0_IRQHandler); _EXTI_IRQ_HANDLER(EXTI1_IRQHandler); -#if defined(STM32F1) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) +#if defined(STM32F1) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4) _EXTI_IRQ_HANDLER(EXTI2_IRQHandler); #elif defined(STM32F3) _EXTI_IRQ_HANDLER(EXTI2_TS_IRQHandler); diff --git a/src/main/drivers/io.h b/src/main/drivers/io.h index 48b9555d0c..9c20347a10 100644 --- a/src/main/drivers/io.h +++ b/src/main/drivers/io.h @@ -98,7 +98,7 @@ # warning "Unknown TARGET" #endif -#if defined(STM32F7) || defined(STM32H7) +#if defined(STM32F7) || defined(STM32H7) || defined(STM32G4) // Expose these for EXTIConfig #define IO_CONFIG_GET_MODE(cfg) (((cfg) >> 0) & 0x03) #define IO_CONFIG_GET_SPEED(cfg) (((cfg) >> 2) & 0x03)