From 3f57320f181618b7f655077e4cb01c2b81731515 Mon Sep 17 00:00:00 2001 From: Jan Vos Date: Wed, 12 Aug 2026 11:04:35 +0200 Subject: [PATCH 1/3] implement skipping of first buffer --- src/dmdreader.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/dmdreader.cpp b/src/dmdreader.cpp index 74311b3..0acf079 100644 --- a/src/dmdreader.cpp +++ b/src/dmdreader.cpp @@ -117,6 +117,7 @@ bool detected_1_0_0_0 = false; bool locked_in = false; bool plane0_shifted = false; bool loopback = false; +bool filled_buffer = false; // SPI PIO PIO spi_pio; @@ -912,12 +913,16 @@ void dmd_dma_handler() { loopback ? source_bytes : target_bytes); dmd_prepare_dma_sniffer(); + switch_buffers(); + + if (!filled_buffer) { + filled_buffer = true; + return; + } frame_crc = dma_hw->sniff_data; dma_hw->sniff_data = 0xFFFFFFFF; // always clean after sniffing! - switch_buffers(); - if (frame_crc != crc_previous_frame) { crc_previous_frame = frame_crc; frame_received = true; From 72ae2d7eea263ac34f91ccba4b094693b41961e1 Mon Sep 17 00:00:00 2001 From: Jan Vos Date: Wed, 12 Aug 2026 16:41:55 +0200 Subject: [PATCH 2/3] adjust order of execution when buffer needs to be filled. --- src/dmdreader.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/dmdreader.cpp b/src/dmdreader.cpp index 0acf079..9b27d9c 100644 --- a/src/dmdreader.cpp +++ b/src/dmdreader.cpp @@ -913,16 +913,17 @@ void dmd_dma_handler() { loopback ? source_bytes : target_bytes); dmd_prepare_dma_sniffer(); + frame_crc = dma_hw->sniff_data; + dma_hw->sniff_data = 0xFFFFFFFF; // always clean after sniffing! + switch_buffers(); + // first buffer sent is empty, so allow it to fill up first. if (!filled_buffer) { filled_buffer = true; return; } - frame_crc = dma_hw->sniff_data; - dma_hw->sniff_data = 0xFFFFFFFF; // always clean after sniffing! - if (frame_crc != crc_previous_frame) { crc_previous_frame = frame_crc; frame_received = true; From bfe288aba791d76c2c440036f8464bbdc8e0cff6 Mon Sep 17 00:00:00 2001 From: Jan Vos Date: Wed, 12 Aug 2026 21:34:17 +0200 Subject: [PATCH 3/3] use the already available variable instead for offset_x16. --- src/dmdreader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dmdreader.cpp b/src/dmdreader.cpp index 9b27d9c..073b227 100644 --- a/src/dmdreader.cpp +++ b/src/dmdreader.cpp @@ -807,7 +807,7 @@ void dmd_dma_handler() { // merge the rows and convert from 4bpp to 2bpp with a LUT uint32_t *dst, *src1, *src2; dst = framebuf + 64; // start in the middle of 128x32 frame - src1 = framebuf + 511; // everything is stored from here onwards + src1 = framebuf + offset_x16; // everything is stored from here onwards src2 = src1 + source_dwordsperline; if (dmd_type == DMD_DE_X16_V1) {