Program Listing for File dm_fx_codec.cpp

Return to documentation for file (src/dm_fx_codec.cpp)

// Copyright (c) 2020 Run Jump Labs LLC.  All right reserved.
// This code is licensed under MIT license (see license.txt for details)

#include "dreammakerfx.h"
#include "dm_fx_codec.h"

#ifndef DOXYGEN_SHOULD_SKIP_THIS

void  wm8731_write_register(uint8_t addr, uint8_t val) {
  Wire2.beginTransmission(0x1a);
  Wire2.write(addr);
  Wire2.write(val);
  Wire2.endTransmission();
}

void wm8731_initialize(void) {
  Wire2.begin();
  wm8731_write_register(WM8731_RF_RESET_CTRL, 0x0);
  wm8731_write_register(WM8731_R6_PWR_DOWN_CTRL, 0x0);             // turn everything on
  wm8731_write_register(WM8731_R0_LEFT_LINE_CTRL,     B00010111);  // configure L ADC gain
  wm8731_write_register(WM8731_R1_RIGHT_LINE_CTRL,    B00010111);  // configure R ADC input gain
  wm8731_write_register(WM8731_R2_LEFT_HP_CTRL, 0);                // disable headphones
  wm8731_write_register(WM8731_R3_RIGHT_HP_CTRL, 0);               // disable headphones
  wm8731_write_register(WM8731_R4_ANALOG_PATH_CTRL,   B00010010);  // send DAC outputs to lineout
  wm8731_write_register(WM8731_R5_DIGITAL_PATH_CTRL,  B00000110);  // 48kHz deemphasis, disable soft mute on dac
  wm8731_write_register(WM8731_R7_DIGITAL_IFACE_CTRL, B01001110);  // 32-bit I2S data / I2S master
  wm8731_write_register(WM8731_R8_SAMPLING_CTRL, 0);               // 48kHz / 256FS
  wm8731_write_register(WM8731_R9_ACTIVE_CTRL, 1);                 // Start codec
}





void  adau1761_write_register(uint16_t addr, uint8_t val) {
  Wire2.beginTransmission(0x38);
  Wire2.write(addr);
  Wire2.write(val);
  Wire2.endTransmission();
}



const uint8_t adau1761_tx_buffer[] = {
0x40, 0xEB,             /* (0) ADAU1761.Sample Rate Setting */
0x7F,
0x40, 0xF6,             /* (1) ADAU1761.DSP Run Register */
0x00,
0x40, 0x00,             /* (2) ADAU1761.Clock Control Register */
0x03,
0x40, 0x02,             /* (3) ADAU1761.PLL Control Register */
0x00, 0x01, 0x00, 0x00, 0x20,
0x01,
0x00, 0x00,             /* (4) ADAU1761.Delay */
0x00, 0x64,
0x40, 0x15,             /* (5) ADAU1761.Serial Port Control Registers */
0x01, 0x00,
0x40, 0x11,             /* (6) ADAU1761.ALC Control Registers */
0x00, 0x00, 0x00, 0x00,
0x40, 0x08,             /* (7) ADAU1761.Microphone Control Register */
0x00,
0x40, 0x09,             /* (8) ADAU1761.Record Input Signal Path Registers */
0x00, 0x71, 0x00, 0x71, 0x00,
0x40, 0x40, 0x00,
0x40, 0x19,             /* (9) ADAU1761.ADC Control Registers */
0x13, 0x00, 0x00,
0x40, 0x1C,             /* (10) ADAU1761.Playback Output Signal Path Registers */
0x21, 0x00, 0x41, 0x00, 0x03,
0x09, 0x00, 0xE6, 0xE7, 0xE6,
0xE6, 0xE6, 0x08, 0x03,
0x40, 0x17,             /* (11) ADAU1761.Converter Control Registers */
0x00, 0x00,
0x40, 0x2A,             /* (12) ADAU1761.DAC Control Registers */
0x03, 0x00, 0x00,
0x40, 0x2D,             /* (13) ADAU1761.Serial Port Pad Control Registers */
0xAA,
0x40, 0x2F,             /* (14) ADAU1761.Communication Port Pad Control Registers */
0xA0, 0x00,
0x40, 0x31,             /* (15) ADAU1761.Jack Detect Pad Control Register */
0x08,
0x40, 0xF5,             /* (16) ADAU1761.DSP ON Register */
0x01,
0x40, 0xC0,             /* (17) ADAU1761.CRC Registers */
0x7F, 0x20, 0x00, 0x7F, 0x00,
0x40, 0xC6,             /* (18) ADAU1761.GPIO Registers */
0x00, 0x00, 0x00, 0x00,
0x40, 0xE9,             /* (19) ADAU1761.Non Modulo Registers */
0x10, 0x00,
0x40, 0xD0,             /* (20) ADAU1761.Watchdog Registers */
0x00, 0x04, 0x00, 0x00, 0x00,
0x40, 0xEB,             /* (21) ADAU1761.Sampling Rate Setting Register */
0x7F,
0x40, 0xF2,             /* (22) ADAU1761.Routing Matrix Inputs Register */
0x00,
0x40, 0xF3,             /* (23) ADAU1761.Routing Matrix Outputs Register */
0x00,
0x40, 0xF4,             /* (24) ADAU1761.Serial Data Configuration Register */
0x00,
0x40, 0xF7,             /* (25) ADAU1761.DSP Slew Mode Register */
0x00,
0x40, 0xF8,             /* (26) ADAU1761.Serial Port Sample Rate Register */
0x00,
0x40, 0xF9,             /* (27) ADAU1761.Clock Enable Registers */
0x7F, 0x03,
0x08, 0x00,             /* (28) Program Data */
0x00, 0x00, 0x00, 0x00, 0x00,
0xFE, 0xE0, 0x00, 0x00, 0x00,
0xFF, 0x34, 0x00, 0x00, 0x00,
0xFF, 0x2C, 0x00, 0x00, 0x00,
0xFF, 0x54, 0x00, 0x00, 0x00,
0xFF, 0x5C, 0x00, 0x00, 0x00,
0xFF, 0xF5, 0x08, 0x20, 0x00,
0xFF, 0x38, 0x00, 0x00, 0x00,
0xFF, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0xFE, 0xE8, 0x0C, 0x00, 0x00,
0xFE, 0x30, 0x00, 0xE2, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xE8, 0x07, 0x20, 0x08,
0x00, 0x00, 0x06, 0xA0, 0x00,
0xFF, 0xE0, 0x00, 0xC0, 0x00,
0xFF, 0x80, 0x07, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00,
0xFE, 0xC0, 0x22, 0x00, 0x27,
0x00, 0x00, 0x00, 0x00, 0x00,
0xFE, 0xE8, 0x1E, 0x00, 0x00,
0xFF, 0xE8, 0x01, 0x20, 0x00,
0xFF, 0xD8, 0x01, 0x03, 0x00,
0x00, 0x07, 0xC6, 0x00, 0x00,
0xFF, 0x08, 0x00, 0x00, 0x00,
0xFF, 0xF4, 0x00, 0x20, 0x00,
0xFF, 0xD8, 0x07, 0x02, 0x00,
0xFD, 0xA5, 0x08, 0x20, 0x00,
0x00, 0x18, 0x00, 0xE2, 0x00,
0xFD, 0xAD, 0x08, 0x20, 0x00,
0x00, 0x50, 0x00, 0xE2, 0x00,
0xFD, 0x25, 0x08, 0x20, 0x00,
0x00, 0x00, 0x00, 0xE2, 0x00,
0xFD, 0x2D, 0x08, 0x20, 0x00,
0x00, 0x08, 0x00, 0xE2, 0x00,
0x00, 0x30, 0x08, 0x20, 0x00,
0x00, 0x20, 0x08, 0x34, 0x00,
0x00, 0x15, 0x08, 0x22, 0x40,
0x00, 0x1D, 0x08, 0x22, 0x00,
0x00, 0x28, 0x00, 0xE2, 0x00,
0x00, 0x38, 0x00, 0xF2, 0x00,
0x00, 0x68, 0x09, 0x20, 0x00,
0x00, 0x58, 0x09, 0x34, 0x00,
0x00, 0x4D, 0x08, 0x22, 0x40,
0x00, 0x55, 0x08, 0x22, 0x00,
0x00, 0x60, 0x00, 0xE2, 0x00,
0x00, 0x70, 0x00, 0xF2, 0x00,
0x00, 0xA5, 0x08, 0x20, 0x00,
0xFF, 0xE8, 0x0B, 0x34, 0x00,
0x00, 0x95, 0x08, 0x22, 0x48,
0x00, 0xA0, 0x0A, 0x20, 0x40,
0x00, 0x90, 0x0A, 0x34, 0x40,
0x00, 0xA0, 0x0A, 0x20, 0x25,
0x00, 0x90, 0x0A, 0x34, 0x25,
0x00, 0xB8, 0x00, 0xE2, 0x00,
0x00, 0xB0, 0x00, 0xF2, 0x00,
0x00, 0xA5, 0x08, 0x20, 0x00,
0x00, 0xB5, 0x08, 0x22, 0x00,
0x00, 0x95, 0x08, 0x34, 0x00,
0x00, 0xBD, 0x08, 0x22, 0x00,
0x00, 0x98, 0x00, 0xE2, 0x00,
0x00, 0xA8, 0x00, 0xF2, 0x00,
0x00, 0x9D, 0x08, 0x20, 0x08,
0xFF, 0xED, 0x1F, 0x20, 0x00,
0x00, 0x9D, 0x08, 0x20, 0x25,
0x00, 0x98, 0x00, 0xE2, 0x00,
0xFF, 0xED, 0x1F, 0x22, 0x40,
0x00, 0xC8, 0x00, 0xE2, 0x00,
0x00, 0x9D, 0x08, 0x20, 0x00,
0xFF, 0xE8, 0x0B, 0x22, 0x40,
0x00, 0x98, 0x0A, 0x30, 0x48,
0x00, 0xCD, 0x08, 0x20, 0x00,
0xFF, 0xE8, 0x0B, 0x20, 0x27,
0x00, 0xC8, 0x00, 0xE2, 0x00,
0x00, 0xC8, 0x00, 0xC0, 0x00,
0x00, 0x07, 0xFF, 0x20, 0x00,
0x00, 0x80, 0x00, 0xE2, 0x00,
0x00, 0x0F, 0xFF, 0x20, 0x00,
0x00, 0x88, 0x00, 0xE2, 0x00,
0x00, 0x85, 0x08, 0x20, 0x00,
0xFD, 0xB0, 0x00, 0xE2, 0x00,
0x00, 0x8D, 0x08, 0x20, 0x00,
0xFD, 0xB8, 0x00, 0xE2, 0x00,
0x00, 0xF5, 0x08, 0x20, 0x00,
0xFF, 0xE8, 0x0D, 0x34, 0x00,
0x00, 0xE5, 0x08, 0x22, 0x48,
0x00, 0xF0, 0x0C, 0x20, 0x40,
0x00, 0xE0, 0x0C, 0x34, 0x40,
0x00, 0xF0, 0x0C, 0x20, 0x25,
0x00, 0xE0, 0x0C, 0x34, 0x25,
0x01, 0x08, 0x00, 0xE2, 0x00,
0x01, 0x00, 0x00, 0xF2, 0x00,
0x00, 0xF5, 0x08, 0x20, 0x00,
0x01, 0x05, 0x08, 0x22, 0x00,
0x00, 0xE5, 0x08, 0x34, 0x00,
0x01, 0x0D, 0x08, 0x22, 0x00,
0x00, 0xE8, 0x00, 0xE2, 0x00,
0x00, 0xF8, 0x00, 0xF2, 0x00,
0x00, 0xED, 0x08, 0x20, 0x08,
0xFF, 0xED, 0x1F, 0x20, 0x00,
0x00, 0xED, 0x08, 0x20, 0x25,
0x00, 0xE8, 0x00, 0xE2, 0x00,
0xFF, 0xED, 0x1F, 0x22, 0x40,
0x01, 0x18, 0x00, 0xE2, 0x00,
0x00, 0xED, 0x08, 0x20, 0x00,
0xFF, 0xE8, 0x0D, 0x22, 0x40,
0x00, 0xE8, 0x0C, 0x30, 0x48,
0x01, 0x1D, 0x08, 0x20, 0x00,
0xFF, 0xE8, 0x0D, 0x20, 0x27,
0x01, 0x18, 0x00, 0xE2, 0x00,
0x01, 0x18, 0x00, 0xC0, 0x00,
0x00, 0x2F, 0xFF, 0x20, 0x00,
0x00, 0xD0, 0x00, 0xE2, 0x00,
0x00, 0x67, 0xFF, 0x20, 0x00,
0x00, 0xD8, 0x00, 0xE2, 0x00,
0x00, 0x60, 0x00, 0xC0, 0x00,
0x00, 0x65, 0x08, 0x20, 0x00,
0x01, 0x50, 0x00, 0xE2, 0x00,
0xFF, 0xD8, 0x13, 0x02, 0x00,
0xFF, 0xD8, 0x14, 0x12, 0x00,
0x00, 0x67, 0xFF, 0x20, 0x00,
0x01, 0x40, 0x00, 0xE2, 0x00,
0x01, 0x48, 0x00, 0xF2, 0x00,
0x01, 0x35, 0x08, 0x20, 0x00,
0x01, 0x30, 0x0E, 0x22, 0x40,
0x01, 0x48, 0x0E, 0x22, 0x00,
0x01, 0x25, 0x08, 0x34, 0x00,
0x01, 0x20, 0x0E, 0x22, 0x40,
0x01, 0x40, 0x0E, 0x22, 0x00,
0x01, 0x28, 0x00, 0xE2, 0x00,
0x01, 0x38, 0x00, 0xF2, 0x00,
0xFF, 0xD8, 0x11, 0x02, 0x00,
0xFF, 0xD8, 0x12, 0x12, 0x00,
0x00, 0x28, 0x00, 0xC0, 0x00,
0x00, 0x2D, 0x08, 0x20, 0x00,
0x01, 0x78, 0x00, 0xE2, 0x00,
0xFF, 0xD8, 0x1A, 0x02, 0x00,
0xFF, 0xD8, 0x1B, 0x12, 0x00,
0x00, 0x2F, 0xFF, 0x20, 0x00,
0x01, 0x40, 0x00, 0xE2, 0x00,
0x01, 0x48, 0x00, 0xF2, 0x00,
0x01, 0x6D, 0x08, 0x20, 0x00,
0x01, 0x68, 0x15, 0x22, 0x40,
0x01, 0x48, 0x15, 0x22, 0x00,
0x01, 0x5D, 0x08, 0x34, 0x00,
0x01, 0x58, 0x15, 0x22, 0x40,
0x01, 0x40, 0x15, 0x22, 0x00,
0x01, 0x60, 0x00, 0xE2, 0x00,
0x01, 0x70, 0x00, 0xF2, 0x00,
0xFF, 0xD8, 0x18, 0x02, 0x00,
0xFF, 0xD8, 0x19, 0x12, 0x00,
0x00, 0xD5, 0x08, 0x20, 0x00,
0xFD, 0x60, 0x00, 0xE2, 0x00,
0x00, 0xDD, 0x08, 0x20, 0x00,
0xFD, 0x68, 0x00, 0xE2, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0xFE, 0x30, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0xFE, 0xC0, 0x0F, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,             /* (29) Param */
0x00, 0x00, 0x10, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x7F, 0xFC, 0xB9,
0x00, 0x7F, 0xFC, 0xB9,
0x00, 0x00, 0x10, 0x00,
0x00, 0x80, 0x00, 0x00,
0x00, 0x00, 0x10, 0x00,
0x00, 0x80, 0x00, 0x00,
0x00, 0x00, 0x4E, 0xB0,
0x00, 0x00, 0x01, 0xE0,
0x00, 0x00, 0x07, 0x1C,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x4E, 0xB0,
0x00, 0x00, 0x01, 0xE0,
0x00, 0x00, 0x07, 0x1C,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x40, 0xEB,             /* (30) ADAU1761.Sample Rate Setting */
0x01,
0x40, 0xF6,             /* (31) ADAU1761.DSP Run Register */
0x01,
0x40, 0x36,             /* (32) ADAU1761.Dejitter Register Control */
0x00,
0x40, 0x36,             /* (33) ADAU1761.Dejitter Register Control */
0x03,
};

const uint16_t adau1761_num_bytes[] = {
3,
3,
3,
8,
4,
4,
6,
3,
10,
5,
16,
4,
5,
3,
4,
3,
3,
7,
6,
4,
7,
3,
3,
3,
3,
3,
3,
4,
837,
114,
3,
3,
3,
3,
};

void adau1761_initialize(void) {

  Wire2.begin();

  uint8_t * init_ptr = (uint8_t *) adau1761_tx_buffer;

  for (int row=0;row<sizeof(adau1761_num_bytes)/sizeof(uint16_t);row++) {
    uint16_t size = adau1761_num_bytes[row];
    Wire2.beginTransmission(0x38);
    for (int i=0;i<size;i++) {
      Wire2.write(*init_ptr++);
    }
    uint8_t res = Wire2.endTransmission();

    delay(10);
  }

}

#endif