diff --git a/firmware/common/hackrf_core.c b/firmware/common/hackrf_core.c index be06f579..d1e7e0b7 100644 --- a/firmware/common/hackrf_core.c +++ b/firmware/common/hackrf_core.c @@ -31,21 +31,6 @@ #include #include -/* Define for set_tune_freq() */ -#define FREQ_ONE_MHZ (1000*1000) - -#define MIN_LP_FREQ_MHZ (30) -#define MAX_LP_FREQ_MHZ (2300) - -#define MIN_BYPASS_FREQ_MHZ (2300) -#define MAX_BYPASS_FREQ_MHZ (2700) - -#define MIN_HP_FREQ_MHZ (2700) -#define MAX_HP_FREQ_MHZ (6000) - -#define MAX2837_FREQ_NOMINAL_HZ (2600000000) -#define MAX2837_FREQ_NOMINAL_MHZ (MAX2837_FREQ_NOMINAL_HZ / FREQ_ONE_MHZ) - void delay(uint32_t duration) { uint32_t i; @@ -408,79 +393,3 @@ void pin_setup(void) { void enable_1v8_power(void) { gpio_set(PORT_EN1V8, PIN_EN1V8); } - -/* -Set freq/tuning between 30MHz to 6000 MHz (less than 16bits really used) -hz between 0 to 999999 Hz (not checked) -return false on error or true if success. -*/ -bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) -{ - bool success; - uint32_t RFFC5071_freq_mhz; - uint32_t MAX2837_freq_hz; - uint32_t real_RFFC5071_freq_mhz; - uint32_t tmp_hz; - - success = true; - - if(freq_mhz >= MIN_LP_FREQ_MHZ) - { - if(freq_mhz < MAX_LP_FREQ_MHZ) - { - /* TODO fix/check Switch to LP mode (shall not change RX/TX mode) */ - //rffc5071_set_gpo(0); /* SWITCHCTRL_LP = 0 */ - - RFFC5071_freq_mhz = MAX2837_FREQ_NOMINAL_MHZ - freq_mhz; - /* Set Freq and read real freq */ - real_RFFC5071_freq_mhz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); - if(real_RFFC5071_freq_mhz < RFFC5071_freq_mhz) - { - tmp_hz = -((RFFC5071_freq_mhz - real_RFFC5071_freq_mhz) * FREQ_ONE_MHZ); - }else - { - tmp_hz = ((real_RFFC5071_freq_mhz - RFFC5071_freq_mhz) * FREQ_ONE_MHZ); - } - MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz; - max2837_set_frequency(MAX2837_freq_hz); - rffc5071_tx(0); - }else if( (freq_mhz >= MIN_BYPASS_FREQ_MHZ) && (freq_mhz < MAX_BYPASS_FREQ_MHZ) ) - { - /* TODO fix/check Switch to SWITCHCTRL_MIX_BYPASS mode (shall not change RX/TX mode) */ - //rffc5071_set_gpo(SWITCHCTRL_MIX_BYPASS); - - MAX2837_freq_hz = (freq_mhz * FREQ_ONE_MHZ) + freq_hz; - /* RFFC5071_freq_mhz <= not used in Bypass mode */ - max2837_set_frequency(MAX2837_freq_hz); - rffc5071_tx(SWITCHCTRL_MIX_BYPASS); - }else if( (freq_mhz >= MIN_HP_FREQ_MHZ) && (freq_mhz < MAX_HP_FREQ_MHZ) ) - { - /* TODO fix/check Switch to SWITCHCTRL_HP mode (shall not change RX/TX mode) */ - //rffc5071_set_gpo(SWITCHCTRL_HP); - - //switch_ctrl = SWITCHCTRL_HP; - RFFC5071_freq_mhz = freq_mhz - MAX2837_FREQ_NOMINAL_MHZ; - /* Set Freq and read real freq */ - real_RFFC5071_freq_mhz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); - if(real_RFFC5071_freq_mhz < RFFC5071_freq_mhz) - { - tmp_hz = ((RFFC5071_freq_mhz - real_RFFC5071_freq_mhz) * FREQ_ONE_MHZ); - }else - { - tmp_hz = -((real_RFFC5071_freq_mhz - RFFC5071_freq_mhz) * FREQ_ONE_MHZ); - } - MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz; - max2837_set_frequency(MAX2837_freq_hz); - rffc5071_tx(SWITCHCTRL_HP); - }else - { - /* Error freq_mhz too high */ - success = false; - } - }else - { - /* Error freq_mhz too low */ - success = false; - } - return success; -} diff --git a/firmware/common/hackrf_core.h b/firmware/common/hackrf_core.h index 2d04be8f..71f017da 100644 --- a/firmware/common/hackrf_core.h +++ b/firmware/common/hackrf_core.h @@ -258,8 +258,6 @@ void enable_1v8_power(void); bool sample_rate_set(const uint32_t sampling_rate_hz); bool baseband_filter_bandwidth_set(const uint32_t bandwidth_hz); -bool set_freq(uint32_t freq_mhz, uint32_t freq_hz); - #ifdef __cplusplus } #endif diff --git a/firmware/usb_performance/usb_performance.c b/firmware/usb_performance/usb_performance.c index f8058c82..5b52660b 100644 --- a/firmware/usb_performance/usb_performance.c +++ b/firmware/usb_performance/usb_performance.c @@ -64,6 +64,96 @@ uint8_t spiflash_buffer[W25Q80BV_PAGE_LEN]; uint8_t switchctrl = 0; +#define FREQ_ONE_MHZ (1000*1000) + +#define MIN_LP_FREQ_MHZ (30) +#define MAX_LP_FREQ_MHZ (2300) + +#define MIN_BYPASS_FREQ_MHZ (2300) +#define MAX_BYPASS_FREQ_MHZ (2700) + +#define MIN_HP_FREQ_MHZ (2700) +#define MAX_HP_FREQ_MHZ (6000) + +#define MAX2837_FREQ_NOMINAL_HZ (2600000000) +#define MAX2837_FREQ_NOMINAL_MHZ (MAX2837_FREQ_NOMINAL_HZ / FREQ_ONE_MHZ) + +/* + * Set freq/tuning between 30MHz to 6000 MHz (less than 16bits really used) + * hz between 0 to 999999 Hz (not checked) + * return false on error or true if success. + */ +bool set_freq(uint32_t freq_mhz, uint32_t freq_hz) +{ + bool success; + uint32_t RFFC5071_freq_mhz; + uint32_t MAX2837_freq_hz; + uint32_t real_RFFC5071_freq_mhz; + uint32_t tmp_hz; + + success = true; + + if(freq_mhz >= MIN_LP_FREQ_MHZ) + { + if(freq_mhz < MAX_LP_FREQ_MHZ) + { + /* TODO fix/check Switch to LP mode (shall not change RX/TX mode) */ + //rffc5071_set_gpo(0); /* SWITCHCTRL_LP = 0 */ + + RFFC5071_freq_mhz = MAX2837_FREQ_NOMINAL_MHZ - freq_mhz; + /* Set Freq and read real freq */ + real_RFFC5071_freq_mhz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); + if(real_RFFC5071_freq_mhz < RFFC5071_freq_mhz) + { + tmp_hz = -((RFFC5071_freq_mhz - real_RFFC5071_freq_mhz) * FREQ_ONE_MHZ); + }else + { + tmp_hz = ((real_RFFC5071_freq_mhz - RFFC5071_freq_mhz) * FREQ_ONE_MHZ); + } + MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz; + max2837_set_frequency(MAX2837_freq_hz); + rffc5071_tx(0); + }else if( (freq_mhz >= MIN_BYPASS_FREQ_MHZ) && (freq_mhz < MAX_BYPASS_FREQ_MHZ) ) + { + /* TODO fix/check Switch to SWITCHCTRL_MIX_BYPASS mode (shall not change RX/TX mode) */ + //rffc5071_set_gpo(SWITCHCTRL_MIX_BYPASS); + + MAX2837_freq_hz = (freq_mhz * FREQ_ONE_MHZ) + freq_hz; + /* RFFC5071_freq_mhz <= not used in Bypass mode */ + max2837_set_frequency(MAX2837_freq_hz); + rffc5071_tx(SWITCHCTRL_MIX_BYPASS); + }else if( (freq_mhz >= MIN_HP_FREQ_MHZ) && (freq_mhz < MAX_HP_FREQ_MHZ) ) + { + /* TODO fix/check Switch to SWITCHCTRL_HP mode (shall not change RX/TX mode) */ + //rffc5071_set_gpo(SWITCHCTRL_HP); + + //switch_ctrl = SWITCHCTRL_HP; + RFFC5071_freq_mhz = freq_mhz - MAX2837_FREQ_NOMINAL_MHZ; + /* Set Freq and read real freq */ + real_RFFC5071_freq_mhz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0); + if(real_RFFC5071_freq_mhz < RFFC5071_freq_mhz) + { + tmp_hz = ((RFFC5071_freq_mhz - real_RFFC5071_freq_mhz) * FREQ_ONE_MHZ); + }else + { + tmp_hz = -((real_RFFC5071_freq_mhz - RFFC5071_freq_mhz) * FREQ_ONE_MHZ); + } + MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz; + max2837_set_frequency(MAX2837_freq_hz); + rffc5071_tx(SWITCHCTRL_HP); + }else + { + /* Error freq_mhz too high */ + success = false; + } + }else + { + /* Error freq_mhz too low */ + success = false; + } + return success; +} + static void usb_init_buffers_bulk() { usb_td_bulk[0].next_dtd_pointer = USB_TD_NEXT_DTD_POINTER_TERMINATE; usb_td_bulk[0].total_bytes