From cfc7c0ea86242b5c10dc18cf4560246b706111e3 Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 11 May 2021 18:15:25 +0200 Subject: [PATCH 1/4] Improved sync --- radio/src/mixer_scheduler.cpp | 6 +++++- radio/src/mixer_scheduler.h | 4 ++++ .../src/targets/common/arm/stm32/mixer_scheduler_driver.cpp | 4 +++- radio/src/tasks.cpp | 1 + 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/radio/src/mixer_scheduler.cpp b/radio/src/mixer_scheduler.cpp index dcf95383b..fef9034c0 100644 --- a/radio/src/mixer_scheduler.cpp +++ b/radio/src/mixer_scheduler.cpp @@ -68,9 +68,13 @@ void mixerSchedulerSetPeriod(uint8_t moduleIdx, uint16_t periodUs) mixerSchedules[moduleIdx].period = periodUs; } -bool mixerSchedulerWaitForTrigger(uint8_t timeoutMs) +void mixerSchedulerClearTrigger() { RTOS_CLEAR_FLAG(mixerFlag); +} + +bool mixerSchedulerWaitForTrigger(uint8_t timeoutMs) +{ return RTOS_WAIT_FLAG(mixerFlag, timeoutMs); } diff --git a/radio/src/mixer_scheduler.h b/radio/src/mixer_scheduler.h index 601f3fcd7..75a6ad1aa 100644 --- a/radio/src/mixer_scheduler.h +++ b/radio/src/mixer_scheduler.h @@ -43,6 +43,9 @@ void mixerSchedulerResetTimer(); // Set the scheduling period for a given module void mixerSchedulerSetPeriod(uint8_t moduleIdx, uint16_t periodUs); +// Clear the flag before waiting +void mixerSchedulerClearTrigger(); + // Wait for the scheduler timer to trigger // returns true if timeout, false otherwise bool mixerSchedulerWaitForTrigger(uint8_t timeoutMs); @@ -66,6 +69,7 @@ void mixerSchedulerISRTrigger(); #define mixerSchedulerStop() #define mixerSchedulerResetTimer() #define mixerSchedulerSetPeriod(m,p) +#define mixerSchedulerClearTrigger() static inline bool mixerSchedulerWaitForTrigger(uint8_t timeout) { diff --git a/radio/src/targets/common/arm/stm32/mixer_scheduler_driver.cpp b/radio/src/targets/common/arm/stm32/mixer_scheduler_driver.cpp index 7f7b23a1c..f89548fd2 100644 --- a/radio/src/targets/common/arm/stm32/mixer_scheduler_driver.cpp +++ b/radio/src/targets/common/arm/stm32/mixer_scheduler_driver.cpp @@ -39,8 +39,9 @@ void mixerSchedulerStart() NVIC_SetPriority(MIXER_SCHEDULER_TIMER_IRQn, 8); MIXER_SCHEDULER_TIMER->SR &= TIM_SR_UIF; // clear interrupt flag - MIXER_SCHEDULER_TIMER->DIER |= TIM_DIER_UIE; // enable interrupt MIXER_SCHEDULER_TIMER->CR1 |= TIM_CR1_CEN; + + mixerSchedulerEnableTrigger(); } void mixerSchedulerStop() @@ -58,6 +59,7 @@ void mixerSchedulerResetTimer() void mixerSchedulerEnableTrigger() { + mixerSchedulerClearTrigger(); MIXER_SCHEDULER_TIMER->DIER |= TIM_DIER_UIE; // enable interrupt } diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index 4878535fd..aa3ec3974 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -136,6 +136,7 @@ TASK_FUNCTION(mixerTask) s_pulses_paused = true; mixerSchedulerInit(); + #if !defined(PCBSKY9X) mixerSchedulerStart(); #endif From 1703ffc06126e137dac8fbd5c7b9fbc93ab05024 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 12 May 2021 17:48:31 +0200 Subject: [PATCH 2/4] latency improve --- radio/src/tasks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index aa3ec3974..14fb0d92e 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -143,8 +143,8 @@ TASK_FUNCTION(mixerTask) while (true) { for (int timeout = 0; timeout < MIXER_MAX_PERIOD; timeout += MIXER_FREQUENT_ACTIONS_PERIOD) { - bool interruptedByTimeout = mixerSchedulerWaitForTrigger(MIXER_FREQUENT_ACTIONS_PERIOD); execMixerFrequentActions(); + bool interruptedByTimeout = mixerSchedulerWaitForTrigger(MIXER_FREQUENT_ACTIONS_PERIOD); if (!interruptedByTimeout) { break; } From d695719262922a89b8acdb3e7efbe1bdf0cbecc7 Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 12 May 2021 17:52:03 +0200 Subject: [PATCH 3/4] Cosmetics --- radio/src/targets/common/arm/stm32/mixer_scheduler_driver.cpp | 3 ++- radio/src/tasks.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/radio/src/targets/common/arm/stm32/mixer_scheduler_driver.cpp b/radio/src/targets/common/arm/stm32/mixer_scheduler_driver.cpp index f89548fd2..79e5c7bd0 100644 --- a/radio/src/targets/common/arm/stm32/mixer_scheduler_driver.cpp +++ b/radio/src/targets/common/arm/stm32/mixer_scheduler_driver.cpp @@ -41,6 +41,7 @@ void mixerSchedulerStart() MIXER_SCHEDULER_TIMER->SR &= TIM_SR_UIF; // clear interrupt flag MIXER_SCHEDULER_TIMER->CR1 |= TIM_CR1_CEN; + mixerSchedulerClearTrigger(); mixerSchedulerEnableTrigger(); } @@ -54,12 +55,12 @@ void mixerSchedulerResetTimer() { mixerSchedulerDisableTrigger(); MIXER_SCHEDULER_TIMER->CNT = 0; + mixerSchedulerClearTrigger(); mixerSchedulerEnableTrigger(); } void mixerSchedulerEnableTrigger() { - mixerSchedulerClearTrigger(); MIXER_SCHEDULER_TIMER->DIER |= TIM_DIER_UIE; // enable interrupt } diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index 14fb0d92e..692ae6d27 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -157,6 +157,7 @@ TASK_FUNCTION(mixerTask) #if !defined(PCBSKY9X) // re-enable trigger + mixerSchedulerClearTrigger(); mixerSchedulerEnableTrigger(); #endif From 266ec075d89938d88168b06e9875a646093268fe Mon Sep 17 00:00:00 2001 From: 3djc Date: Wed, 12 May 2021 17:55:45 +0200 Subject: [PATCH 4/4] Cosmetics --- radio/src/tasks.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/radio/src/tasks.cpp b/radio/src/tasks.cpp index 692ae6d27..a0f7384a9 100644 --- a/radio/src/tasks.cpp +++ b/radio/src/tasks.cpp @@ -156,7 +156,6 @@ TASK_FUNCTION(mixerTask) #endif #if !defined(PCBSKY9X) - // re-enable trigger mixerSchedulerClearTrigger(); mixerSchedulerEnableTrigger(); #endif