diff --git a/src/audio_arm.cpp b/src/audio_arm.cpp index 428e75856..c3d311514 100644 --- a/src/audio_arm.cpp +++ b/src/audio_arm.cpp @@ -325,11 +325,15 @@ void AudioQueue::pushBuffer(AudioBuffer *buffer) { buffer->state = AUDIO_BUFFER_FILLED; + __disable_irq(); + + bufferWIdx = nextBufferIdx(bufferWIdx); + if (dacQueue(buffer)) { buffer->state = AUDIO_BUFFER_PLAYING; } - bufferWIdx = nextBufferIdx(bufferWIdx); + __enable_irq(); } void mix(uint16_t * result, int sample, unsigned int fade) diff --git a/src/targets/taranis/audio_driver.cpp b/src/targets/taranis/audio_driver.cpp index 5dc714fd5..d0b0508aa 100644 --- a/src/targets/taranis/audio_driver.cpp +++ b/src/targets/taranis/audio_driver.cpp @@ -95,10 +95,8 @@ void dacInit() bool dacQueue(AudioBuffer *buffer) { - __disable_irq(); if (dacIdle) { dacIdle = false; - __enable_irq(); DMA1_Stream5->CR &= ~DMA_SxCR_EN ; // Disable DMA channel DMA1->HIFCR = DMA_HIFCR_CTCIF5 | DMA_HIFCR_CHTIF5 | DMA_HIFCR_CTEIF5 | DMA_HIFCR_CDMEIF5 | DMA_HIFCR_CFEIF5 ; // Write ones to clear bits DMA1_Stream5->M0AR = CONVERT_PTR(buffer->data); @@ -109,7 +107,6 @@ bool dacQueue(AudioBuffer *buffer) return true; } else { - __enable_irq(); return false; } }