From a5f4a1e3a8673e5d124ae1386db959b9502c6b5b Mon Sep 17 00:00:00 2001 From: Weckyy702 Date: Tue, 10 Mar 2026 11:17:07 +0100 Subject: [PATCH] Add hsync and vsync signals for 480x640 resolution --- src/main.cpp | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 8c53019..2dbedd7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,25 +1,42 @@ #include "hardware/gpio.h" #include "pico/stdlib.h" +#include + +#include #include #include -#include constexpr static uint start_pin = 2; constexpr static uint pin_mask = (0xFFF) << start_pin; +template constexpr bool between(T x, T min, T max) { + return (x >= min) && (x < max); +} + int main() { stdio_init_all(); for (uint offset{}; offset != 14; ++offset) { auto const pin = start_pin + offset; + std::printf("Initializing GPIO %d\n", pin); gpio_init(pin); gpio_set_dir(pin, GPIO_OUT); } - for (uint16_t pixel{};; ++pixel) { - auto const set_mask = (pixel & 0xFFF) << start_pin; - printf("Set mask=%03x", pixel); - gpio_put_masked(pin_mask, set_mask); - sleep_ms(100); + for (uint32_t y{}; y != 525; ++y) { + for (uint32_t x{}; x != 800; ++x) { + const auto is_blanking = y >= 480 || x >= 640; + const auto hsync = between(x, 656ul, 752ul); + const auto vsync = between(y, 490ul, 492ul); + + auto const pixel = (0u << 8) | ((y & 0xF) << 4) | (x & 0xF); + auto const set_mask = + (((uint32_t)vsync << 13) | ((uint32_t)hsync << 12) | (pixel & 0xFFF)) + << start_pin; + + std::printf("Set mask=%04X\n", set_mask >> start_pin); + gpio_put_masked(pin_mask, set_mask); + sleep_ms(10); + } } }