Further development of the external memory, correct naming issue with teh examples

master
Steve Lascos 7 years ago
parent 6816a08dc6
commit 9fabb92d0d
  1. 0
      examples/0_TGA_Pro_TRY_FIRST/0_TGA_Pro_nolib_demo.ino
  2. 0
      examples/1_TGA_Pro_demo/1_TGA_Pro_demo.ino
  3. 0
      examples/2_TGA_Pro_1MEM/2_TGA_Pro_1MEM.ino
  4. 0
      examples/3_TGA_Pro_2MEM/3_TGA_Pro_2MEM.ino
  5. 0
      examples/4_TGA_Pro_delay_reverb/4_TGA_Pro_delay_reverb.ino
  6. 0
      examples/5_TGA_Pro_ExternalDelay_demo/5_TGA_Pro_ExternalDelay_demo.ino
  7. 61
      src/BAAudioEffectDelayExternal.cpp
  8. 20
      src/BAAudioEffectDelayExternal.h

@ -36,17 +36,18 @@ struct MemSpiConfig {
constexpr MemSpiConfig Mem0Config = {7, 8, 14, 15, 65536 };
constexpr MemSpiConfig Mem1Config = {21, 5, 20, 31, 65536 };
unsigned BAAudioEffectDelayExternal::m_usingSPICount[2] = {0,0};
BAAudioEffectDelayExternal::BAAudioEffectDelayExternal()
: AudioStream(1, inputQueueArray)
{
initialize(MemSelect::MEM0, Mem0Config.memSize);
initialize(MemSelect::MEM0);
}
BAAudioEffectDelayExternal::BAAudioEffectDelayExternal(MemSelect mem, float milliseconds)
BAAudioEffectDelayExternal::BAAudioEffectDelayExternal(MemSelect mem)
: AudioStream(1, inputQueueArray)
{
uint32_t n = (milliseconds*(AUDIO_SAMPLE_RATE_EXACT/1000.0f))+0.5f;
initialize(mem, n);
initialize(mem);
}
void BAAudioEffectDelayExternal::delay(uint8_t channel, float milliseconds) {
@ -59,7 +60,7 @@ void BAAudioEffectDelayExternal::delay(uint8_t channel, float milliseconds) {
n = memory_length - AUDIO_BLOCK_SAMPLES;
delay_length[channel] = n;
uint8_t mask = activemask;
if (activemask == 0) AudioStartUsingSPI();
if (activemask == 0) m_startUsingSPI(m_spiChannel);
activemask = mask | (1<<channel);
}
@ -67,7 +68,7 @@ void BAAudioEffectDelayExternal::disable(uint8_t channel) {
if (channel >= 8) return;
uint8_t mask = activemask & ~(1<<channel);
activemask = mask;
if (mask == 0) AudioStopUsingSPI();
if (mask == 0) m_stopUsingSPI(m_spiChannel);
}
void BAAudioEffectDelayExternal::update(void)
@ -132,8 +133,9 @@ void BAAudioEffectDelayExternal::update(void)
uint32_t BAAudioEffectDelayExternal::allocated[2] = {0, 0};
void BAAudioEffectDelayExternal::initialize(MemSelect mem, uint32_t samples)
void BAAudioEffectDelayExternal::initialize(MemSelect mem)
{
uint32_t samples = 0;
uint32_t memsize, avail;
activemask = 0;
@ -144,6 +146,8 @@ void BAAudioEffectDelayExternal::initialize(MemSelect mem, uint32_t samples)
switch (mem) {
case MemSelect::MEM0 :
{
samples = Mem0Config.memSize;
m_spiChannel = 0;
m_misoPin = Mem0Config.misoPin;
m_mosiPin = Mem0Config.mosiPin;
m_sckPin = Mem0Config.sckPin;
@ -156,6 +160,9 @@ void BAAudioEffectDelayExternal::initialize(MemSelect mem, uint32_t samples)
break;
}
case MemSelect::MEM1 :
{
m_spiChannel = 1;
samples = Mem1Config.memSize;
m_misoPin = Mem1Config.misoPin;
m_mosiPin = Mem1Config.mosiPin;
m_sckPin = Mem1Config.sckPin;
@ -167,6 +174,7 @@ void BAAudioEffectDelayExternal::initialize(MemSelect mem, uint32_t samples)
SPI1.begin();
break;
}
}
pinMode(m_csPin, OUTPUT);
digitalWriteFast(m_csPin, HIGH);
@ -262,7 +270,44 @@ void BAAudioEffectDelayExternal::write(uint32_t offset, uint32_t count, const in
// PRIVATE METHODS
///////////////////////////////////////////////////////////////////
void BAAudioEffectDelayExternal::zero(uint32_t address, uint32_t count) {
write(address, count, NULL);
write(address, count, NULL);
}
#ifdef SPI_HAS_NOTUSINGINTERRUPT
inline void BAAudioEffectDelayExternal::m_startUsingSPI(int spiBus) {
if (spiBus == 0) {
SPI.usingInterrupt(IRQ_SOFTWARE);
} else if (spiBus == 1) {
SPI1.usingInterrupt(IRQ_SOFTWARE);
}
m_usingSPICount[spiBus]++;
}
inline void BAAudioEffectDelayExternal::m_stopUsingSPI(int spiBus) {
if (m_usingSPICount[spiBus] == 0 || --m_usingSPICount[spiBus] == 0)
{
if (spiBus == 0) {
SPI.notUsingInterrupt(IRQ_SOFTWARE);
} else if (spiBus == 1) {
SPI1.notUsingInterrupt(IRQ_SOFTWARE);
}
}
}
#else
inline void BAAudioEffectDelayExternal::m_startUsingSPI(int spiBus) {
if (spiBus == 0) {
SPI.usingInterrupt(IRQ_SOFTWARE);
} else if (spiBus == 1) {
SPI1.usingInterrupt(IRQ_SOFTWARE);
}
}
inline void BAAudioEffectDelayExternal::m_stopUsingSPI(int spiBus) {
}
#endif
} /* namespace BAGuitar */

@ -26,14 +26,16 @@ class BAAudioEffectDelayExternal : public AudioStream
public:
BAAudioEffectDelayExternal();
BAAudioEffectDelayExternal(MemSelect type, float milliseconds=1e6);
BAAudioEffectDelayExternal(MemSelect type);
void delay(uint8_t channel, float milliseconds);
void disable(uint8_t channel);
virtual void update(void);
static unsigned m_usingSPICount[2];
private:
void initialize(MemSelect mem, uint32_t samples);
void initialize(MemSelect mem);
void read(uint32_t address, uint32_t count, int16_t *data);
void write(uint32_t address, uint32_t count, const int16_t *data);
void zero(uint32_t address, uint32_t count);
@ -46,11 +48,17 @@ private:
static uint32_t allocated[2];
audio_block_t *inputQueueArray[1];
MemSelect m_mem;
int m_misoPin;
int m_mosiPin;
int m_sckPin;
int m_csPin;
int m_spiChannel = 0;
int m_misoPin = 0;
int m_mosiPin = 0;
int m_sckPin = 0;
int m_csPin = 0;
void m_startUsingSPI(int spiBus);
void m_stopUsingSPI(int spiBus);
};

Loading…
Cancel
Save