Browse Source

register SPI interrupt when playing WAV & RAW files

dds
PaulStoffregen 10 years ago
parent
commit
fe2286932b
3 changed files with 9 additions and 1 deletions
  1. +4
    -0
      play_sd_raw.cpp
  2. +4
    -0
      play_sd_wav.cpp
  3. +1
    -1
      spi_interrupt.h

+ 4
- 0
play_sd_raw.cpp View File

@@ -25,6 +25,7 @@
*/

#include "play_sd_raw.h"
#include "spi_interrupt.h"


void AudioPlaySdRaw::begin(void)
@@ -38,6 +39,7 @@ void AudioPlaySdRaw::begin(void)
bool AudioPlaySdRaw::play(const char *filename)
{
stop();
AudioStartUsingSPI();
__disable_irq();
rawfile = SD.open(filename);
__enable_irq();
@@ -59,6 +61,7 @@ void AudioPlaySdRaw::stop(void)
playing = false;
__enable_irq();
rawfile.close();
AudioStopUsingSPI();
} else {
__enable_irq();
}
@@ -87,6 +90,7 @@ void AudioPlaySdRaw::update(void)
transmit(block);
} else {
rawfile.close();
AudioStopUsingSPI();
playing = false;
}
release(block);

+ 4
- 0
play_sd_wav.cpp View File

@@ -25,6 +25,7 @@
*/

#include "play_sd_wav.h"
#include "spi_interrupt.h"

#define STATE_DIRECT_8BIT_MONO 0 // playing mono at native sample rate
#define STATE_DIRECT_8BIT_STEREO 1 // playing stereo at native sample rate
@@ -59,6 +60,7 @@ void AudioPlaySdWav::begin(void)
bool AudioPlaySdWav::play(const char *filename)
{
stop();
AudioStartUsingSPI();
__disable_irq();
wavfile = SD.open(filename);
__enable_irq();
@@ -85,6 +87,7 @@ void AudioPlaySdWav::stop(void)
if (b1) release(b1);
if (b2) release(b2);
wavfile.close();
AudioStopUsingSPI();
} else {
__enable_irq();
}
@@ -140,6 +143,7 @@ void AudioPlaySdWav::update(void)
}
end: // end of file reached or other reason to stop
wavfile.close();
AudioStopUsingSPI();
state_play = STATE_STOP;
state = STATE_STOP;
cleanup:

+ 1
- 1
spi_interrupt.h View File

@@ -43,7 +43,7 @@ static inline void AudioStartUsingSPI(void) {
}

static inline void AudioStopUsingSPI(void) {
if (--AudioUsingSPICount == 0)
if (AudioUsingSPICount == 0 || --AudioUsingSPICount == 0)
SPI.notUsingInterrupt(IRQ_SOFTWARE);
}


Loading…
Cancel
Save