1 /*
2  * SPDX-FileCopyrightText: 2019-2025 SiFli Technologies(Nanjing) Co., Ltd
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #ifndef __BF0_HAL_AUDCODEC_H
8 #define __BF0_HAL_AUDCODEC_H
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 /* Includes ------------------------------------------------------------------*/
15 #include "bf0_hal_def.h"
16 
17 /** @addtogroup BF0_HAL_Driver
18   * @{
19   */
20 
21 /** @addtogroup AUDCODEC
22   * @brief AUDCODEC HAL module driver
23   * @{
24   */
25 
26 /* Exported types ------------------------------------------------------------*/
27 /** @defgroup AUDCODEC_Exported_Types AUDCODEC Exported Types
28   * @{
29   */
30 
31 /**
32   * @brief AUDCODEC TX/RX channel configure structure definition
33   */
34 typedef struct
35 {
36     uint8_t     clk_ana_pol;
37     uint8_t     dither_en;
38     uint8_t     dither_gain;
39     uint8_t     sinc_gain;
40     uint8_t     data_format;
41     uint8_t     fine_vol;
42     uint8_t     rough_vol;
43     uint8_t     dma_en;
44     uint8_t     dem_mode;
45     uint8_t     dout_mute;
46     uint8_t     enable;
47     uint8_t     ramp_interval;
48     uint8_t     zero_adjust_en;
49     uint8_t     ramp_mode;
50     uint8_t     ramp_en;
51     uint32_t    dc_offset;
52 } AUDCODEC_DacChnlCfgTypeDef;
53 
54 typedef struct
55 {
56     uint8_t     sat_det_len;
57     uint8_t     sat_det_en;
58     uint8_t     data_format;
59     uint8_t     fine_vol;
60     uint8_t     rough_vol;
61     uint8_t     dma_en;
62     uint8_t     stb_inv;
63     uint8_t     hpf_coef;
64     uint8_t     hpf_bypass;
65     uint8_t     enable;
66 } AUDCODEC_AdcChnlCfgTypeDef;
67 
68 /**
69   * @brief  AUDCODEC DAC clock config definition
70   */
71 typedef struct
72 {
73     uint32_t  samplerate;
74     uint8_t   clk_src_sel; /*!< 0:xtal 48M 1:PLL 44.1M */
75     uint8_t   clk_div;
76     uint8_t   osr_sel;  /*!< 0:100 1:150 2:300 4:64 5:128 6:256 */  //hp  dac_cfg
77     uint16_t  sinc_gain;  //hp  dac_ch0_cfg
78     uint8_t   sel_clk_dac_source; /*!< 0:xtal 48M 1:PLL  */
79     uint8_t   diva_clk_dac;
80     uint8_t   diva_clk_chop_dac;
81     uint8_t   divb_clk_chop_dac;  // lp pll_cfg4
82     uint8_t   diva_clk_chop_bg;
83     uint8_t   diva_clk_chop_refgen;  // lp  pll_cfg5
84 #ifdef SF32LB52X
85     uint8_t   sel_clk_dac;
86 #endif
87 } AUDCODE_DAC_CLK_CONFIG_TYPE;
88 
89 /**
90   * @brief  AUDCODEC ADC clock config definition
91   */
92 typedef struct
93 {
94     uint32_t  samplerate;
95     uint8_t   clk_src_sel; /*!< 0:xtal 48M 1:PLL 44.1M */
96     uint8_t   clk_div;
97     uint8_t   osr_sel;  /*!< 0:200 1:300 2:400 3:600 */  //lp  adc_cfg
98     uint8_t   sel_clk_adc_source; /*!< 0:xtal 48M 1:PLL  */
99     uint8_t   sel_clk_adc;
100     uint8_t   diva_clk_adc; //lp pll_cfg6
101     uint8_t   fsp; //ADC1_CFG1
102 } AUDCODE_ADC_CLK_CONFIG_TYPE;
103 
104 
105 /**
106   * @brief AUDCODEC DAC PATH configure structure definition
107   */
108 
109 typedef struct
110 {
111     uint8_t     opmode;  /*!<   0:audprc tx to audcode  1: mem tx to audcodec  */
112     AUDCODE_DAC_CLK_CONFIG_TYPE *dac_clk;
113 } AUDCODEC_DACCfgTypeDef;
114 
115 /**
116   * @brief AUDCODEC ADC PATH configure structure definition
117   */
118 typedef struct
119 {
120     uint8_t     opmode;
121     AUDCODE_ADC_CLK_CONFIG_TYPE *adc_clk;
122 } AUDCODEC_ADCCfgTypeDef;
123 
124 /**
125   * @brief AUDCODEC Init structure definition
126   */
127 typedef struct
128 {
129     //uint32_t     clk_div;      /*!<  Source clk for AUDCODEC module */
130     //uint16_t    adc_div;           /*!<   adc AUDCODEC adc clock configure  */
131     uint16_t    en_dly_sel;           /*!<   codec enable delay count  */
132     uint8_t     samplerate_index;
133     AUDCODEC_DACCfgTypeDef dac_cfg;    /*!<   dac AUDCODEC DAC PATH configure  */
134     AUDCODEC_ADCCfgTypeDef adc_cfg;    /*!<   dac AUDCODEC ADC PATH configure  */
135 } AUDCODEC_InitTypeDef;
136 
137 /**
138   * @brief  HAL State structures definition
139   */
140 typedef enum
141 {
142     HAL_AUDCODEC_STATE_RESET      = 0x00U,  /*!< AUDCODEC not yet initialized or disabled                */
143     HAL_AUDCODEC_STATE_READY      = 0x01U,  /*!< AUDCODEC initialized and ready for use                  */
144     HAL_AUDCODEC_STATE_BUSY       = 0x02U,  /*!< AUDCODEC internal process is ongoing                    */
145     HAL_AUDCODEC_STATE_BUSY_TX    = 0x04U,  /*!< Data Transmission process is ongoing               */
146     HAL_AUDCODEC_STATE_BUSY_RX    = 0x08U,  /*!< Data Reception process is ongoing                  */
147     HAL_AUDCODEC_STATE_PAUSE      = 0x16U,  /*!< AUDCODEC pause state: used in case of DMA               */
148     HAL_AUDCODEC_STATE_ERROR      = 0x32U   /*!< AUDCODEC error state                                    */
149 } HAL_AUDCODEC_StateTypeDef;
150 
151 /**
152   * @brief  AUDCODEC TX/RX BUFFER/DMA ENUM definition
153   */
154 typedef enum
155 {
156     HAL_AUDCODEC_DAC_CH0         = 0x00U,  /*!< AUDCODEC DAC channel 0  */
157     HAL_AUDCODEC_DAC_CH1         = 0x01U,  /*!< AUDCODEC DAC channel 1  */
158     HAL_AUDCODEC_ADC_CH0         = 0x02U,  /*!< AUDCODEC ADC channel 0  */
159     HAL_AUDCODEC_ADC_CH1         = 0x03U,  /*!< AUDCODEC ADC channel 1  */
160     HAL_AUDCODEC_INSTANC_CNT                /*!< Total dma/buffer counter  */
161 } HAL_AUDCODEC_ChannelTypeDef;
162 
163 
164 /**
165   * @brief AUDCODEC handle Structure definition
166   */
167 typedef struct
168 {
169 #ifdef SF32LB52X
170     AUDCODEC_TypeDef                   *Instance;    /*!< AUDCODEC registers base address */
171 #else
172     AUDCODEC_HP_TypeDef                *Instance_hp;    /*!< AUDCODEC HP registers base address */
173 
174     AUDCODEC_LP_TypeDef                *Instance_lp;    /*!< AUDCODEC LP registers base address */
175 #endif
176     AUDCODEC_InitTypeDef            Init;         /*!< AUDCODEC communication parameters */
177 
178     AUDCODEC_DacChnlCfgTypeDef      DacChnl[2];
179 
180     AUDCODEC_AdcChnlCfgTypeDef      AdcChnl[2];
181 
182     DMA_HandleTypeDef          *hdma[HAL_AUDCODEC_INSTANC_CNT];   /*!< AUDCODEC Tx/rx Channel DMA handle parameters */
183 
184 
185     uint8_t                     *buf[HAL_AUDCODEC_INSTANC_CNT];   /*!< AUDCODEC  data buffer */
186 
187     uint32_t                    dataSize[HAL_AUDCODEC_INSTANC_CNT];         /*!< AUDCODEC Data size */
188     uint16_t                    bufSize;         /*!< AUDCODEC Data buffer size */
189     uint16_t                    channel_ref; /*!< HAL_AUDCODEC_ChannelTypeDef bitmap */
190 
191     __IO HAL_LockTypeDef       Lock;         /*!< AUDCODEC locking object */
192 
193     __IO HAL_AUDCODEC_StateTypeDef  State[HAL_AUDCODEC_INSTANC_CNT];        /*!< AUDCODEC communication state */
194 
195     __IO uint32_t              ErrorCode;    /*!< AUDCODEC Error code
196                                                 This parameter can be a value of @ref AUDCODEC_Error */
197 } AUDCODEC_HandleTypeDef;
198 /**
199   * @}
200   */
201 
202 /* Exported constants --------------------------------------------------------*/
203 /** @defgroup AUDCODEC_Exported_Constants AUDCODEC Exported Constants
204   * @{
205   */
206 /** @defgroup AUDCODEC_Error AUDCODEC Error
207   * @{
208   */
209 #define HAL_AUDCODEC_ERROR_NONE      (0x00000000U)  /*!< No error           */
210 #define HAL_AUDCODEC_ERROR_TIMEOUT   (0x00000001U)  /*!< Timeout error      */
211 #define HAL_AUDCODEC_ERROR_OVR       (0x00000002U)  /*!< OVR error          */
212 #define HAL_AUDCODEC_ERROR_UDR       (0x00000004U)  /*!< UDR error          */
213 #define HAL_AUDCODEC_ERROR_DMA       (0x00000008U)  /*!< DMA transfer error */
214 #define HAL_AUDCODEC_ERROR_UNKNOW    (0x00000010U)  /*!< Unknow Error error */
215 /**
216   * @}
217   */
218 
219 
220 /** @defgroup AUDCODEC_Flag_definition AUDCODEC Flag definition
221   * @{
222   */
223 
224 #define AUDCODEC_TX_OUT1_FIFO_UNDERF              (1<<9)  /*!< AUDCODEC STATUS TX OUT1 FIFO UNDER FLOW            */
225 #define AUDCODEC_TX_OUT0_FIFO_UNDERF              (1<<8)  /*!< AUDCODEC STATUS TX OUT0 FIFO UNDER FLOW          */
226 #define AUDCODEC_RX_IN_FIFO_OVERF                 (1<<7)  /*!< AUDCODEC STATUS Rx IN FIFO OVER FLOW            */
227 #define AUDCODEC_TX_OUT_FIFO_UNDERF               (1<<6)  /*!< AUDCODEC STATUS TX OUT FIFO UNDER FLOW           */
228 #define AUDCODEC_RX1_FIFO_UNDERF                  (1<<5)  /*!< AUDCODEC STATUS Rx0 FIF1 UNDER FLOW           */
229 #define AUDCODEC_RX0_FIFO_UNDERF                  (1<<4)  /*!< AUDCODEC STATUS Rx0 FIFO UNDER FLOW           */
230 #define AUDCODEC_TX3_FIFO_OVERF                   (1<<3)  /*!< AUDCODEC STATUS Tx3 FIFO OVER FLOW            */
231 #define AUDCODEC_TX2_FIFO_OVERF                   (1<<2)  /*!< AUDCODEC STATUS Tx2 FIFO OVER FLOW           */
232 #define AUDCODEC_TX1_FIFO_OVERF                   (1<<1)  /*!< AUDCODEC STATUS Tx1 FIFO OVER FLOW            */
233 #define AUDCODEC_TX0_FIFO_OVERF                   (1<<0)  /*!< AUDCODEC STATUS Tx0 FIFO OVER FLOW    */
234 
235 
236 /**
237   * @}
238   */
239 
240 
241 /**
242   * @} AUDCODEC_Exported_Constants
243   */
244 
245 /* Exported macros -----------------------------------------------------------*/
246 /** @defgroup AUDCODEC_Exported_macros AUDCODEC Exported Macros
247   * @{
248   */
249 
250 #ifdef SF32LB52X
251 
252 /** @brief  Enable audio codec .
253   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
254   * @retval None
255   */
256 #define __HAL_AUDCODEC_DAC_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CFG |= AUDCODEC_CFG_DAC_ENABLE)
257 
258 /** @brief  Disable the AUDCODEC .
259   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
260   * @retval None
261   */
262 #define __HAL_AUDCODEC_DAC_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CFG &= (~AUDCODEC_CFG_DAC_ENABLE))
263 
264 
265 /** @brief  Disable the AUDCODEC DAC CHannel0.
266   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
267   * @retval None
268   */
269 #define __HAL_AUDCODEC_DAC_CH0_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->DAC_CH0_CFG &= (~AUDCODEC_DAC_CH0_CFG_ENABLE))
270 
271 /** @brief  Disable the AUDCODEC DAC CHannel1.
272   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
273   * @retval None
274   */
275 #define __HAL_AUDCODEC_DAC_CH1_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->DAC_CH1_CFG &= (~AUDCODEC_DAC_CH1_CFG_ENABLE))
276 
277 
278 /** @brief  Enable audio prc .
279   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
280   * @retval None
281   */
282 #define __HAL_AUDCODEC_ADC_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CFG |= AUDCODEC_CFG_ADC_ENABLE)
283 
284 /** @brief  Disable the AUDCODEC .
285   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
286   * @retval None
287   */
288 #define __HAL_AUDCODEC_ADC_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CFG &= (~AUDCODEC_CFG_ADC_ENABLE))
289 
290 /** @brief  Disable the AUDCODEC ADC CHannel0.
291   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
292   * @retval None
293   */
294 #define __HAL_AUDCODEC_ADC_CH0_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->ADC_CH0_CFG &= (~AUDCODEC_ADC_CH0_CFG_ENABLE))
295 
296 /** @brief  Disable the AUDCODEC ADC CHannel1.
297   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
298   * @retval None
299   */
300 #define __HAL_AUDCODEC_ADC_CH1_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->ADC_CH1_CFG &= (~AUDCODEC_ADC_CH1_CFG_ENABLE))
301 
302 #else
303 
304 /** @brief  Enable audio codec .
305   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
306   * @retval None
307   */
308 #define __HAL_AUDCODEC_HP_ENABLE(__HANDLE__) ((__HANDLE__)->Instance_hp->CFG |= AUDCODEC_HP_CFG_ENABLE)
309 
310 /** @brief  Disable the AUDCODEC .
311   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
312   * @retval None
313   */
314 #define __HAL_AUDCODEC_HP_DISABLE(__HANDLE__) ((__HANDLE__)->Instance_hp->CFG &= (~AUDCODEC_HP_CFG_ENABLE))
315 
316 
317 /** @brief  Disable the AUDCODEC DAC CHannel0.
318   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
319   * @retval None
320   */
321 #define __HAL_AUDCODEC_HP_DAC_CH0_DISABLE(__HANDLE__) ((__HANDLE__)->Instance_hp->DAC_CH0_CFG &= (~AUDCODEC_HP_DAC_CH0_CFG_ENABLE))
322 
323 /** @brief  Disable the AUDCODEC DAC CHannel1.
324   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
325   * @retval None
326   */
327 #define __HAL_AUDCODEC_HP_DAC_CH1_DISABLE(__HANDLE__) ((__HANDLE__)->Instance_hp->DAC_CH1_CFG &= (~AUDCODEC_HP_DAC_CH1_CFG_ENABLE))
328 
329 
330 
331 
332 /** @brief  Enable audio prc .
333   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
334   * @retval None
335   */
336 #define __HAL_AUDCODEC_LP_ENABLE(__HANDLE__) ((__HANDLE__)->Instance_lp->CFG |= AUDCODEC_LP_CFG_ENABLE)
337 
338 /** @brief  Disable the AUDCODEC .
339   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
340   * @retval None
341   */
342 #define __HAL_AUDCODEC_LP_DISABLE(__HANDLE__) ((__HANDLE__)->Instance_lp->CFG &= (~AUDCODEC_LP_CFG_ENABLE))
343 
344 /** @brief  Disable the AUDCODEC ADC CHannel0.
345   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
346   * @retval None
347   */
348 #define __HAL_AUDCODEC_HP_ADC_CH0_DISABLE(__HANDLE__) ((__HANDLE__)->Instance_lp->ADC_CH0_CFG &= (~AUDCODEC_LP_ADC_CH0_CFG_ENABLE))
349 
350 /** @brief  Disable the AUDCODEC ADC CHannel1.
351   * @param  \__HANDLE__ specifies the AUDCODEC Handle.
352   * @retval None
353   */
354 #define __HAL_AUDCODEC_HP_ADC_CH1_DISABLE(__HANDLE__) ((__HANDLE__)->Instance_lp->ADC_CH1_CFG &= (~AUDCODEC_LP_ADC_CH1_CFG_ENABLE))
355 
356 #endif
357 
358 /**
359   * @} AUDCODEC_Exported_macros
360   */
361 
362 /* Exported functions --------------------------------------------------------*/
363 /** @addtogroup AUDCODEC_Exported_Functions
364   * @{
365   */
366 HAL_StatusTypeDef HAL_AUDCODEC_Config_Analog_DACPath(AUDCODE_DAC_CLK_CONFIG_TYPE *cfg);
367 void HAL_TURN_OFF_PLL();
368 
369 void HAL_AUDCODEC_Close_Analog_DACPath(void);
370 
371 void HAL_AUCODEC_Refgen_Init(void);
372 
373 void HAL_AUDCODEC_Config_Analog_ADCPath(AUDCODE_ADC_CLK_CONFIG_TYPE *cfg);
374 
375 void HAL_AUDCODEC_Close_Analog_ADCPath(void);
376 
377 
378 /** @addtogroup AUDCODEC_Exported_Functions_Group1
379   * @{
380   */
381 /* Initialization/de-initialization functions  **********************************/
382 
383 /**
384   * @brief Initializes the AUDCODEC according to the specified parameters
385   *         in the AUDCODEC_InitTypeDef and create the associated handle.
386   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
387   *         the configuration information for AUDCODEC module
388   * @retval HAL status
389   */
390 HAL_StatusTypeDef HAL_AUDCODEC_Init(AUDCODEC_HandleTypeDef *hacodec);
391 
392 /**
393   * @brief DeInitializes the AUDCODEC peripheral
394   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
395   *         the configuration information for AUDCODEC module
396   * @retval HAL status
397   */
398 HAL_StatusTypeDef HAL_AUDCODEC_DeInit(AUDCODEC_HandleTypeDef *hacodec);
399 
400 /**
401   * @brief Initializes the AUDCODEC pin setting.
402   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
403   *         the configuration information for AUDCODEC module
404   * @retval None
405   */
406 void HAL_AUDCODEC_MspInit(AUDCODEC_HandleTypeDef *hacodec);
407 
408 /**
409   * @brief deunitializes the AUDCODEC pin setting.
410   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
411   *         the configuration information for AUDCODEC module
412   * @retval None
413   */
414 void HAL_AUDCODEC_MspDeInit(AUDCODEC_HandleTypeDef *hacodec);
415 /**
416   * @} AUDCODEC_Exported_Functions_Group1
417   */
418 
419 /** @addtogroup AUDCODEC_Exported_Functions_Group2
420   * @{
421   */
422 /* I/O operation functions  ***************************************************/
423 /* Configure AUDCODEC parameters  */
424 
425 /**
426   * @brief Set AUDCODEC transmit channel configures.
427   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
428   *         the configuration information for AUDCODEC module
429   * @param channel: configure channel number
430   * @param cfg: configure parameters
431   * @retval HAL status
432   */
433 HAL_StatusTypeDef HAL_AUDCODEC_Config_TChanel(AUDCODEC_HandleTypeDef *hacodec, int channel, AUDCODEC_DACCfgTypeDef *cfg);
434 
435 /**
436   * @brief Set AUDCODEC Receive configures.
437   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
438   *         the configuration information for AUDCODEC module
439   * @param channel: configure channel number
440   * @param cfg: configure parameters
441   * @retval HAL status
442   */
443 HAL_StatusTypeDef HAL_AUDCODEC_Config_RChanel(AUDCODEC_HandleTypeDef *hacodec, int channel, AUDCODEC_ADCCfgTypeDef *cfg);
444 
445 
446 /**
447  * @brief  all channel disable
448  * @param hacodec -pointer to a AUDCODEC_HandleTypeDef structure that contains
449  *         the configuration information for AUDCODEC module
450  * @param ch_type_bit : bit0 is dac, bit1 is adc
451  * @return HAL status
452  */
453 HAL_StatusTypeDef HAL_AUDCODEC_Clear_All_Channel(AUDCODEC_HandleTypeDef *hacodec, uint8_t ch_type_bit);
454 
455 
456 /**
457   * @brief  Configure DAC path volume.
458   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
459   *         the configuration information for AUDCODEC module
460   * @param channel: channel 0 or 1
461   * @param volume: configure volume -36dB~54dB, unit is 0.5db, use fix point Q15.1 format
462   * @retval HAL status
463   */
464 HAL_StatusTypeDef HAL_AUDCODEC_Config_DACPath_Volume(AUDCODEC_HandleTypeDef *hacodec, int channel, int volume);
465 
466 /**
467   * @brief  Bypass DAC path.
468   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
469   *         the configuration information for AUDCODEC module
470   * @param  bypass 1:enable, 0: disable
471   * @retval HAL status
472   */
473 HAL_StatusTypeDef HAL_AUDCODEC_Config_DACPath(AUDCODEC_HandleTypeDef *hacodec, uint16_t bypass);
474 
475 
476 /**
477   * @brief  Configure DAC path mute.
478   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
479   *         the configuration information for AUDCODEC module
480   * @param mute: is mute or not
481   * @retval HAL status
482   */
483 HAL_StatusTypeDef HAL_AUDCODEC_Mute_DACPath(AUDCODEC_HandleTypeDef *hacodec, int mute);
484 
485 
486 /**
487   * @brief  Configure ADC path.
488   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
489   *         the configuration information for AUDCODEC module
490   * @param cfg: configure parameters
491   * @retval HAL status
492   */
493 HAL_StatusTypeDef HAL_AUDCODEC_Config_ADCPath(AUDCODEC_HandleTypeDef *hacodec, AUDCODEC_ADCCfgTypeDef *cfg);
494 
495 
496 /**
497   * @} AUDCODEC_Exported_Functions_Group2
498   */
499 
500 /** @addtogroup AUDCODEC_Exported_Functions_Group3
501   * @{
502   */
503 /* DMA operation functions  ***************************************************/
504 
505 /**
506   * @brief Set AUDCODEC Transmit data with DMA mode.
507   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
508   *         the configuration information for AUDCODEC module
509   * @param pData: data buffer
510   * @param Size: data length need to be transmit
511   * @param did:  DMA channel index
512   * @retval HAL status
513   */
514 
515 HAL_StatusTypeDef HAL_AUDCODEC_Transmit_DMA(AUDCODEC_HandleTypeDef *hacodec, uint8_t *pData, uint32_t Size, uint32_t did);
516 
517 /**
518   * @brief Set AUDCODEC Receive configures.
519   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
520   *         the configuration information for AUDCODEC module
521   * @param pData: data buffer
522   * @param Size: data length need to be transmit
523   * @param did:  DMA channel index
524   * @retval HAL status
525   */
526 HAL_StatusTypeDef HAL_AUDCODEC_Receive_DMA(AUDCODEC_HandleTypeDef *hacodec, uint8_t *pData, uint32_t Size, uint32_t did);
527 
528 /**
529   * @brief Stop AUD PRC DMA.
530   * @param  hacodec: pointer to a AUDCODEC_HandleTypeDef structure that contains
531   *         the configuration information for AUDCODEC module
532   * @param did:  DMA channel index
533   * @retval HAL status
534   */
535 HAL_StatusTypeDef HAL_AUDCODEC_DMAStop(AUDCODEC_HandleTypeDef *hacodec, uint32_t did);
536 
537 void set_pll_state(uint8_t state);
538 uint8_t get_pll_state();
539 void set_pll_freq_type(uint8_t type);
540 uint8_t get_pll_freq_type();
541 int updata_pll_freq(uint8_t type);
542 int bf0_enable_pll(uint32_t freq, uint8_t type);
543 void bf0_disable_pll();
544 void HAL_TURN_ON_PLL();
545 
546 /**
547   * @} AUDCODEC_Exported_Functions_Group3
548   */
549 
550 /**
551   * @} AUDCODEC_Exported_Functions
552 */
553 
554 /**
555   * @} AUDCODEC
556 */
557 
558 /**
559   * @} BF0_HAL_Driver
560 */
561 
562 #ifdef __cplusplus
563 }
564 #endif
565 
566 
567 #endif /* __BF0_HAL_I2S_H */