Bugfix in retuning rate
In sweep mode, frequency switching (retuning) must occur only AFTER the requested number of samples has been received.
This commit is contained in:
@ -121,6 +121,7 @@ void sweep_mode(uint32_t seq) {
|
|||||||
//
|
//
|
||||||
// 7. Process repeats from step 1.
|
// 7. Process repeats from step 1.
|
||||||
|
|
||||||
|
unsigned int blocks_queued = 0;
|
||||||
unsigned int phase = 0;
|
unsigned int phase = 0;
|
||||||
bool odd = true;
|
bool odd = true;
|
||||||
uint16_t range = 0;
|
uint16_t range = 0;
|
||||||
@ -170,31 +171,34 @@ void sweep_mode(uint32_t seq) {
|
|||||||
// Use other buffer next time.
|
// Use other buffer next time.
|
||||||
phase = (phase + 1) % 2;
|
phase = (phase + 1) % 2;
|
||||||
|
|
||||||
// Calculate next sweep frequency.
|
if ( ++blocks_queued == dwell_blocks ) {
|
||||||
if(INTERLEAVED == style) {
|
// Calculate next sweep frequency.
|
||||||
if(!odd && ((sweep_freq + step_width) >= ((uint64_t)frequencies[1+range*2] * FREQ_GRANULARITY))) {
|
if(INTERLEAVED == style) {
|
||||||
range = (range + 1) % num_ranges;
|
if(!odd && ((sweep_freq + step_width) >= ((uint64_t)frequencies[1+range*2] * FREQ_GRANULARITY))) {
|
||||||
sweep_freq = (uint64_t)frequencies[range*2] * FREQ_GRANULARITY;
|
range = (range + 1) % num_ranges;
|
||||||
} else {
|
sweep_freq = (uint64_t)frequencies[range*2] * FREQ_GRANULARITY;
|
||||||
if(odd) {
|
|
||||||
sweep_freq += step_width/4;
|
|
||||||
} else {
|
} else {
|
||||||
sweep_freq += 3*step_width/4;
|
if(odd) {
|
||||||
|
sweep_freq += step_width/4;
|
||||||
|
} else {
|
||||||
|
sweep_freq += 3*step_width/4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
odd = !odd;
|
||||||
|
} else {
|
||||||
|
if((sweep_freq + step_width) >= ((uint64_t)frequencies[1+range*2] * FREQ_GRANULARITY)) {
|
||||||
|
range = (range + 1) % num_ranges;
|
||||||
|
sweep_freq = (uint64_t)frequencies[range*2] * FREQ_GRANULARITY;
|
||||||
|
} else {
|
||||||
|
sweep_freq += step_width;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
odd = !odd;
|
// Retune to new frequency.
|
||||||
} else {
|
nvic_disable_irq(NVIC_USB0_IRQ);
|
||||||
if((sweep_freq + step_width) >= ((uint64_t)frequencies[1+range*2] * FREQ_GRANULARITY)) {
|
set_freq(sweep_freq + offset);
|
||||||
range = (range + 1) % num_ranges;
|
nvic_enable_irq(NVIC_USB0_IRQ);
|
||||||
sweep_freq = (uint64_t)frequencies[range*2] * FREQ_GRANULARITY;
|
blocks_queued = 0;
|
||||||
} else {
|
|
||||||
sweep_freq += step_width;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// Retune to new frequency.
|
|
||||||
nvic_disable_irq(NVIC_USB0_IRQ);
|
|
||||||
set_freq(sweep_freq + offset);
|
|
||||||
nvic_enable_irq(NVIC_USB0_IRQ);
|
|
||||||
|
|
||||||
// Wait for M0 to resume RX.
|
// Wait for M0 to resume RX.
|
||||||
while (m0_state.active_mode != M0_MODE_RX)
|
while (m0_state.active_mode != M0_MODE_RX)
|
||||||
|
Reference in New Issue
Block a user