diff options
| author | Jack Humbert <jack.humb@gmail.com> | 2018-02-08 14:39:40 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-02-08 14:39:40 -0500 |
| commit | 63c16f4b632a2a82a775f51a3ad0cc690cca1fc9 (patch) | |
| tree | 30ae1807a3eb509a341b2cc5f5eaee0c0437d374 | |
| parent | 7d79412f9989d71e9c0514958bc39d1cc1649521 (diff) | |
| download | qmk_firmware-63c16f4b632a2a82a775f51a3ad0cc690cca1fc9.tar.gz qmk_firmware-63c16f4b632a2a82a775f51a3ad0cc690cca1fc9.zip | |
ARM audio fixes, stack size increase (#2365)
* fix up arm audio implementation
* chibios stack size inc
* get one channel working
* update for chibios
| -rw-r--r-- | quantum/audio/audio_arm.c | 280 | ||||
| -rw-r--r-- | tmk_core/chibios.mk | 2 |
2 files changed, 231 insertions, 51 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 | } |
diff --git a/tmk_core/chibios.mk b/tmk_core/chibios.mk index df9fa8498..1cd0146fe 100644 --- a/tmk_core/chibios.mk +++ b/tmk_core/chibios.mk | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | # Stack size to be allocated to the Cortex-M process stack. This stack is | 6 | # Stack size to be allocated to the Cortex-M process stack. This stack is |
| 7 | # the stack used by the main() thread. | 7 | # the stack used by the main() thread. |
| 8 | ifeq ($(USE_PROCESS_STACKSIZE),) | 8 | ifeq ($(USE_PROCESS_STACKSIZE),) |
| 9 | USE_PROCESS_STACKSIZE = 0x200 | 9 | USE_PROCESS_STACKSIZE = 0x800 |
| 10 | endif | 10 | endif |
| 11 | 11 | ||
| 12 | # Stack size to the allocated to the Cortex-M main/exceptions stack. This | 12 | # Stack size to the allocated to the Cortex-M main/exceptions stack. This |
