13#ifndef __XT_HAL_I2S_H__
14#define __XT_HAL_I2S_H__
33#define XT_HAL_I2S_INVALID_ID (0xFF)
35#define XT_HAL_I2S_PROTOCOL_S (0)
36#define XT_HAL_I2S_PROTOCOL_W (2)
37#define XT_HAL_I2S_DATA_BITS_S (2)
38#define XT_HAL_I2S_DATA_BITS_W (2)
39#define XT_HAL_I2S_CHANNELS_S (4)
40#define XT_HAL_I2S_CHANNELS_W (1)
41#define XT_HAL_I2S_MCLK_S (5)
42#define XT_HAL_I2S_MCLK_W (3)
45#define XT_HAL_I2S_PROTOCOL_I2S ((0) << XT_HAL_I2S_PROTOCOL_S)
46#define XT_HAL_I2S_PROTOCOL_MSB_JUST ((1) << XT_HAL_I2S_PROTOCOL_S)
47#define XT_HAL_I2S_PROTOCOL_LSB_JUST ((2) << XT_HAL_I2S_PROTOCOL_S)
48#define XT_HAL_I2S_PROTOCOL_PCM ((3) << XT_HAL_I2S_PROTOCOL_S)
51#define XT_HAL_I2S_DATA_BITS_8 ((0) << XT_HAL_I2S_DATA_BITS_S)
52#define XT_HAL_I2S_DATA_BITS_16 ((1) << XT_HAL_I2S_DATA_BITS_S)
53#define XT_HAL_I2S_DATA_BITS_24 ((2) << XT_HAL_I2S_DATA_BITS_S)
54#define XT_HAL_I2S_DATA_BITS_32 ((3) << XT_HAL_I2S_DATA_BITS_S)
57#define XT_HAL_I2S_CHANNELS_MONO ((0) << XT_HAL_I2S_CHANNELS_S)
58#define XT_HAL_I2S_CHANNELS_STEREO ((1) << XT_HAL_I2S_CHANNELS_S)
61#define XT_HAL_I2S_MCLK_64FS ((0) << XT_HAL_I2S_MCLK_S)
62#define XT_HAL_I2S_MCLK_128FS ((1) << XT_HAL_I2S_MCLK_S)
63#define XT_HAL_I2S_MCLK_256FS ((2) << XT_HAL_I2S_MCLK_S)
64#define XT_HAL_I2S_MCLK_384FS ((3) << XT_HAL_I2S_MCLK_S)
65#define XT_HAL_I2S_MCLK_512FS ((4) << XT_HAL_I2S_MCLK_S)
128 uint8_t i2s_id, uint32_t mode, uint32_t sample_rate_hz,
129 uint8_t mck_pin, uint8_t sck_pin, uint8_t ws_pin,
130 uint8_t sd_tx_pin, uint8_t sd_rx_pin);
199 const void *tx_buffer,
249 const void *tx_buffer,
292 const void *tx_buffer,
345 const void *tx_buffer,
xt_err_t xt_hal_i2sm_setup(uint8_t i2s_id, uint32_t mode, uint32_t sample_rate_hz, uint8_t mck_pin, uint8_t sck_pin, uint8_t ws_pin, uint8_t sd_tx_pin, uint8_t sd_rx_pin)
I2S Master模式初始化
int32_t xt_hal_i2sm_rx_0copy(uint8_t i2s_id, void *rx_buffer, size_t size)
非阻塞接收数据
xt_err_t xt_hal_i2sm_get_result(uint8_t i2s_id, struct xt_hal_i2s_result *result)
获取 I2S 传输结果
int32_t xt_hal_i2sm_txrx_block(uint8_t i2s_id, const void *tx_buffer, void *rx_buffer, size_t size)
阻塞全双工传输
int32_t xt_hal_i2sm_txrx_0copy(uint8_t i2s_id, const void *tx_buffer, void *rx_buffer, size_t size)
非阻塞全双工传输
xt_err_t xt_hal_i2sm_tx_continuous(uint8_t i2s_id, const void *tx_buffer, size_t size)
非阻塞连续发送数据
int32_t xt_hal_i2sm_tx_block(uint8_t i2s_id, const void *tx_buffer, size_t size)
阻塞发送数据
xt_err_t xt_hal_i2s_set_cb(uint8_t i2s_id, xt_hal_i2s_cb_t cb)
设置I2S回调函数
int32_t xt_hal_i2sm_get_rx_count(uint8_t i2s_id)
获取已接收到流缓冲区的采样点个数
int32_t xt_hal_i2sm_tx_0copy(uint8_t i2s_id, const void *tx_buffer, size_t size)
非阻塞发送数据
xt_err_t xt_hal_i2sm_set_tx_buf(uint8_t i2s_id, void *buffer, size_t size)
为流式传输设置发送缓冲区
void(* xt_hal_i2s_cb_t)(uint8_t i2s_id, uint32_t event_id)
xt_err_t xt_hal_i2sm_txrx_continuous(uint8_t i2s_id, const void *tx_buffer, void *rx_buffer, size_t size)
非阻塞连续全双工传输
int32_t xt_hal_i2sm_rx(uint8_t i2s_id, void *rx_buffer, size_t size)
流式非阻塞接收数据
xt_err_t xt_hal_i2sm_close(uint8_t i2s_id)
关闭I2S接口
xt_err_t xt_hal_i2sm_set_rx_buf(uint8_t i2s_id, void *buffer, size_t size)
为流式传输设置接收缓冲区
xt_err_t xt_hal_i2sm_stop_continuous(uint8_t i2s_id)
停止 I2S pingpong 传输
int32_t xt_hal_i2sm_get_tx_free(uint8_t i2s_id)
获取流缓冲区的剩余空闲采样点个数
int32_t xt_hal_i2sm_rx_block(uint8_t i2s_id, void *rx_buffer, size_t size)
阻塞接收数据
int32_t xt_hal_i2sm_tx(uint8_t i2s_id, const void *tx_buffer, size_t size)
流式非阻塞发送数据
xt_err_t xt_hal_i2sm_rx_continuous(uint8_t i2s_id, void *rx_buffer, size_t size)
非阻塞连续接收数据
int32_t xt_hal_i2sm_txrx(uint8_t i2s_id, const void *tx_buffer, void *rx_buffer, size_t size)
流式非阻塞全双工传输
@ XT_HAL_I2S_EVENT_BATCH_DONE