Files
hpw421/component/xc6xx_drivers/Drivers/xc_driver/xc_drv_i2s.h
T
2026-07-03 18:08:25 +08:00

129 lines
3.0 KiB
C

#ifndef _XC_DRV_I2S_H_
#define _XC_DRV_I2S_H_
#include "stdint.h"
#define I2S_TX_MODE (1)
#define I2S_RX_MODE (0)
#define I2S_RECODER_BUFF_MAX (20)
#define MIC_SAMPLING_MAX_LEN (512)
#define I2S_RX_FIFO_LEN (8)
#define I2S_TX_FIFO_LEN (8)
#define AUDIO_DOUBLE_CHANNEL (2)
#define I2S_TXFIFO_UNDERFLOW_EN (BIT(6))
#define I2S_TXFIFO_OVERFLOW_EN (BIT(5))
#define I2S_TXFIFO_DATA_READY_EN (BIT(4))
#define I2S_RXFIFO_UNDERFLOW_EN (BIT(2))
#define I2S_RXFIFO_OVERFLOW_EN (BIT(1))
#define I2S_RXFIFO_DATA_READY_EN (BIT(0))
#define I2S_TX_DMA_CHANNEL (DMA_CHANNEL0)
#define I2S_RX_DMA_CHANNEL (DMA_CHANNEL1)
typedef void (*i2s_finish_callback)(uint8_t);
typedef enum
{
I2S_TX = 0,
I2S_RX = 1,
} I2s_Channel_e;
typedef enum
{
STANDARD_I2S_MODE = 0,
LEFT_JUSTIFY_MODE = 1,
RIGHT_JUSTIFY_MODE = 2,
} I2s_Interface_Mode_e;
typedef enum
{
LRCK_LEFT_LOW = 0,
LRCK_LEFT_HIGH = 1,
} I2s_LrckPolarity_e;
typedef enum
{
BCLK_RISING_EDGE = 0,
BCLK_FALLING_EDGE = 1,
} I2s_BclkPolarity_e;
typedef enum
{
I2S_BCLK_GPIO30 = 30,
I2S_LRCK_GPIO31 = 31,
I2S_RXDAT_GPIO32 = 32,
I2S_TXDAT_GPIO10 = 10,
I2S_TXDAT_GPIO33 = 33,
} I2s_GPIO_e;
typedef enum
{
AUDIO_8BIT = 8,
AUDIO_16BIT = 16,
AUDIO_24BIT = 24,
} Audio_BitDept_e;
typedef enum
{
SAMPLING_RATE_8KHZ = 8000,
SAMPLING_RATE_16KHZ = 16000,
SAMPLING_RATE_44_1KHZ = 44100,
SAMPLING_RATE_48KHZ = 48000,
} I2s_SampleRate_e;
typedef enum
{
SLOT_WIDTH_NA = 0,
SLOT_WIDTH_8BIT,
SLOT_WIDTH_12BIT,
SLOT_WIDTH_16BIT,
SLOT_WIDTH_20BIT,
SLOT_WIDTH_24BIT,
SLOT_WIDTH_28BIT,
SLOT_WIDTH_32BIT,
} Slot_Width_e;
typedef enum
{
SLOT_RESOLUTION_NA = 0,
SLOT_RESOLUTION_8BIT,
SLOT_RESOLUTION_12BIT,
SLOT_RESOLUTION_16BIT,
SLOT_RESOLUTION_20BIT,
SLOT_RESOLUTION_24BIT,
SLOT_RESOLUTION_28BIT,
SLOT_RESOLUTION_32BIT,
} Slot_Resolution_e;
typedef struct
{
i2s_finish_callback i2s_receive_finish_callback;
i2s_finish_callback i2s_trans_finish_callback;
} I2s_Finish_Callback_t;
typedef struct
{
I2s_GPIO_e bclk_pin;
I2s_GPIO_e lrck_pin;
I2s_LrckPolarity_e lrckpolarity;
I2s_BclkPolarity_e bclkpolarity;
I2s_Interface_Mode_e interfacemode;
Audio_BitDept_e audio_bit;
I2s_SampleRate_e samplerate;
Slot_Width_e slot_width;
Slot_Resolution_e slot_resolution;
#if (I2S_TX_MODE == 1)
I2s_GPIO_e tx_pin;
#endif
#if (I2S_RX_MODE == 1)
I2s_GPIO_e rx_pin;
#endif
#ifdef USE_DMA
uint32_t transf_size;
#if (I2S_TX_MODE == 1)
uint32_t *voice_tx_buffer;
#endif
#if (I2S_RX_MODE == 1)
uint32_t *voice_rx_buffer;
#endif
#endif
} I2s_Cfg_t;
void xc_i2s_init(I2s_Cfg_t *cfg);
void xc_i2s_deinit(void);
void xc_i2s_start(void *tx_cb, void *rx_cb);
void xc_i2s_stop(void);
#endif