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();