129 lines
3.0 KiB
C
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
|