From e0214ee51b560c0ab0d46d21729fe773d323eb1a Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Tue, 16 Jul 2019 09:42:49 +0200 Subject: [PATCH] Heartbeat used on X10 --- radio/src/pulses/pulses.cpp | 2 ++ radio/src/targets/common/arm/stm32/heartbeat_driver.cpp | 6 +++--- radio/src/targets/horus/hal.h | 7 ++++++- radio/src/targets/taranis/hal.h | 1 + radio/src/tasks.cpp | 4 ++-- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/radio/src/pulses/pulses.cpp b/radio/src/pulses/pulses.cpp index b7fac3ab1..f7984604c 100755 --- a/radio/src/pulses/pulses.cpp +++ b/radio/src/pulses/pulses.cpp @@ -311,7 +311,9 @@ void setupPulsesInternalModule(uint8_t protocol) #if defined(PXX1) && defined(INTMODULE_USART) case PROTOCOL_CHANNELS_PXX1_SERIAL: intmodulePulsesData.pxx_uart.setupFrame(INTERNAL_MODULE); +#if !defined(INTMODULE_HEARTBEAT) scheduleNextMixerCalculation(INTERNAL_MODULE, INTMODULE_PXX1_SERIAL_PERIOD); +#endif break; #endif diff --git a/radio/src/targets/common/arm/stm32/heartbeat_driver.cpp b/radio/src/targets/common/arm/stm32/heartbeat_driver.cpp index c5845551e..926c05c63 100644 --- a/radio/src/targets/common/arm/stm32/heartbeat_driver.cpp +++ b/radio/src/targets/common/arm/stm32/heartbeat_driver.cpp @@ -39,7 +39,7 @@ void init_intmodule_heartbeat() EXTI_StructInit(&EXTI_InitStructure); EXTI_InitStructure.EXTI_Line = INTMODULE_HEARTBEAT_EXTI_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; - EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; + EXTI_InitStructure.EXTI_Trigger = INTMODULE_HEARTBEAT_TRIGGER; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); @@ -60,7 +60,7 @@ void stop_intmodule_heartbeat() EXTI_StructInit(&EXTI_InitStructure); EXTI_InitStructure.EXTI_Line = INTMODULE_HEARTBEAT_EXTI_LINE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; - EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; + EXTI_InitStructure.EXTI_Trigger = INTMODULE_HEARTBEAT_TRIGGER; EXTI_InitStructure.EXTI_LineCmd = DISABLE; EXTI_Init(&EXTI_InitStructure); } @@ -68,7 +68,7 @@ void stop_intmodule_heartbeat() void check_intmodule_heartbeat() { if (EXTI_GetITStatus(INTMODULE_HEARTBEAT_EXTI_LINE) != RESET) { -#if defined(PXX2) +#if defined(INTMODULE_USART) heartbeatCapture.timestamp = RTOS_GET_MS(); #else heartbeatCapture.timestamp = getTmr2MHz(); diff --git a/radio/src/targets/horus/hal.h b/radio/src/targets/horus/hal.h index d9d6360eb..c49b1e9ea 100644 --- a/radio/src/targets/horus/hal.h +++ b/radio/src/targets/horus/hal.h @@ -628,7 +628,7 @@ #define EXTMODULE_DMA_FLAG_TC DMA_IT_TCIF7 #endif -// Heartbeat (not used) +// Heartbeat #define INTMODULE_HEARTBEAT #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD #define INTMODULE_HEARTBEAT_GPIO GPIOD @@ -638,6 +638,11 @@ #define INTMODULE_HEARTBEAT_EXTI_LINE EXTI_Line12 #define INTMODULE_HEARTBEAT_EXTI_IRQn EXTI15_10_IRQn #define INTMODULE_HEARTBEAT_REUSE_INTERRUPT_ROTARY_ENCODER +#if defined(PXX2) +#define INTMODULE_HEARTBEAT_TRIGGER EXTI_Trigger_Falling +#else +#define INTMODULE_HEARTBEAT_TRIGGER EXTI_Trigger_Rising +#endif // Trainer Port #define TRAINER_RCC_AHB1Periph (RCC_AHB1Periph_GPIOB | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_DMA1) diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index 604ea7e8f..69017442b 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -1183,6 +1183,7 @@ #endif // Heartbeat for iXJT / ISRM synchro +#define INTMODULE_HEARTBEAT_TRIGGER EXTI_Trigger_Falling #if defined(PCBXLITE) #define INTMODULE_HEARTBEAT #define INTMODULE_HEARTBEAT_RCC_AHB1Periph RCC_AHB1Periph_GPIOD diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index 8fb1f6107..449d61db5 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -141,8 +141,8 @@ TASK_FUNCTION(mixerTask) run = true; } -#if defined(PXX2) && defined(INTMODULE_HEARTBEAT) - if (moduleState[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX2_HIGHSPEED && heartbeatCapture.valid && heartbeatCapture.timestamp > lastRunTime) { +#if defined(INTMODULE_USART) && defined(INTMODULE_HEARTBEAT) + if ((moduleState[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX2_HIGHSPEED || moduleState[INTERNAL_MODULE].protocol == PROTOCOL_CHANNELS_PXX1_SERIAL) && heartbeatCapture.valid && heartbeatCapture.timestamp > lastRunTime) { run = true; } #endif