ad fixed is2 mclk

This commit is contained in:
gemu2015 2022-07-15 14:46:23 +02:00
parent 102d350c82
commit ef89614b74
2 changed files with 17 additions and 8 deletions

View File

@ -29,7 +29,7 @@
#include "AudioOutputI2S.h" #include "AudioOutputI2S.h"
#if defined(ESP32) || defined(ESP8266) #if defined(ESP32) || defined(ESP8266)
AudioOutputI2S::AudioOutputI2S(int port, int output_mode, int dma_buf_count, int use_apll) AudioOutputI2S::AudioOutputI2S(int port, int output_mode, int dma_buf_count, int use_apll, uint8_t mult, uint32_t freq)
{ {
this->portNo = port; this->portNo = port;
this->i2sOn = false; this->i2sOn = false;
@ -49,6 +49,8 @@ AudioOutputI2S::AudioOutputI2S(int port, int output_mode, int dma_buf_count, int
bclkPin = 26; bclkPin = 26;
wclkPin = 25; wclkPin = 25;
doutPin = 22; doutPin = 22;
mcmult = mult;
mclk_freq = freq;
SetGain(1.0); SetGain(1.0);
} }
@ -84,7 +86,6 @@ bool AudioOutputI2S::SetPinout(int bclk, int wclk, int dout, int mclk, int din)
mclkPin = mclk; mclkPin = mclk;
dinPin = din; dinPin = din;
if (i2sOn) if (i2sOn)
return SetPinout(); return SetPinout();
@ -238,10 +239,12 @@ bool AudioOutputI2S::begin(bool txDAC)
.dma_buf_len = 128, .dma_buf_len = 128,
.use_apll = use_apll, // Use audio PLL .use_apll = use_apll, // Use audio PLL
.tx_desc_auto_clear = true, .tx_desc_auto_clear = true,
.fixed_mclk = 0, #ifdef ESP32
.fixed_mclk = (int)mclk_freq,
//.mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT, //.mclk_multiple = I2S_MCLK_MULTIPLE_DEFAULT,
.mclk_multiple = I2S_MCLK_MULTIPLE_128, .mclk_multiple = (i2s_mclk_multiple_t)mcmult,
.bits_per_chan = I2S_BITS_PER_CHAN_16BIT, #endif
.bits_per_chan = I2S_BITS_PER_CHAN_16BIT
}; };
audioLogger->printf("+%d %p\n", portNo, &i2s_config_dac); audioLogger->printf("+%d %p\n", portNo, &i2s_config_dac);
if (i2s_driver_install((i2s_port_t)portNo, &i2s_config_dac, 0, NULL) != ESP_OK) if (i2s_driver_install((i2s_port_t)portNo, &i2s_config_dac, 0, NULL) != ESP_OK)

View File

@ -28,11 +28,15 @@
#define I2S_PIN_NO_CHANGE -1 #define I2S_PIN_NO_CHANGE -1
#endif #endif
#ifdef ESP8266
#define I2S_MCLK_MULTIPLE_DEFAULT 0
#endif
class AudioOutputI2S : public AudioOutput class AudioOutputI2S : public AudioOutput
{ {
public: public:
#if defined(ESP32) || defined(ESP8266) #if defined(ESP32) || defined(ESP8266)
AudioOutputI2S(int port=0, int output_mode=EXTERNAL_I2S, int dma_buf_count = 8, int use_apll=APLL_DISABLE); AudioOutputI2S(int port=0, int output_mode=EXTERNAL_I2S, int dma_buf_count = 8, int use_apll=APLL_DISABLE, uint8_t mult=I2S_MCLK_MULTIPLE_DEFAULT, uint32_t freq=0);
bool SetPinout(int bclkPin, int wclkPin, int doutPin, int mclk = I2S_PIN_NO_CHANGE, int din = I2S_PIN_NO_CHANGE); bool SetPinout(int bclkPin, int wclkPin, int doutPin, int mclk = I2S_PIN_NO_CHANGE, int din = I2S_PIN_NO_CHANGE);
enum : int { APLL_AUTO = -1, APLL_ENABLE = 1, APLL_DISABLE = 0 }; enum : int { APLL_AUTO = -1, APLL_ENABLE = 1, APLL_DISABLE = 0 };
enum : int { EXTERNAL_I2S = 0, INTERNAL_DAC = 1, INTERNAL_PDM = 2 }; enum : int { EXTERNAL_I2S = 0, INTERNAL_DAC = 1, INTERNAL_PDM = 2 };
@ -69,6 +73,8 @@ class AudioOutputI2S : public AudioOutput
uint8_t bclkPin; uint8_t bclkPin;
uint8_t wclkPin; uint8_t wclkPin;
uint8_t doutPin; uint8_t doutPin;
uint8_t dinPin; int8_t dinPin;
uint8_t mclkPin; int8_t mclkPin;
uint8_t mcmult;
uint32_t mclk_freq;
}; };