diff options
| author | jacqueline <me@jacqueline.id.au> | 2024-01-04 15:57:58 +1100 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2024-01-04 15:57:58 +1100 |
| commit | 938ba62f57ed2c002bae4aec236eeaeb200e4cba (patch) | |
| tree | d70948199d1f7a2572df5f2940ee13eb79537937 /src/drivers | |
| parent | 42a98a3799bdfb328c5b5683bbf3d77046f1f5f8 (diff) | |
| download | tangara-fw-938ba62f57ed2c002bae4aec236eeaeb200e4cba.tar.gz | |
refactor handling of volume steps; improve controls
Diffstat (limited to 'src/drivers')
| -rw-r--r-- | src/drivers/i2s_dac.cpp | 4 | ||||
| -rw-r--r-- | src/drivers/include/wm8523.hpp | 2 | ||||
| -rw-r--r-- | src/drivers/wm8523.cpp | 2 |
3 files changed, 6 insertions, 2 deletions
diff --git a/src/drivers/i2s_dac.cpp b/src/drivers/i2s_dac.cpp index 0ef1005a..4d29f917 100644 --- a/src/drivers/i2s_dac.cpp +++ b/src/drivers/i2s_dac.cpp @@ -95,8 +95,8 @@ I2SDac::I2SDac(IGpios& gpio, i2s_chan_handle_t i2s_handle) vTaskDelay(pdMS_TO_TICKS(10)); wm8523::WriteRegister(wm8523::Register::kPsCtrl, 0b0); - // Ramp volume changes - wm8523::WriteRegister(wm8523::Register::kDacCtrl, 0b11); + // Use zero-cross detection for volume changes. + wm8523::WriteRegister(wm8523::Register::kDacCtrl, 0b10000); } I2SDac::~I2SDac() { diff --git a/src/drivers/include/wm8523.hpp b/src/drivers/include/wm8523.hpp index b13cf34b..a64f6bac 100644 --- a/src/drivers/include/wm8523.hpp +++ b/src/drivers/include/wm8523.hpp @@ -23,6 +23,8 @@ extern const uint16_t kLineLevelReferenceVolume; extern const uint16_t kDefaultVolume; extern const uint16_t kDefaultMaxVolume; +extern const uint16_t kZeroDbVolume; + constexpr auto VolumeToDb(uint16_t vol) -> int_fast8_t { return (vol - kLineLevelReferenceVolume) / 4; } diff --git a/src/drivers/wm8523.cpp b/src/drivers/wm8523.cpp index 5f6c8053..9fe3e001 100644 --- a/src/drivers/wm8523.cpp +++ b/src/drivers/wm8523.cpp @@ -32,6 +32,8 @@ const uint16_t kDefaultVolume = kLineLevelReferenceVolume - 96; // Default to +6dB == 2Vrms == 'CD Player' const uint16_t kDefaultMaxVolume = kLineLevelReferenceVolume + 12; +const uint16_t kZeroDbVolume = 0x190; + static const uint8_t kAddress = 0b0011010; auto ReadRegister(Register reg) -> std::optional<uint16_t> { |
