1 // Copyright (C) 2022 Beken Corporation 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 // 15 #pragma once 16 17 #include <driver/int_types.h> 18 #include <common/bk_include.h> 19 #include <driver/hal/hal_aud_types.h> 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 26 typedef void (*aud_isr_t)(void *param); 27 28 29 /** 30 * @brief AUD defines 31 * @defgroup bk_api_aud_defs macos 32 * @ingroup bk_api_aud 33 * @{ 34 */ 35 36 #define BK_ERR_AUD_NOT_INIT (BK_ERR_AUD_BASE - 1) /**< AUD driver not init */ 37 #define BK_ERR_AUD_ISR_ID (BK_ERR_AUD_BASE - 2) /**< AUD isr id is invalid */ 38 #define BK_ERR_AUD_ADC_MODE (BK_ERR_AUD_BASE - 3) /**< AUD adc work mode is invalid */ 39 40 #define AUD_HAL_REG_BASE AUD_LL_REG_BASE 41 #define AUD_DAC_FIFO_ADDR (AUD_HAL_REG_BASE + 0x33 * 4) 42 43 /** 44 * @} 45 */ 46 47 /** 48 * @brief AUD enum defines 49 * @defgroup bk_api_aud_enum AUD enums 50 * @ingroup bk_api_aud 51 * @{ 52 */ 53 54 typedef enum { 55 AUD_ISR_DTMF = 0, /**< dtmf_int_en */ 56 AUD_ISR_ADCL, /**< adcl_int_en */ 57 AUD_ISR_DACR, /**< dacr_int_en */ 58 AUD_ISR_DACL, /**< dacl_int_en */ 59 AUD_ISR_MAX /**< AUD isr id max */ 60 } aud_isr_id_t; 61 62 typedef enum { 63 AUD_ADC_WORK_MODE_NULL = 0, /**< no mode */ 64 AUD_ADC_WORK_MODE_ADC, /**< ADC mode */ 65 AUD_ADC_WORK_MODE_DTMF, /**< DTMF mode */ 66 AUD_ADC_WORK_MODE_MAX, 67 } aud_adc_work_mode_t; 68 69 typedef enum { 70 AUD_ADC_SAMP_RATE_8K = 0, /**< ADC sample rate : 8k */ 71 AUD_ADC_SAMP_RATE_16K, /**< ADC sample rate : 16k */ 72 AUD_ADC_SAMP_RATE_44K, /**< ADC sample rate : 44.1k */ 73 AUD_ADC_SAMP_RATE_48K, /**< ADC sample rate : 48k */ 74 AUD_ADC_SAMP_RATE_MAX, 75 } aud_adc_samp_rate_t; 76 77 typedef enum { 78 AUD_ADC_HPF_BYPASS_DISABLE = 0, /**< AUD ADC hpf bypass disable */ 79 AUD_ADC_HPF_BYPASS_ENABLE, /**< AUD ADC hpf bypass enable */ 80 AUD_ADC_HPF_BYPASS_MAX, 81 } aud_adc_hpf_bypass_t; 82 83 typedef enum { 84 AUD_ADC_SAMP_EDGE_RISING = 0, /**< AUD ADC sampling clock edge : rising edge */ 85 AUD_ADC_SAMP_EDGE_FALLING, /**< AUD ADC sampling clock edge : falling edge */ 86 AUD_ADC_SAMP_EDGE_MAX, 87 } aud_adc_samp_edge_t; 88 89 typedef enum { 90 AUD_ADCL_INT_DISABLE = 0, /**< AUD ADCL interrupt disable */ 91 AUD_ADCL_INT_ENABLE, /**< AUD ADCL interrupt enable */ 92 AUD_ADCL_INT_MAX, 93 } aud_adcl_int_t; 94 95 typedef enum { 96 AUD_DTMF_INT_DISABLE = 0, /**< AUD DTMF interrupt disable */ 97 AUD_DTMF_INT_ENABLE, /**< AUD DTMF interrupt enable */ 98 AUD_DTMF_INT_MAX, 99 } aud_dtmf_int_t; 100 101 typedef enum { 102 AUD_LOOP_ADC2DAC_DISABLE = 0, /**< ADC to DAC loop test disable */ 103 AUD_LOOP_ADC2DAC_ENABLE, /**< ADC to DAC loop test enable */ 104 AUD_LOOP_ADC2DAC_MAX, 105 } aud_loop_adc2dac_t; 106 107 typedef enum { 108 AUD_LOOP_DTMF2DAC_DISABLE = 0, /**< DTMF to DAC loop test disable */ 109 AUD_LOOP_DTMF2DAC_ENABLE, /**< DTMF to DAC loop test enable */ 110 AUD_LOOP_DTMF2DAC_MAX, 111 } aud_loop_dtmf2dac_t; 112 113 typedef enum { 114 AUD_AGC_NG_DISABLE = 0, /**< disable noise gating */ 115 AUD_AGC_NG_ENABLE, /**< enable noise gating */ 116 AUD_AGC_NG_MAX, 117 } aud_agc_ng_enable_t; 118 119 typedef enum { 120 AUD_AGC_NG_METHOD_MUTE = 0, /**< mute or demute : default */ 121 AUD_AGC_NG_METHOD_CREASE, /**< gradually increase or decrease gac */ 122 AUD_AGC_NG_METHOD_MAX, 123 } aud_agc_method_t; 124 125 typedef enum { 126 AUD_AGC_DECAY_TIME_128 = 0, /**< AGC decay time :128 2.7ms */ 127 AUD_AGC_DECAY_TIME_256, /**< AGC decay time :256 */ 128 AUD_AGC_DECAY_TIME_512, /**< AGC decay time :512 */ 129 AUD_AGC_DECAY_TIME_1024, /**< AGC decay time :1024 */ 130 AUD_AGC_DECAY_TIME_2048, /**< AGC decay time :2048 */ 131 AUD_AGC_DECAY_TIME_4096, /**< AGC decay time :4096 */ 132 AUD_AGC_DECAY_TIME_8192, /**< AGC decay time :8192 */ 133 AUD_AGC_DECAY_TIME_16384, /**< AGC decay time :16384 340ms*/ 134 AUD_AGC_DECAY_TIME_MAX, 135 } aud_agc_decay_time_t; 136 137 typedef enum { 138 AUD_AGC_ATTACK_TIME_8 = 0, /**< AGC attack time :8 0.1667ms */ 139 AUD_AGC_ATTACK_TIME_16, /**< AGC attack time :16 */ 140 AUD_AGC_ATTACK_TIME_32, /**< AGC attack time :32 */ 141 AUD_AGC_ATTACK_TIME_64, /**< AGC attack time :64 */ 142 AUD_AGC_ATTACK_TIME_128, /**< AGC attack time :128 */ 143 AUD_AGC_ATTACK_TIME_256, /**< AGC attack time :256 */ 144 AUD_AGC_ATTACK_TIME_512, /**< AGC attack time :512 */ 145 AUD_AGC_ATTACK_TIME_1024, /**< AGC attack time :1024 21 ms*/ 146 AUD_AGC_ATTACK_TIME_MAX, 147 } aud_agc_attack_time_t; 148 149 typedef enum { 150 AUD_AGC_IIR_COEF_1_32 = 0, /**< AGC IRR coefficient : 1/32 */ 151 AUD_AGC_IIR_COEF_1_64, /**< AGC IRR coefficient : 1/64 */ 152 AUD_AGC_IIR_COEF_1_128, /**< AGC IRR coefficient : 1/128 */ 153 AUD_AGC_IIR_COEF_1_256, /**< AGC IRR coefficient : 1/256 */ 154 AUD_AGC_IIR_COEF_1_512, /**< AGC IRR coefficient : 1/512 */ 155 AUD_AGC_IIR_COEF_1_1024, /**< AGC IRR coefficient : 1/1024 */ 156 AUD_AGC_IIR_COEF_1_2048, /**< AGC IRR coefficient : 1/2048 */ 157 AUD_AGC_IIR_COEF_1_4096, /**< AGC IRR coefficient : 1/4096 */ 158 AUD_AGC_IIR_COEF_MAX, 159 } aud_agc_iir_coef_t; 160 161 typedef enum { 162 AUD_AGC_DISABLE = 0, /**< disable AGC */ 163 AUD_AGC_ENABLE, /**< enable AGC */ 164 AUD_AGC_MAX, 165 } aud_agc_enable_t; 166 167 typedef enum { 168 AUD_GAC_MANUAL_PGA_DISABLE = 0, /**< disable AGC manual set pga */ 169 AUD_GAC_MANUAL_PGA_ENABLE, /**< enable AGC manual set pga */ 170 AUD_GAC_MANUAL_PGA_MAX, 171 } aud_agc_manual_pga_en_t; 172 173 typedef enum { 174 AUD_ADC_DISABLE = 0, /**< disable adc */ 175 AUD_ADC_ENABLE, /**< enable adc */ 176 AUD_ADC_ENABLE_MAX, 177 } aud_adc_enable_t; 178 179 typedef enum { 180 AUD_ADC_LINE_DISABLE = 0, /**< disable line in */ 181 AUD_ADC_LINE_ENABLE, /**< enable line in */ 182 AUD_ADC_LINE_ENABLE_MAX, 183 } aud_adc_line_enable_t; 184 185 typedef enum { 186 AUD_MIC_DISABLE = 0, /**< disable all mic */ 187 AUD_MIC_MIC1_ENABLE, /**< enable mic1 */ 188 AUD_MIC_MIC2_ENABLE, /**< enable mic2 */ 189 AUD_MIC_ALL_ENABLE, /**< enable all mic */ 190 AUD_MIC_MAX, 191 } aud_mic_enable_t; 192 193 typedef enum { 194 AUD_GAC_NOISE_TOUT_0 = 0, /**< AGC noise tout: 0 0ms */ 195 AUD_GAC_NOISE_TOUT_4, /**< AGC noise tout: 4 0.5ms */ 196 AUD_GAC_NOISE_TOUT_8, /**< AGC noise tout: 8 */ 197 AUD_GAC_NOISE_TOUT_16, /**< AGC noise tout: 16 */ 198 AUD_GAC_NOISE_TOUT_32, /**< AGC noise tout: 32 */ 199 AUD_GAC_NOISE_TOUT_64, /**< AGC noise tout: 64 */ 200 AUD_GAC_NOISE_TOUT_128, /**< AGC noise tout: 128 */ 201 AUD_GAC_NOISE_TOUT_256, /**< AGC noise tout: 256 32ms */ 202 AUD_GAC_NOISE_TOUT_MAX, 203 } aud_gac_noise_tout_t; 204 205 typedef enum { 206 AUD_GAC_HIGH_DUR_0 = 0, /**< AGC 0 ms,as soon as MIC_RSSI value higher than NOISE_HIGH,Noise gating work,leave off noise status */ 207 AUD_GAC_HIGH_DUR_4, /**< AGC high duration: 4 0.5ms*/ 208 AUD_GAC_HIGH_DUR_8, /**< AGC high duration: 8 */ 209 AUD_GAC_HIGH_DUR_16, /**< AGC high duration: 16 */ 210 AUD_GAC_HIGH_DUR_32, /**< AGC high duration: 32 */ 211 AUD_GAC_HIGH_DUR_64, /**< AGC high duration: 64 */ 212 AUD_GAC_HIGH_DUR_128, /**< AGC high duration: 128 */ 213 AUD_GAC_HIGH_DUR_256, /**< AGC high duration: 256 32ms */ 214 AUD_GAC_HIGH_DUR_MAX, 215 } aud_gac_high_dur_t; 216 217 typedef enum { 218 AUD_GAC_LOW_DUR_0 = 0, /**< AGC 0 ms,as soon as MIC_RSSI value lower than NOISE_HIGH,Noise gating work,leave off noise status */ 219 AUD_GAC_LOW_DUR_4, /**< AGC low duration: 4 0.5ms*/ 220 AUD_GAC_LOW_DUR_8, /**< AGC low duration: 8 */ 221 AUD_GAC_LOW_DUR_16, /**< AGC low duration: 16 */ 222 AUD_GAC_LOW_DUR_32, /**< AGC low duration: 32 */ 223 AUD_GAC_LOW_DUR_64, /**< AGC low duration: 64 */ 224 AUD_GAC_LOW_DUR_128, /**< AGC low duration: 128 */ 225 AUD_GAC_LOW_DUR_256, /**< AGC low duration: 256 32ms */ 226 AUD_GAC_LOW_DUR_MAX, 227 } aud_gac_low_dur_t; 228 229 230 /* DTMF */ 231 232 typedef enum { 233 AUD_DTMF_DISABLE = 0, /**< disable dtmf */ 234 AUD_DTMF_ENABLE, /**< enable dtmf */ 235 AUD_DTMF_ENABLE_MAX, 236 } aud_dtmf_enable_t; 237 238 typedef enum { 239 AUD_DTMF_TONE_PATTERN_DTMF = 0, /**< 0: DTMF(Active_Time) + Zeros(Pause_Time) */ 240 AUD_DTMF_TONE_PATTERN_TONE, /**< 1:Tone1(Active_Time) + Tone2(Pause_Time) */ 241 AUD_DTMF_TONE_PATTERN_MAX, 242 } aud_dtmf_tone_pattern_t; 243 244 typedef enum { 245 AUD_DTMF_TONE_MODE_SIGNAL = 0, /**< 0:signal mode */ 246 AUD_DTMF_TONE_MODE_CONTIUS, /**< 1:continuous mode */ 247 AUD_DTMF_TONE_MODE_MAX, 248 } aud_dtmf_tone_mode_t; 249 250 typedef enum { 251 AUD_DTMF_TONE_ATTU_MINUS_1 = 0, /**< Tone1 damp set: -1 db */ 252 AUD_DTMF_TONE_ATTU_MINUS_2, /**< Tone1 damp set: -2 db */ 253 AUD_DTMF_TONE_ATTU_MINUS_3, /**< Tone1 damp set: -3 db */ 254 AUD_DTMF_TONE_ATTU_MINUS_4, /**< Tone1 damp set: -4 db */ 255 AUD_DTMF_TONE_ATTU_MINUS_5, /**< Tone1 damp set: -5 db */ 256 AUD_DTMF_TONE_ATTU_MINUS_6, /**< Tone1 damp set: -6 db */ 257 AUD_DTMF_TONE_ATTU_MINUS_7, /**< Tone1 damp set: -7 db */ 258 AUD_DTMF_TONE_ATTU_MINUS_8, /**< Tone1 damp set: -8 db */ 259 AUD_DTMF_TONE_ATTU_MINUS_9, /**< Tone1 damp set: -9 db */ 260 AUD_DTMF_TONE_ATTU_MINUS_10, /**< Tone1 damp set: -10 db */ 261 AUD_DTMF_TONE_ATTU_MINUS_11, /**< Tone1 damp set: -11 db */ 262 AUD_DTMF_TONE_ATTU_MINUS_12, /**< Tone1 damp set: -12 db */ 263 AUD_DTMF_TONE_ATTU_MINUS_13, /**< Tone1 damp set: -13 db */ 264 AUD_DTMF_TONE_ATTU_MINUS_14, /**< Tone1 damp set: -14 db */ 265 AUD_DTMF_TONE_ATTU_MINUS_15, /**< Tone1 damp set: -15 db */ 266 AUD_DTMF_TONE_ATTU_MINUS_MAX, 267 } aud_dtmf_tone_attu_t; 268 269 typedef enum { 270 AUD_DTMF_TONE_DISABLE = 0, /**< 0:disable tone */ 271 AUD_DTMF_TONE_ENABLE, /**< 1:enable tone */ 272 AUD_DTMF_TONE_ENABLE_MAX, 273 } aud_dtmf_tone_enable_t; 274 275 typedef enum { 276 AUD_ADC_TRACMOD_MANUAL_DISABLE = 0, /**< 0:disable ADC fractional frequency division of manual set */ 277 AUD_ADC_TRACMOD_MANUAL_ENABLE, /**< 1:enable ADC fractional frequency division of manual set */ 278 AUD_ADC_TRACMOD_MANUAL_EN_MAX, 279 } aud_adc_fracmod_manual_en_t; 280 281 /**dac enum */ 282 typedef enum { 283 AUD_DAC_DISABLE = 0, /**< 0:disable dac */ 284 AUD_DAC_ENABLE, /**< 1:enable dac */ 285 AUD_DAC_OTHERS, 286 } aud_dac_enable_t; 287 288 typedef enum { 289 AUD_DAC_CHL_DISABLE = 0, /**< disable all dac channel */ 290 AUD_DAC_CHL_L_ENABLE, /**< enable dac left channel */ 291 AUD_DAC_CHL_R_ENABLE, /**< enable dac right channel */ 292 AUD_DAC_CHL_LR_ENABLE, /**< enable dac left and right channel */ 293 AUD_DAC_CHL_MAX, 294 } aud_dac_chl_enable_t; 295 296 typedef enum { 297 AUD_DAC_WORK_MODE_SIGNAL_END = 0, 298 AUD_DAC_WORK_MODE_DIFFEN, 299 AUD_DAC_WORK_MODE_MAX, 300 } aud_dac_work_mode_t; 301 302 typedef enum { 303 AUD_DAC_SAMP_RATE_8K = 0, /**< DAC sample rate : 8k */ 304 AUD_DAC_SAMP_RATE_11_025K, /**< DAC sample rate : 11.025k */ 305 AUD_DAC_SAMP_RATE_12K, /**< DAC sample rate : 12k */ 306 AUD_DAC_SAMP_RATE_16K, /**< DAC sample rate : 16k */ 307 AUD_DAC_SAMP_RATE_22_05K, /**< DAC sample rate : 22.05k */ 308 AUD_DAC_SAMP_RATE_24K, /**< DAC sample rate : 24k */ 309 AUD_DAC_SAMP_RATE_32K, /**< DAC sample rate : 32k */ 310 AUD_DAC_SAMP_RATE_44_1K, /**< DAC sample rate : 44.1k */ 311 AUD_DAC_SAMP_RATE_48K, /**< DAC sample rate : 48k */ 312 AUD_DAC_SAMP_RATE_MAX, 313 } aud_dac_samp_rate_t; 314 315 typedef enum { 316 AUD_DAC_SAMP_RATE_SOURCE_8K = 0, /**< DAC sample rate : 8k */ 317 AUD_DAC_SAMP_RATE_SOURCE_16K, /**< DAC sample rate : 16k */ 318 AUD_DAC_SAMP_RATE_SOURCE_44_1K, /**< DAC sample rate : 44.1k */ 319 AUD_DAC_SAMP_RATE_SOURCE_48K, /**< DAC sample rate : 48k */ 320 AUD_DAC_SAMP_RATE_SOURCE_MAX, 321 } aud_dac_samp_rate_source_t; 322 323 typedef enum 324 { 325 AUD_DAC_HPF_BYPASS_DISABLE = 0, /**< AUD DAC hpf bypass disable */ 326 AUD_DAC_HPF_BYPASS_ENABLE, /**< AUD DAC hpf bypass enable */ 327 AUD_DAC_HPF_BYPASS_OTHERS, 328 } aud_dac_hpf_bypass_t; 329 330 typedef enum { 331 AUD_DAC_CLK_INVERT_RISING = 0, /**< AUD dac output clock edge rising */ 332 AUD_DAC_CLK_INVERT_FALLING, /**< AUD dac output clock edge falling */ 333 AUD_DAC_CLK_INVERT_OTHERS, 334 } aud_dac_clk_invert_t; 335 336 typedef enum { 337 AUD_DACR_INT_DISABLE = 0, /**< AUD dac right channel interrupt disable */ 338 AUD_DACR_INT_ENABLE, /**< AUD dac right channel interrupt enable */ 339 AUD_DACL_INT_DISABLE, /**< AUD dac left channel interrupt disable */ 340 AUD_DACL_INT_ENABLE, /**< AUD dac left channel interrupt enable */ 341 AUD_DAC_INT_OTHERS, 342 } aud_dac_int_enable_t; 343 344 typedef enum { 345 AUD_DAC_FILT_DISABLE = 0, /**< AUD dac filter disable */ 346 AUD_DAC_FILT_ENABLE, /**< AUD dac filter enable */ 347 AUD_DAC_FILT_OTHERS, 348 } aud_dac_filt_enable_t; 349 350 typedef enum { 351 AUD_DAC_FRACMOD_MANUAL_DISABLE = 0, /**< disable dac fractional frequency division of manual set */ 352 AUD_DAC_FRACMOD_MANUAL_ENABLE, /**< enable ADC fractional frequency division of manual set */ 353 ADU_DAC_FRACMOD_MANUAL_OTHERS, 354 } aud_dac_fracmod_manual_t; 355 356 typedef enum { 357 /* fifo status */ 358 AUD_ADCL_NEAR_FULL_MASK = 1 << 2, /**< AUD ADC left channel FIFO near full */ 359 AUD_DTMF_NEAR_FULL_MASK = 1 << 3, /**< AUD DTMF FIFO near full */ 360 AUD_ADCL_NEAR_EMPTY_MASK = 1 << 6, /**< AUD ADC left channel FIFO near empty */ 361 AUD_DTMF_NEAR_EMPTY_MASK = 1 << 7, /**< AUD DTMF FIFO near empty */ 362 AUD_ADCL_FIFO_FULL_MASK = 1 << 10, /**< AUD ADC left channel FIFO full */ 363 AUD_DTMF_FIFO_FULL_MASK = 1 << 11, /**< AUD DTMF FIFO full */ 364 AUD_ADCL_FIFO_EMPTY_MASK = 1 << 14, /**< AUD ADC left channel FIFO empty */ 365 AUD_DTMF_FIFO_EMPTY_MASK = 1 << 15, /**< AUD DTMF FIFO empty */ 366 } aud_adc_status_mask_t; 367 368 typedef enum { 369 AUD_DACR_NEAR_FULL_MASK = 1, /**< AUD DAC right channel fifo near full */ 370 AUD_DACL_NEAR_FULL_MASK = 1 << 1, /**< AUD DAC left channel fifo near full */ 371 AUD_DACR_NEAR_EMPTY_MASK = 1 << 4, /**< AUD DAC right channel fifo near empty */ 372 AUD_DACL_NEAR_EMPTY_MASK = 1 << 5, /**< AUD DAC left channel fifo near empty */ 373 AUD_DACR_FIFO_FULL_MASK = 1 << 8, /**< AUD DAC right channel fifo full */ 374 AUD_DACL_FIFO_FULL_MASK = 1 << 9, /**< AUD DAC left channel fifo full */ 375 AUD_DACR_FIFO_EMPTY_MASK = 1 << 12, /**< AUD DAC right channel fifo empty */ 376 AUD_DACL_FIFO_EMPTY_MASK = 1 << 13, /**< AUD DAC left channel fifo empty */ 377 } aud_dac_status_mask_t; 378 379 /** 380 * @} 381 */ 382 383 /** 384 * @brief AUD struct defines 385 * @defgroup bk_api_aud_structs structs in AUD 386 * @ingroup bk_api_aud 387 * @{ 388 */ 389 390 typedef struct { 391 //aud_isr_id_t id; 392 icu_int_src_t int_src; 393 int_group_isr_t isr; 394 //dma_dev_t dma_dev; 395 } aud_int_config_t; 396 397 typedef struct { 398 /* audio_config */ 399 aud_adc_enable_t adc_enable; /**< AUD adc enable */ 400 aud_adc_line_enable_t line_enable; /**< AUD line in enable */ 401 aud_dtmf_enable_t dtmf_enable; /**< AUD dtmf enable */ 402 403 /* dtmf_config0 */ 404 aud_dtmf_tone_pattern_t tone_pattern; /**< AUD dtmf tone pattern */ 405 aud_dtmf_tone_mode_t tone_mode; /**< AUD dtmf tone mode */ 406 uint32_t tone_pause_time; /**< AUD dtmf tone pause time */ 407 uint32_t tone_active_time; /**< AUD dtmf tone active time */ 408 409 /* dtmf_config1 */ 410 uint32_t tone1_step; /**< AUD dtmf Tone1 frequency set Step = F(KHz) * 8191 */ 411 aud_dtmf_tone_attu_t tone1_attu; /**< AUD dtmf Tone1 damp set 0 :-1 :-15 dB */ 412 aud_dtmf_tone_enable_t tone1_enable; /**< AUD dtmf tone1 enable */ 413 414 /* dtmf_config2 */ 415 uint32_t tone2_step; /**< AUD dtmf Tone2 frequency set Step = F(KHz) * 8191 */ 416 aud_dtmf_tone_attu_t tone2_attu; /**< AUD dtmf Tone2 damp set 0 :-1 :-15 dB */ 417 aud_dtmf_tone_enable_t tone2_enable; /**< AUD dtmf tone2 enable */ 418 419 /* fifo_config */ 420 uint32_t dtmf_wr_threshold; /**< AUD dtmf write threshold value */ 421 aud_dtmf_int_t dtmf_int_enable; /**< AUD dtmf interrupt request enable */ 422 aud_loop_dtmf2dac_t loop_ton2dac; /**< AUD dtmf to DAC loop test enable */ 423 } aud_dtmf_config_t; 424 425 426 typedef struct { 427 /* audio mic config */ 428 aud_mic_enable_t mic_config; 429 430 /* audio_config */ 431 aud_adc_samp_rate_t samp_rate; /**< AUD adc sample rate */ 432 aud_adc_enable_t adc_enable; /**< AUD adc enable */ 433 aud_adc_line_enable_t line_enable; /**< AUD line in enable */ 434 aud_dtmf_enable_t dtmf_enable; /**< AUD dtmf enable */ 435 436 /* adc_config0 */ 437 uint32_t adc_hpf2_coef_B2; /**< AUD adc HPF2 coefficient B2 */ 438 aud_adc_hpf_bypass_t adc_hpf2_bypass_enable; /**< AUD adc hpf2 disable */ 439 aud_adc_hpf_bypass_t adc_hpf1_bypass_enable; /**< AUD adc hpf1 disable */ 440 uint32_t adc_set_gain; /**< AUD adc gain set */ 441 aud_adc_samp_edge_t adc_samp_edge; /**< ADC data sampling clock edge select rising/falling */ 442 443 /* adc_config1 */ 444 uint32_t adc_hpf2_coef_B0; /**< AUD adc HPF2 coefficient B0 */ 445 uint32_t adc_hpf2_coef_B1; /**< AUD adc HPF2 coefficient B1 */ 446 447 /* adc_config2 */ 448 uint32_t adc_hpf2_coef_A0; /**< AUD adc HPF2 coefficient A0 */ 449 uint32_t adc_hpf2_coef_A1; /**< AUD adc HPF2 coefficient A1 */ 450 451 /* fifo_config */ 452 uint32_t dtmf_wr_threshold; /**< AUD dtmf write threshold value */ 453 uint32_t adcl_wr_threshold; /**< AUD adcl write threshold value */ 454 aud_dtmf_int_t dtmf_int_enable; /**< AUD dtmf interrupt request enable */ 455 aud_adcl_int_t adcl_int_enable; /**< AUD adcl interrupt request enable */ 456 //aud_loop_dtmf2dac_t loop_ton2dac; /**< AUD dtmf to DAC loop test enable */ 457 aud_loop_adc2dac_t loop_adc2dac; /**< AUD adc to DAC loop test enable */ 458 459 /* agc_config0 */ 460 uint32_t agc_noise_thrd; /**< AUD AGC noise gating of excute,noise gating work when audio value is little */ 461 uint32_t agc_noise_high; /**< AUD AGC corresponding MIC_RSSI low 10 bit */ 462 uint32_t agc_noise_low; /**< AUD AGC corresponding MIC_RSSI low 10 bit */ 463 464 /* agc_config1 */ 465 uint32_t agc_noise_min; /**< AUD AGC {GAIN2[2:0] GAIN1[3:0]} when signal level below NOISE_LOW, when noise gating is enabled */ 466 aud_gac_noise_tout_t agc_noise_tout; /**< AUD AGC noise tout */ 467 aud_gac_high_dur_t agc_high_dur; /**< AUD AGC high noise gating work duration */ 468 aud_gac_low_dur_t agc_low_dur; /**< AUD AGC low noise gating work duration */ 469 uint32_t agc_min; /**< AUD AGC Minimum value of {GAIN2[2:0] GAIN1[3:0]} */ 470 uint32_t agc_max; /**< AUD AGC Maximum value of {GAIN2[2:0] GAIN1[3:0]} Also the default gain setting when AGC is disabled */ 471 aud_agc_method_t agc_ng_method; /**< AUD AGC noise gating method */ 472 aud_agc_ng_enable_t agc_ng_enable; /**< AUD AGC enable noise gating */ 473 474 /* agc_config2 */ 475 aud_agc_decay_time_t agc_decay_time; /**< AUD AGC agc decay time */ 476 aud_agc_attack_time_t agc_attack_time; /**< AUD AGC agc attack time */ 477 uint32_t agc_high_thrd; /**< AUD AGC coefficient high five bit of MIC_RSSI */ 478 uint32_t agc_low_thrd; /**< AUD AGC coefficient low five bit of MIC_RSSI */ 479 aud_agc_iir_coef_t agc_iir_coef; /**< AUD AGC iir coefficient select */ 480 aud_agc_enable_t agc_enable; /**< AUD AGC enable */ 481 uint32_t manual_pga_value; /**< AUD AGC manual set PGA value */ 482 aud_agc_manual_pga_en_t manual_pga_enable; /**< AUD AGC manual set PGA enable */ 483 484 /* extend_config */ 485 aud_adc_fracmod_manual_en_t adc_fracmod_manual; /**< AUD ADC fractional frequency division enable of manual set */ 486 uint32_t adc_fracmod; /**< AUD ADC fractional frequency division value N * 2^24 */ 487 } aud_adc_config_t; 488 489 typedef struct { 490 /* audio_config */ 491 aud_dac_enable_t dac_enable; /**< AUD dac enable */ 492 aud_dac_samp_rate_source_t samp_rate; /**< AUD dac sample rate */ 493 aud_dac_chl_enable_t dac_chl; /**< AUD dac channel */ 494 aud_dac_work_mode_t work_mode; /**< AUD dac work mode */ 495 496 /* dac_config0 */ 497 uint16_t dac_hpf2_coef_B2; /**< AUD dac HPF2 coefficient B2 */ 498 aud_dac_hpf_bypass_t dac_hpf2_bypass_enable; /**< AUD dac hpf2 disable */ 499 aud_dac_hpf_bypass_t dac_hpf1_bypass_enable; /**< AUD dac hpf1 disable */ 500 uint16_t dac_set_gain; /**< AUD dac gain set */ 501 aud_dac_clk_invert_t dac_clk_invert; /**< AUD dac output clock edge select */ 502 503 /* dac_config1 */ 504 uint16_t dac_hpf2_coef_B0; /**< AUD dac HPF2 coefficient B0 */ 505 uint16_t dac_hpf2_coef_B1; /**< AUD dac HPF2 coefficient B1 */ 506 507 /* dac_config2 */ 508 uint16_t dac_hpf2_coef_A1; /**< AUD dac HPF2 coefficient A1 */ 509 uint16_t dac_hpf2_coef_A2; /**< AUD dac HPF2 coefficient A2 */ 510 511 /* fifo_config */ 512 uint8_t dacr_rd_threshold; /**< AUD dacl read threshold value */ 513 uint8_t dacl_rd_threshold; /**< AUD dacr read threshold value */ 514 uint8_t dacr_int_enable; /**< AUD dacr interrupt request enable */ 515 uint8_t dacl_int_enable; /**< AUD dacl interrupt request enable */ 516 517 /* extend_config */ 518 aud_dac_filt_enable_t dac_filt_enable; /**< AUD dac filter enable */ 519 aud_dac_fracmod_manual_t dac_fracmod_manual_enable; /**< AUD dac fractional frequency division enable of manual set */ 520 uint32_t dac_fracmode_value; /**< AUD dac fractional frequency division value N * 2^24 */ 521 } aud_dac_config_t; 522 523 typedef struct { 524 int32_t flt0_A1; 525 int32_t flt0_A2; 526 int32_t flt0_B0; 527 int32_t flt0_B1; 528 int32_t flt0_B2; 529 530 int32_t flt1_A1; 531 int32_t flt1_A2; 532 int32_t flt1_B0; 533 int32_t flt1_B1; 534 int32_t flt1_B2; 535 536 int32_t flt2_A1; 537 int32_t flt2_A2; 538 int32_t flt2_B0; 539 int32_t flt2_B1; 540 int32_t flt2_B2; 541 542 int32_t flt3_A1; 543 int32_t flt3_A2; 544 int32_t flt3_B0; 545 int32_t flt3_B1; 546 int32_t flt3_B2; 547 } aud_eq_config_t; 548 549 550 /** 551 * @} 552 */ 553 554 555 #ifdef __cplusplus 556 } 557 #endif 558