查看: 5786|回复: 6

[原创] 【LPC54114双核任务三】双核之初识音频--5#WIFI调音录音播音#

[复制链接]
  • TA的每日心情

    2021-1-28 20:09
  • 签到天数: 317 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    8028
    最后登录
    2022-5-12
    发表于 2017-7-9 20:00:11 | 显示全部楼层 |阅读模式
    本帖最后由 小马哥-1650185 于 2017-7-11 22:41 编辑

            本帖谈下数字麦克录音通过iis总线传输给wm8904,实现音频的录音播放功能,音量调节可通过按键,WIFI,以及触摸屏。

    流程:
            系统上电后,需要初始化串口0,串口3,串口5,按键,led,IIC, IIS , WM8904, DMIC,然后通过数字麦克检测音频信号,经pdm接口传输给54114,经dmin转成pcm信号,在经iis传输给wm8904,经过cn7接口传输到音响上播放。。。




    先来看下整体实验图吧。


    111.png

    2017_07_11_22_35_41.gif
    按下PB2键,wiif联网开透传,串口打印提示信息

    2.png

    wifi发送0xaa,增加音量
    3.jpg

    wifi发送0x55,减小音量

    4.jpg
    wifi发送0--63之间的数值,直调音量


    5.jpg

    点击 触屏上的 按钮“增加音量”和“减小音量”,效果和上图是一样的,就不传了


    下面说下代码思路吧

    时钟配置

    1.     /* USART0 clock */
    2.     CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);

    3.     /* I2C clock */
    4.     CLOCK_AttachClk(kFRO12M_to_FLEXCOMM4);
    5.                                 
    6.     /* I2S clocks */
    7.     CLOCK_AttachClk(kFRO_HF_to_FLEXCOMM6);
    8.     CLOCK_AttachClk(kFRO_HF_to_FLEXCOMM7);

    9.     /* DMIC uses 12MHz FRO clock */
    10.     CLOCK_AttachClk(kFRO12M_to_DMIC);

    11.     /*12MHz divided by 15 = 800KHz PDM clock */
    12.     CLOCK_SetClkDiv(kCLOCK_DivDmicClk, 14, false);

    13.     /* Enable high speed clock for I2S*/
    14.     SYSCON->FROCTRL |= (uint32_t)SYSCON_FROCTRL_HSPDCLK(1U);
    15.     SYSCON->MCLKDIV = SYSCON_MCLKDIV_DIV(1 - 1);
    16.     SYSCON->MCLKIO = 1U;

    17.     /* Attach high speed clock to MCLK for I2S */
    18.     CLOCK_AttachClk(kFRO_HF_to_MCLK);
    复制代码


    复位FLEXCOMM
    1.     /* reset FLEXCOMM for I2C */
    2.     RESET_PeripheralReset(kFC4_RST_SHIFT_RSTn);

    3.     /* reset FLEXCOMM for I2S */
    4.     RESET_PeripheralReset(kFC6_RST_SHIFT_RSTn);
    5.     RESET_PeripheralReset(kFC7_RST_SHIFT_RSTn);
    复制代码


    外设初始化
    1.   led_init();
    2.                 key_init();
    3.     usart3_init();
    4.     usart5_init();
    复制代码


    wm8904初始化
    1. WM8904_Init(&codecHandle, &codecConfig)
    复制代码
    dmic初始化
    1. DMIC_Init(DMIC0);
    复制代码
    IIS初始化
    1. I2S_TxInit(DEMO_I2S_TX, &tx_config);
    2.     I2S_Enable(DEMO_I2S_TX);
    复制代码

    配置完成后,通过数字麦克检测音频信号,把接收到的数据经cpu处理后,发到iis总线上,经编解码器wm8904,输出音频。demo参考dmic_codec_direct,需要修改下外设的gpio配置


    关于按键和wifi控制调音功能,前面帖子有详细降到。


    wifi模块用到了串口5,相关配置任务二的帖子有贴出来。板子上电后,按下PB2键会一键链接局域网,建立客户端--服务器的单连接透传通信模式。


    此时,服务器发送 0xaa:增大音亮
              服务器发送0x55:减小音量
              服务器发送的数值在0--63之间,直接调到发送数值对应的音量。


    触摸屏模块用到了串口3,直接看板子上是没有串口3引出的,不过没关系,spi 和串口 都是公用flexcomm的,所以就把spi的msio,miso两个引脚复用为了usart3

    1. void usart3_init(void)
    2. {
    3.                 usart_config_t config;
    4.         
    5.                 /* attach 12 MHz clock to FLEXCOMM5  */
    6.     CLOCK_AttachClk(BOARD_UART3_CLK_ATTACH);

    7.     /* reset FLEXCOMM for USART5 */
    8.     RESET_PeripheralReset(BOARD_UART3_RST);        
    9.         
    10. //RX:P0_12      TX:P0_12
    11.                 USART3_InitPins();

    12.     USART_GetDefaultConfig(&config);
    13.     config.baudRate_Bps = BOARD_UART3_BAUDRATE;
    14.     config.enableTx = true;
    15.     config.enableRx = true;

    16.     USART_Init(LPC_USART3, &config, LPC_USART3_CLK_FREQ);
    17.                     /* Send g_tipString out. */
    18. //    USART_WriteBlocking(LPC_USART3, g_tipString, sizeof(g_tipString) / sizeof(g_tipString[0]));

    19.     /* Enable RX interrupt. */
    20.     USART_EnableInterrupts(LPC_USART3, kUSART_RxLevelInterruptEnable | kUSART_RxErrorInterruptEnable);
    复制代码
    当检测到触摸屏上的  增加音量按钮的热区被按下后,音量增加,同理,
    当检测到触摸屏上的  减小音量按钮的热区被按下后,音量减小

    QQ截图20170709214412.png


    wifi和触摸屏调音公用一个处理方法
    1. if((wifi_data ==0xaa)||(Volume_flg == 1))
    2.         {
    3.         wifi_data =0;
    4.                 Volume_flg=0;
    5.                   if(VolumeValue <63 )VolumeValue += 1;
    6.                         if(VolumeValue >=63 ){
    7.                                                         VolumeValue =63;
    8.                                 PRINTF("Current volume maximum\r\n");
    9.                         }
    10.                                 WM8904_SetVolume(&codecHandle, VolumeValue, VolumeValue);
    11.                         PRINTF("Current volume value: %d%%\r\n" , VolumeValue*100/VOLUME_MAX);
    12.                         V_Buf[0] = VolumeValue*100/VOLUME_MAX;
    13.                         AT_Send(V_Buf);
    14.                         GPU_Set_Volume(V_Buf[0]);
    15.         }               
    16.         
    17.         else if((wifi_data ==0x55)||(Volume_flg == 2))
    18.         {
    19.           wifi_data =0;
    20.                 Volume_flg=0;
    21.                 if(VolumeValue >0)VolumeValue -= 1;
    22.                 if(VolumeValue <=0 ){
    23.                                         VolumeValue =0;
    24.                                         PRINTF("Current volume minimum\r\n");
    25.                 }
    26.                         WM8904_SetVolume(&codecHandle, VolumeValue, VolumeValue);
    27.                 PRINTF("Current volume value: %d%%\r\n" , VolumeValue*100/VOLUME_MAX);
    28.                 V_Buf[0] = VolumeValue*100/VOLUME_MAX;
    29.                 AT_Send(V_Buf);
    30.                 GPU_Set_Volume(V_Buf[0]);
    31.         }        
    32.         
    33.         else if((wifi_data >0)&&(wifi_data <=63))
    34.         {
    35.         
    36.                 WM8904_SetVolume(&codecHandle, wifi_data, wifi_data);
    37.                 PRINTF("Current volume value: %d%%\r\n" , wifi_data);
    38.                 V_Buf[0] = wifi_data;
    39.                 AT_Send(V_Buf);
    40.                 GPU_Set_Volume(V_Buf[0]);
    41.                 wifi_data=0;
    42.         }        
    复制代码


    。。。。。。。。。。。。。。。
    这样对着麦克风讲话的时候,不论是通过wifi还是触摸屏,都可以对音量进行调节了。。。


    ........

    好好
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-6-14 22:38
  • 签到天数: 37 天

    [LV.5]常住居民I

    0

    主题

    62

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    216
    最后登录
    2018-7-28
    发表于 2017-7-10 08:57:12 | 显示全部楼层
    高..大...上..
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-4-30 16:08
  • 签到天数: 184 天

    [LV.7]常住居民III

    3

    主题

    651

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1310
    最后登录
    2020-11-30
    发表于 2017-7-10 11:15:36 | 显示全部楼层
    能开源一下吗?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-1-28 20:09
  • 签到天数: 317 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    8028
    最后登录
    2022-5-12
     楼主| 发表于 2017-7-11 10:24:38 | 显示全部楼层

    串口3,和串口5配置 已经  贴出来了啊

    具体参见sdk 的dmic_codec_direct demo
    把这个引脚文件覆盖下
    pin_mux_1707111023.zip (3.11 KB, 下载次数: 10)
    好好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-1-28 20:09
  • 签到天数: 317 天

    [LV.8]以坛为家I

    61

    主题

    1582

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    8028
    最后登录
    2022-5-12
     楼主| 发表于 2017-7-11 10:25:20 | 显示全部楼层
    还有问题的话 继续跟帖,白天上班,可能回复的不是很及时哈
    好好
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-5-16 21:35
  • 签到天数: 1 天

    [LV.1]初来乍到

    2

    主题

    22

    帖子

    0

    注册会员

    Rank: 2

    积分
    107
    最后登录
    2020-7-26
    发表于 2018-5-16 21:23:19 | 显示全部楼层
    很好,很强大
    keep moving
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    15

    帖子

    0

    注册会员

    Rank: 2

    积分
    100
    最后登录
    2018-7-11
    发表于 2018-5-25 15:22:12 | 显示全部楼层
    小马哥-1650185 发表于 2017-7-11 10:24
    串口3,和串口5配置 已经  贴出来了啊

    具体参见sdk 的dmic_codec_direct demo

    把pin_mux.c 覆盖一下,就能在万利的板子上实现边录边播?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 21:19 , Processed in 0.239997 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表