9.3. IIS(ALNK)
概述
提供IIS配置介绍、推荐使用方式和注意点
9.3.1. 应用实例
示例演示:
进入
demo_DevKitBoard/include/demo_config.h
,开启宏USE_AUDIO_DEMO
根据IO说明进行两设备的连接
9.3.2. 常见问题
Note
IIS0和IIS1是两个互相独立的模块,每个模块具有四个独立的通道CH0~CH3,都可设为输入或输出,但同一模块的同一通道使用时不能同时设置为输出和输入。四个通道共用MCLK/LRCK/SCLK信号
SCLK,叫做串行时钟,也叫位时钟(BCLK),用于每一位数据传输的同步,SCLK的频率=2×采样频率×64或32。LRCK,帧时钟,也叫作WS,用于左右声道数据的区分,如高电平表示右声道数据,低电平表示左声道数据,其频率等于设置的采样频率
MCLK、SCLK和LRCK由主机提供给从机,当从机自带晶振时可不需由主机提供MCLK
测试时请保证通道数、采样率、位宽的设置是否正确,IO口不要被占用
9.3.3. 配置说明
struct iis_platform_data {
u8 channel_in; //输入通道 BIT(X)
u8 channel_out; //输出通道 BIT(X)
u8 port_sel; //IO组选择
u8 data_width; //BIT(X)为通道X使用24bit模式
u8 mclk_output; //1:输出mclk 0:不输出mclk
u8 slave_mode; //1:从机模式 0:主机模式
u16 dump_points_num; //丢弃刚打开iis硬件时的数据点数
};
/*************************************板A作为iis输出***************************************/
//app_config.h配置
#define CONFIG_AUDIO_DEC_PLAY_SOURCE "iis0" //播放输出源选择
//DevKitBoard.c配置
static const struct iis_platform_data iis0_data = {
.channel_in = 0,
.channel_out = BIT(0), //通道0输出
.port_sel = IIS_PORTA,
.data_width = 0,
.mclk_output = 0,
.slave_mode = 0,
.dump_points_num = 320,
};
/*************************************板B作为iis输入**************************************/
//app_config.h配置
#define CONFIG_AUDIO_ENC_SAMPLE_SOURCE AUDIO_ENC_SAMPLE_SOURCE_IIS0 //录音输入源选
#define CONFIG_AUDIO_RECORDER_SAMPLERATE 44100 //录音采样率,需与板A输出音频采样率一致
#define CONFIG_AUDIO_RECORDER_CHANNEL 2 //录音通道数,需与板A输出音频通道数一致
//DevKitBoard.c配置
static const struct iis_platform_data iis0_data = {
.channel_in = BIT(0), //通道0输入
.channel_out = 0,
.port_sel = IIS_PORTA,
.data_width = 0,
.mclk_output = 0,
.slave_mode = 1, //从机模式
.dump_points_num = 320,
};
根据以上两块板的配置,可实现由板A本地播放模式播放音频通过iis输出,之后由iis输入到板B作为录音模式的输入,板B通过DAC播放
9.3.4. API参考
可使用IIS模块数量
-
MAX_IIS_NUM
可使用IIS的模块数量
-
void iis_channel_on(u8 channel, u8 index)
iis打开通道
- Parameters
channel – 通道 BIT(x)
index – 0:iis0 1:iis1
-
void iis_channel_off(u8 channel, u8 index)
iis关闭通道
- Parameters
channel – 通道 BIT(x)
index – 0:iis0 1:iis1
-
int iis_open(struct iis_platform_data *pd, u8 index)
打开iis
- Parameters
iis_platform_data – *pd iis配置参数结构体参数指针
index – 0:iis0 1:iis1
-
void iis_close(u8 index)
关闭iis
- Parameters
index – 0:iis0 1:iis1
-
int iis_set_sample_rate(int sample_rate, u8 index)
iis采样率设置
- Parameters
sample_rate – 采样率
index – 0:iis0 1:iis1
-
void iis_set_enc_data_handler(void *priv, void (*cb)(void*, u8 *data, int len, u8), u8 index)
iis设置输入通道数据的中断回调
- Parameters
priv – 传入指针
cb – 回调函数
index – 0:iis0 1:iis1
-
void iis_set_dec_data_handler(void *priv, void (*cb)(void*, u8 *data, int len, u8), u8 index)
iis设置输出通道数据的中断回调
- Parameters
priv – 传入指针
cb – 回调函数
index – 0:iis0 1:iis1
-
void iis_irq_handler(u8 index)
iis中断函数
- Parameters
index – 0:iis0 1:iis1