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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers BSP_AudioOut_Overwrite.cpp Source File

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