From c1ca96793c927c173a29eba565f1c35024264c9c Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 1 Jun 2025 02:33:01 +0200 Subject: [PATCH] feierabend --- soundcube-i2s-test/codec.h | 141 ++++++++++++---------- soundcube-i2s-test/soundcube-i2s-test.ino | 47 ++------ 2 files changed, 87 insertions(+), 101 deletions(-) diff --git a/soundcube-i2s-test/codec.h b/soundcube-i2s-test/codec.h index 8b67957..1518f67 100644 --- a/soundcube-i2s-test/codec.h +++ b/soundcube-i2s-test/codec.h @@ -1,69 +1,86 @@ -#include #pragma once - +#include #include +#ifndef DEBUG +#define DEBUG false +#endif + struct CodecSettings{ - public: + CodecSettings(uint8_t i2c_address, TwoWire *wire) : wire(wire), i2cAddress(i2c_address) {} + TwoWire *wire; - virtual void get() = 0; + uint8_t i2cAddress = 0x18; + uint8_t page; + uint8_t reg; + uint8_t len; - void write(){ - selectPage(page); - cw(reg, get()); - } + virtual uint8_t get() = 0; - void selectPage(int page){ - cw(0x00, page); - } + void write(){ + selectPage(page); + cw(reg, get()); + } - void cw(unsigned char first, unsigned char second){ - Wire1.beginTransmission(i2c_address); - Wire1.write(first); - Wire1.write(second); - int result = Wire1.endTransmission(); - if(debug){ - Serial.print(i2c_address, HEX); - Serial.print(" "); - Serial.print(first, HEX); - Serial.print(" "); - Serial.print(second, HEX); - Serial.print(" : "); - if(result == 0) { - Serial.println("OK"); - } else { - Serial.print("ERROR: "); - Serial.println(result); - } - } - delay(5); - } + void read(uint8_t result[]){ + selectPage(page); + cr(reg, result, len); + } - void cr(unsigned char first, uint8_t &result, size_t len){ - Wire1.beginTransmission(i2c_address); - Wire1.write(first); // set register for read - Wire1.endTransmission(false); // false to not release the line + void selectPage(int page){ + cw(0x00, page); + } - Wire1.requestFrom(i2c_address, len, true); - - Wire1.readBytes(result, len); - - if(debug){ - Serial.print(first, HEX); - Serial.print(" "); - - for (int i = 0; i < len; i++) { - Serial.print(result[i], HEX); - Serial.print(" "); - Serial.println(result[i], BIN); - } + void cw(unsigned char first, unsigned char second){ + Wire1.beginTransmission(i2cAddress); + Wire1.write(first); + Wire1.write(second); + int result = Wire1.endTransmission(); + if(DEBUG){ + Serial.print(i2cAddress, HEX); + Serial.print(" "); + Serial.print(first, HEX); + Serial.print(" "); + Serial.print(second, HEX); + Serial.print(" : "); + if(result == 0) { + Serial.println("OK"); + } else { + Serial.print("ERROR: "); + Serial.println(result); } } + delay(5); + } + + void cr(unsigned char first, uint8_t result[], size_t len){ + Wire1.beginTransmission(i2cAddress); + Wire1.write(first); // set register for read + Wire1.endTransmission(false); // false to not release the line + + Wire1.requestFrom(i2cAddress, len, true); + + Wire1.readBytes(result, len); + + if(DEBUG){ + Serial.print(first, HEX); + Serial.print(" "); + + for (int i = 0; i < len; i++) { + Serial.print(result[i], HEX); + Serial.print(" "); + Serial.println(result[i], BIN); + } + } + } }; struct ClockSettings1 : public CodecSettings{ + ClockSettings1(uint8_t i2c_address, TwoWire *wire) : CodecSettings(i2c_address, wire) {} + uint8_t page = 0x00; uint8_t reg = 0x04; + uint8_t len = 1; enum PLLRange{ PLL_HIGH = 0b01000000, @@ -96,25 +113,30 @@ struct ClockSettings1 : public CodecSettings{ class TLV320AIC3204_Settings{ public: + TwoWire *wire; + uint8_t i2cAddress = 0x18; - static ClockSettings1 clock_settings_1; + ClockSettings1 clock_settings_1 = ClockSettings1(i2cAddress, wire); }; class TLV320AIC3204{ public: - TLV320AIC3204(){i2c = &Wire} - TLV320AIC3204(TwoWire &wire) : i2c(&wire) {} + TLV320AIC3204(){settings.wire = &Wire;} + TLV320AIC3204(TwoWire *wire) {settings.wire = wire;} - uint8_t i2c_address = 0x18; - - void init(); + void begin(){}; + void begin(TwoWire *wire) {settings.wire = wire;} + void begin(uint8_t i2cAddress, TwoWire *wire) { + settings.i2cAddress = i2cAddress; + settings.wire = wire; + } - void softReset(); // 0x00 0x01 - void hardReset(); // reset pin + void softReset(){}; // 0x00 0x01 + void hardReset(){}; // reset pin - void powerUp(); // power up + void powerUp(){}; // power up void setClockMultiplexer(ClockSettings1::PLLRange range, ClockSettings1::PLLInputClock pll_input, ClockSettings1::CodecInputClock codec_input) { settings.clock_settings_1.pll_range = range; @@ -134,10 +156,7 @@ class TLV320AIC3204{ void setLineOutVolumeL(int volume); void setLineOutVolumeR(int volume); - bool debug = false; - private: - TwoWire *i2c; TLV320AIC3204_Settings settings; diff --git a/soundcube-i2s-test/soundcube-i2s-test.ino b/soundcube-i2s-test/soundcube-i2s-test.ino index cbdb0cc..8da78f5 100644 --- a/soundcube-i2s-test/soundcube-i2s-test.ino +++ b/soundcube-i2s-test/soundcube-i2s-test.ino @@ -4,9 +4,12 @@ */ #include #include +#include "codec.h" I2S i2s(INPUT_PULLUP); +TLV320AIC3204 codec; + #define SIZE 16 #define ECHO 192000 int16_t buffer[SIZE]; @@ -36,45 +39,6 @@ void codec_receive(){ } } -void cw(unsigned char first, unsigned char second){ - Wire1.beginTransmission(0x18); - Wire1.write(first); - Wire1.write(second); - int result = Wire1.endTransmission(); - Serial.print(0x18, HEX); - Serial.print(" "); - Serial.print(first, HEX); - Serial.print(" "); - Serial.print(second, HEX); - Serial.print(" : "); - if(result == 0) { - Serial.println("OK"); - } else { - Serial.print("ERROR: "); - Serial.println(result); - } - delay(5); -} - -void cr(unsigned char first, size_t len){ - Wire1.beginTransmission(0x18); - Wire1.write(first); // set register for read - Wire1.endTransmission(false); // false to not release the line - - Wire1.requestFrom(0x18, len, true); // request bytes from register XY - - Serial.print(first, HEX); - Serial.print(" "); - - byte buff[len]; - Wire1.readBytes(buff, len); - for (int i = 0; i < len; i++) { - Serial.print(buff[i], HEX); - Serial.print(" "); - Serial.println(buff[i], BIN); - } -} - void setup() { i2s.setSysClk(48000); @@ -94,7 +58,8 @@ void setup() { pinMode(20, OUTPUT); // CODEC reset digitalWrite(20, HIGH); - + codec.begin(&Wire1); +/* // GENERAL cw(0x00, 0x00); // select page 0 cw(0x01, 0x01); // soft reset @@ -192,6 +157,8 @@ void setup() { Serial.println("P0_42 - Sticky Flags"); cr(0x2A, 1); +*/ + i2s.onTransmit(codec_transmit); i2s.onReceive(codec_receive);