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
MyClasses_Functions/BSP_AudioOut_Overwrite.cpp@0:6748e3332e85, 2016-04-08 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Fri Apr 08 13:11:53 2016 +0000
- Revision:
- 0:6748e3332e85
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MikamiUitOpen | 0:6748e3332e85 | 1 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:6748e3332e85 | 2 | // Overwrite functuions and define calback functions |
MikamiUitOpen | 0:6748e3332e85 | 3 | // for functions in stm32746g_discovery_audio.cpp |
MikamiUitOpen | 0:6748e3332e85 | 4 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:6748e3332e85 | 5 | #include "BSP_AudioOut_Overwrite.hpp" |
MikamiUitOpen | 0:6748e3332e85 | 6 | |
MikamiUitOpen | 0:6748e3332e85 | 7 | // These three callback functions are modyfied by Mikami |
MikamiUitOpen | 0:6748e3332e85 | 8 | void BSP_AUDIO_OUT_HalfTransfer_CallBack() |
MikamiUitOpen | 0:6748e3332e85 | 9 | { |
MikamiUitOpen | 0:6748e3332e85 | 10 | Mikami::SaiIO_O::FillBuffer1st(); |
MikamiUitOpen | 0:6748e3332e85 | 11 | } |
MikamiUitOpen | 0:6748e3332e85 | 12 | |
MikamiUitOpen | 0:6748e3332e85 | 13 | void BSP_AUDIO_OUT_TransferComplete_CallBack() |
MikamiUitOpen | 0:6748e3332e85 | 14 | { |
MikamiUitOpen | 0:6748e3332e85 | 15 | Mikami::SaiIO_O::FillBuffer2nd(); |
MikamiUitOpen | 0:6748e3332e85 | 16 | } |
MikamiUitOpen | 0:6748e3332e85 | 17 | |
MikamiUitOpen | 0:6748e3332e85 | 18 | void BSP_AUDIO_OUT_Error_CallBack() |
MikamiUitOpen | 0:6748e3332e85 | 19 | { |
MikamiUitOpen | 0:6748e3332e85 | 20 | Mikami::SaiIO_O::ErrorTrap(); |
MikamiUitOpen | 0:6748e3332e85 | 21 | } |
MikamiUitOpen | 0:6748e3332e85 | 22 | |
MikamiUitOpen | 0:6748e3332e85 | 23 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:6748e3332e85 | 24 | // Followings are original by Nanase |
MikamiUitOpen | 0:6748e3332e85 | 25 | //-------------------------------------------------------------- |
MikamiUitOpen | 0:6748e3332e85 | 26 | |
MikamiUitOpen | 0:6748e3332e85 | 27 | DMA_HandleTypeDef hdma_sai_tx; |
MikamiUitOpen | 0:6748e3332e85 | 28 | |
MikamiUitOpen | 0:6748e3332e85 | 29 | void AUDIO_OUT_SAIx_DMAx_IRQHandler() |
MikamiUitOpen | 0:6748e3332e85 | 30 | { |
MikamiUitOpen | 0:6748e3332e85 | 31 | HAL_DMA_IRQHandler(&hdma_sai_tx); |
MikamiUitOpen | 0:6748e3332e85 | 32 | } |
MikamiUitOpen | 0:6748e3332e85 | 33 | |
MikamiUitOpen | 0:6748e3332e85 | 34 | void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params) |
MikamiUitOpen | 0:6748e3332e85 | 35 | { |
MikamiUitOpen | 0:6748e3332e85 | 36 | //static DMA_HandleTypeDef hdma_sai_tx; |
MikamiUitOpen | 0:6748e3332e85 | 37 | GPIO_InitTypeDef gpio_init_structure; |
MikamiUitOpen | 0:6748e3332e85 | 38 | |
MikamiUitOpen | 0:6748e3332e85 | 39 | /* Enable SAI clock */ |
MikamiUitOpen | 0:6748e3332e85 | 40 | AUDIO_OUT_SAIx_CLK_ENABLE(); |
MikamiUitOpen | 0:6748e3332e85 | 41 | |
MikamiUitOpen | 0:6748e3332e85 | 42 | /* Enable GPIO clock */ |
MikamiUitOpen | 0:6748e3332e85 | 43 | AUDIO_OUT_SAIx_MCLK_ENABLE(); |
MikamiUitOpen | 0:6748e3332e85 | 44 | AUDIO_OUT_SAIx_SCK_SD_ENABLE(); |
MikamiUitOpen | 0:6748e3332e85 | 45 | AUDIO_OUT_SAIx_FS_ENABLE(); |
MikamiUitOpen | 0:6748e3332e85 | 46 | |
MikamiUitOpen | 0:6748e3332e85 | 47 | /* CODEC_SAI pins configuration: FS, SCK, MCK and SD pins ------------------*/ |
MikamiUitOpen | 0:6748e3332e85 | 48 | gpio_init_structure.Pin = AUDIO_OUT_SAIx_FS_PIN; |
MikamiUitOpen | 0:6748e3332e85 | 49 | gpio_init_structure.Mode = GPIO_MODE_AF_PP; |
MikamiUitOpen | 0:6748e3332e85 | 50 | gpio_init_structure.Pull = GPIO_NOPULL; |
MikamiUitOpen | 0:6748e3332e85 | 51 | gpio_init_structure.Speed = GPIO_SPEED_HIGH; |
MikamiUitOpen | 0:6748e3332e85 | 52 | gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF; |
MikamiUitOpen | 0:6748e3332e85 | 53 | HAL_GPIO_Init(AUDIO_OUT_SAIx_FS_GPIO_PORT, &gpio_init_structure); |
MikamiUitOpen | 0:6748e3332e85 | 54 | |
MikamiUitOpen | 0:6748e3332e85 | 55 | gpio_init_structure.Pin = AUDIO_OUT_SAIx_SCK_PIN; |
MikamiUitOpen | 0:6748e3332e85 | 56 | gpio_init_structure.Mode = GPIO_MODE_AF_PP; |
MikamiUitOpen | 0:6748e3332e85 | 57 | gpio_init_structure.Pull = GPIO_NOPULL; |
MikamiUitOpen | 0:6748e3332e85 | 58 | gpio_init_structure.Speed = GPIO_SPEED_HIGH; |
MikamiUitOpen | 0:6748e3332e85 | 59 | gpio_init_structure.Alternate = AUDIO_OUT_SAIx_SCK_AF; |
MikamiUitOpen | 0:6748e3332e85 | 60 | HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure); |
MikamiUitOpen | 0:6748e3332e85 | 61 | |
MikamiUitOpen | 0:6748e3332e85 | 62 | gpio_init_structure.Pin = AUDIO_OUT_SAIx_SD_PIN; |
MikamiUitOpen | 0:6748e3332e85 | 63 | gpio_init_structure.Mode = GPIO_MODE_AF_PP; |
MikamiUitOpen | 0:6748e3332e85 | 64 | gpio_init_structure.Pull = GPIO_NOPULL; |
MikamiUitOpen | 0:6748e3332e85 | 65 | gpio_init_structure.Speed = GPIO_SPEED_HIGH; |
MikamiUitOpen | 0:6748e3332e85 | 66 | gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF; |
MikamiUitOpen | 0:6748e3332e85 | 67 | HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure); |
MikamiUitOpen | 0:6748e3332e85 | 68 | |
MikamiUitOpen | 0:6748e3332e85 | 69 | gpio_init_structure.Pin = AUDIO_OUT_SAIx_MCLK_PIN; |
MikamiUitOpen | 0:6748e3332e85 | 70 | gpio_init_structure.Mode = GPIO_MODE_AF_PP; |
MikamiUitOpen | 0:6748e3332e85 | 71 | gpio_init_structure.Pull = GPIO_NOPULL; |
MikamiUitOpen | 0:6748e3332e85 | 72 | gpio_init_structure.Speed = GPIO_SPEED_HIGH; |
MikamiUitOpen | 0:6748e3332e85 | 73 | gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF; |
MikamiUitOpen | 0:6748e3332e85 | 74 | HAL_GPIO_Init(AUDIO_OUT_SAIx_MCLK_GPIO_PORT, &gpio_init_structure); |
MikamiUitOpen | 0:6748e3332e85 | 75 | |
MikamiUitOpen | 0:6748e3332e85 | 76 | /* Enable the DMA clock */ |
MikamiUitOpen | 0:6748e3332e85 | 77 | AUDIO_OUT_SAIx_DMAx_CLK_ENABLE(); |
MikamiUitOpen | 0:6748e3332e85 | 78 | |
MikamiUitOpen | 0:6748e3332e85 | 79 | if(hsai->Instance == AUDIO_OUT_SAIx) |
MikamiUitOpen | 0:6748e3332e85 | 80 | { |
MikamiUitOpen | 0:6748e3332e85 | 81 | /* Configure the hdma_saiTx handle parameters */ |
MikamiUitOpen | 0:6748e3332e85 | 82 | hdma_sai_tx.Init.Channel = AUDIO_OUT_SAIx_DMAx_CHANNEL; |
MikamiUitOpen | 0:6748e3332e85 | 83 | hdma_sai_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; |
MikamiUitOpen | 0:6748e3332e85 | 84 | hdma_sai_tx.Init.PeriphInc = DMA_PINC_DISABLE; |
MikamiUitOpen | 0:6748e3332e85 | 85 | hdma_sai_tx.Init.MemInc = DMA_MINC_ENABLE; |
MikamiUitOpen | 0:6748e3332e85 | 86 | hdma_sai_tx.Init.PeriphDataAlignment = AUDIO_OUT_SAIx_DMAx_PERIPH_DATA_SIZE; |
MikamiUitOpen | 0:6748e3332e85 | 87 | hdma_sai_tx.Init.MemDataAlignment = AUDIO_OUT_SAIx_DMAx_MEM_DATA_SIZE; |
MikamiUitOpen | 0:6748e3332e85 | 88 | hdma_sai_tx.Init.Mode = DMA_CIRCULAR; |
MikamiUitOpen | 0:6748e3332e85 | 89 | hdma_sai_tx.Init.Priority = DMA_PRIORITY_HIGH; |
MikamiUitOpen | 0:6748e3332e85 | 90 | hdma_sai_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; |
MikamiUitOpen | 0:6748e3332e85 | 91 | hdma_sai_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; |
MikamiUitOpen | 0:6748e3332e85 | 92 | hdma_sai_tx.Init.MemBurst = DMA_MBURST_SINGLE; |
MikamiUitOpen | 0:6748e3332e85 | 93 | hdma_sai_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; |
MikamiUitOpen | 0:6748e3332e85 | 94 | |
MikamiUitOpen | 0:6748e3332e85 | 95 | hdma_sai_tx.Instance = AUDIO_OUT_SAIx_DMAx_STREAM; |
MikamiUitOpen | 0:6748e3332e85 | 96 | |
MikamiUitOpen | 0:6748e3332e85 | 97 | /* Associate the DMA handle */ |
MikamiUitOpen | 0:6748e3332e85 | 98 | __HAL_LINKDMA(hsai, hdmatx, hdma_sai_tx); |
MikamiUitOpen | 0:6748e3332e85 | 99 | |
MikamiUitOpen | 0:6748e3332e85 | 100 | /* Deinitialize the Stream for new transfer */ |
MikamiUitOpen | 0:6748e3332e85 | 101 | HAL_DMA_DeInit(&hdma_sai_tx); |
MikamiUitOpen | 0:6748e3332e85 | 102 | |
MikamiUitOpen | 0:6748e3332e85 | 103 | /* Configure the DMA Stream */ |
MikamiUitOpen | 0:6748e3332e85 | 104 | HAL_DMA_Init(&hdma_sai_tx); |
MikamiUitOpen | 0:6748e3332e85 | 105 | } |
MikamiUitOpen | 0:6748e3332e85 | 106 | |
MikamiUitOpen | 0:6748e3332e85 | 107 | /* SAI DMA IRQ Channel configuration */ |
MikamiUitOpen | 0:6748e3332e85 | 108 | HAL_NVIC_SetPriority(AUDIO_OUT_SAIx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); |
MikamiUitOpen | 0:6748e3332e85 | 109 | HAL_NVIC_EnableIRQ(AUDIO_OUT_SAIx_DMAx_IRQ); |
MikamiUitOpen | 0:6748e3332e85 | 110 | } |
MikamiUitOpen | 0:6748e3332e85 | 111 |