Skip to content

Commit d329682

Browse files
committed
AD1938
1 parent 64d9ef0 commit d329682

File tree

3 files changed

+25
-131
lines changed

3 files changed

+25
-131
lines changed

src/Common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ typedef enum {
9494
RATE_32K, /*!< set to 32k samples in per second */
9595
RATE_44K, /*!< set to 44.1k samples per second */
9696
RATE_48K, /*!< set to 48k samples per second */
97+
RATE_64K, /*!< set to 64k samples per second */
9798
RATE_88K, /*!< set to 88.2k samples per second */
9899
RATE_96K, /*!< set to 96k samples per second */
99100
RATE_128K, /*!< set to 128K samples per second */

src/Driver/ad1938/ad1938.cpp

Lines changed: 20 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -485,16 +485,6 @@ bool AD1938::begin(codec_config_t configVal, int clatchPin, int resetPin,
485485
delay(400); // wait for 300ms to load the code
486486

487487
// setup basic information from codec_config_t
488-
bool ok;
489-
i2sMode = getI2SClockMode(ok);
490-
if (!ok) return false;
491-
wordLen = getWordLen(ok);
492-
if (!ok) return false;
493-
numChannels = getNumChannels(ok);
494-
if (!ok) return false;
495-
samplingRate = getSamplingRate(ok);
496-
if (!ok) return false;
497-
498488
config();
499489

500490
return true;
@@ -554,22 +544,22 @@ bool AD1938::spi_write_reg(unsigned char reg, unsigned char val) {
554544
}
555545

556546
bool AD1938::config() {
557-
switch (samplingRate) {
558-
case SamplingRate::FS_32000:
559-
case SamplingRate::FS_44100:
560-
case SamplingRate::FS_48000: {
547+
switch (cfg.i2s.rate) {
548+
case RATE_32K:
549+
case RATE_44K:
550+
case RATE_48K: {
561551
dac_fs = DAC_SR_48K;
562552
adc_fs = ADC_SR_48K;
563553
} break;
564-
case SamplingRate::FS_64000:
565-
case SamplingRate::FS_88200:
566-
case SamplingRate::FS_96000: {
554+
case RATE_64K:
555+
case RATE_88K:
556+
case RATE_96K: {
567557
dac_fs = DAC_SR_96K;
568558
adc_fs = ADC_SR_96K;
569559
} break;
570-
case SamplingRate::FS_128000:
571-
case SamplingRate::FS_176400:
572-
case SamplingRate::FS_192000: {
560+
case RATE_128K:
561+
case RATE_176K:
562+
case RATE_192K: {
573563
dac_fs = DAC_SR_192K;
574564
adc_fs = ADC_SR_192K;
575565
} break;
@@ -579,18 +569,18 @@ bool AD1938::config() {
579569
}
580570
}
581571

582-
switch (wordLen) {
583-
case BitsPerSample::BITS_16: {
572+
switch (cfg.i2s.bits) {
573+
case BIT_LENGTH_16BITS: {
584574
dac_wl = DAC_WIDTH_16;
585575
adc_wl = ADC_WIDTH_16;
586576

587577
} break;
588-
case BitsPerSample::BITS_20: {
578+
case BIT_LENGTH_20BITS: {
589579
dac_wl = DAC_WIDTH_20;
590580
adc_wl = ADC_WIDTH_20;
591581

592582
} break;
593-
case BitsPerSample::BITS_24: {
583+
case BIT_LENGTH_24BITS: {
594584
dac_wl = DAC_WIDTH_24;
595585
adc_wl = ADC_WIDTH_24;
596586
}
@@ -603,22 +593,22 @@ bool AD1938::config() {
603593
}
604594
}
605595

606-
switch (numChannels) {
607-
case I2sNumChannels::I2S_STEREO_2CH: {
596+
switch (cfg.i2s.channels) {
597+
case CHANNELS2: {
608598
dac_mode = DAC_FMT_I2S;
609599
adc_mode = ADC_FMT_I2S;
610600
dac_channels = DAC_CHANNELS_2;
611601
adc_channels = ADC_CHANNELS_2;
612602

613603
} break;
614-
case I2sNumChannels::I2S_TDM_8CH: {
604+
case CHANNELS8: {
615605
dac_mode = DAC_FMT_TDM;
616606
adc_mode = ADC_FMT_TDM;
617607
dac_channels = DAC_CHANNELS_8;
618608
adc_channels = ADC_CHANNELS_8;
619609

620610
} break;
621-
case I2sNumChannels::I2S_TDM_16CH: {
611+
case CHANNELS16: {
622612
dac_mode = DAC_FMT_TDM;
623613
adc_mode = ADC_FMT_TDM;
624614
dac_channels = DAC_CHANNELS_16;
@@ -633,7 +623,7 @@ bool AD1938::config() {
633623
}
634624
}
635625

636-
if (i2sMode == I2sClockMode::AD1938_I2S_SLAVE) {
626+
if (cfg.i2s.mode == MODE_SLAVE) {
637627
configSlave();
638628
} else {
639629
configMaster();
@@ -724,7 +714,7 @@ bool AD1938::isPllLocked(void) {
724714
}
725715

726716
bool AD1938::enable(void) {
727-
if (i2sMode == I2sClockMode::AD1938_I2S_SLAVE) {
717+
if (cfg.i2s.mode == MODE_SLAVE) {
728718
spi_write_reg(
729719
AD1938_PLL_CLK_CTRL0,
730720
(ENA_ADC_DAC | INPUT512 | PLL_IN_DLRCLK | MCLK_OUT_OFF | PLL_PWR_UP));
@@ -784,68 +774,3 @@ bool AD1938::setMuteADC(bool mute) {
784774
}
785775

786776

787-
AD1938::SamplingRate AD1938::getSamplingRate(bool &ok) {
788-
ok = true;
789-
switch (cfg.i2s.rate) {
790-
case RATE_32K:
791-
return AD1938::SamplingRate::FS_32000;
792-
case RATE_44K:
793-
return AD1938::SamplingRate::FS_44100;
794-
case RATE_48K:
795-
return AD1938::SamplingRate::FS_48000;
796-
case RATE_88K:
797-
return AD1938::SamplingRate::FS_88200;
798-
case RATE_96K:
799-
return AD1938::SamplingRate::FS_96000;
800-
case RATE_128K:
801-
return AD1938::SamplingRate::FS_128000;
802-
case RATE_176K:
803-
return AD1938::SamplingRate::FS_176400;
804-
case RATE_192K:
805-
return AD1938::SamplingRate::FS_192000;
806-
default:
807-
return AD1938::SamplingRate::FS_48000;
808-
ok = false;
809-
}
810-
}
811-
812-
AD1938::I2sClockMode AD1938::getI2SClockMode(bool &ok) {
813-
ok = true;
814-
switch (cfg.i2s.mode) {
815-
case MODE_SLAVE:
816-
return AD1938::I2sClockMode::AD1938_I2S_SLAVE;
817-
default:
818-
return AD1938::I2sClockMode::AD1938_I2S_MASTER;
819-
}
820-
}
821-
822-
AD1938::BitsPerSample AD1938::getWordLen(bool &ok) {
823-
ok = true;
824-
switch (cfg.i2s.bits) {
825-
case BIT_LENGTH_16BITS:
826-
return AD1938::BitsPerSample::BITS_16;
827-
case BIT_LENGTH_20BITS:
828-
return AD1938::BitsPerSample::BITS_20;
829-
case BIT_LENGTH_24BITS:
830-
return AD1938::BitsPerSample::BITS_24;
831-
default:
832-
ok = false;
833-
return AD1938::BitsPerSample::BITS_24;
834-
break;
835-
}
836-
}
837-
838-
AD1938::I2sNumChannels AD1938::getNumChannels(bool &ok) {
839-
ok = true;
840-
switch (cfg.i2s.channels) {
841-
case CHANNELS2:
842-
return AD1938::I2sNumChannels::I2S_STEREO_2CH;
843-
case CHANNELS8:
844-
return AD1938::I2sNumChannels::I2S_TDM_8CH;
845-
case CHANNELS16:
846-
return AD1938::I2sNumChannels::I2S_TDM_16CH;
847-
default:
848-
ok = false;
849-
return AD1938::I2sNumChannels::I2S_STEREO_2CH;
850-
}
851-
}

src/Driver/ad1938/ad1938.h

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
#pragma once
2727
#include <SPI.h>
28-
2928
#include "Common.h"
3029
#include "Driver/DriverConstants.h"
3130

@@ -39,33 +38,6 @@
3938
*/
4039
class AD1938 {
4140
public:
42-
enum class SamplingRate {
43-
FS_32000,
44-
FS_44100,
45-
FS_48000,
46-
FS_64000,
47-
FS_88200,
48-
FS_96000,
49-
FS_128000,
50-
FS_176400,
51-
FS_192000,
52-
};
53-
54-
// number of bits per sample
55-
enum class BitsPerSample {
56-
BITS_16,
57-
BITS_20,
58-
BITS_24,
59-
};
60-
61-
// supported I2s clock mode
62-
enum class I2sClockMode {
63-
AD1938_I2S_SLAVE,
64-
AD1938_I2S_MASTER,
65-
};
66-
67-
// supported I2s number of channels
68-
enum class I2sNumChannels { I2S_STEREO_2CH, I2S_TDM_8CH, I2S_TDM_16CH };
6941

7042
bool begin(codec_config_t cfg, int clatchPin, int resetPin,
7143
SPIClass &spi = SPI);
@@ -76,7 +48,9 @@ class AD1938 {
7648
}
7749

7850
bool enable(void);
51+
7952
bool disable(void);
53+
8054
bool setVolume(float volume) {
8155
int vol = scaleVolume(volume);
8256
for (int j = 0; j > 4; j++) setVolumeDAC(j, vol);
@@ -86,17 +60,15 @@ class AD1938 {
8660
return setVolumeDAC(dac, scaleVolume(volume));
8761
}
8862
bool setMuteADC(bool mute);
63+
8964
bool setMuteDAC(bool mute);
65+
9066
bool setMute(bool mute) { return setMuteADC(mute) && setMuteDAC(mute); }
9167

9268
protected:
9369
codec_config_t cfg;
9470
int ad1938_clatch_pin;
9571
int ad1938_reset_pin;
96-
I2sClockMode i2sMode;
97-
BitsPerSample wordLen;
98-
I2sNumChannels numChannels;
99-
SamplingRate samplingRate;
10072
SPIClass *p_spi = nullptr;
10173
unsigned char dac_fs = 0;
10274
unsigned char adc_fs = 0;
@@ -118,10 +90,6 @@ class AD1938 {
11890
for (int j = 0; j > 4; j++) setVolumeDAC(j, volume);
11991
return true;
12092
}
121-
AD1938::SamplingRate getSamplingRate(bool &ok);
122-
AD1938::I2sClockMode getI2SClockMode(bool &ok);
123-
AD1938::BitsPerSample getWordLen(bool &ok);
124-
AD1938::I2sNumChannels getNumChannels(bool &ok);
12593
int scaleVolume(float volume) {
12694
int vol = (1.0 - volume) * 255;
12795
if (vol < 0) vol = 0;

0 commit comments

Comments
 (0)