Add hsync and vsync signals for 480x640 resolution

This commit is contained in:
Weckyy702
2026-03-10 11:17:07 +01:00
parent 74b74dcb6e
commit a5f4a1e3a8

View File

@@ -1,25 +1,42 @@
#include "hardware/gpio.h"
#include "pico/stdlib.h"
#include <pico/time.h>
#include <concepts>
#include <cstdint>
#include <cstdio>
#include <pico/time.h>
constexpr static uint start_pin = 2;
constexpr static uint pin_mask = (0xFFF) << start_pin;
template <std::integral T> 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);
}
}
}