3#include "AudioToolsConfig.h"
4#if defined(USE_PWM) && defined(__AVR__)
5#include "AudioTools/CoreAudio/AudioPWM/PWMDriverBase.h"
6#include "AudioTools/CoreAudio/AudioTimer/AudioTimerAVR.h"
29 accessAudioPWM =
this;
32 virtual int maxChannels() {
return 2; };
44 is_timer_started =
false;
55 LOGE(
"requested sample rate not supported: %d - we use %d",
59 LOGD(
"compare match register set to %d", steps);
67 TCCR1B |= (1 << WGM12);
69 TCCR1B |= (1 << CS11);
70 TIMSK1 |= (1 << OCIE1A);
80 LOGW(
"Max 2 channels supported - you requested %d",
85 for (
int j = 0; j < audio_config.
channels; j++) {
86 LOGD(
"Processing channel %d", j);
96 void setupPin(
int pin) {
101 TCCR2B = TCCR2B & B11111000 | B00000001;
102 LOGI(
"PWM Frequency changed for D3 and D11");
106 LOGE(
"PWM Unsupported pin: %d", pin);
109 pinMode(pin, OUTPUT);
112 virtual void pwmWrite(
int channel,
int value) {
113 analogWrite(pins[channel], value);
117 audio_config.logConfig();
118 LOGI(
"pwm freq: %f khz", 62.5);
120 LOGI(
"output pin: %d", pins[0]);
122 LOGI(
"output pins: %d / %d", pins[0], pins[1]);
127 int pins[2] = {3, 11};
129 virtual int maxOutputValue() {
return 255; }
135 if (accessAudioPWM !=
nullptr && accessAudioPWM->is_timer_started) {
143 TimerAlarmRepeatingDriverAVR::tickerCallback();