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

Committer:
MikamiUitOpen
Date:
Tue Apr 19 09:35:24 2016 +0000
Revision:
8:e7dc8658c5cd
Parent:
0:0e5131366580
9

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:0e5131366580 1 #include "main.h"
MikamiUitOpen 0:0e5131366580 2
MikamiUitOpen 0:0e5131366580 3 DMA_HandleTypeDef hdma_sai_rx;
MikamiUitOpen 0:0e5131366580 4
MikamiUitOpen 0:0e5131366580 5 /* ----- AUDIO IN ----- */
MikamiUitOpen 0:0e5131366580 6
MikamiUitOpen 0:0e5131366580 7 void BSP_AUDIO_IN_HalfTransfer_CallBack(void)
MikamiUitOpen 0:0e5131366580 8 {
MikamiUitOpen 0:0e5131366580 9 audio_in_buffer_offset = 0;
MikamiUitOpen 0:0e5131366580 10 audio_in_buffer_length = BufferSize / 2;
MikamiUitOpen 0:0e5131366580 11 audio_in_buffer_captured = true;
MikamiUitOpen 0:0e5131366580 12 }
MikamiUitOpen 0:0e5131366580 13
MikamiUitOpen 0:0e5131366580 14 void BSP_AUDIO_IN_TransferComplete_CallBack(void)
MikamiUitOpen 0:0e5131366580 15 {
MikamiUitOpen 0:0e5131366580 16 audio_in_buffer_offset = BufferSize / 2;
MikamiUitOpen 0:0e5131366580 17 audio_in_buffer_length = BufferSize / 2;
MikamiUitOpen 0:0e5131366580 18 audio_in_buffer_captured = true;
MikamiUitOpen 0:0e5131366580 19 }
MikamiUitOpen 0:0e5131366580 20
MikamiUitOpen 0:0e5131366580 21 void BSP_AUDIO_IN_Error_CallBack(void)
MikamiUitOpen 0:0e5131366580 22 {
MikamiUitOpen 0:0e5131366580 23 error_trap();
MikamiUitOpen 0:0e5131366580 24 }
MikamiUitOpen 0:0e5131366580 25
MikamiUitOpen 0:0e5131366580 26 void AUDIO_IN_SAIx_DMAx_IRQHandler(void)
MikamiUitOpen 0:0e5131366580 27 {
MikamiUitOpen 0:0e5131366580 28 HAL_DMA_IRQHandler(&hdma_sai_rx);
MikamiUitOpen 0:0e5131366580 29 }
MikamiUitOpen 0:0e5131366580 30
MikamiUitOpen 0:0e5131366580 31 void BSP_AUDIO_IN_MspInit(SAI_HandleTypeDef *hsai, void *Params)
MikamiUitOpen 0:0e5131366580 32 {
MikamiUitOpen 0:0e5131366580 33 //static DMA_HandleTypeDef hdma_sai_rx;
MikamiUitOpen 0:0e5131366580 34 GPIO_InitTypeDef gpio_init_structure;
MikamiUitOpen 0:0e5131366580 35
MikamiUitOpen 0:0e5131366580 36 /* Enable SAI clock */
MikamiUitOpen 0:0e5131366580 37 AUDIO_IN_SAIx_CLK_ENABLE();
MikamiUitOpen 0:0e5131366580 38
MikamiUitOpen 0:0e5131366580 39 /* Enable SD GPIO clock */
MikamiUitOpen 0:0e5131366580 40 AUDIO_IN_SAIx_SD_ENABLE();
MikamiUitOpen 0:0e5131366580 41 /* CODEC_SAI pin configuration: SD pin */
MikamiUitOpen 0:0e5131366580 42 gpio_init_structure.Pin = AUDIO_IN_SAIx_SD_PIN;
MikamiUitOpen 0:0e5131366580 43 gpio_init_structure.Mode = GPIO_MODE_AF_PP;
MikamiUitOpen 0:0e5131366580 44 gpio_init_structure.Pull = GPIO_NOPULL;
MikamiUitOpen 0:0e5131366580 45 gpio_init_structure.Speed = GPIO_SPEED_FAST;
MikamiUitOpen 0:0e5131366580 46 gpio_init_structure.Alternate = AUDIO_IN_SAIx_SD_AF;
MikamiUitOpen 0:0e5131366580 47 HAL_GPIO_Init(AUDIO_IN_SAIx_SD_GPIO_PORT, &gpio_init_structure);
MikamiUitOpen 0:0e5131366580 48
MikamiUitOpen 0:0e5131366580 49 /* Enable Audio INT GPIO clock */
MikamiUitOpen 0:0e5131366580 50 AUDIO_IN_INT_GPIO_ENABLE();
MikamiUitOpen 0:0e5131366580 51 /* Audio INT pin configuration: input */
MikamiUitOpen 0:0e5131366580 52 gpio_init_structure.Pin = AUDIO_IN_INT_GPIO_PIN;
MikamiUitOpen 0:0e5131366580 53 gpio_init_structure.Mode = GPIO_MODE_INPUT;
MikamiUitOpen 0:0e5131366580 54 gpio_init_structure.Pull = GPIO_NOPULL;
MikamiUitOpen 0:0e5131366580 55 gpio_init_structure.Speed = GPIO_SPEED_FAST;
MikamiUitOpen 0:0e5131366580 56 HAL_GPIO_Init(AUDIO_IN_INT_GPIO_PORT, &gpio_init_structure);
MikamiUitOpen 0:0e5131366580 57
MikamiUitOpen 0:0e5131366580 58 /* Enable the DMA clock */
MikamiUitOpen 0:0e5131366580 59 AUDIO_IN_SAIx_DMAx_CLK_ENABLE();
MikamiUitOpen 0:0e5131366580 60
MikamiUitOpen 0:0e5131366580 61 if(hsai->Instance == AUDIO_IN_SAIx) {
MikamiUitOpen 0:0e5131366580 62 /* Configure the hdma_sai_rx handle parameters */
MikamiUitOpen 0:0e5131366580 63 hdma_sai_rx.Init.Channel = AUDIO_IN_SAIx_DMAx_CHANNEL;
MikamiUitOpen 0:0e5131366580 64 hdma_sai_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
MikamiUitOpen 0:0e5131366580 65 hdma_sai_rx.Init.PeriphInc = DMA_PINC_DISABLE;
MikamiUitOpen 0:0e5131366580 66 hdma_sai_rx.Init.MemInc = DMA_MINC_ENABLE;
MikamiUitOpen 0:0e5131366580 67 hdma_sai_rx.Init.PeriphDataAlignment = AUDIO_IN_SAIx_DMAx_PERIPH_DATA_SIZE;
MikamiUitOpen 0:0e5131366580 68 hdma_sai_rx.Init.MemDataAlignment = AUDIO_IN_SAIx_DMAx_MEM_DATA_SIZE;
MikamiUitOpen 0:0e5131366580 69 hdma_sai_rx.Init.Mode = DMA_CIRCULAR;
MikamiUitOpen 0:0e5131366580 70 hdma_sai_rx.Init.Priority = DMA_PRIORITY_HIGH;
MikamiUitOpen 0:0e5131366580 71 hdma_sai_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
MikamiUitOpen 0:0e5131366580 72 hdma_sai_rx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
MikamiUitOpen 0:0e5131366580 73 hdma_sai_rx.Init.MemBurst = DMA_MBURST_SINGLE;
MikamiUitOpen 0:0e5131366580 74 hdma_sai_rx.Init.PeriphBurst = DMA_MBURST_SINGLE;
MikamiUitOpen 0:0e5131366580 75
MikamiUitOpen 0:0e5131366580 76 hdma_sai_rx.Instance = AUDIO_IN_SAIx_DMAx_STREAM;
MikamiUitOpen 0:0e5131366580 77
MikamiUitOpen 0:0e5131366580 78 /* Associate the DMA handle */
MikamiUitOpen 0:0e5131366580 79 __HAL_LINKDMA(hsai, hdmarx, hdma_sai_rx);
MikamiUitOpen 0:0e5131366580 80
MikamiUitOpen 0:0e5131366580 81 /* Deinitialize the Stream for new transfer */
MikamiUitOpen 0:0e5131366580 82 HAL_DMA_DeInit(&hdma_sai_rx);
MikamiUitOpen 0:0e5131366580 83
MikamiUitOpen 0:0e5131366580 84 /* Configure the DMA Stream */
MikamiUitOpen 0:0e5131366580 85 HAL_DMA_Init(&hdma_sai_rx);
MikamiUitOpen 0:0e5131366580 86 }
MikamiUitOpen 0:0e5131366580 87
MikamiUitOpen 0:0e5131366580 88 /* SAI DMA IRQ Channel configuration */
MikamiUitOpen 0:0e5131366580 89 HAL_NVIC_SetPriority(AUDIO_IN_SAIx_DMAx_IRQ, AUDIO_IN_IRQ_PREPRIO, 0);
MikamiUitOpen 0:0e5131366580 90 HAL_NVIC_EnableIRQ(AUDIO_IN_SAIx_DMAx_IRQ);
MikamiUitOpen 0:0e5131366580 91
MikamiUitOpen 0:0e5131366580 92 /* Audio INT IRQ Channel configuration */
MikamiUitOpen 0:0e5131366580 93 HAL_NVIC_SetPriority(AUDIO_IN_INT_IRQ, AUDIO_IN_IRQ_PREPRIO, 0);
MikamiUitOpen 0:0e5131366580 94 HAL_NVIC_EnableIRQ(AUDIO_IN_INT_IRQ);
MikamiUitOpen 0:0e5131366580 95 }