arduino-audio-driver
Loading...
Searching...
No Matches
SF32LB.h
Go to the documentation of this file.
1
10#pragma once
11
12#include <stdint.h>
13
15
16namespace audio_driver {
17
38class SF32LB : public ZephyrDriverCommon {
39 public:
86
87 // ---- CFG ----
88 static constexpr uint32_t CFG_ADC_ENABLE = 1UL << 0;
89 static constexpr uint32_t CFG_DAC_ENABLE = 1UL << 1;
90 static constexpr uint32_t CFG_ADC_EN_DLY_SEL_Msk = 0x3UL << 3;
91
92 // ---- DAC_CFG / ADC_CFG ----
93 static constexpr uint32_t DAC_CFG_OSR_SEL_Msk = 0xFUL << 0;
94 static constexpr uint32_t DAC_CFG_OP_MODE_Msk = 0x3UL << 4;
95 static constexpr uint32_t DAC_CFG_PATH_RESET = 1UL << 6;
96 static constexpr uint32_t DAC_CFG_CLK_SRC_SEL_Msk = 0x1UL << 7;
97 static constexpr uint32_t DAC_CFG_CLK_DIV_Msk = 0xFFUL << 8;
98
99 static constexpr uint32_t ADC_CFG_OSR_SEL_Msk = 0x7UL << 0;
100 static constexpr uint32_t ADC_CFG_OP_MODE_Msk = 0x3UL << 3;
101 static constexpr uint32_t ADC_CFG_PATH_RESET = 1UL << 5;
102 static constexpr uint32_t ADC_CFG_CLK_SRC_SEL_Msk = 0x1UL << 6;
103 static constexpr uint32_t ADC_CFG_CLK_DIV_Msk = 0xFFUL << 8;
104
105 // ---- DAC_CHx_CFG ----
106 static constexpr uint32_t DAC_CH_CFG_ENABLE = 1UL << 0;
107 static constexpr uint32_t DAC_CH_CFG_DOUT_MUTE = 1UL << 1;
108 static constexpr uint32_t DAC_CH_CFG_DEM_MODE_Msk = 0x3UL << 2;
109 static constexpr uint32_t DAC_CH_CFG_DMA_EN = 1UL << 7;
110 static constexpr uint32_t DAC_CH_CFG_ROUGH_VOL_Msk = 0xFUL << 8;
111 static constexpr uint32_t DAC_CH_CFG_FINE_VOL_Msk = 0xFUL << 12;
112 static constexpr uint32_t DAC_CH_CFG_DATA_FORMAT = 1UL << 16;
113 static constexpr uint32_t DAC_CH_CFG_SINC_GAIN_Msk = 0x1FFUL << 17;
114 static constexpr uint32_t DAC_CH_CFG_DITHER_GAIN_Msk = 0x7UL << 26;
115 static constexpr uint32_t DAC_CH_CFG_DITHER_EN = 1UL << 29;
116
117 // ---- DAC_CHx_CFG_EXT ----
118 static constexpr uint32_t DAC_CH_CFG_EXT_RAMP_EN = 1UL << 0;
119 static constexpr uint32_t DAC_CH_CFG_EXT_RAMP_MODE = 1UL << 1;
120 static constexpr uint32_t DAC_CH_CFG_EXT_ZERO_ADJUST_EN = 1UL << 2;
121 static constexpr uint32_t DAC_CH_CFG_EXT_RAMP_INTERVAL_Msk = 0xFUL << 3;
122 static constexpr uint32_t DAC_CH_CFG_EXT_RAMP_STAT_Msk = 0x3UL << 7;
123
124 // ---- DAC_CHx_DEBUG ----
125 static constexpr uint32_t DAC_CH_DEBUG_DATA_OUT_Msk = 0xFFFFUL << 0;
126 static constexpr uint32_t DAC_CH_DEBUG_BYPASS = 1UL << 16;
127
128 // ---- ADC_CHx_CFG ----
129 static constexpr uint32_t ADC_CH_CFG_ENABLE = 1UL << 0;
130 static constexpr uint32_t ADC_CH_CFG_HPF_BYPASS = 1UL << 1;
131 static constexpr uint32_t ADC_CH_CFG_HPF_COEF_Msk = 0xFUL << 2;
132 static constexpr uint32_t ADC_CH_CFG_STB_INV = 1UL << 6;
133 static constexpr uint32_t ADC_CH_CFG_DMA_EN = 1UL << 7;
134 static constexpr uint32_t ADC_CH_CFG_ROUGH_VOL_Msk = 0xFUL << 8;
135 static constexpr uint32_t ADC_CH_CFG_FINE_VOL_Msk = 0xFUL << 12;
136 static constexpr uint32_t ADC_CH_CFG_DATA_FORMAT = 1UL << 16;
137
138 // ---- BG_CFG0 ----
139 static constexpr uint32_t BG_CFG0_EN = 1UL << 0;
140 static constexpr uint32_t BG_CFG0_LP_MODE = 1UL << 1;
141 static constexpr uint32_t BG_CFG0_VREF_SEL_Msk = 0xFUL << 2;
142 static constexpr uint32_t BG_CFG0_EN_SMPL = 1UL << 7;
143 static constexpr uint32_t BG_CFG0_EN_RCFLT = 1UL << 8;
144 static constexpr uint32_t BG_CFG0_MIC_VREF_SEL_Msk = 0x7UL << 9;
145 static constexpr uint32_t BG_CFG0_EN_AMP = 1UL << 12;
146 static constexpr uint32_t BG_CFG0_SET_VC = 1UL << 13;
147
148 // ---- REFGEN_CFG ----
149 static constexpr uint32_t REFGEN_CFG_EN = 1UL << 0;
150 static constexpr uint32_t REFGEN_CFG_EN_CHOP = 1UL << 1;
151 static constexpr uint32_t REFGEN_CFG_LV_MODE = 1UL << 5;
152
153 // ---- PLL_CFG0 ----
154 static constexpr uint32_t PLL_CFG0_ICP_SEL_Msk = 0x1FUL << 6;
155 static constexpr uint32_t PLL_CFG0_EN_ANA = 1UL << 15;
156 static constexpr uint32_t PLL_CFG0_EN_VCO = 1UL << 27;
157 static constexpr uint32_t PLL_CFG0_EN_IARY = 1UL << 28;
158
159 // ---- PLL_CFG1 ----
160 static constexpr uint32_t PLL_CFG1_R3_SEL_Msk = 0xFUL << 0;
161 static constexpr uint32_t PLL_CFG1_RZ_SEL_Msk = 0xFUL << 4;
162 static constexpr uint32_t PLL_CFG1_C2_SEL_Msk = 0x7UL << 8;
163 static constexpr uint32_t PLL_CFG1_CZ_SEL_Msk = 0x7UL << 11;
164
165 // ---- PLL_CFG2 ----
166 static constexpr uint32_t PLL_CFG2_RSTB = 1UL << 8;
167 static constexpr uint32_t PLL_CFG2_EN_DIG = 1UL << 13;
168
169 // ---- PLL_CFG3 ----
170 static constexpr uint32_t PLL_CFG3_EN_SDM = 1UL << 30;
171
172 // ---- PLL_CFG4 ----
173 static constexpr uint32_t PLL_CFG4_EN_CLK_CHOP_DAC = 1UL << 5;
174 static constexpr uint32_t PLL_CFG4_DIVA_CLK_DAC_Msk = 0x1FUL << 6;
175 static constexpr uint32_t PLL_CFG4_EN_CLK_DAC = 1UL << 11;
176 static constexpr uint32_t PLL_CFG4_SEL_CLK_DAC = 1UL << 12;
177 static constexpr uint32_t PLL_CFG4_SEL_CLK_DAC_SOURCE_Msk = 0x3UL << 13;
178 static constexpr uint32_t PLL_CFG4_SEL_CLK_DIG = 1UL << 15;
179 static constexpr uint32_t PLL_CFG4_DIVA_CLK_DIG_Msk = 0x1FUL << 18;
180 static constexpr uint32_t PLL_CFG4_EN_CLK_DIG = 1UL << 23;
181
182 // ---- PLL_CFG5 ----
183 static constexpr uint32_t PLL_CFG5_EN_CLK_CHOP_BG = 1UL << 7;
184 static constexpr uint32_t PLL_CFG5_EN_CLK_CHOP_REFGEN = 1UL << 15;
185
186 // ---- PLL_CFG6 ----
187 static constexpr uint32_t PLL_CFG6_SEL_CLK_CHOP_MICBIAS_Msk = 0x3UL << 6;
188 static constexpr uint32_t PLL_CFG6_EN_CLK_CHOP_MICBIAS = 1UL << 8;
189 static constexpr uint32_t PLL_CFG6_SEL_CLK_ADC2 = 1UL << 9;
190 static constexpr uint32_t PLL_CFG6_DIVA_CLK_ADC2_Msk = 0x7UL << 10;
191 static constexpr uint32_t PLL_CFG6_EN_CLK_ADC2 = 1UL << 13;
192 static constexpr uint32_t PLL_CFG6_SEL_CLK_ADC1 = 1UL << 14;
193 static constexpr uint32_t PLL_CFG6_DIVA_CLK_ADC1_Msk = 0x7UL << 15;
194 static constexpr uint32_t PLL_CFG6_EN_CLK_ADC1 = 1UL << 18;
195 static constexpr uint32_t PLL_CFG6_SEL_CLK_ADC0 = 1UL << 19;
196 static constexpr uint32_t PLL_CFG6_DIVA_CLK_ADC0_Msk = 0x7UL << 20;
197 static constexpr uint32_t PLL_CFG6_EN_CLK_ADC0 = 1UL << 23;
198 static constexpr uint32_t PLL_CFG6_SEL_CLK_ADC_SOURCE = 1UL << 24;
199
200 // ---- ADC_ANA_CFG ----
201 static constexpr uint32_t ADC_ANA_CFG_MICBIAS_CHOP_EN = 1UL << 0;
202 static constexpr uint32_t ADC_ANA_CFG_MICBIAS_EN = 1UL << 1;
203
204 // ---- ADC1_CFG1 / ADC2_CFG1 ----
205 static constexpr uint32_t ADCx_CFG1_VCMST = 1UL << 3;
206 static constexpr uint32_t ADCx_CFG1_VREF_SEL_Msk = 0x7UL << 6;
207 static constexpr uint32_t ADCx_CFG1_GC_Msk = 0x7UL << 18;
208 static constexpr uint32_t ADCx_CFG1_DACN_EN = 1UL << 21;
209 static constexpr uint32_t ADCx_CFG1_DIFF_EN = 1UL << 22;
210 static constexpr uint32_t ADCx_CFG1_FSP_Msk = 0x3UL << 23;
211
212 // ---- ADC1_CFG2 / ADC2_CFG2 ----
213 static constexpr uint32_t ADCx_CFG2_CLEAR = 1UL << 0;
214 static constexpr uint32_t ADCx_CFG2_RSTB = 1UL << 2;
215 static constexpr uint32_t ADCx_CFG2_EN = 1UL << 3;
216
217 // ---- DAC1_CFG / DAC2_CFG ----
218 static constexpr uint32_t DACx_CFG_EN_OS_DAC = 1UL << 0;
219 static constexpr uint32_t DACx_CFG_SR = 1UL << 12;
220 static constexpr uint32_t DACx_CFG_LP_MODE = 1UL << 14;
221 static constexpr uint32_t DACx_CFG_EN_AMP = 1UL << 21;
222 static constexpr uint32_t DACx_CFG_EN_VCM = 1UL << 24;
223 static constexpr uint32_t DACx_CFG_EN_DAC = 1UL << 25;
224
227 static constexpr int MIN_VOLUME_DB = -36;
228 static constexpr int MAX_VOLUME_DB = 54;
229
232 uint32_t sample_rate;
233 uint8_t clk_div; // DAC_CFG.CLK_DIV
234 uint8_t osr_sel; // DAC_CFG.OSR_SEL
235 uint8_t diva_clk_dac; // PLL_CFG4.DIVA_CLK_DAC
236 };
237
239 uint32_t sample_rate;
240 uint8_t clk_div; // ADC_CFG.CLK_DIV
241 uint8_t osr_sel; // ADC_CFG.OSR_SEL
242 uint8_t diva_clk_adc; // PLL_CFG6.DIVA_CLK_ADCx
243 uint8_t fsp; // ADCx_CFG1.FSP
244 };
245
248 void setBaseAddress(uintptr_t base) { reg_base = base; }
249
254 bool begin(uintptr_t base, uint32_t sample_rate = 48000) {
255 reg_base = base;
256 const DacClockConfig* dac_clk = dacClockConfig(sample_rate);
257 if (dac_clk == nullptr) return false;
258
260 configAnalogDacPath(*dac_clk);
261 configTxChannel(*dac_clk);
262 configDacPath(false);
264 return true;
265 }
266
269 bool beginInput(uint32_t sample_rate = 48000) {
270 const AdcClockConfig* adc_clk = adcClockConfig(sample_rate);
271 if (adc_clk == nullptr) return false;
272
273 configAnalogAdcPath(*adc_clk);
274 configRxChannel(*adc_clk);
276 return true;
277 }
278
280 void start() { mute(false); }
281
292
302
305 bool setMute(bool mute_flag) override {
306 mute(mute_flag);
307 return true;
308 }
309
311 bool setVolumeDb(int volume_db) {
312 if (volume_db < MIN_VOLUME_DB) volume_db = MIN_VOLUME_DB;
313 if (volume_db > MAX_VOLUME_DB) volume_db = MAX_VOLUME_DB;
314
315 uint32_t rough_vol = (volume_db - MIN_VOLUME_DB) / 6;
316 uint32_t fine_vol = ((volume_db - MIN_VOLUME_DB) % 6) << 1;
317
318 uint32_t value = (rough_vol << 8) | (fine_vol << 12);
320 updateReg32(REG_DAC_CH0_CFG, mask, value);
321 last_fine_vol = fine_vol;
322 return true;
323 }
324
327 bool setVolume(int volume) override {
328 volume_percent = volume < 0 ? 0 : (volume > 100 ? 100 : volume);
329 int volume_db = MIN_VOLUME_DB +
331 return setVolumeDb(volume_db);
332 }
333
334 protected:
335 uintptr_t reg_base = 0;
336 uint32_t last_fine_vol = 0;
337
338 // ---- 32 bit memory mapped register access ----
339
340 uint32_t read32(uint32_t offset) {
341 return *reinterpret_cast<volatile uint32_t*>(reg_base + offset);
342 }
343
344 void write32(uint32_t offset, uint32_t value) {
345 *reinterpret_cast<volatile uint32_t*>(reg_base + offset) = value;
346 }
347
348 void setBit(uint32_t offset, uint32_t mask) {
349 write32(offset, read32(offset) | mask);
350 }
351
352 void clearBit(uint32_t offset, uint32_t mask) {
353 write32(offset, read32(offset) & ~mask);
354 }
355
357 void updateReg32(uint32_t offset, uint32_t mask, uint32_t value) {
358 uint32_t old = read32(offset);
359 write32(offset, (old & ~mask) | (value & mask));
360 }
361
362 // ---- helpers ported from sf32lb_codec.c ----
363
364 static const DacClockConfig* dacClockConfig(uint32_t sample_rate) {
365 static constexpr DacClockConfig table[] = {
366 {48000, 5, 0, 20}, {32000, 5, 1, 20}, {24000, 10, 5, 10},
367 {16000, 5, 4, 20}, {12000, 20, 7, 5}, {8000, 10, 8, 10},
368 };
369 for (const auto& cfg : table) {
370 if (cfg.sample_rate == sample_rate) return &cfg;
371 }
372 return nullptr;
373 }
374
375 static const AdcClockConfig* adcClockConfig(uint32_t sample_rate) {
376 static constexpr AdcClockConfig table[] = {
377 {48000, 5, 0, 5, 0}, {32000, 5, 1, 5, 0}, {24000, 10, 0, 5, 2},
378 {16000, 10, 1, 5, 2}, {12000, 10, 2, 5, 2}, {8000, 10, 3, 5, 2},
379 };
380 for (const auto& cfg : table) {
381 if (cfg.sample_rate == sample_rate) return &cfg;
382 }
383 return nullptr;
384 }
385
389 // bandgap
390 uint32_t bg = (1UL << 0) // EN
391 | (0UL << 1) // LP_MODE
392 | (0xcUL << 2) // VREF_SEL = 3.3V
393 | (0UL << 7) // EN_SMPL
394 | BG_CFG0_EN_RCFLT // EN_RCFLT
395 | (4UL << 9) // MIC_VREF_SEL
396 | BG_CFG0_EN_AMP // EN_AMP
397 | (0UL << 13); // SET_VC
398 write32(REG_BG_CFG0, bg);
401
404
408
409 uint32_t pll_cfg1 = (3UL << 0) // R3_SEL
410 | (1UL << 4) // RZ_SEL
411 | (3UL << 8) // C2_SEL
412 | (6UL << 11); // CZ_SEL
413 write32(REG_PLL_CFG1, pll_cfg1);
414
415 refgenInit();
416 }
417
428
469
486
491
492 uint32_t dac_cfg = (((uint32_t)clk.osr_sel) << 0) // OSR_SEL
493 | (0UL << 4) // OP_MODE
494 | (0UL << 7) // CLK_SRC_SEL (xtal)
495 | (((uint32_t)clk.clk_div) << 8); // CLK_DIV
496 write32(REG_DAC_CFG, dac_cfg);
497
498 constexpr uint32_t sinc_gain = 0x14D;
499 uint32_t ch0_cfg = DAC_CH_CFG_ENABLE | (2UL << 2) // DEM_MODE
500 | (6UL << 8) // ROUGH_VOL
501 | (0UL << 12) // FINE_VOL
503 (sinc_gain << 17);
504 write32(REG_DAC_CH0_CFG, ch0_cfg);
505
508 (2UL << 3); // RAMP_INTERVAL
510
511 write32(REG_DAC_CH0_DEBUG, 0xFFUL); // BYPASS=0, DATA_OUT=0xFF
512 }
513
528
570
577
580 uint32_t adc_cfg = (((uint32_t)clk.osr_sel) << 0) // OSR_SEL
581 | (0UL << 3) // OP_MODE
582 | (0UL << 6) // CLK_SRC_SEL (xtal)
583 | (((uint32_t)clk.clk_div) << 8); // CLK_DIV
584 write32(REG_ADC_CFG, adc_cfg);
585
586 uint32_t ch0_cfg = ADC_CH_CFG_ENABLE | (0x7UL << 2) // HPF_COEF
587 | (0xaUL << 8) // ROUGH_VOL
588 | (0UL << 12) // FINE_VOL
590 write32(REG_ADC_CH0_CFG, ch0_cfg);
591 }
592
596 void mute(bool mute_flag) {
597 if (mute_flag) {
598 uint32_t reg_val = read32(REG_DAC_CH0_CFG);
599 last_fine_vol = (reg_val & DAC_CH_CFG_FINE_VOL_Msk) >> 12;
601 } else {
603 }
604 }
605};
606
607} // namespace audio_driver
SF32LB (SiFli SF32LB5x) on-chip AUDCODEC driver, ported from the Zephyr RTOS driver drivers/audio/sf3...
Definition SF32LB.h:38
static constexpr int MIN_VOLUME_DB
Definition SF32LB.h:227
static constexpr uint32_t DAC_CH_CFG_DITHER_GAIN_Msk
Definition SF32LB.h:114
static constexpr uint32_t PLL_CFG5_EN_CLK_CHOP_REFGEN
Definition SF32LB.h:184
static constexpr uint32_t CFG_ADC_EN_DLY_SEL_Msk
Definition SF32LB.h:90
static constexpr uint32_t PLL_CFG1_CZ_SEL_Msk
Definition SF32LB.h:163
static constexpr uint32_t PLL_CFG6_DIVA_CLK_ADC0_Msk
Definition SF32LB.h:196
static constexpr uint32_t PLL_CFG4_SEL_CLK_DAC
Definition SF32LB.h:176
static constexpr uint32_t PLL_CFG6_SEL_CLK_CHOP_MICBIAS_Msk
Definition SF32LB.h:187
static constexpr uint32_t REFGEN_CFG_EN
Definition SF32LB.h:149
static constexpr uint32_t ADC_CFG_PATH_RESET
Definition SF32LB.h:101
static constexpr uint32_t ADCx_CFG1_GC_Msk
Definition SF32LB.h:207
static constexpr uint32_t DAC_CFG_OSR_SEL_Msk
Definition SF32LB.h:93
void setBit(uint32_t offset, uint32_t mask)
Definition SF32LB.h:348
static constexpr uint32_t DAC_CH_CFG_FINE_VOL_Msk
Definition SF32LB.h:111
static constexpr uint32_t PLL_CFG6_SEL_CLK_ADC0
Definition SF32LB.h:195
static constexpr uint32_t PLL_CFG2_EN_DIG
Definition SF32LB.h:167
static constexpr uint32_t ADC_CH_CFG_HPF_BYPASS
Definition SF32LB.h:130
static constexpr uint32_t ADCx_CFG1_VREF_SEL_Msk
Definition SF32LB.h:206
static constexpr uint32_t ADC_ANA_CFG_MICBIAS_CHOP_EN
Definition SF32LB.h:201
static constexpr uint32_t DAC_CH_CFG_DITHER_EN
Definition SF32LB.h:115
static constexpr uint32_t PLL_CFG6_DIVA_CLK_ADC1_Msk
Definition SF32LB.h:193
static constexpr uint32_t REFGEN_CFG_EN_CHOP
Definition SF32LB.h:150
static constexpr uint32_t ADC_CH_CFG_DATA_FORMAT
Definition SF32LB.h:136
static constexpr uint32_t DAC_CH_DEBUG_DATA_OUT_Msk
Definition SF32LB.h:125
static constexpr uint32_t BG_CFG0_EN_SMPL
Definition SF32LB.h:142
static constexpr uint32_t DAC_CH_CFG_ENABLE
Definition SF32LB.h:106
static constexpr uint32_t ADC_CH_CFG_STB_INV
Definition SF32LB.h:132
static constexpr uint32_t DACx_CFG_SR
Definition SF32LB.h:219
static constexpr uint32_t PLL_CFG6_SEL_CLK_ADC_SOURCE
Definition SF32LB.h:198
static constexpr uint32_t DACx_CFG_EN_OS_DAC
Definition SF32LB.h:218
static constexpr uint32_t DACx_CFG_EN_DAC
Definition SF32LB.h:223
static constexpr uint32_t BG_CFG0_MIC_VREF_SEL_Msk
Definition SF32LB.h:144
static constexpr uint32_t PLL_CFG1_R3_SEL_Msk
Definition SF32LB.h:160
void closeAnalogDacPath()
Powers down the analog DAC path (mirrors close_analog_dac_path()).
Definition SF32LB.h:471
static constexpr uint32_t DAC_CH_CFG_EXT_RAMP_EN
Definition SF32LB.h:118
static constexpr uint32_t DAC_CH_DEBUG_BYPASS
Definition SF32LB.h:126
void mute(bool mute_flag)
Definition SF32LB.h:596
void setBaseAddress(uintptr_t base)
Definition SF32LB.h:248
static constexpr uint32_t ADCx_CFG1_DIFF_EN
Definition SF32LB.h:209
static constexpr uint32_t DAC_CH_CFG_DEM_MODE_Msk
Definition SF32LB.h:108
void configAnalogDacPath(const DacClockConfig &clk)
Configures the analog DAC bias/clock tree and enables the DAC amps.
Definition SF32LB.h:430
static constexpr uint32_t PLL_CFG6_EN_CLK_CHOP_MICBIAS
Definition SF32LB.h:188
bool setVolumeDb(int volume_db)
Sets the DAC output volume in dB, range MIN_VOLUME_DB..MAX_VOLUME_DB.
Definition SF32LB.h:311
static constexpr uint32_t PLL_CFG4_SEL_CLK_DAC_SOURCE_Msk
Definition SF32LB.h:177
void closeAnalogAdcPath()
Powers down the analog ADC path (mirrors close_analog_adc_path()).
Definition SF32LB.h:572
static constexpr uint32_t BG_CFG0_EN_RCFLT
Definition SF32LB.h:143
static constexpr uint32_t BG_CFG0_EN_AMP
Definition SF32LB.h:145
static constexpr uint32_t ADCx_CFG1_DACN_EN
Definition SF32LB.h:208
uint32_t last_fine_vol
Definition SF32LB.h:336
static constexpr uint32_t DAC_CH_CFG_DATA_FORMAT
Definition SF32LB.h:112
static constexpr uint32_t ADCx_CFG1_VCMST
Definition SF32LB.h:205
static constexpr uint32_t ADC_CFG_CLK_DIV_Msk
Definition SF32LB.h:103
static constexpr uint32_t PLL_CFG4_EN_CLK_DAC
Definition SF32LB.h:175
bool begin(uintptr_t base, uint32_t sample_rate=48000)
Definition SF32LB.h:254
void start()
Starts (un-mutes) the DAC output path.
Definition SF32LB.h:280
static constexpr uint32_t CFG_DAC_ENABLE
Definition SF32LB.h:89
void refgenInit()
Definition SF32LB.h:418
static constexpr uint32_t PLL_CFG6_DIVA_CLK_ADC2_Msk
Definition SF32LB.h:190
static constexpr uint32_t DAC_CH_CFG_EXT_RAMP_INTERVAL_Msk
Definition SF32LB.h:121
static constexpr uint32_t ADC_CFG_OSR_SEL_Msk
Definition SF32LB.h:99
Reg
Register offsets (byte offsets from the AUDCODEC base address)
Definition SF32LB.h:41
@ REG_ADC2_CFG2
Definition SF32LB.h:82
@ REG_IRQ
Definition SF32LB.h:44
@ REG_PLL_CFG0
Definition SF32LB.h:68
@ REG_DAC_CFG
Definition SF32LB.h:46
@ REG_DAC_CH1_ENTRY
Definition SF32LB.h:58
@ REG_PLL_STAT
Definition SF32LB.h:75
@ REG_ADC_CH0_ENTRY
Definition SF32LB.h:55
@ REG_ADC_CH1_ENTRY
Definition SF32LB.h:56
@ REG_DAC_CH0_CFG
Definition SF32LB.h:51
@ REG_COMMON_CFG
Definition SF32LB.h:63
@ REG_ADC_CFG
Definition SF32LB.h:47
@ REG_PLL_CFG4
Definition SF32LB.h:72
@ REG_PLL_CAL_CFG
Definition SF32LB.h:76
@ REG_ADC_CH0_CFG
Definition SF32LB.h:49
@ REG_CFG
Definition SF32LB.h:43
@ REG_PLL_CFG5
Definition SF32LB.h:73
@ REG_PLL_CAL_RESULT
Definition SF32LB.h:77
@ REG_BG_CFG1
Definition SF32LB.h:65
@ REG_DAC_CH0_CFG_EXT
Definition SF32LB.h:52
@ REG_DAC_CH0_ENTRY
Definition SF32LB.h:57
@ REG_ID
Definition SF32LB.h:42
@ REG_APB_STAT
Definition SF32LB.h:48
@ REG_BG_CFG0
Definition SF32LB.h:64
@ REG_DAC_CH1_CFG_EXT
Definition SF32LB.h:54
@ REG_DAC_CH1_DEBUG
Definition SF32LB.h:60
@ REG_PLL_CFG2
Definition SF32LB.h:70
@ REG_PLL_CFG1
Definition SF32LB.h:69
@ REG_DAC_CH1_DC
Definition SF32LB.h:62
@ REG_DAC_CH0_DEBUG
Definition SF32LB.h:59
@ REG_ADC1_CFG1
Definition SF32LB.h:79
@ REG_PLL_CFG6
Definition SF32LB.h:74
@ REG_ADC1_CFG2
Definition SF32LB.h:80
@ REG_DAC1_CFG
Definition SF32LB.h:83
@ REG_IRQ_MSK
Definition SF32LB.h:45
@ REG_DAC_CH1_CFG
Definition SF32LB.h:53
@ REG_ADC_CH1_CFG
Definition SF32LB.h:50
@ REG_ADC_ANA_CFG
Definition SF32LB.h:78
@ REG_PLL_CFG3
Definition SF32LB.h:71
@ REG_DAC2_CFG
Definition SF32LB.h:84
@ REG_REFGEN_CFG
Definition SF32LB.h:67
@ REG_BG_CFG2
Definition SF32LB.h:66
@ REG_DAC_CH0_DC
Definition SF32LB.h:61
@ REG_ADC2_CFG1
Definition SF32LB.h:81
static constexpr uint32_t PLL_CFG3_EN_SDM
Definition SF32LB.h:170
uintptr_t reg_base
Definition SF32LB.h:335
static constexpr uint32_t DAC_CH_CFG_DOUT_MUTE
Definition SF32LB.h:107
static constexpr uint32_t DAC_CFG_PATH_RESET
Definition SF32LB.h:95
static constexpr uint32_t ADC_ANA_CFG_MICBIAS_EN
Definition SF32LB.h:202
static constexpr uint32_t ADCx_CFG2_CLEAR
Definition SF32LB.h:213
void updateReg32(uint32_t offset, uint32_t mask, uint32_t value)
Read-Modify-Write of selected bits of a 32 bit register.
Definition SF32LB.h:357
static constexpr uint32_t DAC_CFG_CLK_DIV_Msk
Definition SF32LB.h:97
static constexpr uint32_t PLL_CFG6_SEL_CLK_ADC2
Definition SF32LB.h:189
static constexpr uint32_t ADC_CH_CFG_ENABLE
Definition SF32LB.h:129
uint32_t read32(uint32_t offset)
Definition SF32LB.h:340
static constexpr uint32_t DACx_CFG_EN_AMP
Definition SF32LB.h:221
void configAnalogAdcPath(const AdcClockConfig &clk)
Configures the analog ADC bias/clock tree and enables ADC1.
Definition SF32LB.h:530
static constexpr uint32_t PLL_CFG1_C2_SEL_Msk
Definition SF32LB.h:162
void stop()
Mutes and disables the DAC output path.
Definition SF32LB.h:283
static constexpr uint32_t DAC_CH_CFG_EXT_RAMP_MODE
Definition SF32LB.h:119
static constexpr int MAX_VOLUME_DB
Definition SF32LB.h:228
static constexpr uint32_t PLL_CFG1_RZ_SEL_Msk
Definition SF32LB.h:161
static constexpr uint32_t ADCx_CFG2_EN
Definition SF32LB.h:215
static constexpr uint32_t DAC_CH_CFG_EXT_ZERO_ADJUST_EN
Definition SF32LB.h:120
static constexpr uint32_t ADC_CH_CFG_DMA_EN
Definition SF32LB.h:133
static constexpr uint32_t ADC_CH_CFG_FINE_VOL_Msk
Definition SF32LB.h:135
static constexpr uint32_t ADCx_CFG2_RSTB
Definition SF32LB.h:214
static constexpr uint32_t DAC_CFG_OP_MODE_Msk
Definition SF32LB.h:94
static const DacClockConfig * dacClockConfig(uint32_t sample_rate)
Definition SF32LB.h:364
static constexpr uint32_t PLL_CFG5_EN_CLK_CHOP_BG
Definition SF32LB.h:183
static constexpr uint32_t PLL_CFG6_SEL_CLK_ADC1
Definition SF32LB.h:192
bool setMute(bool mute_flag) override
Definition SF32LB.h:305
static constexpr uint32_t ADC_CFG_OP_MODE_Msk
Definition SF32LB.h:100
static constexpr uint32_t PLL_CFG4_DIVA_CLK_DIG_Msk
Definition SF32LB.h:179
static constexpr uint32_t PLL_CFG0_EN_IARY
Definition SF32LB.h:157
static const AdcClockConfig * adcClockConfig(uint32_t sample_rate)
Definition SF32LB.h:375
static constexpr uint32_t DACx_CFG_EN_VCM
Definition SF32LB.h:222
static constexpr uint32_t CFG_ADC_ENABLE
Definition SF32LB.h:88
static constexpr uint32_t DACx_CFG_LP_MODE
Definition SF32LB.h:220
static constexpr uint32_t BG_CFG0_VREF_SEL_Msk
Definition SF32LB.h:141
void stopInput()
Disables the ADC input path.
Definition SF32LB.h:294
static constexpr uint32_t PLL_CFG4_EN_CLK_DIG
Definition SF32LB.h:180
static constexpr uint32_t PLL_CFG6_EN_CLK_ADC0
Definition SF32LB.h:197
void configRxChannel(const AdcClockConfig &clk)
Configures the digital ADC channel 0 path (DMA disabled).
Definition SF32LB.h:579
static constexpr uint32_t PLL_CFG2_RSTB
Definition SF32LB.h:166
static constexpr uint32_t BG_CFG0_SET_VC
Definition SF32LB.h:146
static constexpr uint32_t DAC_CH_CFG_EXT_RAMP_STAT_Msk
Definition SF32LB.h:122
static constexpr uint32_t BG_CFG0_EN
Definition SF32LB.h:139
void write32(uint32_t offset, uint32_t value)
Definition SF32LB.h:344
static constexpr uint32_t DAC_CH_CFG_ROUGH_VOL_Msk
Definition SF32LB.h:110
static constexpr uint32_t PLL_CFG4_EN_CLK_CHOP_DAC
Definition SF32LB.h:173
static constexpr uint32_t PLL_CFG4_SEL_CLK_DIG
Definition SF32LB.h:178
void clearBit(uint32_t offset, uint32_t mask)
Definition SF32LB.h:352
static constexpr uint32_t ADC_CFG_CLK_SRC_SEL_Msk
Definition SF32LB.h:102
static constexpr uint32_t ADCx_CFG1_FSP_Msk
Definition SF32LB.h:210
bool setVolume(int volume) override
Definition SF32LB.h:327
static constexpr uint32_t DAC_CFG_CLK_SRC_SEL_Msk
Definition SF32LB.h:96
static constexpr uint32_t PLL_CFG6_EN_CLK_ADC1
Definition SF32LB.h:194
bool beginInput(uint32_t sample_rate=48000)
Definition SF32LB.h:269
static constexpr uint32_t DAC_CH_CFG_SINC_GAIN_Msk
Definition SF32LB.h:113
static constexpr uint32_t ADC_CH_CFG_HPF_COEF_Msk
Definition SF32LB.h:131
static constexpr uint32_t PLL_CFG4_DIVA_CLK_DAC_Msk
Definition SF32LB.h:174
static constexpr uint32_t ADC_CH_CFG_ROUGH_VOL_Msk
Definition SF32LB.h:134
static constexpr uint32_t PLL_CFG0_EN_VCO
Definition SF32LB.h:156
static constexpr uint32_t REFGEN_CFG_LV_MODE
Definition SF32LB.h:151
void configDacPath(bool bypass)
Enables/disables the digital bypass path on both DAC channels.
Definition SF32LB.h:515
void pllAndReferencesOn()
Definition SF32LB.h:388
static constexpr uint32_t DAC_CH_CFG_DMA_EN
Definition SF32LB.h:109
static constexpr uint32_t BG_CFG0_LP_MODE
Definition SF32LB.h:140
static constexpr uint32_t PLL_CFG6_EN_CLK_ADC2
Definition SF32LB.h:191
static constexpr uint32_t PLL_CFG0_EN_ANA
Definition SF32LB.h:155
static constexpr uint32_t PLL_CFG0_ICP_SEL_Msk
Definition SF32LB.h:154
void configTxChannel(const DacClockConfig &clk)
Definition SF32LB.h:489
Common parent class for codec drivers that have been ported from the Zephyr RTOS audio driver impleme...
Definition ZephyrDriverCommon.h:22
int volume_percent
Last volume (in %) provided to setVolume()
Definition ZephyrDriverCommon.h:89
Namespace for audio driver components.
Definition AudioBoard.h:5
void delayMs(unsigned long ms)
Definition API_Delay.h:19
uint8_t clk_div
Definition SF32LB.h:240
uint8_t osr_sel
Definition SF32LB.h:241
uint32_t sample_rate
Definition SF32LB.h:239
uint8_t fsp
Definition SF32LB.h:243
uint8_t diva_clk_adc
Definition SF32LB.h:242
Clock divider settings for the non-PLL (48 MHz XTAL) sample rates.
Definition SF32LB.h:231
uint8_t clk_div
Definition SF32LB.h:233
uint8_t osr_sel
Definition SF32LB.h:234
uint32_t sample_rate
Definition SF32LB.h:232
uint8_t diva_clk_dac
Definition SF32LB.h:235