summaryrefslogtreecommitdiff
path: root/flashimg/vpu/main.c
blob: d52159998d496574cf153be2a0b2f9f916c9787c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* flashimg/vpu/main.c - Entry point for the HDMI-decoder co-processor
 *
 * Copyright (C) 2025  Luke T. Shumaker <lukeshu@lukeshu.com>
 * SPDX-License-Identifier: AGPL-3.0-or-later
 */

#include <hardware/gpio.h>
#include <hardware/uart.h>
#include <pico/binary_info.h> /* for bi_* */
#include <pico/time.h>

#include <libpicosdk/rp2040_gpiopad.h>

#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);
	}
}