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