CN / EN
文档反馈
感谢关注汇顶文档,期待您的宝贵建议!
感谢您的反馈,祝您愉快!

I2S Master Audio

I2S Master Audio示例中I2S作为Master,输出I2S数据流的示例工程,用户需要配置相应的参数,如时钟源、数据长度、音频频率等信息,然后调用初始化接口完成配置,最后调用中断和DMA的发送接口完成数据的发送。

I2S Master Audio示例的源代码和工程文件位于SDK_Folder\projects\peripheral\i2s\i2s_master_audio,其中工程文件在文件夹Keil_5下。

代码理解

示例工程流程图如图 18所示:

图 18 I2S Master Audio示例工程流程图
  1. 配置I2S模块。

    选择I2S模块配置代码数据长度为32 bit,时钟源为96 MHz,音频频率为48 kHz,这些参数均可配置为其他值。

    g_i2sm_handle.p_instance = I2S_M;
    g_i2sm_handle.init.data_size = I2S_DATASIZE_32BIT;
    g_i2sm_handle.init.clock_source = I2S_CLOCK_SRC_96M;
    g_i2sm_handle.init.audio_freq = 48000;
    
    hal_i2s_deinit(&g_i2sm_handle);
    hal_i2s_init(&g_i2sm_handle);
    
    • init.data_size:I2S传输数据位宽选择,可选择I2S_DATASIZE_12BIT、I2S_DATASIZE_16BIT、I2S_DATASIZE_20BIT、I2S_DATASIZE_24BIT、

      I2S_DATASIZE_32BIT。

    • init.clock_source:I2S时钟选择,可选择I2S_CLOCK_SRC_96M、I2S_CLOCK_SRC_32M。
    • init.audio_freq:指定主设备的频率,从设备不需要设置。

    I2S各引脚定义如下,用户可根据参考GR551x Datasheet中的pin_mux配置表,设置其他可用引脚:

    #define I2S_MASTER_WS_PIN               AON_GPIO_PIN_2
    #define I2S_MASTER_TX_SDO_PIN           AON_GPIO_PIN_3
    #define I2S_MASTER_RX_SDI_PIN           AON_GPIO_PIN_4
    #define I2S_MASTER_SCLK_PIN             AON_GPIO_PIN_5
  2. 调用hal_i2s_transmit()接口以轮询方式发送数据。代码如下:
    hal_i2s_transmit(&g_i2sm_handle, wdata, sizeof(wdata) >> 2, 1000); 
  3. 调用hal_i2s_transmit_it()接口以中断方式发送数据,因采用非阻塞方式,故在后续步骤中用while判断是否发送完成。代码如下:
    hal_i2s_transmit_it(&g_i2sm_handle, wdata, sizeof(wdata) >> 2);
    while (hal_i2s_get_state(&g_i2sm_handle) != HAL_I2S_STATE_READY);
  4. 调用hal_i2s_transmit_dma()接口以DMA方式发送,因采用非阻塞方式,故在后续步骤中用while判断是否发送完成。代码如下:
    hal_i2s_transmit_dma(&g_i2sm_handle, wdata, sizeof(wdata) >> 2);
    while (hal_i2s_get_state(&g_i2sm_handle) != HAL_I2S_STATE_READY);
    

测试验证

  1. 用GProgrammer下载i2s_master_audio.bin至开发板。
  2. 将开发板串口连接至PC端,打开并配置GRUart。
  3. 在GRUart的Receive Data窗口中将会显示I2S模块之间的数据交互信息。

扫描关注

打开微信,使用“扫一扫”即可关注。