I2S
介绍
对于不同底层驱动的I2S操作实现,统一封装成本文所述hal i2s接口。 hal相关头文件位于目录:include/aos/hal hal相关实现位于具体的mcu目录下,如:platform/mcu/stm32f1xx/hal
API列表
函数名称 | 功能描述 |
---|---|
hal_i2s_init | 初始化指定I2S端口 |
hal_i2s_send | 从指定的I2S端口发送数据 |
hal_i2s_recv | 从指定的I2S端口接收数据 |
hal_i2s_pause | 暂停指定的I2S端口 |
hal_i2s_resume | 恢复指定的I2S端口 |
hal_i2s_stop | 停止指定的I2S端口 |
hal_i2s_finalize | 关闭指定I2S端口 |
API详情
相关结数据结构
i2s_dev_t
typedef struct {
uint8_t port; /* i2s port */
i2s_config_t config; /* i2s config */
void *priv; /* priv data */
} i2s_dev_t;
i2s_config_t
typedef struct {
uint32_t freq; /* I2S communication frequency */
hal_i2s_mode_t mode; /* I2S operating mode */
hal_i2s_std_t standard; /* I2S communication standard */
hal_i2s_data_format_t data_format; /* I2S communication data format */
} i2s_config_t;
hal_i2s_mode_t
typedef enum {
MODE_SLAVE_TX,
MODE_SLAVE_RX,
MODE_MASTER_TX,
MODE_MASTER_RX
} hal_i2s_mode_t;
hal_i2s_std_t
typedef enum {
STANDARD_PHILIPS, /**< Philips standard */
STANDARD_MSB, /**< MSB align standard */
STANDARD_LSB, /**< LSB align standard */
STANDARD_PCM_SHORT, /**< PCM short frame standard */
STANDARD_PCM_LONG /**< PCM long frame standard */
} hal_i2s_std_t;
hal_i2s_data_format_t
typedef enum {
DATAFORMAT_16B, /**< 16 bit dataformat */
DATAFORMAT_16B_EXTENDED, /**< 16 bit externded dataformat, 32 bit frame */
DATAFORMAT_24B, /**< 24 bit dataformat */
DATAFORMAT_32B /**< 32 bit dataformat */
} hal_i2s_data_format_t;
hal_i2s_init
初始化指定I2S端口
函数原型
int32_t hal_i2s_init(i2s_dev_t *i2s);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
i2s_dev_t *i2s | 入参 | I2S设备描述,定义需要初始化的I2S参数 | 用户自定义一个i2s_dev_t结构体 |
返回值
返回成功或失败, 返回0表示I2S初始化成功,非0表示失败
调用示例
hal_i2s_send
从指定的I2S端口发送数据
函数原型
int32_t hal_i2s_send(i2s_dev_t *i2s, const void *data, uint32_t size, uint32_t timeout);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
i2s_dev_t *i2s | 入参 | I2S设备描述 | 使用hal_i2s_init传入结构体 |
const void *data | 入参 | 指向发送缓冲区的数据指针 | char pdata[10] |
uint32_t size | 入参 | 要发送的数据字节数 | 10 |
uint32_t timeout | 入参 | 超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER | 10 |
返回值
返回成功或失败, 返回0表示I2S数据发送成功,非0表示失败
调用示例
hal_i2s_recv
从指定的I2S端口接收数据
函数原型
int32_t hal_i2s_recv(i2s_dev_t *i2s, void *data, uint32_t size, uint32_t timeout);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
i2s_dev_t *i2s | 入参 | I2S设备描述 | 使用hal_i2s_init传入结构体 |
void *data | 入参 | 指向接收缓冲区的数据指针 | char pdata[10] |
uint32_t size | 入参 | 要发送的数据字节数 | 10 |
uint32_t timeout | 入参 | 超时时间(单位ms),如果希望一直等待设置为HAL_WAIT_FOREVER | 10 |
返回值
返回成功或失败, 返回0表示成功接收size个数据,非0表示失败
调用示例
hal_i2s_pause
暂停指定I2S端口
函数原型
int32_t hal_i2s_pause(i2s_dev_t *i2s);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
i2s_dev_t *i2s | 入参 | I2S设备描述 | 使用hal_i2s_init传入结构体 |
返回值
返回成功或失败, 返回0表示暂停成功,非0表示失败
调用示例
hal_i2s_resume
恢复指定I2S端口
函数原型
int32_t hal_i2s_resume(i2s_dev_t *i2s);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
i2s_dev_t *i2s | 入参 | I2S设备描述 | 使用hal_i2s_init传入结构体 |
返回值
返回成功或失败, 返回0恢复成功,非0表示失败
调用示例
hal_i2s_stop
停止指定I2S端口
函数原型
int32_t hal_i2s_stop(i2s_dev_t *i2s);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
i2s_dev_t *i2s | 入参 | I2S设备描述 | 使用hal_i2s_init传入结构体 |
返回值
返回成功或失败, 返回0表示停止成功,非0表示失败
调用示例
hal_i2s_finalize
关闭指定I2S端口
函数原型
int32_t hal_i2s_finalize(i2s_dev_t *i2s);
参数
参数名称 | 出入参 | 参数描述 | 参数示例 |
---|---|---|---|
i2s_dev_t *i2s | 入参 | I2S设备描述 | 使用hal_i2s_init传入结构体 |
返回值
返回成功或失败, 返回0表示关闭成功,非0表示失败
调用示例
使用
添加该组件
在相应的platform/mcu的mk内,添加对应hal文件的编译包含。
包含头文件
#include "aos/hal/i2s.h"
使用示例
无
移植说明
无