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使用IO组

IIS_PORTA

使用IIS_PORTA组IO

IIS_PORTC

使用IIS_PORTC组IO

IIS_PORTG

使用IIS_PORTG组IO

可使用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