254 bool begin(uintptr_t base, uint32_t sample_rate = 48000) {
257 if (dac_clk ==
nullptr)
return false;
271 if (adc_clk ==
nullptr)
return false;
318 uint32_t value = (rough_vol << 8) | (fine_vol << 12);
341 return *
reinterpret_cast<volatile uint32_t*
>(
reg_base + offset);
344 void write32(uint32_t offset, uint32_t value) {
345 *
reinterpret_cast<volatile uint32_t*
>(
reg_base + offset) = value;
348 void setBit(uint32_t offset, uint32_t mask) {
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));
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},
369 for (
const auto& cfg : table) {
370 if (cfg.sample_rate == sample_rate)
return &cfg;
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},
380 for (
const auto& cfg : table) {
381 if (cfg.sample_rate == sample_rate)
return &cfg;
390 uint32_t bg = (1UL << 0)
409 uint32_t pll_cfg1 = (3UL << 0)
492 uint32_t dac_cfg = (((uint32_t)clk.
osr_sel) << 0)
495 | (((uint32_t)clk.
clk_div) << 8);
498 constexpr uint32_t sinc_gain = 0x14D;
537 uint32_t pll_cfg6 = (3UL << 6)
580 uint32_t adc_cfg = (((uint32_t)clk.
osr_sel) << 0)
583 | (((uint32_t)clk.
clk_div) << 8);
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