mirror of
https://github.com/portapack-mayhem/mayhem-firmware.git
synced 2026-09-11 00:59:28 +00:00
clock_manager: stop writing bogus RX digital gain, keep quarter shift across rate changes
This commit is contained in:
@@ -907,12 +907,24 @@ void ClockManager::set_sampling_frequency(const uint32_t frequency) {
|
|||||||
// Set FPGA RX decimation register
|
// Set FPGA RX decimation register
|
||||||
fpga_debug_register_write(FPGA_REG_DECIM, n);
|
fpga_debug_register_write(FPGA_REG_DECIM, n);
|
||||||
|
|
||||||
/* RX Mode: Register 3 is FPGA_REG_RX_DIGITAL_GAIN.
|
/* No RX digital-gain register is written here.
|
||||||
* We shift up by (3 * n) to compensate for CIC bit-growth.
|
*
|
||||||
|
* Register 0x03 used to be programmed with (3 * n + 2) as a "CIC
|
||||||
|
* bit-growth" renormalisation. The gateware has no such register: the
|
||||||
|
* RX decimator is a chain of unity-gain half-band FIRs selected by
|
||||||
|
* rx_decim (fpga/top/standard.py), and 0x03 is rx_pstep, whose top two
|
||||||
|
* bits are the quarter-rate shift. Writing a gain here silently
|
||||||
|
* cancelled the shift that set_tuning_frequency() had programmed, which
|
||||||
|
* left the analogue passband offset with no matching rotation.
|
||||||
|
*
|
||||||
|
* The shift depends on the AFE rate we just chose, so re-apply it after
|
||||||
|
* the rate change. ReceiverModel::update_sampling_rate() calls
|
||||||
|
* update_tuning_frequency() straight after this, which does exactly
|
||||||
|
* that; the write below only keeps the register consistent in between.
|
||||||
*/
|
*/
|
||||||
uint8_t ds = (3 * n);
|
fpga_debug_register_write(
|
||||||
ds += 2;
|
FPGA_REG_RX_PSTEP,
|
||||||
fpga_debug_register_write(FPGA_REG_RX_DIGITAL_GAIN, ds);
|
(radio::debug::get_cached_quarter_shift() & 0b11) << FPGA_RX_QUARTER_SHIFT_SHIFT);
|
||||||
|
|
||||||
// Re-enable FPGA processing with clean state ===
|
// Re-enable FPGA processing with clean state ===
|
||||||
fpga_debug_register_write(1, 0x01);
|
fpga_debug_register_write(1, 0x01);
|
||||||
|
|||||||
Reference in New Issue
Block a user