generated from Weckyy702/pico-nix
43 lines
1.1 KiB
C++
43 lines
1.1 KiB
C++
#include "hardware/gpio.h"
|
|
#include "pico/stdlib.h"
|
|
#include <pico/time.h>
|
|
|
|
#include <concepts>
|
|
#include <cstdint>
|
|
#include <cstdio>
|
|
|
|
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 (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);
|
|
}
|
|
}
|
|
}
|