From 0f242f556569ada998da490300711740ae6e23b2 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 23 Dec 2013 10:42:57 +0100 Subject: [PATCH] [Taranis] No more audio freeze! --- src/audio_arm.cpp | 3 ++- src/targets/taranis/audio_driver.cpp | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) 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; } }