@@ -46,6 +46,16 @@ I2SClass::I2SClass(uint8_t deviceIndex, uint8_t clockGenerator, uint8_t sdPin, u
4646}
4747
4848int I2SClass::begin (int mode, long sampleRate, int bitsPerSample)
49+ {
50+ return begin (mode, sampleRate, bitsPerSample, true );
51+ }
52+
53+ int I2SClass::begin (int mode, int bitsPerSample)
54+ {
55+ return begin (mode, 0 , bitsPerSample, false );
56+ }
57+
58+ int I2SClass::begin (int mode, long sampleRate, int bitsPerSample, bool driveClock)
4959{
5060 if (_state != I2S_STATE_IDLE) {
5161 return 1 ;
@@ -88,7 +98,15 @@ int I2SClass::begin(int mode, long sampleRate, int bitsPerSample)
8898
8999 _beginCount++;
90100
91- enableClock (sampleRate * 2 * bitsPerSample);
101+ if (driveClock) {
102+ enableClock (sampleRate * 2 * bitsPerSample);
103+
104+ i2sd.setSerialClockSelectMasterClockDiv (_deviceIndex);
105+ i2sd.setFrameSyncSelectSerialClockDiv (_deviceIndex);
106+ } else {
107+ i2sd.setSerialClockSelectPin (_deviceIndex);
108+ i2sd.setFrameSyncSelectPin (_deviceIndex);
109+ }
92110
93111 i2sd.disable ();
94112 i2sd.set1BitDelay (_deviceIndex);
@@ -99,7 +117,9 @@ int I2SClass::begin(int mode, long sampleRate, int bitsPerSample)
99117 pinPeripheral (_fsPin, PIO_COM);
100118
101119 i2sd.setSlotAdjustedLeft (_deviceIndex);
102- i2sd.setClockUnit (_deviceIndex);
120+ if (driveClock) {
121+ i2sd.setClockUnit (_deviceIndex);
122+ }
103123
104124 pinPeripheral (_sdPin, PIO_COM);
105125
0 commit comments