1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
33
44
49
50
51
52
53
55
56
57
58
59
60
63
64
65
66
67
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
180
189
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
238
239
/* ... */
#include "main.h"
#include <stdio.h>
#include "string.h"
/* ... */
/* ... */
Includes
typedef enum
{
BUFFER_OFFSET_NONE = 0,
BUFFER_OFFSET_HALF = 1,
BUFFER_OFFSET_FULL = 2,
...}BUFFER_StateTypeDef;
extern AUDIO_ErrorTypeDef AUDIO_Start(uint32_t audio_start_address, uint32_t audio_file_size);
Private typedef
#define AUDIO_BLOCK_SIZE ((uint32_t)0xFFFE)
#define HEADBAND_HEIGHT 64
#define SCRATCH_BUFF_SIZE 512
Private define
#if defined ( __CC_ARM )
int32_t Scratch [SCRATCH_BUFF_SIZE] __attribute__((at(0x2000E000)));
#elif defined ( __ICCARM__ )
#pragma location=0x2000E000
int32_t Scratch [SCRATCH_BUFF_SIZE];/* ... */
#elif defined ( __GNUC__ )
int32_t Scratch [SCRATCH_BUFF_SIZE] __attribute__((section(".scratch_section")));
#endif
extern uint16_t internal_buffer[AUDIO_BLOCK_SIZE];Private variables
extern uint32_t audio_rec_buffer_state;
Global variables
static void AudioRec_SetHint(void);
/* ... */
void AudioRecDfsdm_demo (void)
{
AudioRec_SetHint();
uint8_t next_freq = 0;
uint8_t end_of_test = 0;
JOYState_TypeDef JoyState = JOY_NONE;
__IO uint32_t uwVolume = 70;
uint32_t AudioFreq[8] = {I2S_AUDIOFREQ_8K ,I2S_AUDIOFREQ_11K, I2S_AUDIOFREQ_16K, I2S_AUDIOFREQ_22K, I2S_AUDIOFREQ_32K, I2S_AUDIOFREQ_44K, I2S_AUDIOFREQ_48K, I2S_AUDIOFREQ_96K};
uint32_t *AudioFreq_ptr;
uint8_t FreqStr[25] = {0};
AudioFreq_ptr = AudioFreq + 6;
BSP_JOY_Init(JOY_MODE_GPIO);
while (end_of_test == 0)
{
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_FillRect(0, HEADBAND_HEIGHT, BSP_LCD_GetXSize(), BSP_LCD_GetYSize() - HEADBAND_HEIGHT);
BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 160, (uint8_t *)"TOP MP34 MICROPHONES TEST", CENTER_MODE);
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
sprintf((char*)FreqStr," FREQ: %lu ", *AudioFreq_ptr);
BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()- 145, (uint8_t *)FreqStr, CENTER_MODE);
BSP_AUDIO_IN_AllocScratch (Scratch, SCRATCH_BUFF_SIZE);
if (BSP_AUDIO_IN_Init(*AudioFreq_ptr, DEFAULT_AUDIO_IN_BIT_RESOLUTION, DEFAULT_AUDIO_IN_CHANNEL_NBR) != AUDIO_OK)
{
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_RED);
BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 130, (uint8_t *)"Audio record init FAIL", CENTER_MODE);
BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 115, (uint8_t *)"Try to reset board ", CENTER_MODE);
BSP_AUDIO_IN_DeInit();
}if (BSP_AUDIO_IN_Init(*AudioFreq_ptr, DEFAULT_AUDIO_IN_BIT_RESOLUTION, DEFAULT_AUDIO_IN_CHANNEL_NBR) != AUDIO_OK) { ... }
else
{
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 130, (uint8_t *)"Audio record init OK", CENTER_MODE);
audio_rec_buffer_state = BUFFER_OFFSET_NONE;
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 115, (uint8_t *)"Buffering...", CENTER_MODE);
BSP_AUDIO_IN_Record(internal_buffer, AUDIO_BLOCK_SIZE);
BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 85, (uint8_t *)"Start Playback...", CENTER_MODE);
BSP_AUDIO_OUT_Init(OUTPUT_DEVICE_HEADPHONE, uwVolume, *AudioFreq_ptr);
BSP_AUDIO_OUT_Play((uint16_t*)(&internal_buffer[0]), AUDIO_BLOCK_SIZE * 2);
BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize() - 70, (uint8_t *)"Streaming to headphones", CENTER_MODE);
}else { ... }
next_freq = 0;
while (next_freq == 0)
{
HAL_Delay(100);
JoyState = BSP_JOY_GetState();
switch(JoyState)
{
case JOY_UP:
if (uwVolume < 95)
uwVolume += 5;
else
uwVolume = 100;
BSP_AUDIO_OUT_SetVolume(uwVolume);
break;
case JOY_UP:
case JOY_DOWN:
if (uwVolume > 5)
uwVolume -= 5;
else
uwVolume = 0;
BSP_AUDIO_OUT_SetVolume(uwVolume);
break;
case JOY_DOWN:
case JOY_LEFT:
if (*AudioFreq_ptr != 8000)
{
AudioFreq_ptr--;
next_freq = 1;
}if (*AudioFreq_ptr != 8000) { ... }
break;
case JOY_LEFT:
case JOY_RIGHT:
if (*AudioFreq_ptr != 96000)
{
AudioFreq_ptr++;
next_freq = 1;
}if (*AudioFreq_ptr != 96000) { ... }
break;
case JOY_RIGHT:
default:
break;default
}switch (JoyState) { ... }
if (CheckForUserInput() > 0)
{
end_of_test = 1;
BSP_AUDIO_OUT_Stop(CODEC_PDWN_HW);
BSP_AUDIO_OUT_DeInit();
BSP_AUDIO_IN_Stop();
BSP_AUDIO_IN_DeInit();
return;
}if (CheckForUserInput() > 0) { ... }
}while (next_freq == 0) { ... }
BSP_AUDIO_OUT_Stop(CODEC_PDWN_HW);
BSP_AUDIO_OUT_DeInit();
BSP_AUDIO_IN_Stop();
BSP_AUDIO_IN_DeInit();
}while (end_of_test == 0) { ... }
}{ ... }
/* ... */
static void AudioRec_SetHint(void)
{
BSP_LCD_Clear(LCD_COLOR_WHITE);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), HEADBAND_HEIGHT);
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
BSP_LCD_SetFont(&Font16);
BSP_LCD_DisplayStringAt(0, 1, (uint8_t *)"AUDIO REC DFSDM", CENTER_MODE);
BSP_LCD_SetFont(&Font12);
BSP_LCD_DisplayStringAt(0, 20, (uint8_t *)"Record and play audio", CENTER_MODE);
BSP_LCD_DisplayStringAt(0, 35, (uint8_t *)"stream from microphones", CENTER_MODE);
BSP_LCD_DisplayStringAt(0, 50, (uint8_t *)"Press BUTTON for next", CENTER_MODE);
}{ ... }
/* ... */
/* ... */