Try to de-flicker transmission scheduling

This commit is contained in:
jaseg 2023-12-23 16:51:26 +01:00
parent 621d39437a
commit 7b7b18cb14

View file

@ -17,7 +17,6 @@ static void dma_tx_waveform(size_t table_size, const uint16_t *table);
#define SYNC_INTERVAL 13
static size_t time_to_sync = 0;
static size_t tx_bitpos = 0;
static size_t tx_sympos = 0;
static int tx_last_bit = 0;
@ -315,7 +314,6 @@ size_t cnd_pos = 0;
void DMA1_Channel1_IRQHandler() {
static int transfer_errors = 0;
static int current_symbol = 0;
static int idle_symbol = 0;
if (DMA1->ISR & DMA_ISR_TEIF1) {
transfer_errors ++;
@ -344,32 +342,23 @@ void DMA1_Channel1_IRQHandler() {
sym_arr[sym_pos] = -255;
idle_symbol++;
if (idle_symbol == 3) {
current_symbol = xfr_8b10b_encode(&encoder_state_8b10b, -K23_7);
idle_symbol = 0;
} else if (tx_sympos == sizeof(struct data_packet)) {
if (time_to_sync > 0) {
current_symbol = xfr_8b10b_encode(&encoder_state_8b10b, -K27_7);
sym_arr[sym_pos] = current_symbol;
time_to_sync--;
} else {
current_symbol = xfr_8b10b_encode(&encoder_state_8b10b, -K28_1);
sym_arr[sym_pos] = current_symbol;
packet_rng_state = xorshift32(1);
time_to_sync = SYNC_INTERVAL;
}
if (tx_sympos == sizeof(struct data_packet)) {
if (idle_buf_ready) {
union tx_buf_union *tmp = tx_buf_idle;
tx_buf_idle = tx_buf_read;
tx_buf_read = tmp;
idle_buf_ready = false;
}
tx_sympos = 0;
current_symbol = xfr_8b10b_encode(&encoder_state_8b10b, -K28_1);
sym_arr[sym_pos] = current_symbol;
packet_rng_state = xorshift32(1);
tx_sympos = 0;
} else {
current_symbol = xfr_8b10b_encode(&encoder_state_8b10b, -K23_7);
sym_arr[sym_pos] = current_symbol;
}
} else {
uint8_t b = tx_buf_read->bytes[tx_sympos];