From 76a7674272d89fd9dad5919caf14fdbbff5efdd6 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Mon, 23 Dec 2013 15:18:00 +0100 Subject: [PATCH] [Taranis] Best fix for the audio freeze by Mike, thanks! --- src/audio_arm.cpp | 6 +++++- src/targets/taranis/audio_driver.cpp | 3 --- 2 files changed, 5 insertions(+), 4 deletions(-) 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; } }