development check in, now compiles

master
Steve Lascos 6 years ago
parent 19baaa34be
commit c5383595c1
  1. 6
      src/BASpiMemory.cpp
  2. 1
      src/BASpiMemory.h
  3. 2
      src/BATypes.h
  4. 10
      src/LibBasicFunctions.cpp
  5. 2
      src/LibBasicFunctions.h
  6. 24
      src/LibMemoryManagement.cpp
  7. 8
      src/LibMemoryManagement.h

@ -293,6 +293,8 @@ BASpiMemoryDMA::BASpiMemoryDMA(SpiDeviceId memDeviceId, uint32_t speedHz, size_t
case SpiDeviceId::SPI_DEVICE1 :
cs = SPI_CS_MEM1;
break;
default :
cs = SPI_CS_MEM0;
}
m_cs = new ActiveLowChipSelect(cs, m_settings);
m_txBuffer = new uint8_t[bufferSizeBytes+4];
@ -396,7 +398,7 @@ void BASpiMemoryDMA::zero16(size_t address, size_t numWords)
void BASpiMemoryDMA::read(size_t address, uint8_t *dest, size_t numBytes)
{
UNUSED(dest)
UNUSED(dest);
while ( m_rxTransfer->busy()) {}
uint16_t transferCount = numBytes + 4;
m_setSpiCmdAddr(SPI_READ_CMD, address, m_rxBuffer);
@ -406,7 +408,7 @@ void BASpiMemoryDMA::read(size_t address, uint8_t *dest, size_t numBytes)
void BASpiMemoryDMA::read16(size_t address, uint16_t *dest, size_t numWords)
{
UNUSED(dest)
UNUSED(dest);
while ( m_rxTransfer->busy()) {}
m_setSpiCmdAddr(SPI_READ_CMD, address, m_rxBuffer);
size_t numBytes = sizeof(uint16_t)*numWords;

@ -94,6 +94,7 @@ protected:
//constexpr int MAX_DMA_XFERS = 4;
class BASpiMemoryDMA : public BASpiMemory {
public:
BASpiMemoryDMA() = delete;
/// Create an object to control either MEM0 (via SPI1) or MEM1 (via SPI2).
/// @details default is 20 Mhz

@ -10,6 +10,8 @@
namespace BAGuitar {
#define UNUSED(x) (void)(x)
/**************************************************************************//**
* Customer RingBuffer with random access
*****************************************************************************/

@ -213,7 +213,7 @@ bool AudioDelay::getSamples(audio_block_t *dest, size_t offset, size_t numSample
// destPtr--;
// }
m_slot->readAdvance16(AUDIO_BLOCK_SAMPLES);
m_slot->readAdvance16(dest->data, AUDIO_BLOCK_SAMPLES);
// // Code below worked
// int16_t *destPtr = dest->data;
@ -268,13 +268,13 @@ bool IirBiQuadFilter::process(int16_t *output, int16_t *input, size_t numSamples
// create convertion buffers on teh stack
int32_t input32[numSamples];
int32_t output32[numSamples];
for (int i=0; i<numSamples; i++) {
for (size_t i=0; i<numSamples; i++) {
input32[i] = (int32_t)(input[i]);
}
arm_biquad_cascade_df1_fast_q31(&m_iirCfg, input32, output32, numSamples);
for (int i=0; i<numSamples; i++) {
for (size_t i=0; i<numSamples; i++) {
output[i] = (int16_t)(output32[i] & 0xffff);
}
}
@ -310,13 +310,13 @@ bool IirBiQuadFilterHQ::process(int16_t *output, int16_t *input, size_t numSampl
// create convertion buffers on teh stack
int32_t input32[numSamples];
int32_t output32[numSamples];
for (int i=0; i<numSamples; i++) {
for (size_t i=0; i<numSamples; i++) {
input32[i] = (int32_t)(input[i]);
}
arm_biquad_cas_df1_32x64_q31(&m_iirCfg, input32, output32, numSamples);
for (int i=0; i<numSamples; i++) {
for (size_t i=0; i<numSamples; i++) {
output[i] = (int16_t)(output32[i] & 0xffff);
}
}

@ -109,7 +109,7 @@ public:
/// Construct an audio buffer using a slot configured with the BAGuitar::ExternalSramManager
/// @param slot a pointer to the slot representing the memory you wish to use for the buffer.
AudioDelay(ExtMemSlot *slot, bool useDma=true);
AudioDelay(ExtMemSlot *slot);
~AudioDelay();

@ -108,7 +108,7 @@ uint16_t ExtMemSlot::readAdvance16()
return val;
}
bool ExtMemSlot::readAdvance16(int16_t *dest=nullptr, size_t numWords)
bool ExtMemSlot::readAdvance16(int16_t *dest, size_t numWords)
{
if (!m_valid) { return false; }
size_t numBytes = sizeof(int16_t)*numWords;
@ -175,9 +175,14 @@ bool ExtMemSlot::zeroAdvance16(size_t numWords)
return true;
}
void ExtMemSlot::readDmaBufferContents(uint8_t *dest, size_t numBytes, size_t bufferOffset = 0)
void ExtMemSlot::readDmaBufferContents(uint8_t *dest, size_t numBytes, size_t bufferOffset)
{
m_spi->readBufferContents(dest, numBytes, bufferOffset);
if (m_useDma) {
(static_cast<BASpiMemoryDMA*>(m_spi))->readBufferContents(dest, numBytes, bufferOffset);
// BASpiMemoryDMA *spi = nullptr;
// spi = static_cast<BASpiMemoryDMA>(m_spi);
// spi->readBufferContents(dest, numBytes, bufferOffset);
}
}
@ -256,14 +261,14 @@ size_t ExternalSramManager::availableMemory(BAGuitar::MemSelect mem)
return m_memConfig[mem].totalAvailable;
}
bool ExternalSramManager::requestMemory(ExtMemSlot *slot, float delayMilliseconds, BAGuitar::MemSelect mem, bool useDma)
bool ExternalSramManager::requestMemory(ExtMemSlot *slot, float delayMilliseconds, BAGuitar::MemSelect mem, size_t dmaBufferSize)
{
// convert the time to numer of samples
size_t delayLengthInt = (size_t)((delayMilliseconds*(AUDIO_SAMPLE_RATE_EXACT/1000.0f))+0.5f);
return requestMemory(slot, delayLengthInt * sizeof(int16_t), mem, useDma);
return requestMemory(slot, delayLengthInt * sizeof(int16_t), mem, dmaBufferSize);
}
bool ExternalSramManager::requestMemory(ExtMemSlot *slot, size_t sizeBytes, BAGuitar::MemSelect mem, bool useDma)
bool ExternalSramManager::requestMemory(ExtMemSlot *slot, size_t sizeBytes, BAGuitar::MemSelect mem, size_t dmaBufferSize)
{
if (m_memConfig[mem].totalAvailable >= sizeBytes) {
@ -276,10 +281,12 @@ bool ExternalSramManager::requestMemory(ExtMemSlot *slot, size_t sizeBytes, BAGu
slot->m_size = sizeBytes;
if (!m_memConfig[mem].m_spi) {
if (useDma) {
m_memConfig[mem].m_spi = new BAGuitar::BASpiMemoryDma(static_cast<BAGuitar::SpiDeviceId>(mem));
if (dmaBufferSize > 0) {
m_memConfig[mem].m_spi = new BAGuitar::BASpiMemoryDMA(static_cast<BAGuitar::SpiDeviceId>(mem), dmaBufferSize);
slot->m_useDma = true;
} else {
m_memConfig[mem].m_spi = new BAGuitar::BASpiMemory(static_cast<BAGuitar::SpiDeviceId>(mem));
slot->m_useDma = false;
}
if (!m_memConfig[mem].m_spi) {
Serial.println("requestMemory: new failed! m_spi is a nullptr");
@ -295,7 +302,6 @@ bool ExternalSramManager::requestMemory(ExtMemSlot *slot, size_t sizeBytes, BAGu
slot->m_valid = true;
if (!slot->isEnabled()) { slot->enable(); }
slot->clear();
slot->m_useDma = useDma;
return true;
} else {
// there is not enough memory available for the request

@ -110,7 +110,7 @@ public:
/// @param dest pointer to the destination of the read.
/// @param numWords number of 16-bit words to transfer
/// @returns true on success, else false on error
bool readAdvance16(int16_t *dest=nullptr, size_t numWords);
bool readAdvance16(int16_t *dest, size_t numWords);
/// Write a block of 16-bit data from the specified location in circular operation
/// @param src pointer to the start of the block of data to write to memory
@ -186,15 +186,17 @@ public:
/// @param slot a pointer to the global slot object to which memory will be allocated
/// @param delayMilliseconds request the amount of memory based on required time for audio samples, rather than number of bytes.
/// @param mem specify which external memory to allocate from
/// @param dmaBufferSize When > 0, DMA mode is used with the specified DMA buffer size
/// @returns true on success, otherwise false on error
bool requestMemory(ExtMemSlot *slot, float delayMilliseconds, BAGuitar::MemSelect mem = BAGuitar::MemSelect::MEM0, bool useDma = true);
bool requestMemory(ExtMemSlot *slot, float delayMilliseconds, BAGuitar::MemSelect mem = BAGuitar::MemSelect::MEM0, size_t dmaBufferSize = 0);
/// Request memory be allocated for the provided slot
/// @param slot a pointer to the global slot object to which memory will be allocated
/// @param sizeBytes request the amount of memory in bytes to request
/// @param mem specify which external memory to allocate from
/// @param dmaBufferSize When > 0, DMA mode is used with the specified DMA buffer size
/// @returns true on success, otherwise false on error
bool requestMemory(ExtMemSlot *slot, size_t sizeBytes, BAGuitar::MemSelect mem = BAGuitar::MemSelect::MEM0, bool useDma = true);
bool requestMemory(ExtMemSlot *slot, size_t sizeBytes, BAGuitar::MemSelect mem = BAGuitar::MemSelect::MEM0, size_t dmaBufferSize = 0);
private:
static bool m_configured; ///< there should only be one instance of ExternalSramManager in the whole project

Loading…
Cancel
Save