|
xt-sdk 文档 v1.0.3
xt-sdk 嵌入式 SDK API 参考
|
XTINY HAL I2S 模块接口 更多...
结构体 | |
| struct | xt_hal_i2s_result |
| I2S 传输结果 更多... | |
类型定义 | |
| 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 模块接口
| #define XT_HAL_I2S_CHANNELS_MONO ((0) << XT_HAL_I2S_CHANNELS_S) |
单声道
在文件 xt_hal_i2s.h 第 57 行定义.
| #define XT_HAL_I2S_CHANNELS_S (4) |
在文件 xt_hal_i2s.h 第 39 行定义.
| #define XT_HAL_I2S_CHANNELS_STEREO ((1) << XT_HAL_I2S_CHANNELS_S) |
立体声
在文件 xt_hal_i2s.h 第 58 行定义.
| #define XT_HAL_I2S_CHANNELS_W (1) |
在文件 xt_hal_i2s.h 第 40 行定义.
| #define XT_HAL_I2S_DATA_BITS_16 ((1) << XT_HAL_I2S_DATA_BITS_S) |
16位数据
在文件 xt_hal_i2s.h 第 52 行定义.
| #define XT_HAL_I2S_DATA_BITS_24 ((2) << XT_HAL_I2S_DATA_BITS_S) |
24位数据
在文件 xt_hal_i2s.h 第 53 行定义.
| #define XT_HAL_I2S_DATA_BITS_32 ((3) << XT_HAL_I2S_DATA_BITS_S) |
32位数据
在文件 xt_hal_i2s.h 第 54 行定义.
| #define XT_HAL_I2S_DATA_BITS_8 ((0) << XT_HAL_I2S_DATA_BITS_S) |
8位数据
在文件 xt_hal_i2s.h 第 51 行定义.
| #define XT_HAL_I2S_DATA_BITS_S (2) |
在文件 xt_hal_i2s.h 第 37 行定义.
| #define XT_HAL_I2S_DATA_BITS_W (2) |
在文件 xt_hal_i2s.h 第 38 行定义.
| #define XT_HAL_I2S_INVALID_ID (0xFF) |
在文件 xt_hal_i2s.h 第 33 行定义.
| #define XT_HAL_I2S_MCLK_128FS ((1) << XT_HAL_I2S_MCLK_S) |
MCLK = 128 * 采样率
在文件 xt_hal_i2s.h 第 62 行定义.
| #define XT_HAL_I2S_MCLK_256FS ((2) << XT_HAL_I2S_MCLK_S) |
MCLK = 256 * 采样率
在文件 xt_hal_i2s.h 第 63 行定义.
| #define XT_HAL_I2S_MCLK_384FS ((3) << XT_HAL_I2S_MCLK_S) |
MCLK = 384 * 采样率
在文件 xt_hal_i2s.h 第 64 行定义.
| #define XT_HAL_I2S_MCLK_512FS ((4) << XT_HAL_I2S_MCLK_S) |
MCLK = 512 * 采样率
在文件 xt_hal_i2s.h 第 65 行定义.
| #define XT_HAL_I2S_MCLK_64FS ((0) << XT_HAL_I2S_MCLK_S) |
MCLK = 64 * 采样率
在文件 xt_hal_i2s.h 第 61 行定义.
| #define XT_HAL_I2S_MCLK_S (5) |
在文件 xt_hal_i2s.h 第 41 行定义.
| #define XT_HAL_I2S_MCLK_W (3) |
在文件 xt_hal_i2s.h 第 42 行定义.
| #define XT_HAL_I2S_PROTOCOL_I2S ((0) << XT_HAL_I2S_PROTOCOL_S) |
标准I2S格式
在文件 xt_hal_i2s.h 第 45 行定义.
| #define XT_HAL_I2S_PROTOCOL_LSB_JUST ((2) << XT_HAL_I2S_PROTOCOL_S) |
LSB对齐格式
在文件 xt_hal_i2s.h 第 47 行定义.
| #define XT_HAL_I2S_PROTOCOL_MSB_JUST ((1) << XT_HAL_I2S_PROTOCOL_S) |
MSB对齐格式
在文件 xt_hal_i2s.h 第 46 行定义.
| #define XT_HAL_I2S_PROTOCOL_PCM ((3) << XT_HAL_I2S_PROTOCOL_S) |
PCM格式
在文件 xt_hal_i2s.h 第 48 行定义.
| #define XT_HAL_I2S_PROTOCOL_S (0) |
在文件 xt_hal_i2s.h 第 35 行定义.
| #define XT_HAL_I2S_PROTOCOL_W (2) |
在文件 xt_hal_i2s.h 第 36 行定义.
| typedef void(* xt_hal_i2s_cb_t) (uint8_t i2s_id, uint32_t event_id) |
在文件 xt_hal_i2s.h 第 76 行定义.
| enum 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_err_t xt_hal_i2s_set_cb | ( | uint8_t | i2s_id, |
| xt_hal_i2s_cb_t | cb ) |
| xt_err_t xt_hal_i2sm_get_result | ( | uint8_t | i2s_id, |
| struct xt_hal_i2s_result * | result ) |
获取 I2S 传输结果
| i2s_id | I2S硬件ID | |
| [out] | result | 传输结果 |
| xt_err_t | 成功返回XT_EOK,失败返回错误码 |
| int32_t xt_hal_i2sm_get_rx_count | ( | uint8_t | i2s_id | ) |
获取已接收到流缓冲区的采样点个数
| i2s_id | I2S硬件ID |
| int32_t xt_hal_i2sm_get_tx_free | ( | uint8_t | i2s_id | ) |
获取流缓冲区的剩余空闲采样点个数
| i2s_id | I2S硬件ID |
| int32_t xt_hal_i2sm_rx | ( | uint8_t | i2s_id, |
| void * | rx_buffer, | ||
| size_t | size ) |
流式非阻塞接收数据
| i2s_id | I2S硬件ID |
| rx_buffer | 接收数据缓冲区 |
| size | 接收数据大小(采样点个数) |
| int32_t xt_hal_i2sm_rx_0copy | ( | uint8_t | i2s_id, |
| void * | rx_buffer, | ||
| size_t | size ) |
非阻塞接收数据
| i2s_id | I2S硬件ID |
| rx_buffer | 接收数据缓冲区 |
| size | 接收数据大小(采样点个数) |
| int32_t xt_hal_i2sm_rx_block | ( | uint8_t | i2s_id, |
| void * | rx_buffer, | ||
| size_t | size ) |
阻塞接收数据
| i2s_id | I2S硬件ID |
| rx_buffer | 接收数据缓冲区 |
| size | 接收数据大小(采样点个数) |
| xt_err_t xt_hal_i2sm_rx_continuous | ( | uint8_t | i2s_id, |
| void * | rx_buffer, | ||
| size_t | size ) |
非阻塞连续接收数据
内部对半分缓冲区,用作 pingpong 缓冲区,当某半段接收完成时, 会调用回调函数,此时可以读取 rx_buffer.
| i2s_id | I2S硬件ID |
| rx_buffer | 接收数据缓冲区,内部对半分,用作 pingpong 缓冲区 |
| size | 数据大小(采样点个数),必须是偶数 |
| xt_err_t xt_hal_i2sm_set_rx_buf | ( | uint8_t | i2s_id, |
| void * | buffer, | ||
| size_t | size ) |
为流式传输设置接收缓冲区
| i2s_id | I2S硬件ID |
| buffer | 数据缓冲区,必须在整个此外设在关闭前有效 |
| size | 数据大小(采样点个数) |
| xt_err_t xt_hal_i2sm_set_tx_buf | ( | uint8_t | i2s_id, |
| void * | buffer, | ||
| size_t | size ) |
为流式传输设置发送缓冲区
| i2s_id | I2S硬件ID |
| buffer | 数据缓冲区,必须在整个此外设在关闭前有效 |
| size | 数据大小(采样点个数) |
| 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_id | I2S硬件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_hal_i2sm_stop_continuous | ( | uint8_t | i2s_id | ) |
| int32_t xt_hal_i2sm_tx | ( | uint8_t | i2s_id, |
| const void * | tx_buffer, | ||
| size_t | size ) |
流式非阻塞发送数据
| i2s_id | I2S硬件ID |
| tx_buffer | 发送数据缓冲区 |
| size | 发送数据大小(采样点个数) |
| int32_t xt_hal_i2sm_tx_0copy | ( | uint8_t | i2s_id, |
| const void * | tx_buffer, | ||
| size_t | size ) |
非阻塞发送数据
| i2s_id | I2S硬件ID |
| tx_buffer | 发送数据缓冲区 |
| size | 发送数据大小(采样点个数) |
| int32_t xt_hal_i2sm_tx_block | ( | uint8_t | i2s_id, |
| const void * | tx_buffer, | ||
| size_t | size ) |
阻塞发送数据
| i2s_id | I2S硬件ID |
| tx_buffer | 发送数据缓冲区 |
| size | 发送数据大小(采样点个数) |
| xt_err_t xt_hal_i2sm_tx_continuous | ( | uint8_t | i2s_id, |
| const void * | tx_buffer, | ||
| size_t | size ) |
非阻塞连续发送数据
内部对半分缓冲区,用作 pingpong 缓冲区,当某半段发送完成时, 会调用回调函数,此时可以填充 tx_buffer.
| i2s_id | I2S硬件ID |
| tx_buffer | 发送数据缓冲区,内部对半分,用作 pingpong 缓冲区 |
| size | 发送数据大小(采样点个数),必须是偶数 |
| int32_t xt_hal_i2sm_txrx | ( | uint8_t | i2s_id, |
| const void * | tx_buffer, | ||
| void * | rx_buffer, | ||
| size_t | size ) |
流式非阻塞全双工传输
| i2s_id | I2S硬件ID |
| tx_buffer | 发送数据缓冲区 |
| rx_buffer | 接收数据缓冲区 |
| size | 收发数据大小(采样点个数) |
| int32_t xt_hal_i2sm_txrx_0copy | ( | uint8_t | i2s_id, |
| const void * | tx_buffer, | ||
| void * | rx_buffer, | ||
| size_t | size ) |
非阻塞全双工传输
| i2s_id | I2S硬件ID |
| tx_buffer | 发送数据缓冲区 |
| rx_buffer | 接收数据缓冲区 |
| size | 收发数据大小(采样点个数) |
| int32_t xt_hal_i2sm_txrx_block | ( | uint8_t | i2s_id, |
| const void * | tx_buffer, | ||
| void * | rx_buffer, | ||
| size_t | size ) |
阻塞全双工传输
| i2s_id | I2S硬件ID |
| tx_buffer | 发送数据缓冲区 |
| rx_buffer | 接收数据缓冲区 |
| size | 收发数据大小(采样点个数) |
| 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_id | I2S硬件ID |
| tx_buffer | 发送数据缓冲区,内部对半分,用作 pingpong 缓冲区 |
| rx_buffer | 接收数据缓冲区,内部对半分,用作 pingpong 缓冲区 |
| size | 收发数据大小(采样点个数) |