Randomize bias delay to reduce artifacts
This commit is contained in:
parent
57e36203aa
commit
c188d809df
55
src/main.c
55
src/main.c
|
@ -91,40 +91,6 @@ inline static uint32_t rnd_next()
|
|||
return rnd;
|
||||
}
|
||||
|
||||
static void bias_set_delay(int delay)
|
||||
{
|
||||
delay += 200;
|
||||
|
||||
if (delay < 0)
|
||||
delay = 0;
|
||||
|
||||
if (delay >= 200)
|
||||
delay = 512;
|
||||
|
||||
int bulk = delay / 16;
|
||||
int rest = delay % 16;
|
||||
|
||||
if (0 == rest) {
|
||||
bulk -= 1;
|
||||
rest = 16;
|
||||
}
|
||||
|
||||
if (delay > 0) {
|
||||
if (bulk) {
|
||||
pio1->instr_mem[11] = pio_encode_set(pio_x, bulk) |
|
||||
pio_encode_sideset(1, 0) | pio_encode_delay(rest - 1);
|
||||
} else {
|
||||
pio1->instr_mem[11] = pio_encode_jmp(10) | pio_encode_sideset(1, 0) |
|
||||
pio_encode_delay(rest - 1);
|
||||
}
|
||||
|
||||
pio_sm_set_wrap(pio1, 0, 10, 12);
|
||||
} else {
|
||||
pio_sm_set_wrap(pio1, 0, 10, 10);
|
||||
pio_sm_exec(pio1, 0, pio_encode_jmp(10));
|
||||
}
|
||||
}
|
||||
|
||||
static void bias_init(int in_pin, int out_pin)
|
||||
{
|
||||
gpio_disable_pulls(in_pin);
|
||||
|
@ -138,8 +104,20 @@ static void bias_init(int in_pin, int out_pin)
|
|||
|
||||
const uint16_t insn[] = {
|
||||
pio_encode_mov_not(pio_pins, pio_pins) | pio_encode_sideset(1, 1),
|
||||
pio_encode_set(pio_x, 31) | pio_encode_sideset(1, 0) | pio_encode_delay(15),
|
||||
pio_encode_jmp_x_dec(2) | pio_encode_sideset(1, 0) | pio_encode_delay(15),
|
||||
|
||||
pio_encode_in(pio_pins, 1),
|
||||
pio_encode_in(pio_pins, 1),
|
||||
pio_encode_in(pio_pins, 1),
|
||||
pio_encode_in(pio_pins, 1),
|
||||
pio_encode_in(pio_pins, 1),
|
||||
pio_encode_in(pio_pins, 1),
|
||||
pio_encode_in(pio_pins, 1),
|
||||
pio_encode_in(pio_pins, 1),
|
||||
|
||||
pio_encode_mov(pio_x, pio_isr),
|
||||
pio_encode_mov(pio_isr, pio_null),
|
||||
|
||||
pio_encode_jmp_x_dec(11),
|
||||
};
|
||||
|
||||
pio_program_t prog = {
|
||||
|
@ -156,6 +134,7 @@ static void bias_init(int in_pin, int out_pin)
|
|||
pio_add_program(pio1, &prog);
|
||||
|
||||
pio_sm_config pc = pio_get_default_sm_config();
|
||||
sm_config_set_in_shift(&pc, false, false, 32);
|
||||
sm_config_set_sideset(&pc, 1, false, true);
|
||||
sm_config_set_sideset_pins(&pc, out_pin);
|
||||
sm_config_set_in_pins(&pc, in_pin);
|
||||
|
@ -600,6 +579,7 @@ static void rf_rx(void)
|
|||
iq_queue_pos = (iq_queue_pos + 1) & (IQ_QUEUE_LEN - 1);
|
||||
}
|
||||
|
||||
/* Randomize LO phase in the next word. */
|
||||
for (int i = 0; i < 8; i++) {
|
||||
lo_tweak(lo_cos, COS_PHASE);
|
||||
lo_tweak(lo_sin, SIN_PHASE);
|
||||
|
@ -620,9 +600,6 @@ static void run_command(uint8_t cmd, uint32_t arg)
|
|||
} else if (0x04 == cmd) {
|
||||
/* Set the tuner gain level */
|
||||
gain = INIT_GAIN * powf(10.0f, 0.005f * arg);
|
||||
} else if (0x05 == cmd) {
|
||||
/* Set PPM error - hack to tweak bias strength */
|
||||
bias_set_delay(arg);
|
||||
} else if (0x0d == cmd) {
|
||||
/* Set tuner gain by the tuner's gain index */
|
||||
if (arg < NUM_GAINS) {
|
||||
|
|
Loading…
Reference in a new issue