I2S Master Audio
I2S Master Audio示例中I2S作为Master,输出I2S数据流的示例工程,用户需要配置相应的参数,如时钟源、数据长度、音频频率等信息,然后调用初始化接口完成配置,最后调用中断和DMA的发送接口完成数据的发送。
I2S Master Audio示例的源代码和工程文件位于SDK_Folder\projects\peripheral\i2s\i2s_master_audio,其中工程文件在文件夹Keil_5下。
代码理解
示例工程流程图如图 18所示:
- 配置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 - init.data_size:I2S传输数据位宽选择,可选择I2S_DATASIZE_12BIT、I2S_DATASIZE_16BIT、I2S_DATASIZE_20BIT、I2S_DATASIZE_24BIT、
- 调用hal_i2s_transmit()接口以轮询方式发送数据。代码如下:
hal_i2s_transmit(&g_i2sm_handle, wdata, sizeof(wdata) >> 2, 1000); - 调用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); - 调用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);
测试验证
- 用GProgrammer下载i2s_master_audio.bin至开发板。
- 将开发板串口连接至PC端,打开并配置GRUart。
- 在GRUart的Receive Data窗口中将会显示I2S模块之间的数据交互信息。