Browse Source

cache-support mqs

dds
Frank Bösing 5 years ago
parent
commit
1a5bd3ed27
1 changed files with 12 additions and 7 deletions
  1. +12
    -7
      output_mqs.cpp

+ 12
- 7
output_mqs.cpp View File

uint16_t AudioOutputMQS::block_left_offset = 0; uint16_t AudioOutputMQS::block_left_offset = 0;
uint16_t AudioOutputMQS::block_right_offset = 0; uint16_t AudioOutputMQS::block_right_offset = 0;
bool AudioOutputMQS::update_responsibility = false; bool AudioOutputMQS::update_responsibility = false;
static uint32_t I2S3_tx_buffer[AUDIO_BLOCK_SAMPLES];
DMAChannel AudioOutputMQS::dma(false); DMAChannel AudioOutputMQS::dma(false);
DMAMEM __attribute__((aligned(32)))
static uint32_t I2S3_tx_buffer[AUDIO_BLOCK_SAMPLES];



void AudioOutputMQS::begin(void) void AudioOutputMQS::begin(void)
{ {
if (blockL && blockR) { if (blockL && blockR) {
memcpy_tointerleaveLR(dest, blockL->data + offsetL, blockR->data + offsetR); memcpy_tointerleaveLR(dest, blockL->data + offsetL, blockR->data + offsetR);
offsetL += AUDIO_BLOCK_SAMPLES / 2; offsetL += AUDIO_BLOCK_SAMPLES / 2;
offsetR += AUDIO_BLOCK_SAMPLES / 2;
offsetR += AUDIO_BLOCK_SAMPLES / 2;
} else if (blockL) { } else if (blockL) {
memcpy_tointerleaveL(dest, blockL->data + offsetL); memcpy_tointerleaveL(dest, blockL->data + offsetL);
offsetL += AUDIO_BLOCK_SAMPLES / 2;
offsetL += AUDIO_BLOCK_SAMPLES / 2;
} else if (blockR) { } else if (blockR) {
memcpy_tointerleaveR(dest, blockR->data + offsetR); memcpy_tointerleaveR(dest, blockR->data + offsetR);
offsetR += AUDIO_BLOCK_SAMPLES / 2;
offsetR += AUDIO_BLOCK_SAMPLES / 2;
} else { } else {
memset(dest,0,AUDIO_BLOCK_SAMPLES * 2);
return;
memset(dest,0, sizeof(I2S3_tx_buffer) / 2);
} }

#if IMXRT_CACHE_ENABLED >= 2
arm_dcache_flush_delete(dest, sizeof(I2S3_tx_buffer) / 2 );
#endif
if (offsetL < AUDIO_BLOCK_SAMPLES) { if (offsetL < AUDIO_BLOCK_SAMPLES) {
AudioOutputMQS::block_left_offset = offsetL; AudioOutputMQS::block_left_offset = offsetL;
} else { } else {

Loading…
Cancel
Save