|
|
@ -89,8 +89,8 @@ static void gpt_cb8(GPTDriver *gptp);
|
|
|
|
#define STOP_CHANNEL_2() gptStopTimer(&GPTD7)
|
|
|
|
#define STOP_CHANNEL_2() gptStopTimer(&GPTD7)
|
|
|
|
#define RESTART_CHANNEL_1() STOP_CHANNEL_1(); \
|
|
|
|
#define RESTART_CHANNEL_1() STOP_CHANNEL_1(); \
|
|
|
|
START_CHANNEL_1()
|
|
|
|
START_CHANNEL_1()
|
|
|
|
#define RESTART_CHANNEL_2() STOP_CHANNEL_1(); \
|
|
|
|
#define RESTART_CHANNEL_2() STOP_CHANNEL_2(); \
|
|
|
|
START_CHANNEL_1()
|
|
|
|
START_CHANNEL_2()
|
|
|
|
#define UPDATE_CHANNEL_1_FREQ(freq) gpt6cfg1.frequency = freq * DAC_BUFFER_SIZE; \
|
|
|
|
#define UPDATE_CHANNEL_1_FREQ(freq) gpt6cfg1.frequency = freq * DAC_BUFFER_SIZE; \
|
|
|
|
RESTART_CHANNEL_1()
|
|
|
|
RESTART_CHANNEL_1()
|
|
|
|
#define UPDATE_CHANNEL_2_FREQ(freq) gpt7cfg1.frequency = freq * DAC_BUFFER_SIZE; \
|
|
|
|
#define UPDATE_CHANNEL_2_FREQ(freq) gpt7cfg1.frequency = freq * DAC_BUFFER_SIZE; \
|
|
|
@ -202,6 +202,41 @@ static const dacsample_t dac_buffer[DAC_BUFFER_SIZE] = {
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// squarewave
|
|
|
|
|
|
|
|
static const dacsample_t dac_buffer_2[DAC_BUFFER_SIZE] = {
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047, 2047,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
|
|
|
|
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* DAC streaming callback.
|
|
|
|
* DAC streaming callback.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
@ -246,6 +281,18 @@ static const DACConversionGroup dacgrpcfg1 = {
|
|
|
|
.trigger = DAC_TRG(0)
|
|
|
|
.trigger = DAC_TRG(0)
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static const DACConfig dac1cfg2 = {
|
|
|
|
|
|
|
|
.init = 2047U,
|
|
|
|
|
|
|
|
.datamode = DAC_DHRM_12BIT_RIGHT
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static const DACConversionGroup dacgrpcfg2 = {
|
|
|
|
|
|
|
|
.num_channels = 1U,
|
|
|
|
|
|
|
|
.end_cb = end_cb1,
|
|
|
|
|
|
|
|
.error_cb = error_cb1,
|
|
|
|
|
|
|
|
.trigger = DAC_TRG(0)
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
void audio_init()
|
|
|
|
void audio_init()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
@ -267,6 +314,7 @@ void audio_init()
|
|
|
|
palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
|
|
|
|
palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
|
|
|
|
palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
|
|
|
|
palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
|
|
|
|
dacStart(&DACD1, &dac1cfg1);
|
|
|
|
dacStart(&DACD1, &dac1cfg1);
|
|
|
|
|
|
|
|
dacStart(&DACD2, &dac1cfg2);
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
/*
|
|
|
|
* Starting GPT6 driver, it is used for triggering the DAC.
|
|
|
|
* Starting GPT6 driver, it is used for triggering the DAC.
|
|
|
@ -279,6 +327,8 @@ void audio_init()
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
dacStartConversion(&DACD1, &dacgrpcfg1,
|
|
|
|
dacStartConversion(&DACD1, &dacgrpcfg1,
|
|
|
|
(dacsample_t *)dac_buffer, DAC_BUFFER_SIZE);
|
|
|
|
(dacsample_t *)dac_buffer, DAC_BUFFER_SIZE);
|
|
|
|
|
|
|
|
dacStartConversion(&DACD2, &dacgrpcfg2,
|
|
|
|
|
|
|
|
(dacsample_t *)dac_buffer_2, DAC_BUFFER_SIZE);
|
|
|
|
// gptStartContinuous(&GPTD6, 2U);
|
|
|
|
// gptStartContinuous(&GPTD6, 2U);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -417,12 +467,10 @@ static void gpt_cb8(GPTDriver *gptp) {
|
|
|
|
freq_alt = 30.52;
|
|
|
|
freq_alt = 30.52;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (GET_CHANNEL_1_FREQ != (uint16_t)freq_alt) {
|
|
|
|
if (GET_CHANNEL_2_FREQ != (uint16_t)freq_alt) {
|
|
|
|
UPDATE_CHANNEL_1_FREQ(freq_alt);
|
|
|
|
UPDATE_CHANNEL_2_FREQ(freq_alt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//note_timbre;
|
|
|
|
//note_timbre;
|
|
|
|
} else {
|
|
|
|
|
|
|
|
STOP_CHANNEL_1();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (polyphony_rate > 0) {
|
|
|
|
if (polyphony_rate > 0) {
|
|
|
@ -478,12 +526,10 @@ static void gpt_cb8(GPTDriver *gptp) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (GET_CHANNEL_2_FREQ != (uint16_t)freq) {
|
|
|
|
if (GET_CHANNEL_1_FREQ != (uint16_t)freq) {
|
|
|
|
UPDATE_CHANNEL_2_FREQ(freq);
|
|
|
|
UPDATE_CHANNEL_1_FREQ(freq);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//note_timbre;
|
|
|
|
//note_timbre;
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// gptStopTimer(&GPTD7);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -592,7 +638,8 @@ void play_note(float freq, int vol) {
|
|
|
|
|
|
|
|
|
|
|
|
gptStart(&GPTD8, &gpt8cfg1);
|
|
|
|
gptStart(&GPTD8, &gpt8cfg1);
|
|
|
|
gptStartContinuous(&GPTD8, 2U);
|
|
|
|
gptStartContinuous(&GPTD8, 2U);
|
|
|
|
|
|
|
|
RESTART_CHANNEL_1();
|
|
|
|
|
|
|
|
RESTART_CHANNEL_2();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|