Пример #1
0
/*
 * Set freq/tuning between 5MHz to 6800 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_hz;
	uint32_t tmp_hz;

	success = true;

	gpio_clear(PORT_XCVR_ENABLE, (PIN_XCVR_RXENABLE | PIN_XCVR_TXENABLE));
	if(freq_mhz >= MIN_LP_FREQ_MHZ)
	{
		if(freq_mhz < MAX_LP_FREQ_MHZ)
		{
			switchctrl &= ~(SWITCHCTRL_HP | SWITCHCTRL_MIX_BYPASS);

			RFFC5071_freq_mhz = MAX2837_FREQ_NOMINAL_MHZ - freq_mhz;
			/* Set Freq and read real freq */
			real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz);
			if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ)
			{
				tmp_hz = -(RFFC5071_freq_mhz  * FREQ_ONE_MHZ - real_RFFC5071_freq_hz);
			}else
			{
				tmp_hz = (real_RFFC5071_freq_hz - RFFC5071_freq_mhz  * FREQ_ONE_MHZ);
			}
			MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz;
			max2837_set_frequency(MAX2837_freq_hz);
			update_switches();
		}else if( (freq_mhz >= MIN_BYPASS_FREQ_MHZ) && (freq_mhz < MAX_BYPASS_FREQ_MHZ) )
		{
			switchctrl |= 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);
			update_switches();
		}else if(  (freq_mhz >= MIN_HP_FREQ_MHZ) && (freq_mhz < MAX_HP_FREQ_MHZ) )
		{
			switchctrl &= ~SWITCHCTRL_MIX_BYPASS;
			switchctrl |= SWITCHCTRL_HP;

			RFFC5071_freq_mhz = freq_mhz - MAX2837_FREQ_NOMINAL_MHZ;
			/* Set Freq and read real freq */
			real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz);
			if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ)
			{
				tmp_hz = (RFFC5071_freq_mhz * FREQ_ONE_MHZ - real_RFFC5071_freq_hz);
			}else
			{
				tmp_hz = -(real_RFFC5071_freq_hz - RFFC5071_freq_mhz * FREQ_ONE_MHZ);
			}
			MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz;
			max2837_set_frequency(MAX2837_freq_hz);
			update_switches();
		}else
		{
			/* Error freq_mhz too high */
			success = false;
		}
	}else
	{
		/* Error freq_mhz too low */
		success = false;
	}
	if(transceiver_mode == TRANSCEIVER_MODE_RX)
		gpio_set(PORT_XCVR_ENABLE, PIN_XCVR_RXENABLE);
	else if(transceiver_mode == TRANSCEIVER_MODE_TX)
		gpio_set(PORT_XCVR_ENABLE, PIN_XCVR_TXENABLE);
	
	freq_mhz_cache = freq_mhz;
	freq_hz_cache = freq_hz;
	return success;
}
Пример #2
0
/*
 * Set freq/tuning between 5MHz to 6800 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)
		{
			switchctrl &= ~(SWITCHCTRL_HP | SWITCHCTRL_MIX_BYPASS);

			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);
			update_switches();
		}else if( (freq_mhz >= MIN_BYPASS_FREQ_MHZ) && (freq_mhz < MAX_BYPASS_FREQ_MHZ) )
		{
			switchctrl |= 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);
			update_switches();
		}else if(  (freq_mhz >= MIN_HP_FREQ_MHZ) && (freq_mhz < MAX_HP_FREQ_MHZ) )
		{
			switchctrl &= ~SWITCHCTRL_MIX_BYPASS;
			switchctrl |= 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);
			update_switches();
		}else
		{
			/* Error freq_mhz too high */
			success = false;
		}
	}else
	{
		/* Error freq_mhz too low */
		success = false;
	}
	return success;
}