diff options
Diffstat (limited to 'driver_fw')
-rw-r--r-- | driver_fw/src/main.c | 33 |
1 files changed, 11 insertions, 22 deletions
diff --git a/driver_fw/src/main.c b/driver_fw/src/main.c index 866cde5..4502784 100644 --- a/driver_fw/src/main.c +++ b/driver_fw/src/main.c @@ -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]; |