SPKT

Dependencies:   Array_Matrix

Dependents:   Player

Committer:
phungductung
Date:
Fri Jun 07 05:10:10 2019 +0000
Revision:
0:f255629eada1
spkt; ;

Who changed what in which revision?

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