Output the audio signal (*.bin) with filtering by IIR filter in the SD card using onboard CODEC. For *.wav file, F746_SD_WavPlayer and F746_SD_GraphicEqualiser are published on mbed. SD カードのオーディオ信号 (*.bin) を遮断周波数可変の IIR フィルタを通して,ボードに搭載されているCODEC で出力する.*.wav 形式のファイル用には,F746_SD_WavPlayer と F746_SD_GraphicEqualiser を mbed で公開している.
Dependencies: BSP_DISCO_F746NG_patch_fixed F746_GUI LCD_DISCO_F746NG SDFileSystem_Warning_Fixed TS_DISCO_F746NG mbed
BSP_AudioOut_Overwrite.cpp
00001 //-------------------------------------------------------------- 00002 // Overwrite functuions and define calback functions 00003 // for functions in stm32746g_discovery_audio.cpp 00004 //-------------------------------------------------------------- 00005 #include "BSP_AudioOut_Overwrite.hpp" 00006 00007 // These three callback functions are modyfied by Mikami 00008 void BSP_AUDIO_OUT_HalfTransfer_CallBack() 00009 { 00010 Mikami::SaiIO_O::FillBuffer1st(); 00011 } 00012 00013 void BSP_AUDIO_OUT_TransferComplete_CallBack() 00014 { 00015 Mikami::SaiIO_O::FillBuffer2nd(); 00016 } 00017 00018 void BSP_AUDIO_OUT_Error_CallBack() 00019 { 00020 Mikami::SaiIO_O::ErrorTrap(); 00021 } 00022 00023 //-------------------------------------------------------------- 00024 // Followings are original by Nanase 00025 //-------------------------------------------------------------- 00026 00027 DMA_HandleTypeDef hdma_sai_tx; 00028 00029 void AUDIO_OUT_SAIx_DMAx_IRQHandler() 00030 { 00031 HAL_DMA_IRQHandler(&hdma_sai_tx); 00032 } 00033 00034 void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params) 00035 { 00036 //static DMA_HandleTypeDef hdma_sai_tx; 00037 GPIO_InitTypeDef gpio_init_structure; 00038 00039 /* Enable SAI clock */ 00040 AUDIO_OUT_SAIx_CLK_ENABLE(); 00041 00042 /* Enable GPIO clock */ 00043 AUDIO_OUT_SAIx_MCLK_ENABLE(); 00044 AUDIO_OUT_SAIx_SCK_SD_ENABLE(); 00045 AUDIO_OUT_SAIx_FS_ENABLE(); 00046 00047 /* CODEC_SAI pins configuration: FS, SCK, MCK and SD pins ------------------*/ 00048 gpio_init_structure.Pin = AUDIO_OUT_SAIx_FS_PIN; 00049 gpio_init_structure.Mode = GPIO_MODE_AF_PP; 00050 gpio_init_structure.Pull = GPIO_NOPULL; 00051 gpio_init_structure.Speed = GPIO_SPEED_HIGH; 00052 gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF; 00053 HAL_GPIO_Init(AUDIO_OUT_SAIx_FS_GPIO_PORT, &gpio_init_structure); 00054 00055 gpio_init_structure.Pin = AUDIO_OUT_SAIx_SCK_PIN; 00056 gpio_init_structure.Mode = GPIO_MODE_AF_PP; 00057 gpio_init_structure.Pull = GPIO_NOPULL; 00058 gpio_init_structure.Speed = GPIO_SPEED_HIGH; 00059 gpio_init_structure.Alternate = AUDIO_OUT_SAIx_SCK_AF; 00060 HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure); 00061 00062 gpio_init_structure.Pin = AUDIO_OUT_SAIx_SD_PIN; 00063 gpio_init_structure.Mode = GPIO_MODE_AF_PP; 00064 gpio_init_structure.Pull = GPIO_NOPULL; 00065 gpio_init_structure.Speed = GPIO_SPEED_HIGH; 00066 gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF; 00067 HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure); 00068 00069 gpio_init_structure.Pin = AUDIO_OUT_SAIx_MCLK_PIN; 00070 gpio_init_structure.Mode = GPIO_MODE_AF_PP; 00071 gpio_init_structure.Pull = GPIO_NOPULL; 00072 gpio_init_structure.Speed = GPIO_SPEED_HIGH; 00073 gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF; 00074 HAL_GPIO_Init(AUDIO_OUT_SAIx_MCLK_GPIO_PORT, &gpio_init_structure); 00075 00076 /* Enable the DMA clock */ 00077 AUDIO_OUT_SAIx_DMAx_CLK_ENABLE(); 00078 00079 if(hsai->Instance == AUDIO_OUT_SAIx) 00080 { 00081 /* Configure the hdma_saiTx handle parameters */ 00082 hdma_sai_tx.Init.Channel = AUDIO_OUT_SAIx_DMAx_CHANNEL; 00083 hdma_sai_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; 00084 hdma_sai_tx.Init.PeriphInc = DMA_PINC_DISABLE; 00085 hdma_sai_tx.Init.MemInc = DMA_MINC_ENABLE; 00086 hdma_sai_tx.Init.PeriphDataAlignment = AUDIO_OUT_SAIx_DMAx_PERIPH_DATA_SIZE; 00087 hdma_sai_tx.Init.MemDataAlignment = AUDIO_OUT_SAIx_DMAx_MEM_DATA_SIZE; 00088 hdma_sai_tx.Init.Mode = DMA_CIRCULAR; 00089 hdma_sai_tx.Init.Priority = DMA_PRIORITY_HIGH; 00090 hdma_sai_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; 00091 hdma_sai_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; 00092 hdma_sai_tx.Init.MemBurst = DMA_MBURST_SINGLE; 00093 hdma_sai_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; 00094 00095 hdma_sai_tx.Instance = AUDIO_OUT_SAIx_DMAx_STREAM; 00096 00097 /* Associate the DMA handle */ 00098 __HAL_LINKDMA(hsai, hdmatx, hdma_sai_tx); 00099 00100 /* Deinitialize the Stream for new transfer */ 00101 HAL_DMA_DeInit(&hdma_sai_tx); 00102 00103 /* Configure the DMA Stream */ 00104 HAL_DMA_Init(&hdma_sai_tx); 00105 } 00106 00107 /* SAI DMA IRQ Channel configuration */ 00108 HAL_NVIC_SetPriority(AUDIO_OUT_SAIx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); 00109 HAL_NVIC_EnableIRQ(AUDIO_OUT_SAIx_DMAx_IRQ); 00110 } 00111 00112
Generated on Wed Jul 13 2022 03:37:09 by 1.7.2