STM32L476G-Discovery board drivers V1.0.0

Dependents:   DiscoLogger DISCO_L476VG_GlassLCD DISCO_L476VG_MicrophoneRecorder DISCO_L476VG_UART ... more

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers stm32l476g_discovery_audio.h Source File

stm32l476g_discovery_audio.h

Go to the documentation of this file.
00001 /**
00002   ******************************************************************************
00003   * @file    stm32l476g_discovery_audio.h
00004   * @author  MCD Application Team
00005   * @brief   This file contains the common defines and functions prototypes for
00006   *          the stm32l476g_discovery_audio.c driver.
00007   ******************************************************************************
00008   * @attention
00009   *
00010   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
00011   * All rights reserved.</center></h2>
00012   *
00013   * This software component is licensed by ST under BSD 3-Clause license,
00014   * the "License"; You may not use this file except in compliance with the
00015   * License. You may obtain a copy of the License at:
00016   *                        opensource.org/licenses/BSD-3-Clause
00017   *
00018   ******************************************************************************
00019   */
00020 
00021 /* Define to prevent recursive inclusion -------------------------------------*/
00022 #ifndef __STM32L476G_DISCOVERY_AUDIO_H
00023 #define __STM32L476G_DISCOVERY_AUDIO_H
00024 
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028 
00029 /* Includes ------------------------------------------------------------------*/
00030 #if defined(BSP_AUDIO_USE_RTOS)
00031 #include "k_mem.h"
00032 #else
00033 #include <stdlib.h>
00034 #endif
00035 /* Include audio component Driver */
00036 #include "../Components/cs43l22/cs43l22.h"
00037 #include "stm32l476g_discovery.h"
00038 
00039 /** @addtogroup BSP
00040   * @{
00041   */
00042 
00043 /** @addtogroup STM32L476G_DISCOVERY
00044   * @{
00045   */
00046 
00047 /** @addtogroup STM32L476G_DISCOVERY_AUDIO
00048   * @{
00049   */
00050 
00051 /** @defgroup STM32L476G_DISCOVERY_AUDIO_Exported_Types Exported Types
00052   * @{
00053   */
00054 typedef void (*Audio_CallbackTypeDef)(void);
00055 
00056 /**
00057   * @}
00058   */
00059 
00060 /** @defgroup STM32L476G_DISCOVERY_AUDIO_Exported_Constants Exported Constants
00061   * @{
00062   */
00063 /** @defgroup BSP_Audio_Out_Option BSP Audio Out Option
00064   * @{
00065   */
00066 #define BSP_AUDIO_OUT_CIRCULARMODE      ((uint32_t)0x00000001) /* BUFFER CIRCULAR MODE */
00067 #define BSP_AUDIO_OUT_NORMALMODE        ((uint32_t)0x00000002) /* BUFFER NORMAL MODE   */
00068 #define BSP_AUDIO_OUT_STEREOMODE        ((uint32_t)0x00000004) /* STEREO MODE          */
00069 #define BSP_AUDIO_OUT_MONOMODE          ((uint32_t)0x00000008) /* MONO MODE            */
00070 /**
00071   * @}
00072   */
00073 
00074 /** @defgroup BSP_Audio_Sample_Rate BSP Audio Sample Rate
00075   * @{
00076   */
00077 #define BSP_AUDIO_FREQUENCY_96K         SAI_AUDIO_FREQUENCY_96K
00078 #define BSP_AUDIO_FREQUENCY_48K         SAI_AUDIO_FREQUENCY_48K
00079 #define BSP_AUDIO_FREQUENCY_44K         SAI_AUDIO_FREQUENCY_44K
00080 #define BSP_AUDIO_FREQUENCY_32K         SAI_AUDIO_FREQUENCY_32K
00081 #define BSP_AUDIO_FREQUENCY_22K         SAI_AUDIO_FREQUENCY_22K
00082 #define BSP_AUDIO_FREQUENCY_16K         SAI_AUDIO_FREQUENCY_16K
00083 #define BSP_AUDIO_FREQUENCY_11K         SAI_AUDIO_FREQUENCY_11K
00084 #define BSP_AUDIO_FREQUENCY_8K          SAI_AUDIO_FREQUENCY_8K
00085 /**
00086   * @}
00087   */
00088 /*------------------------------------------------------------------------------
00089                           USER SAI defines parameters
00090  -----------------------------------------------------------------------------*/
00091 /* SAI peripheral configuration defines */
00092 #define AUDIO_SAIx                             SAI1_Block_A
00093 #define AUDIO_SAIx_CLK_ENABLE()                __HAL_RCC_SAI1_CLK_ENABLE()
00094 #define AUDIO_SAIx_CLK_DISABLE()               __HAL_RCC_SAI1_CLK_DISABLE()
00095 #define AUDIO_SAIx_MCK_SCK_SD_FS_AF            GPIO_AF13_SAI1
00096 
00097 #define AUDIO_SAIx_MCK_SCK_SD_FS_ENABLE()      __HAL_RCC_GPIOE_CLK_ENABLE()
00098 #define AUDIO_SAIx_MCK_SCK_SD_FS_DISABLE()     __HAL_RCC_GPIOE_CLK_DISABLE()
00099 #define AUDIO_SAIx_FS_PIN                      GPIO_PIN_4
00100 #define AUDIO_SAIx_SCK_PIN                     GPIO_PIN_5
00101 #define AUDIO_SAIx_SD_PIN                      GPIO_PIN_6
00102 #define AUDIO_SAIx_MCK_PIN                     GPIO_PIN_2
00103 #define AUDIO_SAIx_MCK_SCK_SD_FS_GPIO_PORT     GPIOE
00104 
00105 /* SAI DMA Channel definitions */
00106 #define AUDIO_SAIx_DMAx_CLK_ENABLE()         __HAL_RCC_DMA2_CLK_ENABLE()
00107 #define AUDIO_SAIx_DMAx_CLK_DISABLE()        __HAL_RCC_DMA2_CLK_DISABLE()
00108 #define AUDIO_SAIx_DMAx_CHANNEL              DMA2_Channel1
00109 #define AUDIO_SAIx_DMAx_IRQ                  DMA2_Channel1_IRQn
00110 #define AUDIO_SAIx_DMAx_PERIPH_DATA_SIZE     DMA_PDATAALIGN_HALFWORD
00111 #define AUDIO_SAIx_DMAx_MEM_DATA_SIZE        DMA_MDATAALIGN_HALFWORD
00112 #define DMA_MAX_SZE                          (uint32_t)0xFFFF
00113 
00114 #define AUDIO_SAIx_DMAx_IRQHandler           DMA2_Channel1_IRQHandler
00115 
00116 /* Select the interrupt preemption priority for the DMA interrupt */
00117 #define AUDIO_OUT_IRQ_PREPRIO           5   /* Select the preemption priority level(0 is the highest) */
00118 
00119 /* Disable SAIx PLL */
00120 #define AUDIO_SAIx_PLL_DISABLE()             HAL_RCCEx_DisablePLLSAI1()
00121 
00122 /*------------------------------------------------------------------------------
00123                         AUDIO IN CONFIGURATION
00124 ------------------------------------------------------------------------------*/
00125 /* DFSDM Configuration defines */
00126 #define AUDIO_DFSDMx_LEFT_CHANNEL                       DFSDM1_Channel2
00127 #define AUDIO_DFSDMx_LEFT_FILTER                        DFSDM1_Filter0
00128 #define AUDIO_DFSDMx_CLK_ENABLE()                       __HAL_RCC_DFSDM1_CLK_ENABLE()
00129 #define AUDIO_DFSDMx_CLK_DISABLE()                      __HAL_RCC_DFSDM1_CLK_DISABLE()
00130 #define AUDIO_DFSDMx_CKOUT_PIN                          GPIO_PIN_9
00131 #define AUDIO_DFSDMx_DMIC_DATIN_PIN                     GPIO_PIN_7
00132 #define AUDIO_DFSDMx_CKOUT_DMIC_DATIN_GPIO_PORT         GPIOE
00133 #define AUDIO_DFSDMx_CKOUT_DMIC_DATIN_GPIO_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
00134 #define AUDIO_DFSDMx_CKOUT_DMIC_DATIN_GPIO_CLK_DISABLE() __HAL_RCC_GPIOE_CLK_DISABLE()
00135 #define AUDIO_DFSDMx_CKOUT_DMIC_DATIN_AF                GPIO_AF6_DFSDM1
00136 
00137 /* DFSDM DMA Right and Left channels definitions */
00138 #define AUDIO_DFSDMx_DMAx_CLK_ENABLE()                  __HAL_RCC_DMA1_CLK_ENABLE()
00139 #define AUDIO_DFSDMx_DMAx_CLK_DISABLE()                 __HAL_RCC_DMA1_CLK_DISABLE()
00140 #define AUDIO_DFSDMx_DMAx_LEFT_CHANNEL                  DMA1_Channel4
00141 #define AUDIO_DFSDMx_DMAx_LEFT_IRQ                      DMA1_Channel4_IRQn
00142 #define AUDIO_DFSDMx_DMAx_PERIPH_DATA_SIZE              DMA_PDATAALIGN_WORD
00143 #define AUDIO_DFSDMx_DMAx_MEM_DATA_SIZE                 DMA_MDATAALIGN_WORD
00144 
00145 #define AUDIO_DFSDM_DMAx_LEFT_IRQHandler                DMA1_Channel4_IRQHandler
00146 
00147 /* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */
00148 #define AUDIO_IN_IRQ_PREPRIO                6   /* Select the preemption priority level(0 is the highest) */
00149 
00150 /*------------------------------------------------------------------------------
00151              CONFIGURATION: Audio Driver Configuration parameters
00152 ------------------------------------------------------------------------------*/
00153 
00154 #define AUDIODATA_SIZE                      2   /* 16-bits audio data size */
00155 
00156 /* Audio status definition */
00157 #define AUDIO_OK                            0
00158 #define AUDIO_ERROR                         1
00159 #define AUDIO_TIMEOUT                       2
00160 
00161 /* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */
00162 #define DEFAULT_AUDIO_IN_FREQ               BSP_AUDIO_FREQUENCY_16K
00163 #define DEFAULT_AUDIO_IN_BIT_RESOLUTION     16
00164 #define DEFAULT_AUDIO_IN_CHANNEL_NBR        1 /* Mono = 1, Stereo = 2 */
00165 #define DEFAULT_AUDIO_IN_VOLUME             64
00166 
00167 /*------------------------------------------------------------------------------
00168                     OPTIONAL Configuration defines parameters
00169 ------------------------------------------------------------------------------*/
00170 
00171 /* Delay for the Codec to be correctly reset */
00172 #define CODEC_RESET_DELAY           5
00173 
00174 /**
00175   * @}
00176   */
00177 
00178 /** @defgroup STM32L476G_DISCOVERY_AUDIO_Exported_Variables Exported Variables
00179   * @{
00180   */
00181 extern SAI_HandleTypeDef          BSP_AUDIO_hSai;
00182 extern DFSDM_Filter_HandleTypeDef BSP_AUDIO_hDfsdmLeftFilter;
00183 
00184 /**
00185  * @}
00186  */
00187 
00188 /** @defgroup STM32L476G_DISCOVERY_AUDIO_Exported_Macros Exported Macros
00189   * @{
00190   */
00191 #define DMA_MAX(_X_)                (((_X_) <= DMA_MAX_SZE)? (_X_):DMA_MAX_SZE)
00192 
00193 /**
00194   * @}
00195   */
00196 
00197 /* Exported functions --------------------------------------------------------*/
00198 /** @defgroup STM32L476G_DISCOVERY_AUDIO_Exported_Functions Exported Functions
00199   * @{
00200   */
00201 uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq);
00202 uint8_t BSP_AUDIO_OUT_DeInit(void);
00203 uint8_t BSP_AUDIO_OUT_Play(uint16_t *pData, uint32_t Size);
00204 uint8_t BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size);
00205 uint8_t BSP_AUDIO_OUT_Pause(void);
00206 uint8_t BSP_AUDIO_OUT_Resume(void);
00207 uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option);
00208 uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume);
00209 uint8_t BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq);
00210 void    BSP_AUDIO_OUT_ChangeAudioConfig(uint32_t AudioOutOption);
00211 uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd);
00212 uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output);
00213 void    BSP_AUDIO_OUT_RegisterCallbacks(Audio_CallbackTypeDef ErrorCallback,
00214                                         Audio_CallbackTypeDef HalfTransferCallback,
00215                                         Audio_CallbackTypeDef TransferCompleteCallback);
00216 
00217 uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr);
00218 uint8_t BSP_AUDIO_IN_DeInit(void);
00219 uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size);
00220 uint8_t BSP_AUDIO_IN_SetFrequency(uint32_t AudioFreq);
00221 uint8_t BSP_AUDIO_IN_Stop(void);
00222 uint8_t BSP_AUDIO_IN_Pause(void);
00223 uint8_t BSP_AUDIO_IN_Resume(void);
00224 void    BSP_AUDIO_IN_RegisterCallbacks(Audio_CallbackTypeDef ErrorCallback,
00225                                        Audio_CallbackTypeDef HalfTransferCallback,
00226                                        Audio_CallbackTypeDef TransferCompleteCallback);
00227 /**
00228   * @}
00229   */
00230 
00231 /**
00232   * @}
00233   */
00234 
00235 /**
00236   * @}
00237   */
00238 
00239 /**
00240   * @}
00241   */
00242 
00243 #ifdef __cplusplus
00244 }
00245 #endif
00246 
00247 #endif /* __STM32L476G_DISCOVERY_AUDIO_H */
00248 
00249 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/