微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 结项:OLED 录音 与 播放

结项:OLED 录音 与 播放

时间:10-02 整理:3721RD 点击:

LPC54114特色功能就是自带有DMIC中断和接口,LPC54110板载了数字MIC,同时也具备了音频输出外设。整体不论是音频采集还是输出分辨率都很高,非常适合语音方面的学习。
本实验主要实现了音频录制和播放功能,声音大小可通过按键设置。
官方已经把外设初始化文件准备好:
麦克风的主要配置函数文件:app_dmic.c
音频输出芯片主要配置文件:app_wm8904.c主要结构如下:


以板载Flash储存麦克风采集的音频数据,由音频输出芯片播放。
采集和播放过程全部采用中断和DMA传输,大大保证了采集速率和音频质量。
这里把主要实现过程介绍下:
首先是DMIC数据采集

  1. DMIC_SetOperationMode(DMIC0, kDMIC_OperationModeDma);
  2.         DMIC_ConfigChannel(DMIC0, APP_DMIC_CHANNEL, kDMIC_Left, &dmic_channel_cfg);

  3.         DMIC_FifoChannel(DMIC0, APP_DMIC_CHANNEL, FIFO_DEPTH, true, true);

  4.         DMIC_EnableChannnel(DMIC0, APP_DMIC_CHANNEL_ENABLE);
  5.         
  6.         
  7.                 PRINTF("Configure DMA\r\n");
  8.                
  9.     DMA_Init(DMA0);

  10.     DMA_EnableChannel(DMA0, APP_DMAREQ_CHANNEL);

  11.     /* Request dma channels from DMA manager. */
  12.     DMA_CreateHandle(&g_dmicRxDmaHandle, DMA0, APP_DMAREQ_CHANNEL);

  13.     /* Create DMIC DMA handle. */
  14.     DMIC_TransferCreateHandleDMA(DMIC0, &g_dmicDmaHandle, DMIC_UserCallback, NULL, &g_dmicRxDmaHandle);
  15.     receiveXfer.dataSize = 2 * BUFFER_LENGTH;
  16.     receiveXfer.data = g_rxBuffer;

复制代码

这段主要完成了DMIC外设的初始化,以及DMA通道配置,最后一句设置了储存数据的变量。

  1. void DMIC_UserCallback(DMIC_Type *base, dmic_dma_handle_t *handle, status_t status, void *userData)
  2. {
  3.     userData = userData;
  4.     if (status == kStatus_DMIC_Idle)
  5.     {
  6.         g_Transfer_Done = true;
  7.     }
  8. }

复制代码

利用中断指示采集是否结束

  1. flash_write_buffer()

复制代码

采集结束后,把数据写入Flash中。

  1. static void TxCallback(I2S_Type *base, i2s_dma_handle_t *handle, status_t completionStatus, void *userData)

复制代码

播放时:

  1. flash_read_buffer()

复制代码

由Flash读取函数把音频数据读出。
wm8904z驱动文件中:由*userData指向输出变量

  1.      i2s_transfer_t *transfer = (i2s_transfer_t *)userData;
  2.                                         I2S_TxTransferSendDMA(base, handle, *transfer);

复制代码

指定输出数据后,启动DMA传输,即可完成音频输出。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top