Implement I2S0 8-bit LCD-mode DMA refresh

startI2S() sets up I2S0 in 8-bit parallel (LCD) mode at 5 MHz
(PLL_D2 160 MHz / 32, BCK div 1), routes stream bits 0..3 to
VID/TVID/HS/VS via I2S0O_DATA_OUT16+n and BCK to VCLK, and loops
DMA over an 18-descriptor chain of whole lines. stopI2S() stops TX,
returns the pins to GPIO low and frees the chain.

encodeRow() now stores clock c at c ^ 2 to match the 8-bit mode
byte order (bytes 2, 3, 0, 1 per word, as in bitluni's ESP32Lib).

Builds with no warnings; not yet checked on hardware.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
mangavalkandClaude Opus 5.5 committed 2026-10-05 21:08:36 +02:00
1 parent 873bdcd23e
commit 3640c7fb3f
5 files changed
+173 -29

No files matched your search

+5 -4
View File
@@ -8,8 +8,9 @@ The panel has no frame memory and needs a continuous video stream. The ESP32's I
peripheral in 8-bit parallel (LCD) mode streams a precomputed frame from DMA, so the
CPU is free while the panel refreshes.
**Status:** project skeleton. Framebuffer, GFX layer and row encoder are in place; the
I2S/DMA start-up (`EL512Panel::startI2S()`) is still a stub.
**Status:** framebuffer, GFX layer, row encoder and I2S/DMA refresh are implemented and
build cleanly; the signal timing has not yet been checked on hardware. Updates are not
yet tear-free.
## Hardware
@@ -22,7 +23,7 @@ I2S/DMA start-up (`EL512Panel::startI2S()`) is still a stub.
| Panel signal | Function | ESP32 GPIO | DMA byte bit |
|--------------|-----------------------------------------|-----------:|-------------:|
| VCLK | Video clock (rising edge) | 18 | I2S clock |
| VCLK | Video clock (rising edge) | 18 | I2S0 BCK |
| VID | Pixel data, even columns | 19 | 0 |
| TVID | Pixel data, odd columns (two-bit mode) | 21 | 1 |
| HS | Horizontal sync | 22 | 2 |
@@ -49,7 +50,7 @@ platformio.ini build config (esp32dev, Arduino, Adafruit GFX)
include/pins.h pin map
src/main.cpp test sketch: test pattern + text
lib/EL512/ local library
src/EL512Panel.* framebuffer, row encoder, I2S DMA refresh (stub)
src/EL512Panel.* framebuffer, row encoder, I2S DMA refresh
src/EL512_GFX.* Adafruit_GFX subclass
test/ unit tests (placeholder)
docs/ datasheet and notes