From c188d809df3021cefa236a2346d2ef8859b9d0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Hamal=20Dvo=C5=99=C3=A1k?= Date: Wed, 10 Jul 2024 20:32:24 +0200 Subject: [PATCH] Randomize bias delay to reduce artifacts --- src/main.c | 55 ++++++++++++++++-------------------------------------- 1 file changed, 16 insertions(+), 39 deletions(-) diff --git a/src/main.c b/src/main.c index 524900f..1b86402 100644 --- a/src/main.c +++ b/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) {