xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
载入中...
搜索中...
未找到
xt_hal_i2s(I2S 驱动)

XTINY HAL I2S 模块接口 更多...

结构体

struct  xt_hal_i2s_result
 I2S 传输结果 更多...

宏定义

#define XT_HAL_I2S_INVALID_ID   (0xFF)
#define XT_HAL_I2S_PROTOCOL_S   (0)
#define XT_HAL_I2S_PROTOCOL_W   (2)
#define XT_HAL_I2S_DATA_BITS_S   (2)
#define XT_HAL_I2S_DATA_BITS_W   (2)
#define XT_HAL_I2S_CHANNELS_S   (4)
#define XT_HAL_I2S_CHANNELS_W   (1)
#define XT_HAL_I2S_MCLK_S   (5)
#define XT_HAL_I2S_MCLK_W   (3)
#define XT_HAL_I2S_PROTOCOL_I2S   ((0) << XT_HAL_I2S_PROTOCOL_S)
#define XT_HAL_I2S_PROTOCOL_MSB_JUST   ((1) << XT_HAL_I2S_PROTOCOL_S)
#define XT_HAL_I2S_PROTOCOL_LSB_JUST   ((2) << XT_HAL_I2S_PROTOCOL_S)
#define XT_HAL_I2S_PROTOCOL_PCM   ((3) << XT_HAL_I2S_PROTOCOL_S)
#define XT_HAL_I2S_DATA_BITS_8   ((0) << XT_HAL_I2S_DATA_BITS_S)
#define XT_HAL_I2S_DATA_BITS_16   ((1) << XT_HAL_I2S_DATA_BITS_S)
#define XT_HAL_I2S_DATA_BITS_24   ((2) << XT_HAL_I2S_DATA_BITS_S)
#define XT_HAL_I2S_DATA_BITS_32   ((3) << XT_HAL_I2S_DATA_BITS_S)
#define XT_HAL_I2S_CHANNELS_MONO   ((0) << XT_HAL_I2S_CHANNELS_S)
#define XT_HAL_I2S_CHANNELS_STEREO   ((1) << XT_HAL_I2S_CHANNELS_S)
#define XT_HAL_I2S_MCLK_64FS   ((0) << XT_HAL_I2S_MCLK_S)
#define XT_HAL_I2S_MCLK_128FS   ((1) << XT_HAL_I2S_MCLK_S)
#define XT_HAL_I2S_MCLK_256FS   ((2) << XT_HAL_I2S_MCLK_S)
#define XT_HAL_I2S_MCLK_384FS   ((3) << XT_HAL_I2S_MCLK_S)
#define XT_HAL_I2S_MCLK_512FS   ((4) << XT_HAL_I2S_MCLK_S)

类型定义

typedef void(* xt_hal_i2s_cb_t) (uint8_t i2s_id, uint32_t event_id)

枚举

enum  xt_hal_i2s_event_id { XT_HAL_I2S_EVENT_DONE = 0x00 , XT_HAL_I2S_EVENT_BATCH_DONE , XT_HAL_I2S_EVENT_ERROR }

函数

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模式初始化
xt_err_t xt_hal_i2sm_close (uint8_t i2s_id)
 关闭I2S接口
xt_err_t xt_hal_i2s_set_cb (uint8_t i2s_id, xt_hal_i2s_cb_t cb)
 设置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_set_tx_buf (uint8_t i2s_id, void *buffer, size_t size)
 为流式传输设置发送缓冲区
int32_t xt_hal_i2sm_tx (uint8_t i2s_id, const void *tx_buffer, size_t size)
 流式非阻塞发送数据
int32_t xt_hal_i2sm_rx (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)
 流式非阻塞全双工传输
int32_t xt_hal_i2sm_get_rx_count (uint8_t i2s_id)
 获取已接收到流缓冲区的采样点个数
int32_t xt_hal_i2sm_get_tx_free (uint8_t i2s_id)
 获取流缓冲区的剩余空闲采样点个数
int32_t xt_hal_i2sm_tx_0copy (uint8_t i2s_id, const void *tx_buffer, size_t size)
 非阻塞发送数据
int32_t xt_hal_i2sm_rx_0copy (uint8_t i2s_id, 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)
 非阻塞连续发送数据
xt_err_t xt_hal_i2sm_rx_continuous (uint8_t i2s_id, void *rx_buffer, size_t size)
 非阻塞连续接收数据
xt_err_t xt_hal_i2sm_txrx_continuous (uint8_t i2s_id, const void *tx_buffer, void *rx_buffer, size_t size)
 非阻塞连续全双工传输
xt_err_t xt_hal_i2sm_stop_continuous (uint8_t i2s_id)
 停止 I2S pingpong 传输
xt_err_t xt_hal_i2sm_get_result (uint8_t i2s_id, struct xt_hal_i2s_result *result)
 获取 I2S 传输结果
int32_t xt_hal_i2sm_tx_block (uint8_t i2s_id, const void *tx_buffer, size_t size)
 阻塞发送数据
int32_t xt_hal_i2sm_rx_block (uint8_t i2s_id, void *rx_buffer, size_t size)
 阻塞接收数据
int32_t xt_hal_i2sm_txrx_block (uint8_t i2s_id, const void *tx_buffer, void *rx_buffer, size_t size)
 阻塞全双工传输

详细描述

XTINY HAL I2S 模块接口

宏定义说明

◆ XT_HAL_I2S_CHANNELS_MONO

#define XT_HAL_I2S_CHANNELS_MONO   ((0) << XT_HAL_I2S_CHANNELS_S)

单声道

在文件 xt_hal_i2s.h 第 57 行定义.

◆ XT_HAL_I2S_CHANNELS_S

#define XT_HAL_I2S_CHANNELS_S   (4)

在文件 xt_hal_i2s.h 第 39 行定义.

◆ XT_HAL_I2S_CHANNELS_STEREO

#define XT_HAL_I2S_CHANNELS_STEREO   ((1) << XT_HAL_I2S_CHANNELS_S)

立体声

在文件 xt_hal_i2s.h 第 58 行定义.

◆ XT_HAL_I2S_CHANNELS_W

#define XT_HAL_I2S_CHANNELS_W   (1)

在文件 xt_hal_i2s.h 第 40 行定义.

◆ XT_HAL_I2S_DATA_BITS_16

#define XT_HAL_I2S_DATA_BITS_16   ((1) << XT_HAL_I2S_DATA_BITS_S)

16位数据

在文件 xt_hal_i2s.h 第 52 行定义.

◆ XT_HAL_I2S_DATA_BITS_24

#define XT_HAL_I2S_DATA_BITS_24   ((2) << XT_HAL_I2S_DATA_BITS_S)

24位数据

在文件 xt_hal_i2s.h 第 53 行定义.

◆ XT_HAL_I2S_DATA_BITS_32

#define XT_HAL_I2S_DATA_BITS_32   ((3) << XT_HAL_I2S_DATA_BITS_S)

32位数据

在文件 xt_hal_i2s.h 第 54 行定义.

◆ XT_HAL_I2S_DATA_BITS_8

#define XT_HAL_I2S_DATA_BITS_8   ((0) << XT_HAL_I2S_DATA_BITS_S)

8位数据

在文件 xt_hal_i2s.h 第 51 行定义.

◆ XT_HAL_I2S_DATA_BITS_S

#define XT_HAL_I2S_DATA_BITS_S   (2)

在文件 xt_hal_i2s.h 第 37 行定义.

◆ XT_HAL_I2S_DATA_BITS_W

#define XT_HAL_I2S_DATA_BITS_W   (2)

在文件 xt_hal_i2s.h 第 38 行定义.

◆ XT_HAL_I2S_INVALID_ID

#define XT_HAL_I2S_INVALID_ID   (0xFF)

在文件 xt_hal_i2s.h 第 33 行定义.

◆ XT_HAL_I2S_MCLK_128FS

#define XT_HAL_I2S_MCLK_128FS   ((1) << XT_HAL_I2S_MCLK_S)

MCLK = 128 * 采样率

在文件 xt_hal_i2s.h 第 62 行定义.

◆ XT_HAL_I2S_MCLK_256FS

#define XT_HAL_I2S_MCLK_256FS   ((2) << XT_HAL_I2S_MCLK_S)

MCLK = 256 * 采样率

在文件 xt_hal_i2s.h 第 63 行定义.

◆ XT_HAL_I2S_MCLK_384FS

#define XT_HAL_I2S_MCLK_384FS   ((3) << XT_HAL_I2S_MCLK_S)

MCLK = 384 * 采样率

在文件 xt_hal_i2s.h 第 64 行定义.

◆ XT_HAL_I2S_MCLK_512FS

#define XT_HAL_I2S_MCLK_512FS   ((4) << XT_HAL_I2S_MCLK_S)

MCLK = 512 * 采样率

在文件 xt_hal_i2s.h 第 65 行定义.

◆ XT_HAL_I2S_MCLK_64FS

#define XT_HAL_I2S_MCLK_64FS   ((0) << XT_HAL_I2S_MCLK_S)

MCLK = 64 * 采样率

在文件 xt_hal_i2s.h 第 61 行定义.

◆ XT_HAL_I2S_MCLK_S

#define XT_HAL_I2S_MCLK_S   (5)

在文件 xt_hal_i2s.h 第 41 行定义.

◆ XT_HAL_I2S_MCLK_W

#define XT_HAL_I2S_MCLK_W   (3)

在文件 xt_hal_i2s.h 第 42 行定义.

◆ XT_HAL_I2S_PROTOCOL_I2S

#define XT_HAL_I2S_PROTOCOL_I2S   ((0) << XT_HAL_I2S_PROTOCOL_S)

标准I2S格式

在文件 xt_hal_i2s.h 第 45 行定义.

◆ XT_HAL_I2S_PROTOCOL_LSB_JUST

#define XT_HAL_I2S_PROTOCOL_LSB_JUST   ((2) << XT_HAL_I2S_PROTOCOL_S)

LSB对齐格式

在文件 xt_hal_i2s.h 第 47 行定义.

◆ XT_HAL_I2S_PROTOCOL_MSB_JUST

#define XT_HAL_I2S_PROTOCOL_MSB_JUST   ((1) << XT_HAL_I2S_PROTOCOL_S)

MSB对齐格式

在文件 xt_hal_i2s.h 第 46 行定义.

◆ XT_HAL_I2S_PROTOCOL_PCM

#define XT_HAL_I2S_PROTOCOL_PCM   ((3) << XT_HAL_I2S_PROTOCOL_S)

PCM格式

在文件 xt_hal_i2s.h 第 48 行定义.

◆ XT_HAL_I2S_PROTOCOL_S

#define XT_HAL_I2S_PROTOCOL_S   (0)

在文件 xt_hal_i2s.h 第 35 行定义.

◆ XT_HAL_I2S_PROTOCOL_W

#define XT_HAL_I2S_PROTOCOL_W   (2)

在文件 xt_hal_i2s.h 第 36 行定义.

类型定义说明

◆ xt_hal_i2s_cb_t

typedef void(* xt_hal_i2s_cb_t) (uint8_t i2s_id, uint32_t event_id)

在文件 xt_hal_i2s.h 第 76 行定义.

枚举类型说明

◆ xt_hal_i2s_event_id

枚举值
XT_HAL_I2S_EVENT_DONE 

传输完成

XT_HAL_I2S_EVENT_BATCH_DONE 

连续传输完成一个批次(某半段传输完成)

XT_HAL_I2S_EVENT_ERROR 

错误事件

在文件 xt_hal_i2s.h 第 70 行定义.

函数说明

◆ xt_hal_i2s_set_cb()

xt_err_t xt_hal_i2s_set_cb ( uint8_t i2s_id,
xt_hal_i2s_cb_t cb )

设置I2S回调函数

参数
i2s_idI2S硬件ID
cb回调函数指针
返回
xt_err_t 成功返回XT_EOK,失败返回错误码

◆ xt_hal_i2sm_close()

xt_err_t xt_hal_i2sm_close ( uint8_t i2s_id)

关闭I2S接口

参数
i2s_idI2S硬件ID
返回
xt_err_t 成功返回XT_EOK,失败返回错误码

◆ xt_hal_i2sm_get_result()

xt_err_t xt_hal_i2sm_get_result ( uint8_t i2s_id,
struct xt_hal_i2s_result * result )

获取 I2S 传输结果

注解
只允许在回调函数中调用
参数
i2s_idI2S硬件ID
[out]result传输结果
返回值
xt_err_t成功返回XT_EOK,失败返回错误码

◆ xt_hal_i2sm_get_rx_count()

int32_t xt_hal_i2sm_get_rx_count ( uint8_t i2s_id)

获取已接收到流缓冲区的采样点个数

参数
i2s_idI2S硬件ID
返回
int32_t 成功返回已接收到流缓冲区的采样点个数,失败返回负数

◆ xt_hal_i2sm_get_tx_free()

int32_t xt_hal_i2sm_get_tx_free ( uint8_t i2s_id)

获取流缓冲区的剩余空闲采样点个数

参数
i2s_idI2S硬件ID
返回
int32_t 成功返回流缓冲区的剩余空闲采样点个数,失败返回负数

◆ xt_hal_i2sm_rx()

int32_t xt_hal_i2sm_rx ( uint8_t i2s_id,
void * rx_buffer,
size_t size )

流式非阻塞接收数据

参数
i2s_idI2S硬件ID
rx_buffer接收数据缓冲区
size接收数据大小(采样点个数)
返回
int32_t 成功返回从接收缓冲区读取的采样点个数,失败返回负数

◆ xt_hal_i2sm_rx_0copy()

int32_t xt_hal_i2sm_rx_0copy ( uint8_t i2s_id,
void * rx_buffer,
size_t size )

非阻塞接收数据

参数
i2s_idI2S硬件ID
rx_buffer接收数据缓冲区
size接收数据大小(采样点个数)
返回
int32_t 成功返回预期接收采样点个数,失败返回负数

◆ xt_hal_i2sm_rx_block()

int32_t xt_hal_i2sm_rx_block ( uint8_t i2s_id,
void * rx_buffer,
size_t size )

阻塞接收数据

参数
i2s_idI2S硬件ID
rx_buffer接收数据缓冲区
size接收数据大小(采样点个数)
返回
int32_t 成功返回实际接收采样点个数,失败返回负数

◆ xt_hal_i2sm_rx_continuous()

xt_err_t xt_hal_i2sm_rx_continuous ( uint8_t i2s_id,
void * rx_buffer,
size_t size )

非阻塞连续接收数据

内部对半分缓冲区,用作 pingpong 缓冲区,当某半段接收完成时, 会调用回调函数,此时可以读取 rx_buffer.

参数
i2s_idI2S硬件ID
rx_buffer接收数据缓冲区,内部对半分,用作 pingpong 缓冲区
size数据大小(采样点个数),必须是偶数
返回
xt_err_t 成功返回XT_EOK,失败返回错误码

◆ xt_hal_i2sm_set_rx_buf()

xt_err_t xt_hal_i2sm_set_rx_buf ( uint8_t i2s_id,
void * buffer,
size_t size )

为流式传输设置接收缓冲区

参数
i2s_idI2S硬件ID
buffer数据缓冲区,必须在整个此外设在关闭前有效
size数据大小(采样点个数)
返回
xt_err_t 成功返回XT_EOK,失败返回错误码

◆ xt_hal_i2sm_set_tx_buf()

xt_err_t xt_hal_i2sm_set_tx_buf ( uint8_t i2s_id,
void * buffer,
size_t size )

为流式传输设置发送缓冲区

参数
i2s_idI2S硬件ID
buffer数据缓冲区,必须在整个此外设在关闭前有效
size数据大小(采样点个数)
返回
xt_err_t 成功返回XT_EOK,失败返回错误码

◆ xt_hal_i2sm_setup()

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模式初始化

参数
i2s_idI2S硬件ID
mode工作模式配置(XT_HAL_I2S_*组合)
sample_rate_hz采样率(Hz),如8000, 16000, 44100, 48000等
mck_pin主时钟引脚(可以为 XT_HAL_GPIO_INVALID_ID)
sck_pin时钟信号引脚
ws_pin字选择信号引脚
sd_tx_pin数据发送引脚(可以为 XT_HAL_GPIO_INVALID_ID)
sd_rx_pin数据接收引脚(可以为 XT_HAL_GPIO_INVALID_ID)
返回
xt_err_t 成功返回XT_EOK,失败返回错误码

◆ xt_hal_i2sm_stop_continuous()

xt_err_t xt_hal_i2sm_stop_continuous ( uint8_t i2s_id)

停止 I2S pingpong 传输

参数
i2s_idI2S硬件ID
返回
xt_err_t 成功返回XT_EOK,失败返回错误码

◆ xt_hal_i2sm_tx()

int32_t xt_hal_i2sm_tx ( uint8_t i2s_id,
const void * tx_buffer,
size_t size )

流式非阻塞发送数据

参数
i2s_idI2S硬件ID
tx_buffer发送数据缓冲区
size发送数据大小(采样点个数)
返回
int32_t 成功返回加入发送缓冲区采样点个数,失败返回负数

◆ xt_hal_i2sm_tx_0copy()

int32_t xt_hal_i2sm_tx_0copy ( uint8_t i2s_id,
const void * tx_buffer,
size_t size )

非阻塞发送数据

参数
i2s_idI2S硬件ID
tx_buffer发送数据缓冲区
size发送数据大小(采样点个数)
返回
int32_t 成功返回预期发送采样点个数,失败返回负数

◆ xt_hal_i2sm_tx_block()

int32_t xt_hal_i2sm_tx_block ( uint8_t i2s_id,
const void * tx_buffer,
size_t size )

阻塞发送数据

参数
i2s_idI2S硬件ID
tx_buffer发送数据缓冲区
size发送数据大小(采样点个数)
返回
int32_t 成功返回实际发送采样点个数,失败返回负数

◆ xt_hal_i2sm_tx_continuous()

xt_err_t xt_hal_i2sm_tx_continuous ( uint8_t i2s_id,
const void * tx_buffer,
size_t size )

非阻塞连续发送数据

内部对半分缓冲区,用作 pingpong 缓冲区,当某半段发送完成时, 会调用回调函数,此时可以填充 tx_buffer.

参数
i2s_idI2S硬件ID
tx_buffer发送数据缓冲区,内部对半分,用作 pingpong 缓冲区
size发送数据大小(采样点个数),必须是偶数
返回
xt_err_t 成功返回XT_EOK,失败返回错误码

◆ xt_hal_i2sm_txrx()

int32_t xt_hal_i2sm_txrx ( uint8_t i2s_id,
const void * tx_buffer,
void * rx_buffer,
size_t size )

流式非阻塞全双工传输

参数
i2s_idI2S硬件ID
tx_buffer发送数据缓冲区
rx_buffer接收数据缓冲区
size收发数据大小(采样点个数)
返回
int32_t 成功返回从缓冲区接收或发送的传输采样点个数,失败返回负数

◆ xt_hal_i2sm_txrx_0copy()

int32_t xt_hal_i2sm_txrx_0copy ( uint8_t i2s_id,
const void * tx_buffer,
void * rx_buffer,
size_t size )

非阻塞全双工传输

参数
i2s_idI2S硬件ID
tx_buffer发送数据缓冲区
rx_buffer接收数据缓冲区
size收发数据大小(采样点个数)
返回
int32_t 成功返回预期传输采样点个数,失败返回负数

◆ xt_hal_i2sm_txrx_block()

int32_t xt_hal_i2sm_txrx_block ( uint8_t i2s_id,
const void * tx_buffer,
void * rx_buffer,
size_t size )

阻塞全双工传输

参数
i2s_idI2S硬件ID
tx_buffer发送数据缓冲区
rx_buffer接收数据缓冲区
size收发数据大小(采样点个数)
返回
int32_t 成功返回实际传输采样点个数,失败返回负数

◆ xt_hal_i2sm_txrx_continuous()

xt_err_t xt_hal_i2sm_txrx_continuous ( uint8_t i2s_id,
const void * tx_buffer,
void * rx_buffer,
size_t size )

非阻塞连续全双工传输

内部对半分缓冲区,用作 pingpong 缓冲区,当某半段传输完成时, 会调用回调函数,此时可以读取 rx_buffer 并填充 tx_buffer.

参数
i2s_idI2S硬件ID
tx_buffer发送数据缓冲区,内部对半分,用作 pingpong 缓冲区
rx_buffer接收数据缓冲区,内部对半分,用作 pingpong 缓冲区
size收发数据大小(采样点个数)
返回
xt_err_t 成功返回XT_EOK,失败返回错误码