DISCO-F746NGのAudioOutから正弦波をスイープとして出力します。ダブルバッファリングを使って、リアルタイムにデータ生成をしています。 This program outputs sine sweep from AudioOut on DISCO-F746NG. The program uses double buffering when generates data signals.
Dependencies: BSP_DISCO_F746NG_patch_fixed LCD_DISCO_F746NG mbed
BSP_overwrite.cpp
00001 #include "main.h" 00002 00003 void BSP_AUDIO_OUT_HalfTransfer_CallBack(void) 00004 { 00005 fill_buffer(0, BufferSize / 2); 00006 BSP_AUDIO_OUT_ChangeBuffer((uint16_t*)&sweep_buffer[0], BufferByteSize / 2); 00007 } 00008 00009 void BSP_AUDIO_OUT_TransferComplete_CallBack(void) 00010 { 00011 fill_buffer(BufferSize / 2, BufferSize / 2); 00012 BSP_AUDIO_OUT_ChangeBuffer((uint16_t*)&sweep_buffer[BufferSize / 2], BufferByteSize / 2); 00013 } 00014 00015 void BSP_AUDIO_OUT_Error_CallBack(void) 00016 { 00017 error_trap(); 00018 } 00019 00020 DMA_HandleTypeDef hdma_sai_tx; 00021 00022 void AUDIO_OUT_SAIx_DMAx_IRQHandler(void) 00023 { 00024 HAL_DMA_IRQHandler(&hdma_sai_tx); 00025 } 00026 00027 void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params) 00028 { 00029 //static DMA_HandleTypeDef hdma_sai_tx; 00030 GPIO_InitTypeDef gpio_init_structure; 00031 00032 /* Enable SAI clock */ 00033 AUDIO_OUT_SAIx_CLK_ENABLE(); 00034 00035 /* Enable GPIO clock */ 00036 AUDIO_OUT_SAIx_MCLK_ENABLE(); 00037 AUDIO_OUT_SAIx_SCK_SD_ENABLE(); 00038 AUDIO_OUT_SAIx_FS_ENABLE(); 00039 00040 /* CODEC_SAI pins configuration: FS, SCK, MCK and SD pins ------------------*/ 00041 gpio_init_structure.Pin = AUDIO_OUT_SAIx_FS_PIN; 00042 gpio_init_structure.Mode = GPIO_MODE_AF_PP; 00043 gpio_init_structure.Pull = GPIO_NOPULL; 00044 gpio_init_structure.Speed = GPIO_SPEED_HIGH; 00045 gpio_init_structure.Alternate = AUDIO_OUT_SAIx_FS_SD_MCLK_AF; 00046 HAL_GPIO_Init(AUDIO_OUT_SAIx_FS_GPIO_PORT, &gpio_init_structure); 00047 00048 gpio_init_structure.Pin = AUDIO_OUT_SAIx_SCK_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_SCK_AF; 00053 HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure); 00054 00055 gpio_init_structure.Pin = AUDIO_OUT_SAIx_SD_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_FS_SD_MCLK_AF; 00060 HAL_GPIO_Init(AUDIO_OUT_SAIx_SCK_SD_GPIO_PORT, &gpio_init_structure); 00061 00062 gpio_init_structure.Pin = AUDIO_OUT_SAIx_MCLK_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_MCLK_GPIO_PORT, &gpio_init_structure); 00068 00069 /* Enable the DMA clock */ 00070 AUDIO_OUT_SAIx_DMAx_CLK_ENABLE(); 00071 00072 if(hsai->Instance == AUDIO_OUT_SAIx) { 00073 /* Configure the hdma_saiTx handle parameters */ 00074 hdma_sai_tx.Init.Channel = AUDIO_OUT_SAIx_DMAx_CHANNEL; 00075 hdma_sai_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; 00076 hdma_sai_tx.Init.PeriphInc = DMA_PINC_DISABLE; 00077 hdma_sai_tx.Init.MemInc = DMA_MINC_ENABLE; 00078 hdma_sai_tx.Init.PeriphDataAlignment = AUDIO_OUT_SAIx_DMAx_PERIPH_DATA_SIZE; 00079 hdma_sai_tx.Init.MemDataAlignment = AUDIO_OUT_SAIx_DMAx_MEM_DATA_SIZE; 00080 hdma_sai_tx.Init.Mode = DMA_CIRCULAR; 00081 hdma_sai_tx.Init.Priority = DMA_PRIORITY_HIGH; 00082 hdma_sai_tx.Init.FIFOMode = DMA_FIFOMODE_ENABLE; 00083 hdma_sai_tx.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL; 00084 hdma_sai_tx.Init.MemBurst = DMA_MBURST_SINGLE; 00085 hdma_sai_tx.Init.PeriphBurst = DMA_PBURST_SINGLE; 00086 00087 hdma_sai_tx.Instance = AUDIO_OUT_SAIx_DMAx_STREAM; 00088 00089 /* Associate the DMA handle */ 00090 __HAL_LINKDMA(hsai, hdmatx, hdma_sai_tx); 00091 00092 /* Deinitialize the Stream for new transfer */ 00093 HAL_DMA_DeInit(&hdma_sai_tx); 00094 00095 /* Configure the DMA Stream */ 00096 HAL_DMA_Init(&hdma_sai_tx); 00097 } 00098 00099 /* SAI DMA IRQ Channel configuration */ 00100 HAL_NVIC_SetPriority(AUDIO_OUT_SAIx_DMAx_IRQ, AUDIO_OUT_IRQ_PREPRIO, 0); 00101 HAL_NVIC_EnableIRQ(AUDIO_OUT_SAIx_DMAx_IRQ); 00102 }
Generated on Mon Aug 15 2022 13:44:59 by 1.7.2