diff options
Diffstat (limited to 'quantum')
-rw-r--r-- | quantum/audio/audio_arm.c | 280 |
1 files changed, 230 insertions, 50 deletions
diff --git a/quantum/audio/audio_arm.c b/quantum/audio/audio_arm.c index 43c8d67c4..247dc337d 100644 --- a/quantum/audio/audio_arm.c +++ b/quantum/audio/audio_arm.c | |||
@@ -77,23 +77,48 @@ bool glissando = true; | |||
77 | #endif | 77 | #endif |
78 | float startup_song[][2] = STARTUP_SONG; | 78 | float startup_song[][2] = STARTUP_SONG; |
79 | 79 | ||
80 | static void gpt_cb6(GPTDriver *gptp); | ||
81 | static void gpt_cb7(GPTDriver *gptp); | ||
82 | static void gpt_cb8(GPTDriver *gptp); | 80 | static void gpt_cb8(GPTDriver *gptp); |
83 | 81 | ||
82 | #define DAC_BUFFER_SIZE 360 | ||
83 | |||
84 | #define START_CHANNEL_1() gptStart(&GPTD6, &gpt6cfg1); \ | ||
85 | gptStartContinuous(&GPTD6, 2U) | ||
86 | #define START_CHANNEL_2() gptStart(&GPTD7, &gpt7cfg1); \ | ||
87 | gptStartContinuous(&GPTD7, 2U) | ||
88 | #define STOP_CHANNEL_1() gptStopTimer(&GPTD6) | ||
89 | #define STOP_CHANNEL_2() gptStopTimer(&GPTD7) | ||
90 | #define RESTART_CHANNEL_1() STOP_CHANNEL_1(); \ | ||
91 | START_CHANNEL_1() | ||
92 | #define RESTART_CHANNEL_2() STOP_CHANNEL_2(); \ | ||
93 | START_CHANNEL_2() | ||
94 | #define UPDATE_CHANNEL_1_FREQ(freq) gpt6cfg1.frequency = freq * DAC_BUFFER_SIZE; \ | ||
95 | RESTART_CHANNEL_1() | ||
96 | #define UPDATE_CHANNEL_2_FREQ(freq) gpt7cfg1.frequency = freq * DAC_BUFFER_SIZE; \ | ||
97 | RESTART_CHANNEL_2() | ||
98 | #define GET_CHANNEL_1_FREQ gpt6cfg1.frequency | ||
99 | #define GET_CHANNEL_2_FREQ gpt7cfg1.frequency | ||
100 | |||
101 | |||
84 | /* | 102 | /* |
85 | * GPT6 configuration. | 103 | * GPT6 configuration. |
86 | */ | 104 | */ |
105 | // static const GPTConfig gpt6cfg1 = { | ||
106 | // .frequency = 1000000U, | ||
107 | // .callback = NULL, | ||
108 | // .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */ | ||
109 | // .dier = 0U | ||
110 | // }; | ||
111 | |||
87 | GPTConfig gpt6cfg1 = { | 112 | GPTConfig gpt6cfg1 = { |
88 | .frequency = 440, | 113 | .frequency = 440U*DAC_BUFFER_SIZE, |
89 | .callback = gpt_cb6, | 114 | .callback = NULL, |
90 | .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */ | 115 | .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */ |
91 | .dier = 0U | 116 | .dier = 0U |
92 | }; | 117 | }; |
93 | 118 | ||
94 | GPTConfig gpt7cfg1 = { | 119 | GPTConfig gpt7cfg1 = { |
95 | .frequency = 440, | 120 | .frequency = 440U*DAC_BUFFER_SIZE, |
96 | .callback = gpt_cb7, | 121 | .callback = NULL, |
97 | .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */ | 122 | .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */ |
98 | .dier = 0U | 123 | .dier = 0U |
99 | }; | 124 | }; |
@@ -105,15 +130,169 @@ GPTConfig gpt8cfg1 = { | |||
105 | .dier = 0U | 130 | .dier = 0U |
106 | }; | 131 | }; |
107 | 132 | ||
108 | static void gpt_cb6(GPTDriver *gptp) { | 133 | |
109 | palTogglePad(GPIOA, 4); | 134 | /* |
135 | * DAC test buffer (sine wave). | ||
136 | */ | ||
137 | // static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = { | ||
138 | // 2047, 2082, 2118, 2154, 2189, 2225, 2260, 2296, 2331, 2367, 2402, 2437, | ||
139 | // 2472, 2507, 2542, 2576, 2611, 2645, 2679, 2713, 2747, 2780, 2813, 2846, | ||
140 | // 2879, 2912, 2944, 2976, 3008, 3039, 3070, 3101, 3131, 3161, 3191, 3221, | ||
141 | // 3250, 3278, 3307, 3335, 3362, 3389, 3416, 3443, 3468, 3494, 3519, 3544, | ||
142 | // 3568, 3591, 3615, 3637, 3660, 3681, 3703, 3723, 3744, 3763, 3782, 3801, | ||
143 | // 3819, 3837, 3854, 3870, 3886, 3902, 3917, 3931, 3944, 3958, 3970, 3982, | ||
144 | // 3993, 4004, 4014, 4024, 4033, 4041, 4049, 4056, 4062, 4068, 4074, 4078, | ||
145 | // 4082, 4086, 4089, 4091, 4092, 4093, 4094, 4093, 4092, 4091, 4089, 4086, | ||
146 | // 4082, 4078, 4074, 4068, 4062, 4056, 4049, 4041, 4033, 4024, 4014, 4004, | ||
147 | // 3993, 3982, 3970, 3958, 3944, 3931, 3917, 3902, 3886, 3870, 3854, 3837, | ||
148 | // 3819, 3801, 3782, 3763, 3744, 3723, 3703, 3681, 3660, 3637, 3615, 3591, | ||
149 | // 3568, 3544, 3519, 3494, 3468, 3443, 3416, 3389, 3362, 3335, 3307, 3278, | ||
150 | // 3250, 3221, 3191, 3161, 3131, 3101, 3070, 3039, 3008, 2976, 2944, 2912, | ||
151 | // 2879, 2846, 2813, 2780, 2747, 2713, 2679, 2645, 2611, 2576, 2542, 2507, | ||
152 | // 2472, 2437, 2402, 2367, 2331, 2296, 2260, 2225, 2189, 2154, 2118, 2082, | ||
153 | // 2047, 2012, 1976, 1940, 1905, 1869, 1834, 1798, 1763, 1727, 1692, 1657, | ||
154 | // 1622, 1587, 1552, 1518, 1483, 1449, 1415, 1381, 1347, 1314, 1281, 1248, | ||
155 | // 1215, 1182, 1150, 1118, 1086, 1055, 1024, 993, 963, 933, 903, 873, | ||
156 | // 844, 816, 787, 759, 732, 705, 678, 651, 626, 600, 575, 550, | ||
157 | // 526, 503, 479, 457, 434, 413, 391, 371, 350, 331, 312, 293, | ||
158 | // 275, 257, 240, 224, 208, 192, 177, 163, 150, 136, 124, 112, | ||
159 | // 101, 90, 80, 70, 61, 53, 45, 38, 32, 26, 20, 16, | ||
160 | // 12, 8, 5, 3, 2, 1, 0, 1, 2, 3, 5, 8, | ||
161 | // 12, 16, 20, 26, 32, 38, 45, 53, 61, 70, 80, 90, | ||
162 | // 101, 112, 124, 136, 150, 163, 177, 192, 208, 224, 240, 257, | ||
163 | // 275, 293, 312, 331, 350, 371, 391, 413, 434, 457, 479, 503, | ||
164 | // 526, 550, 575, 600, 626, 651, 678, 705, 732, 759, 787, 816, | ||
165 | // 844, 873, 903, 933, 963, 993, 1024, 1055, 1086, 1118, 1150, 1182, | ||
166 | // 1215, 1248, 1281, 1314, 1347, 1381, 1415, 1449, 1483, 1518, 1552, 1587, | ||
167 | // 1622, 1657, 1692, 1727, 1763, 1798, 1834, 1869, 1905, 1940, 1976, 2012 | ||
168 | // }; | ||
169 | |||
170 | // squarewave | ||
171 | static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = { | ||
172 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
173 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
174 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
175 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
176 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
177 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
178 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
179 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
180 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
181 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
182 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
183 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
184 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
185 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
186 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
187 | |||
188 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
189 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
190 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
191 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
192 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
193 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
194 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
195 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
196 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
197 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
198 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
199 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
200 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
201 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
202 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | ||
203 | }; | ||
204 | |||
205 | // squarewave | ||
206 | static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = { | ||
207 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
208 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
209 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
210 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
211 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
212 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
213 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
214 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
215 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
216 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
217 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
218 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
219 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
220 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
221 | 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, | ||
222 | |||
223 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
224 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
225 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
226 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
227 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
228 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
229 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
230 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
231 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
232 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
233 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
234 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
235 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
236 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
237 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | ||
238 | }; | ||
239 | |||
240 | /* | ||
241 | * DAC streaming callback. | ||
242 | */ | ||
243 | size_t nx = 0, ny = 0, nz = 0; | ||
244 | static void end_cb1(DACDriver *dacp, dacsample_t *buffer, size_t n) { | ||
245 | |||
246 | (void)dacp; | ||
247 | |||
248 | nz++; | ||
249 | if (dac_buffer == buffer) { | ||
250 | nx += n; | ||
251 | } | ||
252 | else { | ||
253 | ny += n; | ||
254 | } | ||
255 | |||
256 | if ((nz % 1000) == 0) { | ||
257 | // palTogglePad(GPIOD, GPIOD_LED3); | ||
258 | } | ||
110 | } | 259 | } |
111 | 260 | ||
261 | /* | ||
262 | * DAC error callback. | ||
263 | */ | ||
264 | static void error_cb1(DACDriver *dacp, dacerror_t err) { | ||
265 | |||
266 | (void)dacp; | ||
267 | (void)err; | ||
112 | 268 | ||
113 | static void gpt_cb7(GPTDriver *gptp) { | 269 | chSysHalt("DAC failure"); |
114 | palTogglePad(GPIOA, 5); | ||
115 | } | 270 | } |
116 | 271 | ||
272 | static const DACConfig dac1cfg1 = { | ||
273 | .init = 2047U, | ||
274 | .datamode = DAC_DHRM_12BIT_RIGHT | ||
275 | }; | ||
276 | |||
277 | static const DACConversionGroup dacgrpcfg1 = { | ||
278 | .num_channels = 1U, | ||
279 | .end_cb = end_cb1, | ||
280 | .error_cb = error_cb1, | ||
281 | .trigger = DAC_TRG(0) | ||
282 | }; | ||
283 | |||
284 | static const DACConfig dac1cfg2 = { | ||
285 | .init = 2047U, | ||
286 | .datamode = DAC_DHRM_12BIT_RIGHT | ||
287 | }; | ||
288 | |||
289 | static const DACConversionGroup dacgrpcfg2 = { | ||
290 | .num_channels = 1U, | ||
291 | .end_cb = end_cb1, | ||
292 | .error_cb = error_cb1, | ||
293 | .trigger = DAC_TRG(0) | ||
294 | }; | ||
295 | |||
117 | void audio_init() | 296 | void audio_init() |
118 | { | 297 | { |
119 | 298 | ||
@@ -128,8 +307,30 @@ void audio_init() | |||
128 | // audio_config.raw = eeconfig_read_audio(); | 307 | // audio_config.raw = eeconfig_read_audio(); |
129 | audio_config.enable = true; | 308 | audio_config.enable = true; |
130 | 309 | ||
131 | palSetPadMode(GPIOA, 4, PAL_MODE_OUTPUT_PUSHPULL); | 310 | /* |
132 | palSetPadMode(GPIOA, 5, PAL_MODE_OUTPUT_PUSHPULL); | 311 | * Starting DAC1 driver, setting up the output pin as analog as suggested |
312 | * by the Reference Manual. | ||
313 | */ | ||
314 | palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG); | ||
315 | palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG); | ||
316 | dacStart(&DACD1, &dac1cfg1); | ||
317 | dacStart(&DACD2, &dac1cfg2); | ||
318 | |||
319 | /* | ||
320 | * Starting GPT6 driver, it is used for triggering the DAC. | ||
321 | */ | ||
322 | START_CHANNEL_1(); | ||
323 | START_CHANNEL_2(); | ||
324 | |||
325 | /* | ||
326 | * Starting a continuous conversion. | ||
327 | */ | ||
328 | dacStartConversion(&DACD1, &dacgrpcfg1, | ||
329 | (dacsample_t *)dac_buffer, DAC_BUFFER_SIZE); | ||
330 | dacStartConversion(&DACD2, &dacgrpcfg2, | ||
331 | (dacsample_t *)dac_buffer_2, DAC_BUFFER_SIZE); | ||
332 | // gptStartContinuous(&GPTD6, 2U); | ||
333 | |||
133 | 334 | ||
134 | audio_initialized = true; | 335 | audio_initialized = true; |
135 | 336 | ||
@@ -193,8 +394,8 @@ void stop_note(float freq) | |||
193 | voice_place = 0; | 394 | voice_place = 0; |
194 | } | 395 | } |
195 | if (voices == 0) { | 396 | if (voices == 0) { |
196 | gptStopTimer(&GPTD6); | 397 | STOP_CHANNEL_1(); |
197 | gptStopTimer(&GPTD7); | 398 | STOP_CHANNEL_2(); |
198 | gptStopTimer(&GPTD8); | 399 | gptStopTimer(&GPTD8); |
199 | frequency = 0; | 400 | frequency = 0; |
200 | frequency_alt = 0; | 401 | frequency_alt = 0; |
@@ -224,20 +425,6 @@ float vibrato(float average_freq) { | |||
224 | 425 | ||
225 | #endif | 426 | #endif |
226 | 427 | ||
227 | static void restart_gpt6(void) { | ||
228 | // gptStopTimer(&GPTD6); | ||
229 | |||
230 | gptStart(&GPTD6, &gpt6cfg1); | ||
231 | gptStartContinuous(&GPTD6, 2U); | ||
232 | } | ||
233 | |||
234 | static void restart_gpt7(void) { | ||
235 | // gptStopTimer(&GPTD7); | ||
236 | |||
237 | gptStart(&GPTD7, &gpt7cfg1); | ||
238 | gptStartContinuous(&GPTD7, 2U); | ||
239 | } | ||
240 | |||
241 | static void gpt_cb8(GPTDriver *gptp) { | 428 | static void gpt_cb8(GPTDriver *gptp) { |
242 | float freq; | 429 | float freq; |
243 | 430 | ||
@@ -280,13 +467,10 @@ static void gpt_cb8(GPTDriver *gptp) { | |||
280 | freq_alt = 30.52; | 467 | freq_alt = 30.52; |
281 | } | 468 | } |
282 | 469 | ||
283 | if (gpt6cfg1.frequency != (uint16_t)freq_alt) { | 470 | if (GET_CHANNEL_2_FREQ != (uint16_t)freq_alt) { |
284 | gpt6cfg1.frequency = freq_alt; | 471 | UPDATE_CHANNEL_2_FREQ(freq_alt); |
285 | restart_gpt6(); | ||
286 | } | 472 | } |
287 | //note_timbre; | 473 | //note_timbre; |
288 | } else { | ||
289 | // gptStopTimer(&GPTD6); | ||
290 | } | 474 | } |
291 | 475 | ||
292 | if (polyphony_rate > 0) { | 476 | if (polyphony_rate > 0) { |
@@ -342,13 +526,10 @@ static void gpt_cb8(GPTDriver *gptp) { | |||
342 | } | 526 | } |
343 | 527 | ||
344 | 528 | ||
345 | if (gpt7cfg1.frequency != (uint16_t)freq) { | 529 | if (GET_CHANNEL_1_FREQ != (uint16_t)freq) { |
346 | gpt7cfg1.frequency = freq; | 530 | UPDATE_CHANNEL_1_FREQ(freq); |
347 | restart_gpt7(); | ||
348 | } | 531 | } |
349 | //note_timbre; | 532 | //note_timbre; |
350 | } else { | ||
351 | // gptStopTimer(&GPTD7); | ||
352 | } | 533 | } |
353 | } | 534 | } |
354 | 535 | ||
@@ -370,11 +551,9 @@ static void gpt_cb8(GPTDriver *gptp) { | |||
370 | freq = voice_envelope(freq); | 551 | freq = voice_envelope(freq); |
371 | 552 | ||
372 | 553 | ||
373 | if (gpt6cfg1.frequency != (uint16_t)freq) { | 554 | if (GET_CHANNEL_1_FREQ != (uint16_t)freq) { |
374 | gpt6cfg1.frequency = freq; | 555 | UPDATE_CHANNEL_1_FREQ(freq); |
375 | restart_gpt6(); | 556 | UPDATE_CHANNEL_2_FREQ(freq); |
376 | gpt7cfg1.frequency = freq; | ||
377 | restart_gpt7(); | ||
378 | } | 557 | } |
379 | //note_timbre; | 558 | //note_timbre; |
380 | } else { | 559 | } else { |
@@ -384,8 +563,8 @@ static void gpt_cb8(GPTDriver *gptp) { | |||
384 | 563 | ||
385 | note_position++; | 564 | note_position++; |
386 | bool end_of_note = false; | 565 | bool end_of_note = false; |
387 | if (gpt6cfg1.frequency > 0) { | 566 | if (GET_CHANNEL_1_FREQ > 0) { |
388 | if (!note_resting) | 567 | if (!note_resting) |
389 | end_of_note = (note_position >= (note_length*16 - 1)); | 568 | end_of_note = (note_position >= (note_length*16 - 1)); |
390 | else | 569 | else |
391 | end_of_note = (note_position >= (note_length*16)); | 570 | end_of_note = (note_position >= (note_length*16)); |
@@ -399,8 +578,8 @@ static void gpt_cb8(GPTDriver *gptp) { | |||
399 | if (notes_repeat) { | 578 | if (notes_repeat) { |
400 | current_note = 0; | 579 | current_note = 0; |
401 | } else { | 580 | } else { |
402 | gptStopTimer(&GPTD6); | 581 | STOP_CHANNEL_1(); |
403 | gptStopTimer(&GPTD7); | 582 | STOP_CHANNEL_2(); |
404 | // gptStopTimer(&GPTD8); | 583 | // gptStopTimer(&GPTD8); |
405 | playing_notes = false; | 584 | playing_notes = false; |
406 | return; | 585 | return; |
@@ -459,7 +638,8 @@ void play_note(float freq, int vol) { | |||
459 | 638 | ||
460 | gptStart(&GPTD8, &gpt8cfg1); | 639 | gptStart(&GPTD8, &gpt8cfg1); |
461 | gptStartContinuous(&GPTD8, 2U); | 640 | gptStartContinuous(&GPTD8, 2U); |
462 | 641 | RESTART_CHANNEL_1(); | |
642 | RESTART_CHANNEL_2(); | ||
463 | } | 643 | } |
464 | 644 | ||
465 | } | 645 | } |
@@ -492,8 +672,8 @@ void play_notes(float (*np)[][2], uint16_t n_count, bool n_repeat) | |||
492 | 672 | ||
493 | gptStart(&GPTD8, &gpt8cfg1); | 673 | gptStart(&GPTD8, &gpt8cfg1); |
494 | gptStartContinuous(&GPTD8, 2U); | 674 | gptStartContinuous(&GPTD8, 2U); |
495 | restart_gpt6(); | 675 | RESTART_CHANNEL_1(); |
496 | restart_gpt7(); | 676 | RESTART_CHANNEL_2(); |
497 | } | 677 | } |
498 | 678 | ||
499 | } | 679 | } |