Version using MEMS microphone and CODEC for the program "F746_RealtimeSpectrumAnalyzer". "F746_RealtimeSpectrumAnalyzer" の入力を MEMS のマイクと CODEC に変更.このプログラムは Tomona Nanase さんが作成し DISCO-F746NG_Oscilloscope の名前で登録しているプログラムで, CODEC を使って入力する部分を参考にして作成.このプログラムの説明は,CQ出版社のインターフェース誌,2016年4月号に掲載.

Dependencies:   BSP_DISCO_F746NG BUTTON_GROUP LCD_DISCO_F746NG TS_DISCO_F746NG UIT_FFT_Real mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers BSP_overwrite.cpp Source File

BSP_overwrite.cpp

00001 #include "main.h"
00002 
00003 DMA_HandleTypeDef hdma_sai_rx;
00004 
00005 /* ----- AUDIO IN ----- */
00006 
00007 void BSP_AUDIO_IN_HalfTransfer_CallBack(void)
00008 {
00009     audio_in_buffer_offset = 0;
00010     audio_in_buffer_length = BufferSize / 2;
00011     audio_in_buffer_captured = true;
00012 }
00013 
00014 void BSP_AUDIO_IN_TransferComplete_CallBack(void)
00015 {
00016     audio_in_buffer_offset = BufferSize / 2;
00017     audio_in_buffer_length = BufferSize / 2;
00018     audio_in_buffer_captured = true;
00019 }
00020 
00021 void BSP_AUDIO_IN_Error_CallBack(void)
00022 {
00023     error_trap();
00024 }
00025 
00026 void AUDIO_IN_SAIx_DMAx_IRQHandler(void)
00027 {
00028     HAL_DMA_IRQHandler(&hdma_sai_rx);
00029 }
00030 
00031 void  BSP_AUDIO_IN_MspInit(SAI_HandleTypeDef *hsai, void *Params)
00032 {
00033     //static DMA_HandleTypeDef hdma_sai_rx;
00034     GPIO_InitTypeDef  gpio_init_structure;
00035 
00036     /* Enable SAI clock */
00037     AUDIO_IN_SAIx_CLK_ENABLE();
00038 
00039     /* Enable SD GPIO clock */
00040     AUDIO_IN_SAIx_SD_ENABLE();
00041     /* CODEC_SAI pin configuration: SD pin */
00042     gpio_init_structure.Pin = AUDIO_IN_SAIx_SD_PIN;
00043     gpio_init_structure.Mode = GPIO_MODE_AF_PP;
00044     gpio_init_structure.Pull = GPIO_NOPULL;
00045     gpio_init_structure.Speed = GPIO_SPEED_FAST;
00046     gpio_init_structure.Alternate = AUDIO_IN_SAIx_SD_AF;
00047     HAL_GPIO_Init(AUDIO_IN_SAIx_SD_GPIO_PORT, &gpio_init_structure);
00048 
00049     /* Enable Audio INT GPIO clock */
00050     AUDIO_IN_INT_GPIO_ENABLE();
00051     /* Audio INT pin configuration: input */
00052     gpio_init_structure.Pin = AUDIO_IN_INT_GPIO_PIN;
00053     gpio_init_structure.Mode = GPIO_MODE_INPUT;
00054     gpio_init_structure.Pull = GPIO_NOPULL;
00055     gpio_init_structure.Speed = GPIO_SPEED_FAST;
00056     HAL_GPIO_Init(AUDIO_IN_INT_GPIO_PORT, &gpio_init_structure);
00057 
00058     /* Enable the DMA clock */
00059     AUDIO_IN_SAIx_DMAx_CLK_ENABLE();
00060 
00061     if(hsai->Instance == AUDIO_IN_SAIx) {
00062         /* Configure the hdma_sai_rx handle parameters */
00063         hdma_sai_rx.Init.Channel             = AUDIO_IN_SAIx_DMAx_CHANNEL;
00064         hdma_sai_rx.Init.Direction           = DMA_PERIPH_TO_MEMORY;
00065         hdma_sai_rx.Init.PeriphInc           = DMA_PINC_DISABLE;
00066         hdma_sai_rx.Init.MemInc              = DMA_MINC_ENABLE;
00067         hdma_sai_rx.Init.PeriphDataAlignment = AUDIO_IN_SAIx_DMAx_PERIPH_DATA_SIZE;
00068         hdma_sai_rx.Init.MemDataAlignment    = AUDIO_IN_SAIx_DMAx_MEM_DATA_SIZE;
00069         hdma_sai_rx.Init.Mode                = DMA_CIRCULAR;
00070         hdma_sai_rx.Init.Priority            = DMA_PRIORITY_HIGH;
00071         hdma_sai_rx.Init.FIFOMode            = DMA_FIFOMODE_DISABLE;
00072         hdma_sai_rx.Init.FIFOThreshold       = DMA_FIFO_THRESHOLD_FULL;
00073         hdma_sai_rx.Init.MemBurst            = DMA_MBURST_SINGLE;
00074         hdma_sai_rx.Init.PeriphBurst         = DMA_MBURST_SINGLE;
00075 
00076         hdma_sai_rx.Instance = AUDIO_IN_SAIx_DMAx_STREAM;
00077 
00078         /* Associate the DMA handle */
00079         __HAL_LINKDMA(hsai, hdmarx, hdma_sai_rx);
00080 
00081         /* Deinitialize the Stream for new transfer */
00082         HAL_DMA_DeInit(&hdma_sai_rx);
00083 
00084         /* Configure the DMA Stream */
00085         HAL_DMA_Init(&hdma_sai_rx);
00086     }
00087 
00088     /* SAI DMA IRQ Channel configuration */
00089     HAL_NVIC_SetPriority(AUDIO_IN_SAIx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0);
00090     HAL_NVIC_EnableIRQ(AUDIO_IN_SAIx_DMAx_IRQ);
00091 
00092     /* Audio INT IRQ Channel configuration */
00093     HAL_NVIC_SetPriority(AUDIO_IN_INT_IRQ, AUDIO_IN_IRQ_PREPRIO, 0);
00094     HAL_NVIC_EnableIRQ(AUDIO_IN_INT_IRQ);
00095 }