From bee537dc013ab4349d3637f695038d7b297f880b Mon Sep 17 00:00:00 2001 From: Hoernchen Date: Sat, 15 Jun 2013 01:01:51 +0200 Subject: [PATCH] firmware: rffc frac, if gain --- firmware/common/rffc5071.c | 20 +++++++++++++------- firmware/hackrf_usb/hackrf_usb.c | 14 +++++++++++++- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/firmware/common/rffc5071.c b/firmware/common/rffc5071.c index e5a0c3e8..52fde498 100644 --- a/firmware/common/rffc5071.c +++ b/firmware/common/rffc5071.c @@ -454,7 +454,9 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) { uint8_t fbkdiv; uint16_t n; uint16_t tune_freq; - + uint16_t p1nmsb; + uint8_t p1nlsb; + LOG("# config_synth_int\n"); /* Calculate n_lo */ @@ -481,8 +483,12 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) { set_RFFC5071_PLLCPL(2); } - n = (fvco / fbkdiv) / REF_FREQ; - tune_freq = 50*n*fbkdiv/lodiv; + uint64_t tmp_n = ((uint64_t)fvco << 29ULL) / (fbkdiv*REF_FREQ) ; + n = tmp_n >> 29ULL; + p1nmsb = (tmp_n >> 13ULL) & 0xffff; + p1nlsb = (tmp_n >> 5ULL) & 0xff; + + tune_freq = REF_FREQ*tmp_n*fbkdiv/lodiv / (1 << 29); LOG("# lo=%d n_lo=%d lodiv=%d fvco=%d fbkdiv=%d n=%d tune_freq=%d\n", lo, n_lo, lodiv, fvco, fbkdiv, n, tune_freq); @@ -490,15 +496,15 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) { set_RFFC5071_P1LODIV(n_lo); set_RFFC5071_P1N(n); set_RFFC5071_P1PRESC(fbkdiv >> 1); - set_RFFC5071_P1NMSB(0); - set_RFFC5071_P1NLSB(0); + set_RFFC5071_P1NMSB(p1nmsb); + set_RFFC5071_P1NLSB(p1nlsb); /* Path 2 */ set_RFFC5071_P2LODIV(n_lo); set_RFFC5071_P2N(n); set_RFFC5071_P2PRESC(fbkdiv >> 1); - set_RFFC5071_P2NMSB(0); - set_RFFC5071_P2NLSB(0); + set_RFFC5071_P2NMSB(p1nmsb); + set_RFFC5071_P2NLSB(p1nlsb); rffc5071_regs_commit(); diff --git a/firmware/hackrf_usb/hackrf_usb.c b/firmware/hackrf_usb/hackrf_usb.c index 83524804..737bf08a 100644 --- a/firmware/hackrf_usb/hackrf_usb.c +++ b/firmware/hackrf_usb/hackrf_usb.c @@ -96,7 +96,7 @@ void update_switches(void) #define MIN_HP_FREQ_MHZ (2700) #define MAX_HP_FREQ_MHZ (6800) -#define MAX2837_FREQ_NOMINAL_HZ (2600000000) +static uint32_t MAX2837_FREQ_NOMINAL_HZ=2600000000; #define MAX2837_FREQ_NOMINAL_MHZ (MAX2837_FREQ_NOMINAL_HZ / FREQ_ONE_MHZ) /* @@ -812,6 +812,17 @@ usb_request_status_t usb_vendor_request_set_txvga_gain( return USB_REQUEST_STATUS_OK; } +usb_request_status_t usb_vendor_request_set_if_freq( + usb_endpoint_t* const endpoint, const usb_transfer_stage_t stage +) { + if( stage == USB_TRANSFER_STAGE_SETUP ) { + MAX2837_FREQ_NOMINAL_HZ = (uint32_t)endpoint->setup.index * 1000 * 1000; + return USB_REQUEST_STATUS_STALL; + } else { + return USB_REQUEST_STATUS_OK; + } +} + static const usb_request_handler_fn vendor_request_handler[] = { NULL, usb_vendor_request_set_transceiver_mode, @@ -835,6 +846,7 @@ static const usb_request_handler_fn vendor_request_handler[] = { usb_vendor_request_set_lna_gain, usb_vendor_request_set_vga_gain, usb_vendor_request_set_txvga_gain, + usb_vendor_request_set_if_freq, }; static const uint32_t vendor_request_handler_count =