kopia lustrzana https://github.com/bristol-seds/pico-tracker
Added a variable for Npresc, tidy up
rodzic
fa4efbc79a
commit
35bc669420
|
@ -23,6 +23,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "samd20.h"
|
#include "samd20.h"
|
||||||
|
#include "si_trx.h"
|
||||||
#include "semihosting.h"
|
#include "semihosting.h"
|
||||||
#include "system/port.h"
|
#include "system/port.h"
|
||||||
#include "spi_bitbang.h"
|
#include "spi_bitbang.h"
|
||||||
|
@ -235,12 +236,11 @@ static void si_trx_frequency_control_set_channel_step_size(uint16_t step_size)
|
||||||
/**
|
/**
|
||||||
* Sets the output divider of the frac-n pll synthesiser
|
* Sets the output divider of the frac-n pll synthesiser
|
||||||
*/
|
*/
|
||||||
static void si_trx_frequency_control_set_band(uint8_t band)
|
static void si_trx_frequency_control_set_band(uint8_t band, uint8_t sy_sel)
|
||||||
{
|
{
|
||||||
/* Force SY_SEL = 1, operation when SY_SEL = 0 is currently undefined */
|
|
||||||
_si_trx_set_property_8(SI_PROPERTY_GROUP_MODEM,
|
_si_trx_set_property_8(SI_PROPERTY_GROUP_MODEM,
|
||||||
SI_MODEM_CLKGEN_BAND,
|
SI_MODEM_CLKGEN_BAND,
|
||||||
SI_MODEM_CLKGEN_SY_SEL_1 | (band & 0x7));
|
sy_sel | (band & 0x7));
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Sets the frequency deviation in the modem
|
* Sets the frequency deviation in the modem
|
||||||
|
@ -287,7 +287,11 @@ static void si_trx_set_tx_pa_duty_cycle(uint8_t pa_duty_cycle)
|
||||||
*/
|
*/
|
||||||
static void si_trx_set_frequency(uint32_t frequency, float channel_spacing)
|
static void si_trx_set_frequency(uint32_t frequency, float channel_spacing)
|
||||||
{
|
{
|
||||||
uint8_t outdiv, band;
|
uint8_t outdiv, band, nprescaler;
|
||||||
|
|
||||||
|
/* Higher frequency resolution, but also higher power (~+200µA) */
|
||||||
|
nprescaler = 2;
|
||||||
|
|
||||||
|
|
||||||
if (frequency < 705000000UL) {
|
if (frequency < 705000000UL) {
|
||||||
outdiv = 6; band = SI_MODEM_CLKGEN_FVCO_DIV_6;
|
outdiv = 6; band = SI_MODEM_CLKGEN_FVCO_DIV_6;
|
||||||
|
@ -305,7 +309,7 @@ static void si_trx_set_frequency(uint32_t frequency, float channel_spacing)
|
||||||
outdiv = 24; band = SI_MODEM_CLKGEN_FVCO_DIV_24;
|
outdiv = 24; band = SI_MODEM_CLKGEN_FVCO_DIV_24;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t f_pfd = 2 * VCXO_FREQUENCY / outdiv;
|
uint32_t f_pfd = nprescaler * VCXO_FREQUENCY / outdiv;
|
||||||
|
|
||||||
uint16_t n = ((uint16_t)(frequency / f_pfd)) - 1;
|
uint16_t n = ((uint16_t)(frequency / f_pfd)) - 1;
|
||||||
|
|
||||||
|
@ -314,6 +318,9 @@ static void si_trx_set_frequency(uint32_t frequency, float channel_spacing)
|
||||||
|
|
||||||
uint32_t m = (uint32_t)(rest * (float)(1 << 19));
|
uint32_t m = (uint32_t)(rest * (float)(1 << 19));
|
||||||
|
|
||||||
|
/* Check n and m are in valid ranges, halt otherwise */
|
||||||
|
if (n > 0x7f || m > 0xfffff) while (1);
|
||||||
|
|
||||||
/* Set the modem deviation, in units of the VCO resolution */
|
/* Set the modem deviation, in units of the VCO resolution */
|
||||||
float dev_ratio = (float)RF_DEVIATION / (float)f_pfd;
|
float dev_ratio = (float)RF_DEVIATION / (float)f_pfd;
|
||||||
uint32_t dev = (uint32_t)(dev_ratio * (float)(1 << 19));
|
uint32_t dev = (uint32_t)(dev_ratio * (float)(1 << 19));
|
||||||
|
@ -323,7 +330,11 @@ static void si_trx_set_frequency(uint32_t frequency, float channel_spacing)
|
||||||
uint32_t channel_step = (uint32_t)(channel_spacing_ratio * (float)(1 << 19));
|
uint32_t channel_step = (uint32_t)(channel_spacing_ratio * (float)(1 << 19));
|
||||||
|
|
||||||
/* Set the frac-n PLL output divider */
|
/* Set the frac-n PLL output divider */
|
||||||
si_trx_frequency_control_set_band(band);
|
if (nprescaler == 4) { /* Prescaler */
|
||||||
|
si_trx_frequency_control_set_band(band, SI_MODEM_CLKGEN_SY_SEL_0);
|
||||||
|
} else { /* Default Mode */
|
||||||
|
si_trx_frequency_control_set_band(band, SI_MODEM_CLKGEN_SY_SEL_1);
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the frac-n PLL divisior */
|
/* Set the frac-n PLL divisior */
|
||||||
si_trx_frequency_control_set_divider(n, m);
|
si_trx_frequency_control_set_divider(n, m);
|
||||||
|
@ -333,9 +344,6 @@ static void si_trx_set_frequency(uint32_t frequency, float channel_spacing)
|
||||||
|
|
||||||
/* Set the frequency deviation in the modem */
|
/* Set the frequency deviation in the modem */
|
||||||
si_trx_modem_set_deviation(dev);
|
si_trx_modem_set_deviation(dev);
|
||||||
|
|
||||||
|
|
||||||
//const uint8_t set_frequency_control_inte[] = {0x11, 0x40, 0x08, 0x00, n, m2, m1, m0, 0x0B, 0x61, 0x20, 0xFA};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Ładowanie…
Reference in New Issue