diff --git a/src/audio_arm.cpp b/src/audio_arm.cpp index 8b6bf9b44..428e75856 100644 --- a/src/audio_arm.cpp +++ b/src/audio_arm.cpp @@ -325,8 +325,9 @@ void AudioQueue::pushBuffer(AudioBuffer *buffer) { buffer->state = AUDIO_BUFFER_FILLED; - if (dacQueue(buffer)) + if (dacQueue(buffer)) { buffer->state = AUDIO_BUFFER_PLAYING; + } bufferWIdx = nextBufferIdx(bufferWIdx); } diff --git a/src/targets/taranis/audio_driver.cpp b/src/targets/taranis/audio_driver.cpp index d0b0508aa..5dc714fd5 100644 --- a/src/targets/taranis/audio_driver.cpp +++ b/src/targets/taranis/audio_driver.cpp @@ -95,8 +95,10 @@ 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); @@ -107,6 +109,7 @@ bool dacQueue(AudioBuffer *buffer) return true; } else { + __enable_irq(); return false; } }