mirror of
https://github.com/Fishwaldo/bl_mcu_sdk.git
synced 2025-07-08 13:58:35 +00:00
165 lines
No EOL
5.6 KiB
C
165 lines
No EOL
5.6 KiB
C
#ifndef _BFLB_AUDAC_H
|
|
#define _BFLB_AUDAC_H
|
|
|
|
#include "bflb_core.h"
|
|
|
|
/**
|
|
* @defgroup AUDAC_SAMPLING_RATE audac sampling rate
|
|
*/
|
|
#define AUDAC_SAMPLING_RATE_8K 0
|
|
#define AUDAC_SAMPLING_RATE_16K 1
|
|
#define AUDAC_SAMPLING_RATE_22P05K 5
|
|
#define AUDAC_SAMPLING_RATE_24K 3
|
|
#define AUDAC_SAMPLING_RATE_32K 2
|
|
#define AUDAC_SAMPLING_RATE_44P1K 6
|
|
#define AUDAC_SAMPLING_RATE_48K 4
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @defgroup AUDAC_OUTPUT_MODE audac output mode
|
|
*/
|
|
#define AUDAC_OUTPUT_MODE_PWM 0
|
|
#define AUDAC_OUTPUT_MODE_GPDAC_CH_A 1
|
|
#define AUDAC_OUTPUT_MODE_GPDAC_CH_B 2
|
|
#define AUDAC_OUTPUT_MODE_GPDAC_CH_A_B 3
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @defgroup AUDAC_SOURCE_CHANNEL source channels num
|
|
*/
|
|
#define AUDAC_SOURCE_CHANNEL_SINGLE 0x01
|
|
#define AUDAC_SOURCE_CHANNEL_DUAL 0x03
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @defgroup AUDAC_MIXER_MODE audac mixer mode, this parameter is valid only in AUDAC_SOURCE_CHANNEL_DUAL mode
|
|
*/
|
|
#define AUDAC_MIXER_MODE_ONLY_L 0
|
|
#define AUDAC_MIXER_MODE_ONLY_R 1
|
|
#define AUDAC_MIXER_MODE_SUM 2
|
|
#define AUDAC_MIXER_MODE_AVERAGE 3
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @defgroup AUDAC_DATA_FORMAT audac data format
|
|
*/
|
|
#define AUDAC_DATA_FORMAT_16BIT 3
|
|
#define AUDAC_DATA_FORMAT_20BIT 2
|
|
#define AUDAC_DATA_FORMAT_24BIT 1
|
|
#define AUDAC_DATA_FORMAT_32BIT 0
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @defgroup AUDAC_RAMP_RATE audac volume ramp rate
|
|
*/
|
|
#define AUDAC_RAMP_RATE_FS_2 0
|
|
#define AUDAC_RAMP_RATE_FS_4 1
|
|
#define AUDAC_RAMP_RATE_FS_8 2
|
|
#define AUDAC_RAMP_RATE_FS_16 3
|
|
#define AUDAC_RAMP_RATE_FS_32 4
|
|
#define AUDAC_RAMP_RATE_FS_64 5
|
|
#define AUDAC_RAMP_RATE_FS_128 6
|
|
#define AUDAC_RAMP_RATE_FS_256 7
|
|
#define AUDAC_RAMP_RATE_FS_512 8
|
|
#define AUDAC_RAMP_RATE_FS_1024 9
|
|
#define AUDAC_RAMP_RATE_FS_2048 10
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @defgroup AUDAC_VOLUME_UPDATE_MODE audac volume ramp rate
|
|
*/
|
|
#define AUDAC_VOLUME_UPDATE_MODE_FORCE 0
|
|
#define AUDAC_VOLUME_UPDATE_MODE_RAMP 1
|
|
#define AUDAC_VOLUME_UPDATE_MODE_RAMP_ZERO_CROSSING 2
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/** @defgroup AUDAC_INTSTS audac interrupt status definition
|
|
* @{
|
|
*/
|
|
#define AUDAC_INTSTS_VOLUME_RAMP (1 << 0)
|
|
#define AUDAC_INTSTS_FIFO_OVER (1 << 1)
|
|
#define AUDAC_INTSTS_FIFO_UNDER (1 << 2)
|
|
#define AUDAC_INTSTS_FIFO_AVAILABLE (1 << 3)
|
|
|
|
/** @defgroup AUDAC_CMD audac feature control cmd definition
|
|
* @{
|
|
*/
|
|
#define AUDAC_CMD_PLAY_START (0x01)
|
|
#define AUDAC_CMD_PLAY_STOP (0x02)
|
|
#define AUDAC_CMD_SET_MUTE (0x03)
|
|
#define AUDAC_CMD_SET_VOLUME_VAL (0x04)
|
|
#define AUDAC_CMD_CLEAR_TX_FIFO (0x05)
|
|
#define AUDAC_CMD_GET_TX_FIFO_CNT (0x06)
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @brief AUDAC initialization configuration structure
|
|
*
|
|
* @param sampling_rate AUDAC sampling rate, use @ref AUDAC_SAMPLING_RATE
|
|
* @param output_mode AUDAC mode, use @ref AUDAC_OUTPUT_MODE
|
|
* @param source_channels_num AUDAC source channels num, use @ref AUDAC_SOURCE_CHANNEL
|
|
* @param mixer_mode AUDAC mixer mode, valid only in AUDAC_SOURCE_CHANNEL_DUAL mode, use @ref AUDAC_MIXER_MODE
|
|
* @param data_format AUDAC audac data format, use @ref AUDAC_DATA_FORMAT
|
|
* @param fifo_threshold AUDAC tx fifo threshold, 0 ~ 7
|
|
* @param dma_enable AUDAC dma mode enable, use true or false
|
|
*/
|
|
struct bflb_audac_init_config_s {
|
|
uint8_t sampling_rate;
|
|
uint8_t output_mode;
|
|
uint8_t source_channels_num;
|
|
uint8_t mixer_mode;
|
|
uint8_t data_format;
|
|
uint8_t fifo_threshold;
|
|
};
|
|
|
|
/**
|
|
* @brief AUDAC volume configuration structure
|
|
*
|
|
* @param mute_ramp_en AUDAC mute mode en, use true or false
|
|
* @param mute_up_ramp_rate AUDAC mute up ramp rate, valid when mute_ramp_en is true, use @ref AUDAC_RAMP_RATE
|
|
* @param mute_down_ramp_rate AUDAC mute down ramp rate, valid when mute_ramp_en is true, use @ref AUDAC_RAMP_RATE
|
|
* @param volume_update_mode AUDAC volume update mode, use @ref AUDAC_VOLUME_UPDATE_MODE
|
|
* @param volume_ramp_rate AUDAC volume ramp rate, valid when volume_update_mode is not AUDAC_VOLUME_UPDATE_MODE_FORCE, use @ref AUDAC_RAMP_RATE
|
|
* @param volume_zero_cross_timeout AUDAC volume update zero cross timeout period, valid only in AUDAC_VOLUME_UPDATE_MODE_RAMP_ZERO_CROSSING mode
|
|
*/
|
|
struct bflb_audac_volume_config_s {
|
|
bool mute_ramp_en;
|
|
uint8_t mute_up_ramp_rate;
|
|
uint8_t mute_down_ramp_rate;
|
|
uint8_t volume_update_mode;
|
|
uint8_t volume_ramp_rate;
|
|
uint8_t volume_zero_cross_timeout;
|
|
};
|
|
|
|
int bflb_audac_init(struct bflb_device_s *dev, const struct bflb_audac_init_config_s *config);
|
|
|
|
int bflb_audac_volume_init(struct bflb_device_s *dev, const struct bflb_audac_volume_config_s *vol_cfg);
|
|
|
|
int bflb_audac_link_rxdma(struct bflb_device_s *dev, bool enable);
|
|
|
|
int bflb_audac_int_mask(struct bflb_device_s *dev, uint32_t mask);
|
|
|
|
int bflb_audac_get_intstatus(struct bflb_device_s *dev);
|
|
|
|
int bflb_audac_int_clear(struct bflb_device_s *dev, uint32_t int_clear);
|
|
|
|
int bflb_audac_feature_control(struct bflb_device_s *dev, int cmd, size_t arg);
|
|
|
|
#endif |