打印
[应用相关]

AT32F435/437/425不同的I2S全双工使用方式

[复制链接]
2934|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
林堪堪|  楼主 | 2021-12-30 18:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 林堪堪 于 2021-12-31 09:20 编辑

AT32F435/437/425不同的I2S全双工使用方式

AT32F435/F437/F425等型号支持I2S全双工,AT32F403A/F407/F413/F415/F421等型号不支持I2S全双工,具体请参考对应型号RM文档。不同型号MCU的I2S全双工实现方式也有所区别,下面分别介绍AT32F435/F437和AT32F425的I2S全双工功能。
1、AT32F435/F437的I2S全双工
AT32F435/F437为了支持I2S全双工模式,额外例化了两个I2S模块(I2S2EXT,I2S3EXT)。I2S2可与I2S2EXT组合在一起支持全双工模式,I2S3可与I2S3EXT组合在一起支持全双工模式。代码可参考“案例3—AT32F435/F437 I2S全双工DMA方式通信”。在I2Sx可与I2SxEXT组成全双工模块时,I2Sx只能配置为主模式,I2SxEXT只能配置为从模式。CK和WS均由I2Sx提供,对应的有以下两种配置方式:
   ①  I2Sx主发(OPERSEL=0b10);I2SxEXT从收(OPERSEL=0b01);
   ② I2Sx主收(OPERSEL=0b11);I2SxEXT从发(OPERSEL=0b00)。
注:I2S2EXT 和I2S3EXT 只用于I2S全双工模式,而不能单独使用。


435/437配置I2S的关键代码如下:

static void i2s_config(void)
{
  i2s_init_type i2s_init_struct;
  crm_periph_clock_enable(CRM_SPI2_PERIPH_CLOCK, TRUE);/*使能SPI2时钟(也就是使能I2S2时钟)*/

  i2s_default_para_init(&i2s_init_struct);/*I2S初始化变量赋默认值*/
  i2s_init_struct.audio_protocol = I2S_AUDIO_PROTOCOL_PHILLIPS;/*设置I2S为飞利浦标准*/
  i2s_init_struct.data_channel_format = I2S_DATA_16BIT_CHANNEL_32BIT;/*设置I2S帧格式为:数据位数为16bit,声道位数为32bit*/
  i2s_init_struct.mclk_output_enable = TRUE;/*使能MCLK时钟输出*/
  i2s_init_struct.audio_sampling_freq = I2S_AUDIO_FREQUENCY_48K;/*配置I2S采样率为48K*/
  i2s_init_struct.clock_polarity = I2S_CLOCK_POLARITY_LOW;/*设置时钟空闲电平为低电平*/
  i2s_init_struct.operation_mode =I2S_MODE_MASTER_TX;/*设置I2S为主机发送模式*/
  i2s_init(SPI2, &i2s_init_struct);/*SPI2(也就是I2S2)设置为以上配置*/

  i2s_init_struct.operation_mode =I2S_MODE_SLAVE_RX; /*设置I2SEXT为从机接收模式*/
  i2s_init(I2S2EXT, &i2s_init_struct);

  dma_channel_enable(DMA1_CHANNEL1, TRUE);/*使能DMA1 channel1*/
  dma_channel_enable(DMA1_CHANNEL2, TRUE);/*使能DMA1 channel2*/

spi_i2s_dma_transmitter_enable(SPI2, TRUE); /*使能SPI2(即I2S2)DMA发送使能*/
  spi_i2s_dma_receiver_enable(I2S2EXT, TRUE); /*使能I2S2EXT DMA接收使能*/
}




2、AT32F425I2S全双工   AT32F425I2S全双工实现方式和AT32F435/F437不同。AT32F425可以通过设置SCFG_CFG2寄存器中的I2S_FD将两个SPI组合在一起实现I2S全双工。CKWSI2S主导方提供,附属方的CKWS对应引脚可以释放给其他功能使用。根据I2S_FD配置,有以下几种组合方式:
  I2S_FD=0b00I2S1~3各自独立半双工工作;
I2S_FD=0b01I2S1I2S3组成全双工模式,其中I2S1为主导方,I2S3为附属方。
  I2S_FD=0b10I2S2I2S3组成全双工模式,其中I2S2为主导方,I2S3为附属方。
I2S_FD=0b11I2S1I2S2组成全双工模式,其中I2S1为主导方,I2S2为附属方。


425配置I2S全双工的关键代码如下:
static void i2s_config(void)
{
  i2s_init_type i2s_init_struct;
  crm_periph_clock_enable(CRM_SPI3_PERIPH_CLOCK, TRUE);/*使能SPI3时钟(也就是使能I2S3时钟)*/
  crm_periph_clock_enable(CRM_SPI2_PERIPH_CLOCK, TRUE);/*使能SPI2时钟(也就是使能I2S2时钟)*/
crm_periph_clock_enable(CRM_SCFG_PERIPH_CLOCK, TRUE);/*使能系统配置时钟,用于后续配置I2S全双工组合选择*/

  scfg_i2s_full_duplex_config(SCFG_FULL_DUPLEX_I2S1_I2S2);/*配置I2S1I2S2组成全双工I2S。其中I2S1作为主导方,提供WSCKMCKSDI2S2作为附属方,仅提供SD_EXT*/
  i2s_default_para_init(&i2s_init_struct);/*I2S初始化变量赋默认值*/

  i2s_init_struct.audio_protocol = I2S_AUDIO_PROTOCOL_PHILLIPS;/*设置I2S为飞利浦标准*/
  i2s_init_struct.data_channel_format = I2S_DATA_16BIT_CHANNEL_32BIT;/*设置I2S帧格式为:数据位数为16bit,声道位数为32bit*/
  i2s_init_struct.mclk_output_enable = TRUE;/*使能MCLK时钟输出*/
  i2s_init_struct.audio_sampling_freq = I2S_AUDIO_FREQUENCY_48K;/*配置I2S采样率为48K*/
  i2s_init_struct.clock_polarity = I2S_CLOCK_POLARITY_LOW;/*设置时钟空闲电平为低电平*/
  i2s_init_struct.operation_mode =I2S_MODE_MASTER_TX;/*设置I2S为主机发送模式*/
  i2s_init(SPI1, &i2s_init_struct);/*SPI1(也就是I2S1)设置为以上配置*/

  i2s_init_struct.operation_mode = I2S_MODE_SLAVE_RX;/*设置I2S为从机接收模式*/
  i2s_init(SPI2, &i2s_init_struct);/*SPI2(也就是I2S2)设置为以上配置*/

  dma_channel_enable(DMA1_CHANNEL2, TRUE);/*使能DMA1 channel2*/
  dma_channel_enable(DMA1_CHANNEL3, TRUE);/*使能DMA1 channel3*/
  spi_i2s_dma_transmitter_enable(SPI1, TRUE); /*使能SPI1(即I2S1)DMA发送使能*/
  spi_i2s_dma_receiver_enable(SPI2, TRUE); /*使能SPI2(即I2S2DMA接收使能*/
}








使用特权

评论回复
沙发
foxsbig| | 2022-2-16 15:09 | 只看该作者
这几个都可以接音频啊

使用特权

评论回复
评论
林堪堪 2022-3-7 20:53 回复TA
对啊,I2S就是音频接口。只是有的型号的I2S支持全双共/半双工,有的型号的I2S只支持半双工。不过通常半双工就够用了 
板凳
cr315| | 2022-3-8 10:26 | 只看该作者
学习下425配置I2S全双工的关键代码

使用特权

评论回复
地板
foxsbig| | 2022-3-9 11:19 | 只看该作者
音频芯片一直没用过,有机会尝试一下

使用特权

评论回复
5
1988020566| | 2022-12-5 20:21 | 只看该作者
i2s的支持多个的速率?              

使用特权

评论回复
6
mikewalpole| | 2022-12-5 21:48 | 只看该作者
这个没有太了解过,i2s不都是一样的吗

使用特权

评论回复
7
backlugin| | 2022-12-6 16:10 | 只看该作者
wm8853是否可以驱动起来?              

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

119

帖子

5

粉丝