STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
stm32f769i_discovery_audio.h
Go to the documentation of this file.
1 
39 /* Define to prevent recursive inclusion -------------------------------------*/
40 #ifndef __STM32F769I_DISCOVERY_AUDIO_H
41 #define __STM32F769I_DISCOVERY_AUDIO_H
42 
43 #ifdef __cplusplus
44  extern "C" {
45 #endif
46 
47 /* Includes ------------------------------------------------------------------*/
48 /* Include audio component Driver */
49 #include "../Components/wm8994/wm8994.h"
50 #include "stm32f769i_discovery.h"
51 #include <stdlib.h>
52 
79 #define BSP_AUDIO_FREQUENCY_96K SAI_AUDIO_FREQUENCY_96K
80 #define BSP_AUDIO_FREQUENCY_48K SAI_AUDIO_FREQUENCY_48K
81 #define BSP_AUDIO_FREQUENCY_44K SAI_AUDIO_FREQUENCY_44K
82 #define BSP_AUDIO_FREQUENCY_32K SAI_AUDIO_FREQUENCY_32K
83 #define BSP_AUDIO_FREQUENCY_22K SAI_AUDIO_FREQUENCY_22K
84 #define BSP_AUDIO_FREQUENCY_16K SAI_AUDIO_FREQUENCY_16K
85 #define BSP_AUDIO_FREQUENCY_11K SAI_AUDIO_FREQUENCY_11K
86 #define BSP_AUDIO_FREQUENCY_8K SAI_AUDIO_FREQUENCY_8K
87 
91 /*------------------------------------------------------------------------------
92  USER SAI defines parameters
93  -----------------------------------------------------------------------------*/
100 /* To have 2 separate audio stream in Both headphone and speaker the 4 slot must be activated */
101 #define CODEC_AUDIOFRAME_SLOT_0123 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_2 | SAI_SLOTACTIVE_3
102 /* To have an audio stream in headphone only SAI Slot 0 and Slot 2 must be activated */
103 #define CODEC_AUDIOFRAME_SLOT_02 SAI_SLOTACTIVE_0 | SAI_SLOTACTIVE_2
104 /* To have an audio stream in speaker only SAI Slot 1 and Slot 3 must be activated */
105 #define CODEC_AUDIOFRAME_SLOT_13 SAI_SLOTACTIVE_1 | SAI_SLOTACTIVE_3
106 
107 
108 /* SAI peripheral configuration defines */
109 #define AUDIO_OUT_SAIx SAI1_Block_A
110 #define AUDIO_OUT_SAIx_CLK_ENABLE() __HAL_RCC_SAI1_CLK_ENABLE()
111 #define AUDIO_OUT_SAIx_CLK_DISABLE() __HAL_RCC_SAI1_CLK_DISABLE()
112 #define AUDIO_OUT_SAIx_AF GPIO_AF6_SAI1
113 
114 #define AUDIO_OUT_SAIx_MCLK_ENABLE() __HAL_RCC_GPIOG_CLK_ENABLE()
115 #define AUDIO_OUT_SAIx_MCLK_GPIO_PORT GPIOG
116 #define AUDIO_OUT_SAIx_MCLK_PIN GPIO_PIN_7
117 #define AUDIO_OUT_SAIx_SD_FS_CLK_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
118 #define AUDIO_OUT_SAIx_SD_FS_SCK_GPIO_PORT GPIOE
119 #define AUDIO_OUT_SAIx_FS_PIN GPIO_PIN_4
120 #define AUDIO_OUT_SAIx_SCK_PIN GPIO_PIN_5
121 #define AUDIO_OUT_SAIx_SD_PIN GPIO_PIN_6
122 
123 /* SAI DMA Stream definitions */
124 #define AUDIO_OUT_SAIx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE()
125 #define AUDIO_OUT_SAIx_DMAx_STREAM DMA2_Stream1
126 #define AUDIO_OUT_SAIx_DMAx_CHANNEL DMA_CHANNEL_0
127 #define AUDIO_OUT_SAIx_DMAx_IRQ DMA2_Stream1_IRQn
128 #define AUDIO_OUT_SAIx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD
129 #define AUDIO_OUT_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD
130 #define DMA_MAX_SZE 0xFFFF
131 
132 #define AUDIO_OUT_SAIx_DMAx_IRQHandler DMA2_Stream1_IRQHandler
133 
134 /* Select the interrupt preemption priority and sub-priority for the DMA interrupt */
135 #define AUDIO_OUT_IRQ_PREPRIO ((uint32_t)0x0E)
136 
137 /*------------------------------------------------------------------------------
138  AUDIO IN CONFIGURATION
139 ------------------------------------------------------------------------------*/
140 /* SAI peripheral configuration defines */
141 #define AUDIO_IN_SAIx SAI1_Block_B
142 #define AUDIO_IN_SAIx_CLK_ENABLE() __HAL_RCC_SAI1_CLK_ENABLE()
143 #define AUDIO_IN_SAIx_CLK_DISABLE() __HAL_RCC_SAI1_CLK_DISABLE()
144 #define AUDIO_IN_SAIx_AF GPIO_AF6_SAI1
145 #define AUDIO_IN_SAIx_SD_ENABLE() __HAL_RCC_GPIOE_CLK_ENABLE()
146 #define AUDIO_IN_SAIx_SD_GPIO_PORT GPIOE
147 #define AUDIO_IN_SAIx_SD_PIN GPIO_PIN_3
148 
149 /* SAI DMA Stream definitions */
150 #define AUDIO_IN_SAIx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE()
151 #define AUDIO_IN_SAIx_DMAx_STREAM DMA2_Stream4
152 #define AUDIO_IN_SAIx_DMAx_CHANNEL DMA_CHANNEL_1
153 #define AUDIO_IN_SAIx_DMAx_IRQ DMA2_Stream4_IRQn
154 #define AUDIO_IN_SAIx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_HALFWORD
155 #define AUDIO_IN_SAIx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_HALFWORD
156 
157 #define AUDIO_IN_INT_GPIO_ENABLE() __HAL_RCC_GPIOJ_CLK_ENABLE()
158 #define AUDIO_IN_INT_GPIO_PORT GPIOJ
159 #define AUDIO_IN_INT_GPIO_PIN GPIO_PIN_12
160 #define AUDIO_IN_INT_IRQ EXTI15_10_IRQn
161 
162 /* DFSDM Configuration defines */
163 #define AUDIO_DFSDMx_TOP_RIGHT_CHANNEL DFSDM_CHANNEL_0
164 #define AUDIO_DFSDMx_TOP_LEFT_CHANNEL DFSDM_CHANNEL_1
165 #define AUDIO_DFSDMx_BUTTOM_RIGHT_CHANNEL DFSDM_CHANNEL_4
166 #define AUDIO_DFSDMx_BUTTOM_LEFT_CHANNEL DFSDM_CHANNEL_5
167 
168 #define AUDIO_DFSDMx_TOP_LEFT_FILTER DFSDM1_Filter0
169 #define AUDIO_DFSDMx_TOP_RIGHT_FILTER DFSDM1_Filter1
170 #define AUDIO_DFSDMx_BUTTOM_LEFT_FILTER DFSDM1_Filter2
171 #define AUDIO_DFSDMx_BUTTOM_RIGHT_FILTER DFSDM1_Filter3
172 
173 #define AUDIO_DFSDMx_CLK_ENABLE() __HAL_RCC_DFSDM_CLK_ENABLE()
174 #define AUDIO_DFSDMx_CKOUT_PIN GPIO_PIN_3
175 #define AUDIO_DFSDMx_CKOUT_DMIC_GPIO_PORT GPIOD
176 #define AUDIO_DFSDMx_CKOUT_DMIC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE()
177 #define AUDIO_DFSDMx_DMIC_DATIN1_PIN GPIO_PIN_3
178 #define AUDIO_DFSDMx_DMIC_DATIN5_PIN GPIO_PIN_11
179 #define AUDIO_DFSDMx_DMIC_DATIN_GPIO_PORT GPIOC
180 #define AUDIO_DFSDMx_DMIC_DATIN_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE()
181 #define AUDIO_DFSDMx_DMIC_DATIN_AF GPIO_AF3_DFSDM1
182 #define AUDIO_DFSDMx_CKOUT_AF GPIO_AF3_DFSDM1
183 
184 /* DFSDM DMA Right and Left channels definitions */
185 #define AUDIO_DFSDMx_DMAx_CLK_ENABLE() __HAL_RCC_DMA2_CLK_ENABLE()
186 #define AUDIO_DFSDMx_DMAx_CHANNEL DMA_CHANNEL_8
187 #define AUDIO_DFSDMx_DMAx_PERIPH_DATA_SIZE DMA_PDATAALIGN_WORD
188 #define AUDIO_DFSDMx_DMAx_MEM_DATA_SIZE DMA_MDATAALIGN_WORD
189 
190 #define AUDIO_DFSDMx_DMAx_TOP_LEFT_STREAM DMA2_Stream0
191 #define AUDIO_DFSDMx_DMAx_TOP_LEFT_IRQ DMA2_Stream0_IRQn
192 #define AUDIO_DFSDMx_DMAx_TOP_LEFT_IRQHandler DMA2_Stream0_IRQHandler
193 
194 #define AUDIO_DFSDMx_DMAx_TOP_RIGHT_STREAM DMA2_Stream5
195 #define AUDIO_DFSDMx_DMAx_TOP_RIGHT_IRQ DMA2_Stream5_IRQn
196 #define AUDIO_DFSDMx_DMAx_TOP_RIGHT_IRQHandler DMA2_Stream5_IRQHandler
197 
198 #define AUDIO_DFSDMx_DMAx_BUTTOM_LEFT_STREAM DMA2_Stream6
199 #define AUDIO_DFSDMx_DMAx_BUTTOM_LEFT_IRQ DMA2_Stream6_IRQn
200 #define AUDIO_DFSDMx_DMAx_BUTTOM_LEFT_IRQHandler DMA2_Stream6_IRQHandler
201 
202 #define AUDIO_DFSDMx_DMAx_BUTTOM_RIGHT_STREAM DMA2_Stream7
203 #define AUDIO_DFSDMx_DMAx_BUTTOM_RIGHT_IRQ DMA2_Stream7_IRQn
204 #define AUDIO_DFSDMx_DMAx_BUTTOM_RIGHT_IRQHandler DMA2_Stream7_IRQHandler
205 
206 /* Select the interrupt preemption priority and sub-priority for the DMA interrupt */
207 #define AUDIO_IN_IRQ_PREPRIO ((uint32_t)0x0F)
208 
209 
210 /*------------------------------------------------------------------------------
211  CONFIGURATION: Audio Driver Configuration parameters
212 ------------------------------------------------------------------------------*/
213 
214 #define AUDIODATA_SIZE 2 /* 16-bits audio data size */
215 
216 /* Audio status definition */
217 #define AUDIO_OK ((uint8_t)0)
218 #define AUDIO_ERROR ((uint8_t)1)
219 #define AUDIO_TIMEOUT ((uint8_t)2)
220 
221 /* Audio In default settings */
222 #define DEFAULT_AUDIO_IN_FREQ BSP_AUDIO_FREQUENCY_16K
223 #define DEFAULT_AUDIO_IN_BIT_RESOLUTION ((uint8_t)16)
224 #define DEFAULT_AUDIO_IN_CHANNEL_NBR ((uint8_t)2)
225 #define DEFAULT_AUDIO_IN_VOLUME ((uint16_t)64)
226 
227 /*------------------------------------------------------------------------------
228  OUTPUT DEVICES definition
229 ------------------------------------------------------------------------------*/
230 
231 /* Alias on existing output devices to adapt to Big Birdie discovery board 2 headphones output */
232 #define OUTPUT_DEVICE_HEADPHONE1 OUTPUT_DEVICE_HEADPHONE
233 #define OUTPUT_DEVICE_HEADPHONE2 OUTPUT_DEVICE_SPEAKER /* Headphone2 is connected to Speaker output of the wm8994 */
234 
235 /*------------------------------------------------------------------------------
236  INPUT DEVICES definition
237 ------------------------------------------------------------------------------*/
238 /* MP34DT01TR digital microphone on PCB top side */
239 #define INPUT_DEVICE_DIGITAL_MIC ((uint16_t)0)
240 /* Analog microphone input from 3.5 audio jack connector */
241 #define INPUT_DEVICE_ANALOG_MIC INPUT_DEVICE_INPUT_LINE_1
242 
250 #define DMA_MAX(x) (((x) <= DMA_MAX_SZE)? (x):DMA_MAX_SZE)
251 
258 uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq);
259 void BSP_AUDIO_OUT_DeInit(void);
260 uint8_t BSP_AUDIO_OUT_Play(uint16_t* pBuffer, uint32_t Size);
261 void BSP_AUDIO_OUT_Restart(uint16_t* pBuffer, uint32_t Size);
262 void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size);
263 uint8_t BSP_AUDIO_OUT_Pause(void);
264 uint8_t BSP_AUDIO_OUT_Resume(void);
265 uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option);
266 uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume);
267 void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq);
268 void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot);
269 uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd);
270 uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output);
271 
272 /* User Callbacks: user has to implement these functions in his code if they are needed. */
273 /* This function is called when the requested data has been completely transferred.*/
275 
276 /* This function is called when half of the requested buffer has been transferred. */
278 
279 /* This function is called when an Interrupt due to transfer error on or peripheral
280  error occurs. */
282 
283 /* These function can be modified in case the current settings (e.g. DMA stream)
284  need to be changed for specific application needs */
285 void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params);
286 void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params);
287 void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params);
288 
296 uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr);
297 uint8_t BSP_AUDIO_IN_InitEx(uint16_t InputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr);
298 uint8_t BSP_AUDIO_IN_AllocScratch (int32_t *pScratch, uint32_t size);
299 uint8_t BSP_AUDIO_IN_GetChannelNumber(void);
300 void BSP_AUDIO_IN_DeInit(void);
301 uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size);
302 uint8_t BSP_AUDIO_IN_Stop(void);
303 uint8_t BSP_AUDIO_IN_Pause(void);
304 uint8_t BSP_AUDIO_IN_Resume(void);
305 
306 /* User Callbacks: user has to implement these functions in his code if they are needed. */
307 /* This function should be implemented by the user application.
308  It is called into this driver when the current buffer is filled to prepare the next
309  buffer pointer and its size. */
312 
313 /* This function is called when an Interrupt due to transfer error on or peripheral
314  error occurs. */
315 void BSP_AUDIO_IN_Error_CallBack(void);
316 
317 /* These function can be modified in case the current settings (e.g. DMA stream)
318  need to be changed for specific application needs */
319 void BSP_AUDIO_IN_ClockConfig(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, uint32_t AudioFreq, void *Params);
320 void BSP_AUDIO_IN_MspInit(void);
321 void BSP_AUDIO_IN_MspDeInit(void);
322 
339 #ifdef __cplusplus
340 }
341 #endif
342 
343 #endif /* __STM32F769I_DISCOVERY_AUDIO_H */
344 
345 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
void BSP_AUDIO_OUT_MspDeInit(SAI_HandleTypeDef *hsai, void *Params)
Deinitializes SAI MSP.
void BSP_AUDIO_OUT_HalfTransfer_CallBack(void)
Manages the DMA Half Transfer complete interrupt.
Definition: AudioPlayer.c:214
void BSP_AUDIO_OUT_TransferComplete_CallBack(void)
Calculates the remaining file size and new position of the pointer.
Definition: AudioPlayer.c:202
void BSP_AUDIO_IN_ClockConfig(DFSDM_Filter_HandleTypeDef *hdfsdm_filter, uint32_t AudioFreq, void *Params)
Clock Config.
uint8_t BSP_AUDIO_IN_Init(uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr)
Initialize wave recording.
void BSP_AUDIO_IN_DeInit(void)
Deinit the audio IN peripherals.
uint8_t BSP_AUDIO_IN_Resume(void)
Resume the audio file stream.
This file contains definitions for STM32F769I-Discovery LEDs, push-buttons hardware resources...
void BSP_AUDIO_OUT_DeInit(void)
De-initializes the audio out peripheral.
void BSP_AUDIO_OUT_ClockConfig(SAI_HandleTypeDef *hsai, uint32_t AudioFreq, void *Params)
Clock Config.
uint8_t BSP_AUDIO_OUT_Pause(void)
This function Pauses the audio file stream. In case of using DMA, the DMA Pause feature is used...
void BSP_AUDIO_OUT_Error_CallBack(void)
Manages the DMA FIFO error event.
void BSP_AUDIO_IN_HalfTransfer_CallBack(void)
Manages the DMA Half Transfer complete event.
Definition: main.c:1043
void BSP_AUDIO_IN_TransferComplete_CallBack(void)
User callback when record buffer is filled.
Definition: main.c:1038
uint8_t BSP_AUDIO_OUT_SetOutputMode(uint8_t Output)
Switch dynamically (while audio file is played) the output target (speaker or headphone).
uint8_t BSP_AUDIO_IN_Pause(void)
Pause the audio file stream.
uint8_t BSP_AUDIO_OUT_Resume(void)
Resumes the audio file stream. When calling BSP_AUDIO_OUT_Pause() function for pause, only BSP_AUDIO_OUT_Resume() function should be called for resume (use of BSP_AUDIO_OUT_Play() function for resume could lead to unexpected behaviour).
uint8_t BSP_AUDIO_OUT_Init(uint16_t OutputDevice, uint8_t Volume, uint32_t AudioFreq)
Configures the audio peripherals.
void BSP_AUDIO_IN_Error_CallBack(void)
Audio IN Error callback function.
void BSP_AUDIO_OUT_SetFrequency(uint32_t AudioFreq)
Updates the audio frequency.
uint8_t BSP_AUDIO_IN_Stop(void)
Stop audio recording.
void BSP_AUDIO_OUT_Restart(uint16_t *pBuffer, uint32_t Size)
void BSP_AUDIO_OUT_ChangeBuffer(uint16_t *pData, uint16_t Size)
Sends n-Bytes on the SAI interface.
uint8_t BSP_AUDIO_OUT_SetMute(uint32_t Cmd)
Enables or disables the MUTE mode by software.
uint8_t BSP_AUDIO_OUT_Play(uint16_t *pBuffer, uint32_t Size)
Starts playing audio stream from a data buffer for a determined size.
uint8_t BSP_AUDIO_IN_InitEx(uint16_t InputDevice, uint32_t AudioFreq, uint32_t BitRes, uint32_t ChnlNbr)
Initialize wave recording.
uint8_t BSP_AUDIO_OUT_Stop(uint32_t Option)
Stops audio playing and Power down the Audio Codec.
uint8_t BSP_AUDIO_IN_GetChannelNumber(void)
Return audio in channel number.
void BSP_AUDIO_IN_MspDeInit(void)
DeInitialize BSP_AUDIO_IN MSP.
void BSP_AUDIO_IN_MspInit(void)
Initialize BSP_AUDIO_IN MSP.
uint8_t BSP_AUDIO_IN_AllocScratch(int32_t *pScratch, uint32_t size)
Allocate channel buffer scratch.
void BSP_AUDIO_OUT_SetAudioFrameSlot(uint32_t AudioFrameSlot)
Updates the Audio frame slot configuration.
void BSP_AUDIO_OUT_MspInit(SAI_HandleTypeDef *hsai, void *Params)
Initializes BSP_AUDIO_OUT MSP.
uint8_t BSP_AUDIO_OUT_SetVolume(uint8_t Volume)
Controls the current audio volume level.
uint8_t BSP_AUDIO_IN_Record(uint16_t *pData, uint32_t Size)
Start audio recording.