#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