/* flashimg/vpu/main.c - Entry point for the HDMI-decoder co-processor * * Copyright (C) 2025 Luke T. Shumaker * SPDX-License-Identifier: AGPL-3.0-or-later */ #include #include #include /* for bi_* */ #include #include #define GPIO_PIN_DBG_UART_TX 0 #define GPIO_PIN_DBG_UART_RX 1 #define GPIO_PIN_META_ODCK 2 #define GPIO_PIN_META_DE 3 #define GPIO_PIN_META_SCDT 4 #define GPIO_PIN_RGB_B0 5 #define GPIO_PIN_RGB_B1 6 #define GPIO_PIN_RGB_G0 7 #define GPIO_PIN_RGB_G1 8 #define GPIO_PIN_RGB_G2 9 #define GPIO_PIN_RGB_R0 10 #define GPIO_PIN_RGB_R1 11 #define GPIO_PIN_RGB_R2 12 #define GPIO_PIN_HSYNC 13 #define GPIO_PIN_VSYNC 14 #define GPIO_PIN_UNUSED_V15 15 #define GPIO_PIN_NET_SPI_MISO 16 #define GPIO_PIN_NET_SPI_CS 17 #define GPIO_PIN_NET_SPI_CLK 18 #define GPIO_PIN_NET_SPI_MOSI 19 #define GPIO_PIN_NET_RST 20 #define GPIO_PIN_NET_INT 21 #define GPIO_PIN_DDC_SDA 22 #define GPIO_PIN_DDC_SCL 23 #define GPIO_PIN_UNUSED_V24 24 #define GPIO_PIN_LED 25 #define GPIO_PIN_UNUSED_V26 26 #define GPIO_PIN_UNUSED_V27 27 #define GPIO_PIN_UNUSED_V28 28 #define GPIO_PIN_UNUSED_V29 29 void __lm_putchar(unsigned char c) { if (c == '\n') { while (!uart_is_writable(uart0)) tight_loop_contents(); uart_get_hw(uart0)->dr = '\r'; } while (!uart_is_writable(uart0)) tight_loop_contents(); uart_get_hw(uart0)->dr = c; } int main() { for (uint gpio = 0; gpio < 30; gpio++) gpiopad_configure(gpio, GPIOPAD_CONF(NOIN, NOOUT, NO_PULL)); gpiopad_configure(GPIO_PIN_LED, GPIOPAD_CONF(NOIN, OUT(4MA, SLOW), PULL_DOWN)); gpio_init(GPIO_PIN_LED); gpio_set_dir(GPIO_PIN_LED, GPIO_OUT); bi_decl(bi_1pin_with_name(GPIO_PIN_LED, "LED")); gpiopad_configure(GPIO_PIN_DBG_UART_TX, GPIOPAD_CONF(NOIN, OUT(4MA, SLOW), PULL_DOWN)); gpiopad_configure(GPIO_PIN_DBG_UART_RX, GPIOPAD_CONF(IN(SCHMITT), NOOUT, PULL_DOWN)); uart_init(uart0, 115200); gpio_set_function(GPIO_PIN_DBG_UART_TX, GPIO_FUNC_UART); /* tx */ gpio_set_function(GPIO_PIN_DBG_UART_RX, GPIO_FUNC_UART); /* rx */ bi_decl(bi_2pins_with_names(GPIO_PIN_DBG_UART_TX, "UART TX", GPIO_PIN_DBG_UART_RX, "UART RX")); bool on = false; for (;;) { gpio_put(GPIO_PIN_LED, on = !on); sleep_ms(500); } }