13 #include "HardwareTimer.h" 16 #define MOZZI_FAST_ANALOG_IMPLEMENTED 19 uint8_t stm32_current_adc_pin;
20 #define getADCReading() adc.getData() 21 #define channelNumToIndex(channel) STM32PinMap(channel) 22 uint8_t adcPinToChannelNum(uint8_t pin) {
26 void adcStartConversion(uint8_t channel) {
27 stm32_current_adc_pin = channel;
28 adc.setPins(&stm32_current_adc_pin, 1);
29 adc.startConversion();
32 static void startSecondADCReadOnCurrentChannel() {
33 adc.setPins(&stm32_current_adc_pin, 1);
34 adc.startConversion();
37 void stm32_adc_eoc_handler() {
43 if (speed == FASTEST_ADC) adc.setSampleRate(ADC_SMPR_1_5);
44 else if (speed == FASTER_ADC) adc.setSampleRate(ADC_SMPR_13_5);
45 else (adc.setSampleRate(ADC_SMPR_41_5));
48 void setupMozziADC(int8_t speed) {
49 adc.attachInterrupt(stm32_adc_eoc_handler);
53 inline uint8_t STM32PinMap(uint8_t pin)
55 if (pin > 15)
return pin-8;
64 #if (EXTERNAL_AUDIO_OUTPUT == true) 65 HardwareTimer audio_update_timer(2);
67 HardwareTimer audio_update_timer(AUDIO_UPDATE_TIMER);
68 HardwareTimer audio_pwm_timer(AUDIO_PWM_TIMER);
70 #include "AudioConfigSTM32.h" 71 inline void audioOutput(
const AudioOutput f) {
72 # if (AUDIO_MODE == HIFI) 76 pwmWrite(AUDIO_CHANNEL_1_PIN, f.l()+AUDIO_BIAS);
77 # if (AUDIO_CHANNELS > 1
) 78 pwmWrite(AUDIO_CHANNEL_2_PIN, f.r()+AUDIO_BIAS);
84 static void startAudio() {
85 audio_update_timer.pause();
88 uint32_t period_cyc = F_CPU / AUDIO_RATE;
89 uint16_t prescaler = (uint16_t)(period_cyc / 65535 + 1);
90 uint16_t overflow = (uint16_t)((period_cyc + (prescaler / 2)) / prescaler);
91 audio_update_timer.setPrescaleFactor(prescaler);
92 audio_update_timer.setOverflow(overflow);
93 audio_update_timer.setChannel1Mode(TIMER_OUTPUT_COMPARE);
94 audio_update_timer.setCompare(TIMER_CH1,
96 audio_update_timer.attachCompare1Interrupt(defaultAudioOutput);
97 audio_update_timer.refresh();
98 audio_update_timer.resume();
100 #if (EXTERNAL_AUDIO_OUTPUT != true) 102 # if (AUDIO_MODE == HIFI) 104 # elif (AUDIO_CHANNELS > 1
) 105 pinMode(AUDIO_CHANNEL_2_PIN, PWM);
109 # if MAX_CARRIER_FREQ
< AUDIO_RATE 110 # error Configured audio resolution is definitely too high at the configured audio rate (and the given CPU speed) 111 # elif MAX_CARRIER_FREQ
< (AUDIO_RATE * 3
) 112 # warning Configured audio resolution may be higher than optimal at the configured audio rate (and the given CPU speed) 115 # if MAX_CARRIER_FREQ
< (AUDIO_RATE * 5
) 117 audio_pwm_timer.setPrescaleFactor(1);
122 audio_pwm_timer.setPrescaleFactor((
int)MAX_CARRIER_FREQ / (AUDIO_RATE * 5));
124 audio_pwm_timer.setOverflow(
131 audio_update_timer.pause();
void stopMozzi()
Stops audio and control interrupts and restores the timers to the values they had before Mozzi was st...
#define AUDIO_BITS_PER_CHANNEL
#define AUDIO_CHANNEL_1_PIN
#define AUDIO_CHANNEL_1_PIN_HIGH
void setupFastAnalogRead(int8_t speed)
NOTE: Code needed to set up faster than usual analog reads, e.g.