结项:OLED 录音 与 播放
时间:10-02
整理:3721RD
点击:
LPC54114特色功能就是自带有DMIC中断和接口,LPC54110板载了数字MIC,同时也具备了音频输出外设。整体不论是音频采集还是输出分辨率都很高,非常适合语音方面的学习。
本实验主要实现了音频录制和播放功能,声音大小可通过按键设置。
官方已经把外设初始化文件准备好:
麦克风的主要配置函数文件:app_dmic.c
音频输出芯片主要配置文件:app_wm8904.c主要结构如下:
以板载Flash储存麦克风采集的音频数据,由音频输出芯片播放。
采集和播放过程全部采用中断和DMA传输,大大保证了采集速率和音频质量。
这里把主要实现过程介绍下:
首先是DMIC数据采集
- DMIC_SetOperationMode(DMIC0, kDMIC_OperationModeDma);
- DMIC_ConfigChannel(DMIC0, APP_DMIC_CHANNEL, kDMIC_Left, &dmic_channel_cfg);
- DMIC_FifoChannel(DMIC0, APP_DMIC_CHANNEL, FIFO_DEPTH, true, true);
- DMIC_EnableChannnel(DMIC0, APP_DMIC_CHANNEL_ENABLE);
-
-
- PRINTF("Configure DMA\r\n");
-
- DMA_Init(DMA0);
- DMA_EnableChannel(DMA0, APP_DMAREQ_CHANNEL);
- /* Request dma channels from DMA manager. */
- DMA_CreateHandle(&g_dmicRxDmaHandle, DMA0, APP_DMAREQ_CHANNEL);
- /* Create DMIC DMA handle. */
- DMIC_TransferCreateHandleDMA(DMIC0, &g_dmicDmaHandle, DMIC_UserCallback, NULL, &g_dmicRxDmaHandle);
- receiveXfer.dataSize = 2 * BUFFER_LENGTH;
- receiveXfer.data = g_rxBuffer;
- void DMIC_UserCallback(DMIC_Type *base, dmic_dma_handle_t *handle, status_t status, void *userData)
- {
- userData = userData;
- if (status == kStatus_DMIC_Idle)
- {
- g_Transfer_Done = true;
- }
- }
- flash_write_buffer()
- static void TxCallback(I2S_Type *base, i2s_dma_handle_t *handle, status_t completionStatus, void *userData)
- flash_read_buffer()
wm8904z驱动文件中:由*userData指向输出变量
- i2s_transfer_t *transfer = (i2s_transfer_t *)userData;
- I2S_TxTransferSendDMA(base, handle, *transfer);