From cfc7c0ea86242b5c10dc18cf4560246b706111e3 Mon Sep 17 00:00:00 2001 From: 3djc Date: Tue, 11 May 2021 18:15:25 +0200 Subject: [PATCH] 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