From b013e68b170b1646c8bf7cc90aa9863afdf057a3 Mon Sep 17 00:00:00 2001 From: stafur Date: Sat, 28 Feb 2026 04:11:04 -0500 Subject: [PATCH] Sampling frequency and Receiver Model tweaks. (#3053) --- firmware/application/clock_manager.cpp | 4 ++-- firmware/application/radio.cpp | 9 +++++++++ firmware/application/radio.hpp | 1 + firmware/application/receiver_model.cpp | 8 ++++++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/firmware/application/clock_manager.cpp b/firmware/application/clock_manager.cpp index 3701877a4..e44a5741f 100644 --- a/firmware/application/clock_manager.cpp +++ b/firmware/application/clock_manager.cpp @@ -730,8 +730,8 @@ void ClockManager::set_sampling_frequency(const uint32_t frequency) { radio::invalidate_spi_config(); // Configure Si5351 clocks - clock_generator.set_ms_frequency(0, afe_rate * 2, si5351_vco_f, 1); // CLK0: AFE_CLK - clock_generator.set_ms_frequency(1, afe_rate * 2, si5351_vco_f, 0); // CLK1: SCT_CLK + clock_generator.set_ms_frequency(0, afe_rate * 4, si5351_vco_f, 2); // CLK0: AFE_CLK + clock_generator.set_ms_frequency(1, afe_rate * 4, si5351_vco_f, 1); // CLK1: SCT_CLK #else /* Codec clock is at sampling frequency, CPLD and SGPIO clocks are at diff --git a/firmware/application/radio.cpp b/firmware/application/radio.cpp index 53bd77d9d..4873503ec 100644 --- a/firmware/application/radio.cpp +++ b/firmware/application/radio.cpp @@ -79,6 +79,15 @@ static constexpr SPIConfig ssp_config_max283x = { CR0_CLOCKRATE(ssp_scr(ssp1_pclk_f, ssp1_cpsr, max283x_spi_f) + 3) | CR0_FRFSPI | CR0_DSS9BIT, .cpsr = ssp1_cpsr, }; + +static max283x::MAX283x* transceiver = nullptr; + +void set_rx_buff_vcm(const size_t v) { + if (transceiver) { + transceiver->set_rx_buff_vcm(v); + } +} + #else /* MAX2837/MAX2839 use 16-bit SPI transfers */ static constexpr SPIConfig ssp_config_max283x = { diff --git a/firmware/application/radio.hpp b/firmware/application/radio.hpp index cf9290352..9a23f3f57 100644 --- a/firmware/application/radio.hpp +++ b/firmware/application/radio.hpp @@ -64,6 +64,7 @@ void disable(); #ifdef PRALINE void invalidate_spi_config(); +void set_rx_buff_vcm(const size_t v); #endif namespace debug { diff --git a/firmware/application/receiver_model.cpp b/firmware/application/receiver_model.cpp index a99377ca6..0a89618fa 100644 --- a/firmware/application/receiver_model.cpp +++ b/firmware/application/receiver_model.cpp @@ -242,6 +242,14 @@ void ReceiverModel::set_normalized_headphone_volume(uint8_t v) { void ReceiverModel::enable() { enabled_ = true; radio::set_direction(rf::Direction::Receive); + +#ifdef PRALINE + /* Anchor the Common Mode Voltage (VCM) to 1.2V. + * This stabilizes the electrical floor of the I/Q signals. + */ + radio::set_rx_buff_vcm(1); +#endif + update_tuning_frequency(); update_antenna_bias(); update_rf_amp();