1*225f4ba4SMatthias Ringwald /** 2*225f4ba4SMatthias Ringwald ****************************************************************************** 3*225f4ba4SMatthias Ringwald * @file stm32f4_discovery_audio.h 4*225f4ba4SMatthias Ringwald * @author MCD Application Team 5*225f4ba4SMatthias Ringwald * @version V2.1.2 6*225f4ba4SMatthias Ringwald * @date 27-January-2017 7*225f4ba4SMatthias Ringwald * @brief This file contains the common defines and functions prototypes for 8*225f4ba4SMatthias Ringwald * stm32f4_discovery_audio.c driver. 9*225f4ba4SMatthias Ringwald ****************************************************************************** 10*225f4ba4SMatthias Ringwald * @attention 11*225f4ba4SMatthias Ringwald * 12*225f4ba4SMatthias Ringwald * <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2> 13*225f4ba4SMatthias Ringwald * 14*225f4ba4SMatthias Ringwald * Redistribution and use in source and binary forms, with or without modification, 15*225f4ba4SMatthias Ringwald * are permitted provided that the following conditions are met: 16*225f4ba4SMatthias Ringwald * 1. Redistributions of source code must retain the above copyright notice, 17*225f4ba4SMatthias Ringwald * this list of conditions and the following disclaimer. 18*225f4ba4SMatthias Ringwald * 2. Redistributions in binary form must reproduce the above copyright notice, 19*225f4ba4SMatthias Ringwald * this list of conditions and the following disclaimer in the documentation 20*225f4ba4SMatthias Ringwald * and/or other materials provided with the distribution. 21*225f4ba4SMatthias Ringwald * 3. Neither the name of STMicroelectronics nor the names of its contributors 22*225f4ba4SMatthias Ringwald * may be used to endorse or promote products derived from this software 23*225f4ba4SMatthias Ringwald * without specific prior written permission. 24*225f4ba4SMatthias Ringwald * 25*225f4ba4SMatthias Ringwald * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 26*225f4ba4SMatthias Ringwald * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27*225f4ba4SMatthias Ringwald * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 28*225f4ba4SMatthias Ringwald * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 29*225f4ba4SMatthias Ringwald * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30*225f4ba4SMatthias Ringwald * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 31*225f4ba4SMatthias Ringwald * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 32*225f4ba4SMatthias Ringwald * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 33*225f4ba4SMatthias Ringwald * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 34*225f4ba4SMatthias Ringwald * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 35*225f4ba4SMatthias Ringwald * 36*225f4ba4SMatthias Ringwald ****************************************************************************** 37*225f4ba4SMatthias Ringwald */ 38*225f4ba4SMatthias Ringwald 39*225f4ba4SMatthias Ringwald /* Define to prevent recursive inclusion -------------------------------------*/ 40*225f4ba4SMatthias Ringwald #ifndef __STM32F4_DISCOVERY_AUDIO_H 41*225f4ba4SMatthias Ringwald #define __STM32F4_DISCOVERY_AUDIO_H 42*225f4ba4SMatthias Ringwald 43*225f4ba4SMatthias Ringwald #ifdef __cplusplus 44*225f4ba4SMatthias Ringwald extern "C" { 45*225f4ba4SMatthias Ringwald #endif 46*225f4ba4SMatthias Ringwald 47*225f4ba4SMatthias Ringwald /* Includes ------------------------------------------------------------------*/ 48*225f4ba4SMatthias Ringwald /* Include audio component Driver */ 49*225f4ba4SMatthias Ringwald #include "cs43l22.h" 50*225f4ba4SMatthias Ringwald 51*225f4ba4SMatthias Ringwald #include "stm32f4_discovery.h" 52*225f4ba4SMatthias Ringwald //#include "../../../Middlewares/ST/STM32_Audio/Addons/PDM/pdm_filter.h" 53*225f4ba4SMatthias Ringwald 54*225f4ba4SMatthias Ringwald /** @addtogroup BSP 55*225f4ba4SMatthias Ringwald * @{ 56*225f4ba4SMatthias Ringwald */ 57*225f4ba4SMatthias Ringwald 58*225f4ba4SMatthias Ringwald /** @addtogroup STM32F4_DISCOVERY 59*225f4ba4SMatthias Ringwald * @{ 60*225f4ba4SMatthias Ringwald */ 61*225f4ba4SMatthias Ringwald 62*225f4ba4SMatthias Ringwald /** @addtogroup STM32F4_DISCOVERY_AUDIO 63*225f4ba4SMatthias Ringwald * @{ 64*225f4ba4SMatthias Ringwald */ 65*225f4ba4SMatthias Ringwald 66*225f4ba4SMatthias Ringwald 67*225f4ba4SMatthias Ringwald /** @defgroup STM32F4_DISCOVERY_AUDIO_Exported_Types STM32F4 DISCOVERY AUDIO Exported Types 68*225f4ba4SMatthias Ringwald * @{ 69*225f4ba4SMatthias Ringwald */ 70*225f4ba4SMatthias Ringwald /** 71*225f4ba4SMatthias Ringwald * @} 72*225f4ba4SMatthias Ringwald */ 73*225f4ba4SMatthias Ringwald 74*225f4ba4SMatthias Ringwald /** @defgroup STM32F4_DISCOVERY_AUDIO_OUT_Exported_Constants STM32F4 DISCOVERY AUDIO OUT Exported Constants 75*225f4ba4SMatthias Ringwald * @{ 76*225f4ba4SMatthias Ringwald */ 77*225f4ba4SMatthias Ringwald 78*225f4ba4SMatthias Ringwald /*------------------------------------------------------------------------------ 79*225f4ba4SMatthias Ringwald AUDIO OUT CONFIGURATION 80*225f4ba4SMatthias Ringwald ------------------------------------------------------------------------------*/ 81*225f4ba4SMatthias Ringwald 82*225f4ba4SMatthias Ringwald /* I2S peripheral configuration defines */ 83*225f4ba4SMatthias Ringwald #define I2S3 SPI3 84*225f4ba4SMatthias Ringwald #define I2S3_CLK_ENABLE() __HAL_RCC_SPI3_CLK_ENABLE() 85*225f4ba4SMatthias Ringwald #define I2S3_CLK_DISABLE() __HAL_RCC_SPI3_CLK_DISABLE() 86*225f4ba4SMatthias Ringwald #define I2S3_SCK_SD_WS_AF GPIO_AF6_SPI3 87*225f4ba4SMatthias Ringwald #define I2S3_SCK_SD_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() 88*225f4ba4SMatthias Ringwald #define I2S3_MCK_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() 89*225f4ba4SMatthias Ringwald #define I2S3_WS_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE() 90*225f4ba4SMatthias Ringwald #define I2S3_WS_PIN GPIO_PIN_4 91*225f4ba4SMatthias Ringwald #define I2S3_SCK_PIN GPIO_PIN_10 92*225f4ba4SMatthias Ringwald #define I2S3_SD_PIN GPIO_PIN_12 93*225f4ba4SMatthias Ringwald #define I2S3_MCK_PIN GPIO_PIN_7 94*225f4ba4SMatthias Ringwald #define I2S3_SCK_SD_GPIO_PORT GPIOC 95*225f4ba4SMatthias Ringwald #define I2S3_WS_GPIO_PORT GPIOA 96*225f4ba4SMatthias Ringwald #define I2S3_MCK_GPIO_PORT GPIOC 97*225f4ba4SMatthias Ringwald 98*225f4ba4SMatthias Ringwald /* I2S DMA Stream definitions */ 99*225f4ba4SMatthias Ringwald #define I2S3_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() 100*225f4ba4SMatthias Ringwald #define I2S3_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() 101*225f4ba4SMatthias Ringwald #define I2S3_DMAx_STREAM DMA1_Stream7 102*225f4ba4SMatthias Ringwald #define I2S3_DMAx_CHANNEL DMA_CHANNEL_0 103*225f4ba4SMatthias Ringwald #define I2S3_DMAx_IRQ DMA1_Stream7_IRQn 104*225f4ba4SMatthias Ringwald #define I2S3_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD 105*225f4ba4SMatthias Ringwald #define I2S3_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD 106*225f4ba4SMatthias Ringwald #define DMA_MAX_SZE 0xFFFF 107*225f4ba4SMatthias Ringwald 108*225f4ba4SMatthias Ringwald #define I2S3_IRQHandler DMA1_Stream7_IRQHandler 109*225f4ba4SMatthias Ringwald 110*225f4ba4SMatthias Ringwald /* Select the interrupt preemption priority and subpriority for the DMA interrupt */ 111*225f4ba4SMatthias Ringwald #define AUDIO_OUT_IRQ_PREPRIO 0x0E /* Select the preemption priority level(0 is the highest) */ 112*225f4ba4SMatthias Ringwald 113*225f4ba4SMatthias Ringwald /*------------------------------------------------------------------------------ 114*225f4ba4SMatthias Ringwald AUDIO IN CONFIGURATION 115*225f4ba4SMatthias Ringwald ------------------------------------------------------------------------------*/ 116*225f4ba4SMatthias Ringwald /* SPI Configuration defines */ 117*225f4ba4SMatthias Ringwald #define I2S2 SPI2 118*225f4ba4SMatthias Ringwald #define I2S2_CLK_ENABLE() __HAL_RCC_SPI2_CLK_ENABLE() 119*225f4ba4SMatthias Ringwald #define I2S2_CLK_DISABLE() __HAL_RCC_SPI2_CLK_DISABLE() 120*225f4ba4SMatthias Ringwald #define I2S2_SCK_PIN GPIO_PIN_10 121*225f4ba4SMatthias Ringwald #define I2S2_SCK_GPIO_PORT GPIOB 122*225f4ba4SMatthias Ringwald #define I2S2_SCK_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() 123*225f4ba4SMatthias Ringwald #define I2S2_SCK_AF GPIO_AF5_SPI2 124*225f4ba4SMatthias Ringwald 125*225f4ba4SMatthias Ringwald #define I2S2_MOSI_PIN GPIO_PIN_3 126*225f4ba4SMatthias Ringwald #define I2S2_MOSI_GPIO_PORT GPIOC 127*225f4ba4SMatthias Ringwald #define I2S2_MOSI_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() 128*225f4ba4SMatthias Ringwald #define I2S2_MOSI_AF GPIO_AF5_SPI2 129*225f4ba4SMatthias Ringwald 130*225f4ba4SMatthias Ringwald /* I2S DMA Stream Rx definitions */ 131*225f4ba4SMatthias Ringwald #define I2S2_DMAx_CLK_ENABLE() __HAL_RCC_DMA1_CLK_ENABLE() 132*225f4ba4SMatthias Ringwald #define I2S2_DMAx_CLK_DISABLE() __HAL_RCC_DMA1_CLK_DISABLE() 133*225f4ba4SMatthias Ringwald #define I2S2_DMAx_STREAM DMA1_Stream3 134*225f4ba4SMatthias Ringwald #define I2S2_DMAx_CHANNEL DMA_CHANNEL_0 135*225f4ba4SMatthias Ringwald #define I2S2_DMAx_IRQ DMA1_Stream3_IRQn 136*225f4ba4SMatthias Ringwald #define I2S2_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD 137*225f4ba4SMatthias Ringwald #define I2S2_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD 138*225f4ba4SMatthias Ringwald 139*225f4ba4SMatthias Ringwald #define I2S2_IRQHandler DMA1_Stream3_IRQHandler 140*225f4ba4SMatthias Ringwald 141*225f4ba4SMatthias Ringwald /* Select the interrupt preemption priority and subpriority for the IT/DMA interrupt */ 142*225f4ba4SMatthias Ringwald #define AUDIO_IN_IRQ_PREPRIO 0x0F /* Select the preemption priority level(0 is the highest) */ 143*225f4ba4SMatthias Ringwald 144*225f4ba4SMatthias Ringwald /*------------------------------------------------------------------------------ 145*225f4ba4SMatthias Ringwald CONFIGURATION: Audio Driver Configuration parameters 146*225f4ba4SMatthias Ringwald ------------------------------------------------------------------------------*/ 147*225f4ba4SMatthias Ringwald 148*225f4ba4SMatthias Ringwald #define AUDIODATA_SIZE 2 /* 16-bits audio data size */ 149*225f4ba4SMatthias Ringwald 150*225f4ba4SMatthias Ringwald /* Audio status definition */ 151*225f4ba4SMatthias Ringwald #define AUDIO_OK 0 152*225f4ba4SMatthias Ringwald #define AUDIO_ERROR 1 153*225f4ba4SMatthias Ringwald #define AUDIO_TIMEOUT 2 154*225f4ba4SMatthias Ringwald 155*225f4ba4SMatthias Ringwald /* AudioFreq * DataSize (2 bytes) * NumChannels (Stereo: 2) */ 156*225f4ba4SMatthias Ringwald #define DEFAULT_AUDIO_IN_FREQ I2S_AUDIOFREQ_16K 157*225f4ba4SMatthias Ringwald #define DEFAULT_AUDIO_IN_BIT_RESOLUTION 16 158*225f4ba4SMatthias Ringwald #define DEFAULT_AUDIO_IN_CHANNEL_NBR 1 /* Mono = 1, Stereo = 2 */ 159*225f4ba4SMatthias Ringwald #define DEFAULT_AUDIO_IN_VOLUME 64 160*225f4ba4SMatthias Ringwald 161*225f4ba4SMatthias Ringwald /* PDM buffer input size */ 162*225f4ba4SMatthias Ringwald #define INTERNAL_BUFF_SIZE 128*DEFAULT_AUDIO_IN_FREQ/16000*DEFAULT_AUDIO_IN_CHANNEL_NBR 163*225f4ba4SMatthias Ringwald /* PCM buffer output size */ 164*225f4ba4SMatthias Ringwald #define PCM_OUT_SIZE DEFAULT_AUDIO_IN_FREQ/1000 165*225f4ba4SMatthias Ringwald #define CHANNEL_DEMUX_MASK 0x55 166*225f4ba4SMatthias Ringwald 167*225f4ba4SMatthias Ringwald /*------------------------------------------------------------------------------ 168*225f4ba4SMatthias Ringwald OPTIONAL Configuration defines parameters 169*225f4ba4SMatthias Ringwald ------------------------------------------------------------------------------*/ 170*225f4ba4SMatthias Ringwald 171*225f4ba4SMatthias Ringwald /** 172*225f4ba4SMatthias Ringwald * @} 173*225f4ba4SMatthias Ringwald */ 174*225f4ba4SMatthias Ringwald 175*225f4ba4SMatthias Ringwald /** @defgroup STM32F4_DISCOVERY_AUDIO_Exported_Variables STM32F4 DISCOVERY AUDIO Exported Variables 176*225f4ba4SMatthias Ringwald * @{ 177*225f4ba4SMatthias Ringwald */ 178*225f4ba4SMatthias Ringwald extern __IO uint16_t AudioInVolume; 179*225f4ba4SMatthias Ringwald /** 180*225f4ba4SMatthias Ringwald * @} 181*225f4ba4SMatthias Ringwald */ 182*225f4ba4SMatthias Ringwald 183*225f4ba4SMatthias Ringwald /** @defgroup STM32F4_DISCOVERY_AUDIO_Exported_Macros STM32F4 DISCOVERY AUDIO Exported Macros 184*225f4ba4SMatthias Ringwald * @{ 185*225f4ba4SMatthias Ringwald */ 186*225f4ba4SMatthias Ringwald #define DMA_MAX(_X_) (((_X_) <= DMA_MAX_SZE)? (_X_):DMA_MAX_SZE) 187*225f4ba4SMatthias Ringwald /** 188*225f4ba4SMatthias Ringwald * @} 189*225f4ba4SMatthias Ringwald */ 190*225f4ba4SMatthias Ringwald 191*225f4ba4SMatthias Ringwald /** @defgroup STM32F4_DISCOVERY_AUDIO_OUT_Exported_Functions STM32F4 DISCOVERY AUDIO OUT Exported Functions 192*225f4ba4SMatthias Ringwald * @{ 193*225f4ba4SMatthias Ringwald */ 194*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq); 195*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size); 196*225f4ba4SMatthias Ringwald void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size); 197*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_OUT_Pause(void); 198*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_OUT_Resume(void); 199*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option); 200*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume); 201*225f4ba4SMatthias Ringwald void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq); 202*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd); 203*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output); 204*225f4ba4SMatthias Ringwald 205*225f4ba4SMatthias Ringwald /* User Callbacks: user has to implement these functions in his code if they are needed. */ 206*225f4ba4SMatthias Ringwald /* This function is called when the requested data has been completely transferred. */ 207*225f4ba4SMatthias Ringwald void BSP_AUDIO_OUT_TransferComplete_CallBack(void); 208*225f4ba4SMatthias Ringwald 209*225f4ba4SMatthias Ringwald /* This function is called when half of the requested buffer has been transferred. */ 210*225f4ba4SMatthias Ringwald void BSP_AUDIO_OUT_HalfTransfer_CallBack(void); 211*225f4ba4SMatthias Ringwald 212*225f4ba4SMatthias Ringwald /* This function is called when an Interrupt due to transfer error on or peripheral 213*225f4ba4SMatthias Ringwald error occurs. */ 214*225f4ba4SMatthias Ringwald void BSP_AUDIO_OUT_Error_CallBack(void); 215*225f4ba4SMatthias Ringwald 216*225f4ba4SMatthias Ringwald /* These function can be modified in case the current settings (e.g. DMA stream) 217*225f4ba4SMatthias Ringwald need to be changed for specific application needs */ 218*225f4ba4SMatthias Ringwald void BSP_AUDIO_OUT_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); 219*225f4ba4SMatthias Ringwald void BSP_AUDIO_OUT_MspInit(I2S_HandleTypeDef *hi2s, void *Params); 220*225f4ba4SMatthias Ringwald void BSP_AUDIO_OUT_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); 221*225f4ba4SMatthias Ringwald 222*225f4ba4SMatthias Ringwald /** 223*225f4ba4SMatthias Ringwald * @} 224*225f4ba4SMatthias Ringwald */ 225*225f4ba4SMatthias Ringwald 226*225f4ba4SMatthias Ringwald /** @defgroup STM32F4_DISCOVERY_AUDIO_IN_Exported_Functions STM32F4 DISCOVERY AUDIO IN Exported Functions 227*225f4ba4SMatthias Ringwald * @{ 228*225f4ba4SMatthias Ringwald */ 229*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr); 230*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size); 231*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_IN_Stop(void); 232*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_IN_Pause(void); 233*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_IN_Resume(void); 234*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_IN_SetVolume(uint8_t Volume); 235*225f4ba4SMatthias Ringwald uint8_t BSP_AUDIO_IN_PDMToPCM(uint16_t *PDMBuf, uint16_t *PCMBuf); 236*225f4ba4SMatthias Ringwald /* User Callbacks: user has to implement these functions in his code if they are needed. */ 237*225f4ba4SMatthias Ringwald /* This function should be implemented by the user application. 238*225f4ba4SMatthias Ringwald It is called into this driver when the current buffer is filled to prepare the next 239*225f4ba4SMatthias Ringwald buffer pointer and its size. */ 240*225f4ba4SMatthias Ringwald void BSP_AUDIO_IN_TransferComplete_CallBack(void); 241*225f4ba4SMatthias Ringwald void BSP_AUDIO_IN_HalfTransfer_CallBack(void); 242*225f4ba4SMatthias Ringwald 243*225f4ba4SMatthias Ringwald /* This function is called when an Interrupt due to transfer error on or peripheral 244*225f4ba4SMatthias Ringwald error occurs. */ 245*225f4ba4SMatthias Ringwald void BSP_AUDIO_IN_Error_Callback(void); 246*225f4ba4SMatthias Ringwald 247*225f4ba4SMatthias Ringwald /* These function can be modified in case the current settings (e.g. DMA stream) 248*225f4ba4SMatthias Ringwald need to be changed for specific application needs */ 249*225f4ba4SMatthias Ringwald void BSP_AUDIO_IN_ClockConfig(I2S_HandleTypeDef *hi2s, uint32_t AudioFreq, void *Params); 250*225f4ba4SMatthias Ringwald void BSP_AUDIO_IN_MspInit(I2S_HandleTypeDef *hi2s, void *Params); 251*225f4ba4SMatthias Ringwald void BSP_AUDIO_IN_MspDeInit(I2S_HandleTypeDef *hi2s, void *Params); 252*225f4ba4SMatthias Ringwald 253*225f4ba4SMatthias Ringwald /** 254*225f4ba4SMatthias Ringwald * @} 255*225f4ba4SMatthias Ringwald */ 256*225f4ba4SMatthias Ringwald 257*225f4ba4SMatthias Ringwald /** 258*225f4ba4SMatthias Ringwald * @} 259*225f4ba4SMatthias Ringwald */ 260*225f4ba4SMatthias Ringwald 261*225f4ba4SMatthias Ringwald /** 262*225f4ba4SMatthias Ringwald * @} 263*225f4ba4SMatthias Ringwald */ 264*225f4ba4SMatthias Ringwald 265*225f4ba4SMatthias Ringwald /** 266*225f4ba4SMatthias Ringwald * @} 267*225f4ba4SMatthias Ringwald */ 268*225f4ba4SMatthias Ringwald 269*225f4ba4SMatthias Ringwald #ifdef __cplusplus 270*225f4ba4SMatthias Ringwald } 271*225f4ba4SMatthias Ringwald #endif 272*225f4ba4SMatthias Ringwald 273*225f4ba4SMatthias Ringwald #endif /* __STM32F4_DISCOVERY_AUDIO_H */ 274*225f4ba4SMatthias Ringwald 275*225f4ba4SMatthias Ringwald /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 276