generated from Weckyy702/pico-nix
Compare commits
2 Commits
7cdfb565f3
...
a5f4a1e3a8
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a5f4a1e3a8 | ||
|
|
74b74dcb6e |
69
flake.nix
69
flake.nix
@@ -1,38 +1,41 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs =
|
||||
{
|
||||
nixpkgs,
|
||||
flake-utils,
|
||||
...
|
||||
}: flake-utils.lib.eachDefaultSystem(system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
pico-sdk = pkgs.pico-sdk.override {
|
||||
withSubmodules = true;
|
||||
};
|
||||
PICO_SDK_PATH = "${pico-sdk}/lib/pico-sdk";
|
||||
in {
|
||||
devShell = pkgs.mkShell {
|
||||
name = "PicoVGA dev shell";
|
||||
inputsFrom = [ pico-sdk ];
|
||||
packages = with pkgs; [
|
||||
gcc-arm-embedded
|
||||
python3
|
||||
outputs =
|
||||
{ nixpkgs
|
||||
, flake-utils
|
||||
, ...
|
||||
}:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
pico-sdk = pkgs.pico-sdk.override {
|
||||
withSubmodules = true;
|
||||
};
|
||||
PICO_SDK_PATH = "${pico-sdk}/lib/pico-sdk";
|
||||
in
|
||||
{
|
||||
devShell = pkgs.mkShell {
|
||||
name = "PicoVGA dev shell";
|
||||
inputsFrom = [ pico-sdk ];
|
||||
packages = with pkgs; [
|
||||
gcc-arm-embedded
|
||||
python3
|
||||
pico-sdk
|
||||
|
||||
usbutils
|
||||
picotool
|
||||
pico-sdk
|
||||
];
|
||||
shellHook = ''
|
||||
ln -sf ${PICO_SDK_PATH}/external/pico_sdk_import.cmake pico_sdk_import.cmake
|
||||
'';
|
||||
picocom
|
||||
|
||||
inherit PICO_SDK_PATH;
|
||||
};
|
||||
});
|
||||
usbutils
|
||||
picotool
|
||||
];
|
||||
shellHook = ''
|
||||
ln -sf ${PICO_SDK_PATH}/external/pico_sdk_import.cmake pico_sdk_import.cmake
|
||||
'';
|
||||
|
||||
inherit PICO_SDK_PATH;
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
29
src/main.cpp
29
src/main.cpp
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user