summaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
Diffstat (limited to 'hw')
-rw-r--r--hw/bsp/board.h8
-rw-r--r--hw/bsp/rp2040/family.c29
2 files changed, 18 insertions, 19 deletions
diff --git a/hw/bsp/board.h b/hw/bsp/board.h
index 0826d7786..52c64a1cc 100644
--- a/hw/bsp/board.h
+++ b/hw/bsp/board.h
@@ -132,15 +132,11 @@ static inline void board_delay(uint32_t ms)
}
}
+// stdio getchar() is blocking, this is non-blocking version for uart
static inline int board_uart_getchar(void)
{
uint8_t c;
- return board_uart_read(&c, 1) ? (int) c : (-1);
-}
-
-static inline int board_uart_putchar(uint8_t c)
-{
- return board_uart_write(&c, 1);
+ return ( board_uart_read(&c, 1) > 0 ) ? (int) c : (-1);
}
#ifdef __cplusplus
diff --git a/hw/bsp/rp2040/family.c b/hw/bsp/rp2040/family.c
index ee5a73ff6..d78e2c754 100644
--- a/hw/bsp/rp2040/family.c
+++ b/hw/bsp/rp2040/family.c
@@ -121,16 +121,6 @@ static uart_inst_t *uart_inst;
void board_init(void)
{
-#ifdef LED_PIN
- bi_decl(bi_1pin_with_name(LED_PIN, "LED"));
- gpio_init(LED_PIN);
- gpio_set_dir(LED_PIN, GPIO_OUT);
-#endif
-
- // Button
-#ifndef BUTTON_BOOTSEL
-#endif
-
#if CFG_TUH_RPI_PIO_USB || CFG_TUD_RPI_PIO_USB
// Set the system clock to a multiple of 120mhz for bitbanging USB with pico-usb
set_sys_clock_khz(120000, true);
@@ -148,6 +138,16 @@ void board_init(void)
tuh_configure(BOARD_TUH_RHPORT, TUH_CFGID_RPI_PIO_USB_CONFIGURATION, &pio_cfg);
#endif
+#ifdef LED_PIN
+ bi_decl(bi_1pin_with_name(LED_PIN, "LED"));
+ gpio_init(LED_PIN);
+ gpio_set_dir(LED_PIN, GPIO_OUT);
+#endif
+
+ // Button
+#ifndef BUTTON_BOOTSEL
+#endif
+
#if defined(UART_DEV) && defined(LIB_PICO_STDIO_UART)
bi_decl(bi_2pins_with_func(UART_TX_PIN, UART_TX_PIN, GPIO_FUNC_UART));
uart_inst = uart_get_instance(UART_DEV);
@@ -192,10 +192,13 @@ uint32_t board_button_read(void)
int board_uart_read(uint8_t* buf, int len)
{
#ifdef UART_DEV
- for(int i=0;i<len;i++) {
- buf[i] = uart_getc(uart_inst);
+ int count = 0;
+ while ( (count < len) && uart_is_readable(uart_inst) )
+ {
+ buf[count] = uart_getc(uart_inst);
+ count++;
}
- return len;
+ return count;
#else
(void) buf; (void) len;
return 0;