[MCU] 【ESK32-360测评】六、喂!喂!你好!你好!

ddllxxrr   2020-8-19 19:58 楼主

我不隐瞒地说我从来就没有跑过I2S的程序。一个是因为工作接触不到这个,再一个因为以前开发板根本就没有这个例程。 

但是和泰的这款板子就不一样了。板子上有一个语音芯片,还有一个I2S的例程。等了这么久机会终于来了。

首先,分析一下原理图:

HTPPP.jpg 可见,这个原理是可以音频和语音输入的。而S1为两者的切换。再有板子上有一处为显示屏与I2S的跳线。

再分析一下例程:

int main(void)
{
  NVIC_Configuration();
  CKCU_Configuration();
  GPIO_Configuration();
  RETARGET_Configuration();
  I2CM_Init();
  WM8978_Init();

  printf("\r\n\r\nHT32 I2S and WM8978 Loopback ...\r\n");

  /* Config I2S                                                                                             */
  I2S_Configuration();

  /* I2S TX                                                                                                 */
  /* I2S RX                                                                                                 */
  PDMA_Configuration();

  while (1)
  {
    int i;

    while (IsRxTrigLevelReach == FALSE);
    IsRxTrigLevelReach = FALSE;
    for (i = 0; i < HALF_BUF_SIZE; i++)
    {
      u32 tmp = RxBuf[AltBuf];
      TxBuf[AltBuf] = (tmp & 0xFFFF0000) | (tmp >> 16);
    }
  }
}

可见只是把收到的内容,输出,而这都只是不经过CPU处理的:


void PDMA_Configuration(void)
{
  PDMACH_InitTypeDef PDMACH_InitStructure;

  /* I2S TX                                                                                                 */
  PDMACH_InitStructure.PDMACH_SrcAddr = (u32)&TxBuf[0][0];
  PDMACH_InitStructure.PDMACH_DstAddr = (u32)&HT_I2S->TXDR;
  PDMACH_InitStructure.PDMACH_AdrMod = (SRC_ADR_LIN_INC | DST_ADR_FIX | AUTO_RELOAD);
  PDMACH_InitStructure.PDMACH_BlkCnt = BUF_SIZE/5;
  PDMACH_InitStructure.PDMACH_BlkLen = 5;
  PDMACH_InitStructure.PDMACH_DataSize = WIDTH_32BIT;
  PDMACH_InitStructure.PDMACH_Priority = M_PRIO;
  PDMA_Config(PDMA_CH3, &PDMACH_InitStructure);
  PDMA_EnaCmd(PDMA_CH3, ENABLE);

  I2S_FIFOTrigLevelConfig(I2S_TX_FIFO, 3);  // Tx FIFO data '<' or '=' 3
  I2S_IntConfig(I2S_INT_TXFIFO_UDF, ENABLE);
  I2S_PDMACmd(I2S_PDMAREQ_TX, ENABLE);


  /* I2S RX                                                                                                 */
  PDMACH_InitStructure.PDMACH_SrcAddr = (u32)&HT_I2S->RXDR;
  PDMACH_InitStructure.PDMACH_DstAddr = (u32)&RxBuf[0][0];
  PDMACH_InitStructure.PDMACH_AdrMod = (SRC_ADR_FIX | DST_ADR_LIN_INC | AUTO_RELOAD);
  PDMACH_InitStructure.PDMACH_BlkCnt = BUF_SIZE/5;
  PDMACH_InitStructure.PDMACH_BlkLen = 5;
  PDMACH_InitStructure.PDMACH_DataSize = WIDTH_32BIT;
  PDMACH_InitStructure.PDMACH_Priority = H_PRIO;
  PDMA_Config(PDMA_CH2, &PDMACH_InitStructure);
  PDMA_IntConfig(PDMA_CH2, (PDMA_INT_GE | PDMA_INT_TC | PDMA_INT_HT), ENABLE);
  PDMA_EnaCmd(PDMA_CH2, ENABLE);

  I2S_FIFOTrigLevelConfig(I2S_RX_FIFO, 5);  // Rx FIFO data '>' or '=' 5
  I2S_PDMACmd(I2S_PDMAREQ_RX, ENABLE);
  I2S_IntConfig(I2S_INT_RXFIFO_OVF, ENABLE);

  I2S_Cmd(ENABLE);
}

那么,好办了,我就用MIC做为输入以耳机做为输出问一下你好吧?

QQ图片20200819193820.jpg

 

有的看官会问怎么知道是程序的输出的,也许模块就是这样吧?,这很简单就可以证明,我下个不是I2S的程序,从耳机里听不到我手摸迷头的声音。

以下是我用手机,靠近耳机录的音。内容是:“喂!喂!你好你好”,不愿听叫唤的可以绕过。

8月19日 下午7点12分.mp3 (101.27 KB)
(下载次数: 3, 2020-8-19 19:49 上传)

 

用手机播放的截图:

QQ图片20200819195547.jpg

总结一下:和泰的这款开发板,真的不错,和别的总是有点不一样的感觉。给我留了老好的印象,我想将来有机会我得考量一下和泰的芯片。

 

本帖最后由 ddllxxrr 于 2020-8-20 10:45 编辑
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复评论 (5)

I2S跟显示屏所用的SPI引脚复用了?

点赞  2020-8-19 23:08
引用: 宋元浩 发表于 2020-8-19 23:08 I2S跟显示屏所用的SPI引脚复用了?

在板子上有上跳线,我觉得是

http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
点赞  2020-8-20 10:40
引用: ddllxxrr 发表于 2020-8-20 10:40 在板子上有上跳线,我觉得是

这就有点不香了,这个demo板的MCU是48pin的嘛

点赞  2020-8-20 13:29
玩板看这里: https://bbs.eeworld.com.cn/elecplay.html EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
点赞  2020-8-24 07:15

看起来不是很麻烦,我工作中也用不到音频

默认摸鱼,再摸鱼。2022、9、28
点赞  2020-8-24 22:22
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复