From 7be3c7fdf15d220026c744e395b349f31a080cd5 Mon Sep 17 00:00:00 2001 From: Antoine van Gelder Date: Tue, 9 Dec 2025 10:21:56 +0200 Subject: [PATCH] firmware: add support for setting max2831 rx hpf corner frequency --- firmware/common/max2831.c | 28 ++++++++++++++++++++++++++-- firmware/common/max2831.h | 12 ++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/firmware/common/max2831.c b/firmware/common/max2831.c index a8a44f45..15b14bdb 100644 --- a/firmware/common/max2831.c +++ b/firmware/common/max2831.c @@ -380,15 +380,39 @@ bool max2831_set_vga_gain(max2831_driver_t* const drv, const uint32_t gain_db) { if( (gain_db & 0x1) || gain_db > 62) {/* 0b11111*2 */ return false; } - + set_MAX2831_RXVGA_GAIN(drv, (gain_db >> 1) ); max2831_reg_commit(drv, 11); return true; } -bool max2831_set_txvga_gain(max2831_driver_t* const drv, const uint32_t gain_db) { +bool max2831_set_txvga_gain(max2831_driver_t* const drv, const uint32_t gain_db) { uint16_t value = MIN((gain_db << 1) | 1, 0x3f); set_MAX2831_TXVGA_GAIN(drv, value); max2831_reg_commit(drv, 12); return true; } + +void max2831_set_rx_hpf_frequency(max2831_driver_t* const drv, const max2831_rx_hpf_freq_t freq) +{ + /** + * Frequency RXHP RX_HPF_SEL (D13:D12) + * + * 100 Hz low 00 + * 4 kHz low x1 + * 30 kHz low 10 + * 600 kHz high xx + */ + switch (freq) { + case MAX2831_RX_HPF_100_HZ: + case MAX2831_RX_HPF_4_KHZ: + case MAX2831_RX_HPF_30_KHZ: + set_MAX2831_RX_HPF_SEL(drv, freq); + max2831_reg_commit(drv, 7); + gpio_clear(drv->gpio_rxhp); + break; + case MAX2831_RX_HPF_600_KHZ: + gpio_set(drv->gpio_rxhp); + break; + } +} diff --git a/firmware/common/max2831.h b/firmware/common/max2831.h index 4279cbc8..033b590e 100644 --- a/firmware/common/max2831.h +++ b/firmware/common/max2831.h @@ -41,6 +41,13 @@ typedef enum { MAX2831_MODE_RX_CALIBRATION, } max2831_mode_t; +typedef enum { + MAX2831_RX_HPF_100_HZ = 0, + MAX2831_RX_HPF_4_KHZ = 1, + MAX2831_RX_HPF_30_KHZ = 2, + MAX2831_RX_HPF_600_KHZ = 3, +} max2831_rx_hpf_freq_t; + struct max2831_driver_t; typedef struct max2831_driver_t max2831_driver_t; @@ -91,6 +98,11 @@ bool max2831_set_lna_gain(max2831_driver_t* const drv, const uint32_t gain_db); bool max2831_set_vga_gain(max2831_driver_t* const drv, const uint32_t gain_db); bool max2831_set_txvga_gain(max2831_driver_t* const drv, const uint32_t gain_db); +/* Set receiver high-pass filter corner frequency in Hz */ +extern void max2831_set_rx_hpf_frequency( + max2831_driver_t* const drv, + const max2831_rx_hpf_freq_t freq); + extern void max2831_tx(max2831_driver_t* const drv); extern void max2831_rx(max2831_driver_t* const drv); extern void max2831_tx_calibration(max2831_driver_t* const drv);