From 0ad81a999d93ff071475451e2f960b61e57cda98 Mon Sep 17 00:00:00 2001 From: Benjamin Kyd Date: Tue, 22 Jun 2021 20:26:47 +0100 Subject: [PATCH] bet --- .vscode/settings.json | 6 +++++- CMakeLists.txt | 25 ++++++++++++----------- picovga.c | 19 +++++++++++++++--- vga.h | 46 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 15 deletions(-) create mode 100644 vga.h diff --git a/.vscode/settings.json b/.vscode/settings.json index 7ca58bd..f9b1d38 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,5 +12,9 @@ "buildTarget" : { "visibility": "hidden" }, - }, + }, + "files.associations": { + "stdlib.h": "c", + "pio.h": "c" + }, } diff --git a/CMakeLists.txt b/CMakeLists.txt index 4afb48b..d05aa19 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,3 @@ -# Generated Cmake Pico project file - cmake_minimum_required(VERSION 3.13) set(CMAKE_C_STANDARD 11) @@ -12,23 +10,28 @@ set(PICO_SDK_PATH "/home/ben/pico/pico-sdk") # Pull in Raspberry Pi Pico SDK (must be before project) include(pico_sdk_import.cmake) -project(PicoVGA C CXX ASM) +project(pico_vga C CXX ASM) # Initialise the Raspberry Pi Pico SDK pico_sdk_init() -# Add executable. Default name is the project name, version 0.1 +add_executable(pico_vga) -add_executable(PicoVGA PicoVGA.c ) +pico_set_program_name(pico_vga "pico_vga") +pico_set_program_version(pico_vga "0.1") -pico_set_program_name(PicoVGA "PicoVGA") -pico_set_program_version(PicoVGA "0.1") +pico_enable_stdio_uart(pico_vga 1) +pico_enable_stdio_usb(pico_vga 1) -pico_enable_stdio_uart(PicoVGA 1) -pico_enable_stdio_usb(PicoVGA 1) +pico_generate_pio_header(pico_vga ${CMAKE_CURRENT_LIST_DIR}/video.pio) + +target_sources(pico_vga PRIVATE picovga.c) # Add the standard library to the build -target_link_libraries(PicoVGA pico_stdlib) +target_link_libraries(pico_vga + pico_stdlib + hardware_pio + ) -pico_add_extra_outputs(PicoVGA) +pico_add_extra_outputs(pico_vga) diff --git a/picovga.c b/picovga.c index 647e9f8..1f49cca 100644 --- a/picovga.c +++ b/picovga.c @@ -6,14 +6,27 @@ // "assembled program" #include "video.pio.h" -const uint OUTPIN = 1; +#include "vga.h" int main() { - PIO pio = pio0; - + uint prog = pio_add_program(pio, &video_program); + + uint sm = pio_claim_unused_sm(pio, 1); + + video_program_init(pio, sm, progoffset, PICO_DEFAULT_LED_PIN); + + while (true) { + // Blink + pio_sm_put_blocking(pio, sm, 1); + sleep_ms(500); + // Blonk + pio_sm_put_blocking(pio, sm, 0); + sleep_ms(500); + } + return 0; } diff --git a/vga.h b/vga.h new file mode 100644 index 0000000..820639f --- /dev/null +++ b/vga.h @@ -0,0 +1,46 @@ +#include "pico/types.h" + +typedef struct scanvideo_timing { + uint32_t clock_freq; + + uint16_t h_active; + uint16_t v_active; + + uint16_t h_front_porch; + uint16_t h_pulse; + uint16_t h_total; + uint8_t h_sync_polarity; + + uint16_t v_front_porch; + uint16_t v_pulse; + uint16_t v_total; + uint8_t v_sync_polarity; + + uint8_t enable_clock; + uint8_t clock_polarity; + + uint8_t enable_den; +} scanvideo_timing_t; + +const scanvideo_timing_t vga_timing_800x600_60 = +{ + .clock_freq = 38400000, + + .h_active = 800, + .v_active = 600, + + .h_front_porch = 4 * 8, + .h_pulse = 10 * 8, + .h_total = 128 * 8, + .h_sync_polarity = 0, + + .v_front_porch = 1, + .v_pulse = 3, + .v_total = 625, + .v_sync_polarity = 0, + + .enable_clock = 0, + .clock_polarity = 0, + + .enable_den = 0 +};