pull/3/merge
Thomas Grill 3 weeks ago committed by GitHub
commit 3d8eb59add
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 73
      src/control_WM8731_F32.cpp

@ -211,14 +211,31 @@ bool AudioControlWM8731_F32::enable(bit_depth_t bits, TwoWire *i2cBus, uint8_t a
return false; // no WM8731 chip responding
}
write(WM8731_REG_INTERFACE, WM8731_BITS_FORMAT(WM8731_FORMAT_I2S_MSB_LEFT) |
WM8731_BITS_IWL(bits)); // I2S, x bit, MCLK slave
write(WM8731_REG_INTERFACE,
// I2S, x bit, MCLK slave
WM8731_BITS_FORMAT(WM8731_FORMAT_I2S_MSB_LEFT) |
WM8731_BITS_IWL(bits) |
WM8731_BITS_LRP(0) |
WM8731_BITS_BCLKINV(0)
);
write(WM8731_REG_SAMPLING, WM8731_BITS_USB_NORMAL(0) | // normal mode
write(WM8731_REG_SAMPLING,
WM8731_BITS_USB_NORMAL(0) | // normal mode
WM8731_BITS_BOSR(0) | // 256*fs
WM8731_BITS_SR(8) | // 44.1kHz
( (AUDIO_SAMPLE_RATE_EXACT == 48000 || AUDIO_SAMPLE_RATE_EXACT == 96000)
?
WM8731_BITS_SR(0) // n*48kHz
:
WM8731_BITS_SR(8) // n*44.1kHz
) |
( (AUDIO_SAMPLE_RATE_EXACT == 88200 || AUDIO_SAMPLE_RATE_EXACT == 96000)
?
WM8731_BITS_CLKIDIV2(1) | // MCLK/2
WM8731_BITS_CLKODIV2(1)
:
WM8731_BITS_CLKIDIV2(0) | // MCLK/1
WM8731_BITS_CLKODIV2(0));
WM8731_BITS_CLKODIV2(0)
);
write(WM8731_REG_DIGITAL, WM8731_BITS_DACMU(1)); // Soft mute DAC
write(WM8731_REG_ANALOG, 0x00); // disable all
@ -333,18 +350,15 @@ bool AudioControlWM8731_F32::inputLevel(float n)
{
// range is 0x00 (min) - 0x1F (max)
int _level = int(n * 31.f);
_level = _level > 0x1F ? 0x1F : _level;
write(WM8731_REG_LLINEIN, _level);
write(WM8731_REG_RLINEIN, _level);
return true;
return inputLevelRaw(_level);
}
// ----------------------------------------------------------------------------------
bool AudioControlWM8731_F32::inputLevelRaw(uint8_t n)
{
// range is 0x00 (min) - 0x1F (max)
n = n > 0x1F ? 0x1F : n;
write(WM8731_REG_LLINEIN, n);
write(WM8731_REG_RLINEIN, n);
n = min(n, 0x1F);
modify(WM8731_REG_LLINEIN, WM8731_BITS_LINVOL(n), WM8731_BITS_LINVOL_MASK);
modify(WM8731_REG_RLINEIN, WM8731_BITS_RINVOL(n), WM8731_BITS_RINVOL_MASK);
return true;
}
// ----------------------------------------------------------------------------------
@ -365,11 +379,38 @@ bool AudioControlWM8731_F32_master::enable(bit_depth_t bits, TwoWire *i2cBus, ui
_wire->begin();
delay(5);
// write(WM8731_REG_RESET, 0);
write(WM8731_REG_INTERFACE,
WM8731_BITS_FORMAT(WM8731_FORMAT_I2S_MSB_LEFT) |
write(WM8731_REG_INTERFACE, WM8731_BITS_FORMAT(WM8731_FORMAT_I2S_MSB_LEFT) |
WM8731_BITS_IWL(bits) |
WM8731_BITS_MS(1)); // I2S, x bit, MCLK master
write(WM8731_REG_SAMPLING, 0x20); // 256*Fs, 44.1 kHz, MCLK/1
WM8731_BITS_LRP(0) |
WM8731_BITS_BCLKINV(0) |
WM8731_BITS_MS(1)
); // I2S, x bit, MCLK master
write(WM8731_REG_SAMPLING,
#if 1
WM8731_BITS_USB_NORMAL(0) | // normal mode
WM8731_BITS_BOSR(0) | // 256*fs
#else
// Note, if the master clock runs at 12 MHz (as on the Audioinjector Zero card)
// we are in "USB mode"
WM8731_BITS_USB_NORMAL(1) | // USB mode
WM8731_BITS_BOSR(1) | // 250*fs
#endif
( (AUDIO_SAMPLE_RATE_EXACT == 48000 || AUDIO_SAMPLE_RATE_EXACT == 96000)
?
WM8731_BITS_SR(0) // n*48kHz
:
WM8731_BITS_SR(8) // n*44.1kHz
) |
( (AUDIO_SAMPLE_RATE_EXACT == 88200 || AUDIO_SAMPLE_RATE_EXACT == 96000)
?
WM8731_BITS_CLKIDIV2(1) | // MCLK/2
WM8731_BITS_CLKODIV2(1)
:
WM8731_BITS_CLKIDIV2(0) | // MCLK/1
WM8731_BITS_CLKODIV2(0)
);
// In order to prevent pops, the DAC should first be soft-muted (DACMU),
// the output should then be de-selected from the line and headphone output

Loading…
Cancel
Save