diff options
Diffstat (limited to 'driver_fw')
-rw-r--r-- | driver_fw/src/main.c | 42 |
1 files changed, 31 insertions, 11 deletions
diff --git a/driver_fw/src/main.c b/driver_fw/src/main.c index b338a98..d5b0e83 100644 --- a/driver_fw/src/main.c +++ b/driver_fw/src/main.c @@ -177,25 +177,39 @@ int main(void) { dma_tx_constant(COUNT_OF(waveform_zero_one), 0x00); xfr_8b10b_encode_reset(&encoder_state_8b10b); - memset(tx_buf_write, 0, sizeof(*tx_buf_write)); - for (size_t i=0; i<COUNT_OF(tx_buf_write->packet.channels); i++) { - tx_buf_write->packet.channels[i] = 0x33; - } - for (size_t i=0; i<COUNT_OF(tx_buf_write->packet.brightness); i++) { - tx_buf_write->packet.brightness[i] = 0xff; - } - update_tx_buf(); - int i = 0; int j = 0; + int k = 0; + int n = 0; while (23) { i++; j++; i %= 6; j %= 4; - delay_us(100000); + delay_us(30000); set_rj45_leds(1 << j); set_status_leds(1 << i); + if (i == 0) { + k++; + if (k == 16) { + k = 0; + n++; + if (n == 16) { + n = 0; + } + } + + uint8_t b = (k < 8) ? (1<<k) : ~(1<<(k-8)); + + memset(tx_buf_write, 0, sizeof(*tx_buf_write)); + for (size_t i=0; i<COUNT_OF(tx_buf_write->packet.channels); i++) { + tx_buf_write->packet.channels[i] = 0xff; + } + for (size_t i=0; i<COUNT_OF(tx_buf_write->packet.brightness); i++) { + tx_buf_write->packet.brightness[i] = 0xff; //(n<<4) | n; + } + update_tx_buf(); + } } } @@ -229,6 +243,7 @@ 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 ++; @@ -257,7 +272,12 @@ void DMA1_Channel1_IRQHandler() { sym_arr[sym_pos] = -255; - if (tx_sympos == sizeof(struct data_packet)) { + 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; |