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