PaulStoffregen před 7 roky
rodič
revize
0cb1e3e415
2 změnil soubory, kde provedl 8 přidání a 8 odebrání
  1. +3
    -3
      output_dac.cpp
  2. +5
    -5
      output_dacs.cpp

+ 3
- 3
output_dac.cpp Zobrazit soubor

SIM_SCGC2 |= SIM_SCGC2_DAC0; SIM_SCGC2 |= SIM_SCGC2_DAC0;
DAC0_C0 = DAC_C0_DACEN; // 1.2V VDDA is DACREF_2 DAC0_C0 = DAC_C0_DACEN; // 1.2V VDDA is DACREF_2
// slowly ramp up to DC voltage, approx 1/4 second // slowly ramp up to DC voltage, approx 1/4 second
for (int16_t i=0; i<2048; i+=8) {
for (int16_t i=0; i<=2048; i+=8) {
*(int16_t *)&(DAC0_DAT0L) = i; *(int16_t *)&(DAC0_DAT0L) = i;
delay(1); delay(1);
} }
src = block->data; src = block->data;
do { do {
// TODO: this should probably dither // TODO: this should probably dither
*dest++ = ((*src++) + 32767) >> 4;
*dest++ = ((*src++) + 32768) >> 4;
} while (dest < end); } while (dest < end);
AudioStream::release(block); AudioStream::release(block);
AudioOutputAnalog::block_left_1st = AudioOutputAnalog::block_left_2nd; AudioOutputAnalog::block_left_1st = AudioOutputAnalog::block_left_2nd;
AudioOutputAnalog::block_left_2nd = NULL; AudioOutputAnalog::block_left_2nd = NULL;
} else { } else {
do { do {
*dest++ = 2047;
*dest++ = 2048;
} while (dest < end); } while (dest < end);
} }
if (AudioOutputAnalog::update_responsibility) AudioStream::update_all(); if (AudioOutputAnalog::update_responsibility) AudioStream::update_all();

+ 5
- 5
output_dacs.cpp Zobrazit soubor

memset(&block_silent, 0, sizeof(block_silent)); memset(&block_silent, 0, sizeof(block_silent));


// slowly ramp up to DC voltage, approx 1/4 second // slowly ramp up to DC voltage, approx 1/4 second
for (int16_t i=0; i<2048; i+=8) {
for (int16_t i=0; i<=2048; i+=8) {
*(int16_t *)&(DAC0_DAT0L) = i; *(int16_t *)&(DAC0_DAT0L) = i;
*(int16_t *)&(DAC1_DAT0L) = i; *(int16_t *)&(DAC1_DAT0L) = i;
delay(1); delay(1);
// TODO: can this be optimized? // TODO: can this be optimized?
uint32_t left = *src_left++; uint32_t left = *src_left++;
uint32_t right = *src_right++; uint32_t right = *src_right++;
uint32_t out1 = ((left & 0xFFFF) + 32767) >> 4;
out1 |= (((right & 0xFFFF) + 32767) >> 4) << 16;
uint32_t out2 = ((left >> 16) + 32767) >> 4;
out2 |= (((right >> 16) + 32767) >> 4) << 16;
uint32_t out1 = ((left & 0xFFFF) + 32768) >> 4;
out1 |= (((right & 0xFFFF) + 32768) >> 4) << 16;
uint32_t out2 = ((left >> 16) + 32768) >> 4;
out2 |= (((right >> 16) + 32768) >> 4) << 16;
*dest++ = out1; *dest++ = out1;
*dest++ = out2; *dest++ = out2;
} while (dest < end); } while (dest < end);

Načítá se…
Zrušit
Uložit