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
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 }
Generated on Sun Jul 17 2022 12:37:24 by 1.7.2