This commit is contained in:
ChuckMash 2024-04-17 10:22:33 -07:00 committed by GitHub
commit 4b55d5fa10
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 0 deletions

View File

@ -33,6 +33,7 @@ AudioOutputI2S::AudioOutputI2S(int port, int output_mode, int dma_buf_count, int
{ {
this->portNo = port; this->portNo = port;
this->i2sOn = false; this->i2sOn = false;
this->i2sRateSet = false;
this->dma_buf_count = dma_buf_count; this->dma_buf_count = dma_buf_count;
if (output_mode != EXTERNAL_I2S && output_mode != INTERNAL_DAC && output_mode != INTERNAL_PDM) { if (output_mode != EXTERNAL_I2S && output_mode != INTERNAL_DAC && output_mode != INTERNAL_PDM) {
output_mode = EXTERNAL_I2S; output_mode = EXTERNAL_I2S;
@ -56,6 +57,7 @@ AudioOutputI2S::AudioOutputI2S(int port, int output_mode, int dma_buf_count, int
#elif defined(ARDUINO_ARCH_RP2040) #elif defined(ARDUINO_ARCH_RP2040)
AudioOutputI2S::AudioOutputI2S(long sampleRate, pin_size_t sck, pin_size_t data) { AudioOutputI2S::AudioOutputI2S(long sampleRate, pin_size_t sck, pin_size_t data) {
i2sOn = false; i2sOn = false;
i2sRateSet = false;
mono = false; mono = false;
bps = 16; bps = 16;
channels = 2; channels = 2;
@ -129,7 +131,13 @@ bool AudioOutputI2S::SetPinout(int bclk, int wclk, int dout, int mclk)
bool AudioOutputI2S::SetRate(int hz) bool AudioOutputI2S::SetRate(int hz)
{ {
// TODO - have a list of allowable rates from constructor, check them // TODO - have a list of allowable rates from constructor, check them
if(this->hertz == hz && this->i2sRateSet){ // hz already set to this
return true;
}
this->hertz = hz; this->hertz = hz;
if (i2sOn) if (i2sOn)
{ {
#ifdef ESP32 #ifdef ESP32
@ -140,6 +148,10 @@ bool AudioOutputI2S::SetRate(int hz)
i2s.setFrequency(hz); i2s.setFrequency(hz);
#endif #endif
} }
if(!this->i2sRateSet){
this->i2sRateSet = true;
}
return true; return true;
} }
@ -401,5 +413,6 @@ bool AudioOutputI2S::stop()
i2s.end(); i2s.end();
#endif #endif
i2sOn = false; i2sOn = false;
i2sRateSet = false;
return true; return true;
} }

View File

@ -62,10 +62,12 @@ class AudioOutputI2S : public AudioOutput
bool mono; bool mono;
int lsb_justified; int lsb_justified;
bool i2sOn; bool i2sOn;
bool i2sRateSet;
int dma_buf_count; int dma_buf_count;
int use_apll; int use_apll;
bool use_mclk; bool use_mclk;
bool swap_clocks; bool swap_clocks;
// We can restore the old values and free up these pins when in NoDAC mode // We can restore the old values and free up these pins when in NoDAC mode
uint32_t orig_bck; uint32_t orig_bck;
uint32_t orig_ws; uint32_t orig_ws;