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