diff options
| author | Ha Thach <[email protected]> | 2021-01-23 23:28:35 +0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-01-23 23:28:35 +0700 |
| commit | 469ca2f1559800f4b1eabc860336ff33ed118718 (patch) | |
| tree | a6b68799030fd5cdc41881ebdbd259a8ee97b1e6 /hw | |
| parent | edd91d28f5afa175d7f52ec1bf1845ff29aabab9 (diff) | |
| parent | e6ce18b01990d5e06f12e0aeb57d53ce365ba7b7 (diff) | |
Merge pull request #600 from hathach/refactor-bsp
Refactor bsp
Diffstat (limited to 'hw')
| -rw-r--r-- | hw/bsp/esp32s2/boards/espressif_kaluga_1/board.h (renamed from hw/bsp/esp32s2/boards/esp32s2_kaluga_1/board.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/esp32s2/boards/espressif_saola_1/board.h (renamed from hw/bsp/esp32s2/boards/esp32s2_saola_1/board.h) | 0 | ||||
| -rw-r--r-- | hw/bsp/esp32s2/family.cmake | 6 | ||||
| -rw-r--r-- | hw/bsp/esp32s2/family.mk | 2 | ||||
| -rw-r--r-- | hw/bsp/raspberry_pi_pico/board_raspberry_pi_pico.c | 99 | ||||
| -rw-r--r-- | hw/bsp/rp2040/boards/raspberry_pi_pico/board.h | 46 | ||||
| -rw-r--r-- | hw/bsp/rp2040/family.c | 137 | ||||
| -rw-r--r-- | hw/bsp/rp2040/family.cmake | 3 | ||||
| -rw-r--r-- | hw/bsp/rp2040/family_extra.cmake | 1 | ||||
| m--------- | hw/mcu/raspberrypi/pico-sdk | 0 |
10 files changed, 193 insertions, 101 deletions
diff --git a/hw/bsp/esp32s2/boards/esp32s2_kaluga_1/board.h b/hw/bsp/esp32s2/boards/espressif_kaluga_1/board.h index 6bb44f76d..6bb44f76d 100644 --- a/hw/bsp/esp32s2/boards/esp32s2_kaluga_1/board.h +++ b/hw/bsp/esp32s2/boards/espressif_kaluga_1/board.h diff --git a/hw/bsp/esp32s2/boards/esp32s2_saola_1/board.h b/hw/bsp/esp32s2/boards/espressif_saola_1/board.h index f450b9a8b..f450b9a8b 100644 --- a/hw/bsp/esp32s2/boards/esp32s2_saola_1/board.h +++ b/hw/bsp/esp32s2/boards/espressif_saola_1/board.h diff --git a/hw/bsp/esp32s2/family.cmake b/hw/bsp/esp32s2/family.cmake new file mode 100644 index 000000000..c19221b14 --- /dev/null +++ b/hw/bsp/esp32s2/family.cmake @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.5) + +# Add example src and bsp directories +set(EXTRA_COMPONENT_DIRS "src" "${TOP}/hw/bsp/esp32s2/boards" "${TOP}/hw/bsp/esp32s2/components") +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +set(SUPPORTED_TARGETS esp32s2) diff --git a/hw/bsp/esp32s2/family.mk b/hw/bsp/esp32s2/family.mk deleted file mode 100644 index 167ef6226..000000000 --- a/hw/bsp/esp32s2/family.mk +++ /dev/null @@ -1,2 +0,0 @@ -# Cross Compiler for ESP32 -CROSS_COMPILE = xtensa-esp32s2-elf- diff --git a/hw/bsp/raspberry_pi_pico/board_raspberry_pi_pico.c b/hw/bsp/raspberry_pi_pico/board_raspberry_pi_pico.c deleted file mode 100644 index efdb54733..000000000 --- a/hw/bsp/raspberry_pi_pico/board_raspberry_pi_pico.c +++ /dev/null @@ -1,99 +0,0 @@ -/* - * The MIT License (MIT) - * - * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * This file is part of the TinyUSB stack. - */ - -#include "pico/stdlib.h" -#include "../board.h" - -#ifndef LED_PIN -#define LED_PIN PICO_DEFAULT_LED_PIN -#endif - -void board_init(void) -{ - setup_default_uart(); - gpio_init(LED_PIN); - gpio_set_dir(LED_PIN, 1); - - // Button - - // todo probably set up device mode? - -#if TUSB_OPT_HOST_ENABLED - // set portfunc to host !!! -#endif -} - -////--------------------------------------------------------------------+ -//// USB Interrupt Handler -////--------------------------------------------------------------------+ -//void USB_IRQHandler(void) -//{ -//#if CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST -// tuh_isr(0); -//#endif -// -//#if CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE -// tud_int_handler(0); -//#endif -//} - -//--------------------------------------------------------------------+ -// Board porting API -//--------------------------------------------------------------------+ - -void board_led_write(bool state) -{ - gpio_put(LED_PIN, state); -} - -uint32_t board_button_read(void) -{ - return 0; -} - -int board_uart_read(uint8_t* buf, int len) -{ - for(int i=0;i<len;i++) { - buf[i] = uart_getc(uart_default); - } - return 0; -} - -int board_uart_write(void const * buf, int len) -{ -// UART_Send(BOARD_UART_PORT, &c, 1, BLOCKING); - for(int i=0;i<len;i++) { - uart_putc(uart_default, ((char *)buf)[i]); - } - return 0; -} - -#if CFG_TUSB_OS == OPT_OS_NONE -uint32_t board_millis(void) -{ - return to_ms_since_boot(get_absolute_time()); -} -#endif diff --git a/hw/bsp/rp2040/boards/raspberry_pi_pico/board.h b/hw/bsp/rp2040/boards/raspberry_pi_pico/board.h new file mode 100644 index 000000000..61532d8cb --- /dev/null +++ b/hw/bsp/rp2040/boards/raspberry_pi_pico/board.h @@ -0,0 +1,46 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2021, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#ifndef BOARD_H_ +#define BOARD_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +#define LED_PIN PICO_DEFAULT_LED_PIN +#define LED_STATE_ON 1 + +// Button pin is BOOTSEL which is flash CS pin + +#define BUTTON_BOOTSEL +#define BUTTON_STATE_ACTIVE 0 + +#ifdef __cplusplus + } +#endif + +#endif /* BOARD_H_ */ diff --git a/hw/bsp/rp2040/family.c b/hw/bsp/rp2040/family.c new file mode 100644 index 000000000..e616acd19 --- /dev/null +++ b/hw/bsp/rp2040/family.c @@ -0,0 +1,137 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. + * Copyright (c) 2021, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#include "pico/stdlib.h" +#include "hardware/gpio.h" +#include "hardware/sync.h" +#include "hardware/structs/ioqspi.h" +#include "hardware/structs/sio.h" + +#include "bsp/board.h" +#include "board.h" + +#ifdef BUTTON_BOOTSEL +// This example blinks the Picoboard LED when the BOOTSEL button is pressed. +// +// Picoboard has a button attached to the flash CS pin, which the bootrom +// checks, and jumps straight to the USB bootcode if the button is pressed +// (pulling flash CS low). We can check this pin in by jumping to some code in +// SRAM (so that the XIP interface is not required), floating the flash CS +// pin, and observing whether it is pulled low. +// +// This doesn't work if others are trying to access flash at the same time, +// e.g. XIP streamer, or the other core. +bool __no_inline_not_in_flash_func(get_bootsel_button)() { + const uint CS_PIN_INDEX = 1; + + // Must disable interrupts, as interrupt handlers may be in flash, and we + // are about to temporarily disable flash access! + uint32_t flags = save_and_disable_interrupts(); + + // Set chip select to Hi-Z + hw_write_masked(&ioqspi_hw->io[CS_PIN_INDEX].ctrl, + GPIO_OVERRIDE_LOW << IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_LSB, + IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_BITS); + + // Note we can't call into any sleep functions in flash right now + for (volatile int i = 0; i < 1000; ++i); + + // The HI GPIO registers in SIO can observe and control the 6 QSPI pins. + // Note the button pulls the pin *low* when pressed. + bool button_state = (sio_hw->gpio_hi_in & (1u << CS_PIN_INDEX)); + + // Need to restore the state of chip select, else we are going to have a + // bad time when we return to code in flash! + hw_write_masked(&ioqspi_hw->io[CS_PIN_INDEX].ctrl, + GPIO_OVERRIDE_NORMAL << IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_LSB, + IO_QSPI_GPIO_QSPI_SS_CTRL_OEOVER_BITS); + + restore_interrupts(flags); + + return button_state; +} +#endif + +void board_init(void) +{ + setup_default_uart(); + gpio_init(LED_PIN); + gpio_set_dir(LED_PIN, GPIO_OUT); + + // Button +#ifndef BUTTON_BOOTSEL +#endif + + // todo probably set up device mode? +#if TUSB_OPT_DEVICE_ENABLED + +#endif + +#if TUSB_OPT_HOST_ENABLED + // set portfunc to host !!! +#endif +} + +//--------------------------------------------------------------------+ +// Board porting API +//--------------------------------------------------------------------+ + +void board_led_write(bool state) +{ + gpio_put(LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON)); +} + +uint32_t board_button_read(void) +{ +#ifdef BUTTON_BOOTSEL + return BUTTON_STATE_ACTIVE == get_bootsel_button(); +#else + return 0; +#endif +} + +int board_uart_read(uint8_t* buf, int len) +{ + for(int i=0;i<len;i++) { + buf[i] = uart_getc(uart_default); + } + return 0; +} + +int board_uart_write(void const * buf, int len) +{ + for(int i=0;i<len;i++) { + uart_putc(uart_default, ((char *)buf)[i]); + } + return 0; +} + +//--------------------------------------------------------------------+ +// USB Interrupt Handler +// rp2040 implementation will install approriate handler when initializing +// tinyusb. There is no need to forward IRQ from application +//--------------------------------------------------------------------+ diff --git a/hw/bsp/rp2040/family.cmake b/hw/bsp/rp2040/family.cmake new file mode 100644 index 000000000..8a3882cc0 --- /dev/null +++ b/hw/bsp/rp2040/family.cmake @@ -0,0 +1,3 @@ +cmake_minimum_required(VERSION 3.12) +set(PICO_SDK_PATH ${TOP}/hw/mcu/raspberrypi/pico-sdk) +include(${PICO_SDK_PATH}/pico_sdk_init.cmake) diff --git a/hw/bsp/rp2040/family_extra.cmake b/hw/bsp/rp2040/family_extra.cmake new file mode 100644 index 000000000..661845844 --- /dev/null +++ b/hw/bsp/rp2040/family_extra.cmake @@ -0,0 +1 @@ +pico_sdk_init() diff --git a/hw/mcu/raspberrypi/pico-sdk b/hw/mcu/raspberrypi/pico-sdk new file mode 160000 +Subproject ef38b746efaeb0aa1354406198a76da29302aad |
