firmware: if precision
This commit is contained in:
@ -448,12 +448,12 @@ void rffc5071_enable(void) {
|
|||||||
#define REF_FREQ 50
|
#define REF_FREQ 50
|
||||||
|
|
||||||
/* configure frequency synthesizer in integer mode (lo in MHz) */
|
/* configure frequency synthesizer in integer mode (lo in MHz) */
|
||||||
uint16_t rffc5071_config_synth_int(uint16_t lo) {
|
uint32_t rffc5071_config_synth_int(uint16_t lo) {
|
||||||
uint8_t lodiv;
|
uint8_t lodiv;
|
||||||
uint16_t fvco;
|
uint16_t fvco;
|
||||||
uint8_t fbkdiv;
|
uint8_t fbkdiv;
|
||||||
uint16_t n;
|
uint16_t n;
|
||||||
uint16_t tune_freq;
|
uint32_t tune_freq_hz;
|
||||||
uint16_t p1nmsb;
|
uint16_t p1nmsb;
|
||||||
uint8_t p1nlsb;
|
uint8_t p1nlsb;
|
||||||
|
|
||||||
@ -488,8 +488,9 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) {
|
|||||||
p1nmsb = (tmp_n >> 13ULL) & 0xffff;
|
p1nmsb = (tmp_n >> 13ULL) & 0xffff;
|
||||||
p1nlsb = (tmp_n >> 5ULL) & 0xff;
|
p1nlsb = (tmp_n >> 5ULL) & 0xff;
|
||||||
|
|
||||||
tune_freq = REF_FREQ*tmp_n*fbkdiv/lodiv / (1 << 29);
|
//~ 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",
|
tune_freq_hz = (uint32_t)(REF_FREQ*tmp_n*fbkdiv/lodiv * 1000*1000 / (1 << 29ULL));
|
||||||
|
LOG("# lo=%d n_lo=%d lodiv=%d fvco=%d fbkdiv=%d n=%d tune_freq_hz=%d\n",
|
||||||
lo, n_lo, lodiv, fvco, fbkdiv, n, tune_freq);
|
lo, n_lo, lodiv, fvco, fbkdiv, n, tune_freq);
|
||||||
|
|
||||||
/* Path 1 */
|
/* Path 1 */
|
||||||
@ -508,15 +509,15 @@ uint16_t rffc5071_config_synth_int(uint16_t lo) {
|
|||||||
|
|
||||||
rffc5071_regs_commit();
|
rffc5071_regs_commit();
|
||||||
|
|
||||||
return tune_freq;
|
return tune_freq_hz;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* !!!!!!!!!!! hz is currently ignored !!!!!!!!!!!
|
/* !!!!!!!!!!! hz is currently ignored !!!!!!!!!!!
|
||||||
*
|
*
|
||||||
* Tuning is rounded down to the nearest 25MHz or 50MHz depending on
|
* Tuning is rounded down to the nearest 25MHz or 50MHz depending on
|
||||||
* frequency requsted. Actual tuned value in MHz is returned. */
|
* frequency requsted. Actual tuned value in MHz is returned. */
|
||||||
uint16_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz) {
|
uint32_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz) {
|
||||||
uint16_t tune_freq;
|
uint32_t tune_freq;
|
||||||
|
|
||||||
// Fractional tuning unimplemented, 'hz' ignored
|
// Fractional tuning unimplemented, 'hz' ignored
|
||||||
hz=hz;
|
hz=hz;
|
||||||
|
@ -71,7 +71,7 @@ extern void rffc5071_regs_commit(void);
|
|||||||
* tune frequency (MHz) is returned. Expect requested freq to be
|
* tune frequency (MHz) is returned. Expect requested freq to be
|
||||||
* rounded down to the nearest multiple of 25MHz or 50MHz, depending
|
* rounded down to the nearest multiple of 25MHz or 50MHz, depending
|
||||||
* internal calculations. */
|
* internal calculations. */
|
||||||
extern uint16_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz);
|
extern uint32_t rffc5071_set_frequency(uint16_t mhz, uint32_t hz);
|
||||||
|
|
||||||
/* Set up rx only, tx only, or full duplex. Chip should be disabled
|
/* Set up rx only, tx only, or full duplex. Chip should be disabled
|
||||||
* before _tx, _rx, or _rxtx are called. */
|
* before _tx, _rx, or _rxtx are called. */
|
||||||
|
@ -109,7 +109,7 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz)
|
|||||||
bool success;
|
bool success;
|
||||||
uint32_t RFFC5071_freq_mhz;
|
uint32_t RFFC5071_freq_mhz;
|
||||||
uint32_t MAX2837_freq_hz;
|
uint32_t MAX2837_freq_hz;
|
||||||
uint32_t real_RFFC5071_freq_mhz;
|
uint32_t real_RFFC5071_freq_hz;
|
||||||
uint32_t tmp_hz;
|
uint32_t tmp_hz;
|
||||||
|
|
||||||
success = true;
|
success = true;
|
||||||
@ -122,13 +122,13 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz)
|
|||||||
|
|
||||||
RFFC5071_freq_mhz = MAX2837_FREQ_NOMINAL_MHZ - freq_mhz;
|
RFFC5071_freq_mhz = MAX2837_FREQ_NOMINAL_MHZ - freq_mhz;
|
||||||
/* Set Freq and read real freq */
|
/* Set Freq and read real freq */
|
||||||
real_RFFC5071_freq_mhz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0);
|
real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0);
|
||||||
if(real_RFFC5071_freq_mhz < RFFC5071_freq_mhz)
|
if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ)
|
||||||
{
|
{
|
||||||
tmp_hz = -((RFFC5071_freq_mhz - real_RFFC5071_freq_mhz) * FREQ_ONE_MHZ);
|
tmp_hz = -(RFFC5071_freq_mhz * FREQ_ONE_MHZ - real_RFFC5071_freq_hz);
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
tmp_hz = ((real_RFFC5071_freq_mhz - RFFC5071_freq_mhz) * FREQ_ONE_MHZ);
|
tmp_hz = (real_RFFC5071_freq_hz - RFFC5071_freq_mhz * FREQ_ONE_MHZ);
|
||||||
}
|
}
|
||||||
MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz;
|
MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz;
|
||||||
max2837_set_frequency(MAX2837_freq_hz);
|
max2837_set_frequency(MAX2837_freq_hz);
|
||||||
@ -148,13 +148,13 @@ bool set_freq(uint32_t freq_mhz, uint32_t freq_hz)
|
|||||||
|
|
||||||
RFFC5071_freq_mhz = freq_mhz - MAX2837_FREQ_NOMINAL_MHZ;
|
RFFC5071_freq_mhz = freq_mhz - MAX2837_FREQ_NOMINAL_MHZ;
|
||||||
/* Set Freq and read real freq */
|
/* Set Freq and read real freq */
|
||||||
real_RFFC5071_freq_mhz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0);
|
real_RFFC5071_freq_hz = rffc5071_set_frequency(RFFC5071_freq_mhz, 0);
|
||||||
if(real_RFFC5071_freq_mhz < RFFC5071_freq_mhz)
|
if(real_RFFC5071_freq_hz < RFFC5071_freq_mhz * FREQ_ONE_MHZ)
|
||||||
{
|
{
|
||||||
tmp_hz = ((RFFC5071_freq_mhz - real_RFFC5071_freq_mhz) * FREQ_ONE_MHZ);
|
tmp_hz = (RFFC5071_freq_mhz * FREQ_ONE_MHZ - real_RFFC5071_freq_hz);
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
tmp_hz = -((real_RFFC5071_freq_mhz - RFFC5071_freq_mhz) * FREQ_ONE_MHZ);
|
tmp_hz = -(real_RFFC5071_freq_hz - RFFC5071_freq_mhz * FREQ_ONE_MHZ);
|
||||||
}
|
}
|
||||||
MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz;
|
MAX2837_freq_hz = MAX2837_FREQ_NOMINAL_HZ + tmp_hz + freq_hz;
|
||||||
max2837_set_frequency(MAX2837_freq_hz);
|
max2837_set_frequency(MAX2837_freq_hz);
|
||||||
|
Reference in New Issue
Block a user