summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2021-03-01 00:39:48 +0700
committerhathach <[email protected]>2021-03-01 00:39:48 +0700
commit2e42858537c06d660bf975e5363173da0c843c9d (patch)
treed76faa1eadf4742c9ebfbdb8bf72d4014c5c150e
parentc61464ebaaebaf7571e07e7e59d2645967d8d7c2 (diff)
move lpc55 into its own family
-rw-r--r--hw/bsp/lpc55/boards/double_m33_express/LPC55S69_cm33_core0_uf2.ld (renamed from hw/bsp/double_m33_express/LPC55S69_cm33_core0_uf2.ld)0
-rw-r--r--hw/bsp/lpc55/boards/double_m33_express/board.h60
-rw-r--r--hw/bsp/lpc55/boards/double_m33_express/board.mk10
-rw-r--r--hw/bsp/lpc55/boards/lpcxpresso55s69/board.h53
-rw-r--r--hw/bsp/lpc55/boards/lpcxpresso55s69/board.mk9
-rw-r--r--hw/bsp/lpc55/family.c (renamed from hw/bsp/double_m33_express/double_m33_express.c)72
-rw-r--r--hw/bsp/lpc55/family.mk (renamed from hw/bsp/double_m33_express/board.mk)20
-rw-r--r--hw/bsp/lpcxpresso55s69/board.mk49
-rw-r--r--hw/bsp/lpcxpresso55s69/lpcxpresso55s69.c227
-rw-r--r--hw/bsp/stm32f4/family.mk3
10 files changed, 170 insertions, 333 deletions
diff --git a/hw/bsp/double_m33_express/LPC55S69_cm33_core0_uf2.ld b/hw/bsp/lpc55/boards/double_m33_express/LPC55S69_cm33_core0_uf2.ld
index 6b5d852aa..6b5d852aa 100644
--- a/hw/bsp/double_m33_express/LPC55S69_cm33_core0_uf2.ld
+++ b/hw/bsp/lpc55/boards/double_m33_express/LPC55S69_cm33_core0_uf2.ld
diff --git a/hw/bsp/lpc55/boards/double_m33_express/board.h b/hw/bsp/lpc55/boards/double_m33_express/board.h
new file mode 100644
index 000000000..e73d700ba
--- /dev/null
+++ b/hw/bsp/lpc55/boards/double_m33_express/board.h
@@ -0,0 +1,60 @@
+/*
+ * 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
+
+// LED
+#define LED_PORT 0
+#define LED_PIN 1
+#define LED_STATE_ON 1
+
+// WAKE button
+#define BUTTON_PORT 0
+#define BUTTON_PIN 5
+#define BUTTON_STATE_ACTIVE 0
+
+// Number of neopixels
+#define NEOPIXEL_NUMBER 2
+#define NEOPIXEL_PORT 0
+#define NEOPIXEL_PIN 27
+#define NEOPIXEL_CH 6
+#define NEOPIXEL_TYPE 0
+
+// UART
+#define UART_DEV USART0
+#define UART_RX_PINMUX 0U, 29U, IOCON_PIO_DIG_FUNC1_EN
+#define UART_TX_PINMUX 0U, 30U, IOCON_PIO_DIG_FUNC1_EN
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif
diff --git a/hw/bsp/lpc55/boards/double_m33_express/board.mk b/hw/bsp/lpc55/boards/double_m33_express/board.mk
new file mode 100644
index 000000000..e6c58be38
--- /dev/null
+++ b/hw/bsp/lpc55/boards/double_m33_express/board.mk
@@ -0,0 +1,10 @@
+MCU_VARIANT = LPC55S69_cm33_core0
+
+CFLAGS += -DCPU_LPC55S69JBD100_cm33_core0
+LD_FILE = $(BOARD_PATH)/LPC55S69_cm33_core0_uf2.ld
+
+JLINK_DEVICE = LPC55S69
+PYOCD_TARGET = LPC55S69
+
+# flash using pyocd
+flash: flash-pyocd
diff --git a/hw/bsp/lpc55/boards/lpcxpresso55s69/board.h b/hw/bsp/lpc55/boards/lpcxpresso55s69/board.h
new file mode 100644
index 000000000..7e76df953
--- /dev/null
+++ b/hw/bsp/lpc55/boards/lpcxpresso55s69/board.h
@@ -0,0 +1,53 @@
+/*
+ * 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
+
+// LED
+#define LED_PORT 1
+#define LED_PIN 6
+#define LED_STATE_ON 0
+
+// WAKE button
+#define BUTTON_PORT 1
+#define BUTTON_PIN 18
+#define BUTTON_STATE_ACTIVE 0
+
+// UART
+//#define UART_DEV USART0
+//#define UART_RX_PINMUX 0U, 29U, IOCON_PIO_DIG_FUNC1_EN
+//#define UART_TX_PINMUX 0U, 30U, IOCON_PIO_DIG_FUNC1_EN
+
+#ifdef __cplusplus
+ }
+#endif
+
+#endif
diff --git a/hw/bsp/lpc55/boards/lpcxpresso55s69/board.mk b/hw/bsp/lpc55/boards/lpcxpresso55s69/board.mk
new file mode 100644
index 000000000..fd01c7d72
--- /dev/null
+++ b/hw/bsp/lpc55/boards/lpcxpresso55s69/board.mk
@@ -0,0 +1,9 @@
+MCU_VARIANT = LPC55S69_cm33_core0
+
+CFLAGS += -DCPU_LPC55S69JBD100_cm33_core0
+
+JLINK_DEVICE = LPC55S69
+PYOCD_TARGET = LPC55S69
+
+# flash using pyocd
+flash: flash-pyocd
diff --git a/hw/bsp/double_m33_express/double_m33_express.c b/hw/bsp/lpc55/family.c
index 655f23cc0..0e238129d 100644
--- a/hw/bsp/double_m33_express/double_m33_express.c
+++ b/hw/bsp/lpc55/family.c
@@ -24,7 +24,8 @@
* This file is part of the TinyUSB stack.
*/
-#include "../board.h"
+#include "bsp/board.h"
+#include "board.h"
#include "fsl_device_registers.h"
#include "fsl_gpio.h"
#include "fsl_power.h"
@@ -49,45 +50,23 @@ void USB1_IRQHandler(void)
//--------------------------------------------------------------------+
// MACRO TYPEDEF CONSTANT ENUM
//--------------------------------------------------------------------+
-#define LED_PORT 0
-#define LED_PIN 1
-#define LED_STATE_ON 1
-
-// WAKE button
-#define BUTTON_PORT 0
-#define BUTTON_PIN 5
-#define BUTTON_STATE_ACTIVE 0
-
-// Number of neopixels
-#define NEOPIXEL_NUMBER 2
-#define NEOPIXEL_PORT 0
-#define NEOPIXEL_PIN 27
-#define NEOPIXEL_CH 6
-#define NEOPIXEL_TYPE 0
-
-// UART
-#define UART_DEV USART0
// IOCON pin mux
-#define IOCON_PIO_DIGITAL_EN 0x0100u /*!<@brief Enables digital function */
-#define IOCON_PIO_FUNC0 0x00u /*!<@brief Selects pin function 0 */
-#define IOCON_PIO_FUNC1 0x01u /*!<@brief Selects pin function 1 */
-#define IOCON_PIO_FUNC4 0x04u /*!<@brief Selects pin function 4 */
-#define IOCON_PIO_FUNC7 0x07u /*!<@brief Selects pin function 7 */
-#define IOCON_PIO_INV_DI 0x00u /*!<@brief Input function is not inverted */
-#define IOCON_PIO_MODE_INACT 0x00u /*!<@brief No addition pin function */
-#define IOCON_PIO_OPENDRAIN_DI 0x00u /*!<@brief Open drain is disabled */
-#define IOCON_PIO_SLEW_STANDARD 0x00u /*!<@brief Standard mode, output slew rate control is enabled */
+#define IOCON_PIO_DIGITAL_EN 0x0100u /*!<@brief Enables digital function */
+#define IOCON_PIO_FUNC0 0x00u /*!<@brief Selects pin function 0 */
+#define IOCON_PIO_FUNC1 0x01u /*!<@brief Selects pin function 1 */
+#define IOCON_PIO_FUNC4 0x04u /*!<@brief Selects pin function 4 */
+#define IOCON_PIO_FUNC7 0x07u /*!<@brief Selects pin function 7 */
+#define IOCON_PIO_INV_DI 0x00u /*!<@brief Input function is not inverted */
+#define IOCON_PIO_MODE_INACT 0x00u /*!<@brief No addition pin function */
+#define IOCON_PIO_OPENDRAIN_DI 0x00u /*!<@brief Open drain is disabled */
+#define IOCON_PIO_SLEW_STANDARD 0x00u /*!<@brief Standard mode, output slew rate control is enabled */
#define IOCON_PIO_DIG_FUNC0_EN (IOCON_PIO_DIGITAL_EN | IOCON_PIO_FUNC0) /*!<@brief Digital pin function 0 enabled */
#define IOCON_PIO_DIG_FUNC1_EN (IOCON_PIO_DIGITAL_EN | IOCON_PIO_FUNC1) /*!<@brief Digital pin function 1 enabled */
#define IOCON_PIO_DIG_FUNC4_EN (IOCON_PIO_DIGITAL_EN | IOCON_PIO_FUNC4) /*!<@brief Digital pin function 2 enabled */
#define IOCON_PIO_DIG_FUNC7_EN (IOCON_PIO_DIGITAL_EN | IOCON_PIO_FUNC7) /*!<@brief Digital pin function 2 enabled */
-
-// Global Variables
-uint32_t pixelData[NEOPIXEL_NUMBER];
-
/****************************************************************
name: BOARD_BootClockFROHF96M
outputs:
@@ -138,18 +117,20 @@ void board_init(void)
NVIC_SetPriority(USB0_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
#endif
+ // Init all GPIO ports
GPIO_PortInit(GPIO, 0);
GPIO_PortInit(GPIO, 1);
// LED
- /* PORT0 PIN1 configured as PIO0_1 */
- IOCON_PinMuxSet(IOCON, 0U, 1U, IOCON_PIO_DIG_FUNC0_EN);
-
+ IOCON_PinMuxSet(IOCON, LED_PORT, LED_PIN, IOCON_PIO_DIG_FUNC0_EN);
gpio_pin_config_t const led_config = { kGPIO_DigitalOutput, 1};
GPIO_PinInit(GPIO, LED_PORT, LED_PIN, &led_config);
+ board_led_write(0);
+
+#ifdef NEOPIXEL_PIN
// Neopixel
- /* PORT0 PIN27 configured as SCT0_OUT6 */
+ static uint32_t pixelData[NEOPIXEL_NUMBER];
IOCON_PinMuxSet(IOCON, NEOPIXEL_PORT, NEOPIXEL_PIN, IOCON_PIO_DIG_FUNC4_EN);
sctpix_init(NEOPIXEL_TYPE);
@@ -157,22 +138,18 @@ void board_init(void)
sctpix_setPixel(NEOPIXEL_CH, 0, 0x100010);
sctpix_setPixel(NEOPIXEL_CH, 1, 0x100010);
sctpix_show();
-
+#endif
// Button
- /* PORT0 PIN5 configured as PIO0_5 */
IOCON_PinMuxSet(IOCON, BUTTON_PORT, BUTTON_PIN, IOCON_PIO_DIG_FUNC0_EN);
-
gpio_pin_config_t const button_config = { kGPIO_DigitalInput, 0};
GPIO_PinInit(GPIO, BUTTON_PORT, BUTTON_PIN, &button_config);
+#if defined(UART_DEV)
// UART
- /* PORT0 PIN29 (coords: 92) is configured as FC0_RXD_SDA_MOSI_DATA */
- IOCON_PinMuxSet(IOCON, 0U, 29U, IOCON_PIO_DIG_FUNC1_EN);
- /* PORT0 PIN30 (coords: 94) is configured as FC0_TXD_SCL_MISO_WS */
- IOCON_PinMuxSet(IOCON, 0U, 30U, IOCON_PIO_DIG_FUNC1_EN);
+ IOCON_PinMuxSet(IOCON, UART_RX_PINMUX);
+ IOCON_PinMuxSet(IOCON, UART_TX_PINMUX);
-#if defined(UART_DEV) && CFG_TUSB_DEBUG
// Enable UART when debug log is on
CLOCK_AttachClk(kFRO12M_to_FLEXCOMM0);
usart_config_t uart_config;
@@ -200,7 +177,7 @@ void board_init(void)
RESET_PeripheralReset(kUSB1_RST_SHIFT_RSTn);
RESET_PeripheralReset(kUSB1RAM_RST_SHIFT_RSTn);
-#if (defined CFG_TUSB_RHPORT1_MODE) && (CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE)
+#if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
CLOCK_EnableClock(kCLOCK_Usbh1);
/* Put PHY powerdown under software control */
USBHSH->PORTMODE = USBHSH_PORTMODE_SW_PDCOM_MASK;
@@ -210,7 +187,7 @@ void board_init(void)
CLOCK_DisableClock(kCLOCK_Usbh1);
#endif
-#if (defined CFG_TUSB_RHPORT0_MODE) && (CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE)
+#if CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE
// Enable USB Clock Adjustments to trim the FRO for the full speed controller
ANACTRL->FRO192M_CTRL |= ANACTRL_FRO192M_CTRL_USBCLKADJ_MASK;
CLOCK_SetClkDiv(kCLOCK_DivUsb0Clk, 1, false);
@@ -233,6 +210,8 @@ void board_init(void)
void board_led_write(bool state)
{
GPIO_PinWrite(GPIO, LED_PORT, LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON));
+
+#ifdef NEOPIXEL_PIN
if (state) {
sctpix_setPixel(NEOPIXEL_CH, 0, 0x100000);
sctpix_setPixel(NEOPIXEL_CH, 1, 0x101010);
@@ -241,6 +220,7 @@ void board_led_write(bool state)
sctpix_setPixel(NEOPIXEL_CH, 1, 0x000010);
}
sctpix_show();
+#endif
}
uint32_t board_button_read(void)
diff --git a/hw/bsp/double_m33_express/board.mk b/hw/bsp/lpc55/family.mk
index 5757aa5cd..08f3ec251 100644
--- a/hw/bsp/double_m33_express/board.mk
+++ b/hw/bsp/lpc55/family.mk
@@ -1,3 +1,7 @@
+UF2_FAMILY_ID = 0x2abc77ec
+
+include $(TOP)/$(BOARD_PATH)/board.mk
+
CFLAGS += \
-flto \
-mthumb \
@@ -5,7 +9,6 @@ CFLAGS += \
-mcpu=cortex-m33 \
-mfloat-abi=hard \
-mfpu=fpv5-sp-d16 \
- -DCPU_LPC55S69JBD100_cm33_core0 \
-DCFG_TUSB_MCU=OPT_MCU_LPC55XX \
-DCFG_TUSB_MEM_SECTION='__attribute__((section(".data")))' \
-DCFG_TUSB_MEM_ALIGN='__attribute__((aligned(64)))'
@@ -16,10 +19,10 @@ CFLAGS += -Wno-error=unused-parameter -Wno-error=float-equal
MCU_DIR = hw/mcu/nxp/sdk/devices/LPC55S69
# All source paths should be relative to the top level.
-LD_FILE = hw/bsp/$(BOARD)/LPC55S69_cm33_core0_uf2.ld
+LD_FILE ?= $(MCU_DIR)/gcc/$(MCU_VARIANT)_flash.ld
SRC_C += \
- $(MCU_DIR)/system_LPC55S69_cm33_core0.c \
+ $(MCU_DIR)/system_$(MCU_VARIANT).c \
$(MCU_DIR)/drivers/fsl_clock.c \
$(MCU_DIR)/drivers/fsl_gpio.c \
$(MCU_DIR)/drivers/fsl_power.c \
@@ -29,14 +32,13 @@ SRC_C += \
lib/sct_neopixel/sct_neopixel.c
INC += \
- $(TOP)/hw/bsp/ \
- $(TOP)/hw/bsp/$(BOARD) \
+ $(TOP)/$(BOARD_PATH) \
$(TOP)/lib/sct_neopixel \
$(TOP)/$(MCU_DIR)/../../CMSIS/Include \
$(TOP)/$(MCU_DIR) \
$(TOP)/$(MCU_DIR)/drivers
-SRC_S += $(MCU_DIR)/gcc/startup_LPC55S69_cm33_core0.S
+SRC_S += $(MCU_DIR)/gcc/startup_$(MCU_VARIANT).S
LIBS += $(TOP)/$(MCU_DIR)/gcc/libpower_hardabi.a
@@ -48,8 +50,8 @@ CHIP_FAMILY = lpc_ip3511
FREERTOS_PORT = ARM_CM33_NTZ/non_secure
# For flash-jlink target
-JLINK_DEVICE = LPC55S69
+#JLINK_DEVICE = LPC55S69
# flash using pyocd
-flash: $(BUILD)/$(PROJECT).hex
- pyocd flash -t LPC55S69 $<
+#flash: $(BUILD)/$(PROJECT).hex
+# pyocd flash -t LPC55S69 $<
diff --git a/hw/bsp/lpcxpresso55s69/board.mk b/hw/bsp/lpcxpresso55s69/board.mk
deleted file mode 100644
index 646ca2833..000000000
--- a/hw/bsp/lpcxpresso55s69/board.mk
+++ /dev/null
@@ -1,49 +0,0 @@
-CFLAGS += \
- -flto \
- -mthumb \
- -mabi=aapcs \
- -mcpu=cortex-m33 \
- -mfloat-abi=hard \
- -mfpu=fpv5-sp-d16 \
- -DCPU_LPC55S69JBD100_cm33_core0 \
- -DCFG_TUSB_MCU=OPT_MCU_LPC55XX \
- -DCFG_TUSB_MEM_SECTION='__attribute__((section(".data")))' \
- -DCFG_TUSB_MEM_ALIGN='__attribute__((aligned(64)))'
-
-# mcu driver cause following warnings
-CFLAGS += -Wno-error=unused-parameter -Wno-error=float-equal
-
-MCU_DIR = hw/mcu/nxp/sdk/devices/LPC55S69
-
-# All source paths should be relative to the top level.
-LD_FILE = $(MCU_DIR)/gcc/LPC55S69_cm33_core0_flash.ld
-
-SRC_C += \
- $(MCU_DIR)/system_LPC55S69_cm33_core0.c \
- $(MCU_DIR)/drivers/fsl_clock.c \
- $(MCU_DIR)/drivers/fsl_gpio.c \
- $(MCU_DIR)/drivers/fsl_power.c \
- $(MCU_DIR)/drivers/fsl_reset.c
-
-INC += \
- $(TOP)/$(MCU_DIR)/../../CMSIS/Include \
- $(TOP)/$(MCU_DIR) \
- $(TOP)/$(MCU_DIR)/drivers
-
-SRC_S += $(MCU_DIR)/gcc/startup_LPC55S69_cm33_core0.S
-
-LIBS += $(TOP)/$(MCU_DIR)/gcc/libpower_hardabi.a
-
-# For TinyUSB port source
-VENDOR = nxp
-CHIP_FAMILY = lpc_ip3511
-
-# For freeRTOS port source
-FREERTOS_PORT = ARM_CM33_NTZ/non_secure
-
-# For flash-jlink target
-JLINK_DEVICE = LPC55S69
-
-# flash using pyocd
-flash: $(BUILD)/$(PROJECT).hex
- pyocd flash -t LPC55S69 $<
diff --git a/hw/bsp/lpcxpresso55s69/lpcxpresso55s69.c b/hw/bsp/lpcxpresso55s69/lpcxpresso55s69.c
deleted file mode 100644
index a17cffe9c..000000000
--- a/hw/bsp/lpcxpresso55s69/lpcxpresso55s69.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * The MIT License (MIT)
- *
- * Copyright (c) 2018, hathach (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 "../board.h"
-#include "fsl_device_registers.h"
-#include "fsl_gpio.h"
-#include "fsl_power.h"
-#include "fsl_iocon.h"
-
-//--------------------------------------------------------------------+
-// Forward USB interrupt events to TinyUSB IRQ Handler
-//--------------------------------------------------------------------+
-void USB0_IRQHandler(void)
-{
- tud_int_handler(0);
-}
-
-void USB1_IRQHandler(void)
-{
- tud_int_handler(1);
-}
-
-//--------------------------------------------------------------------+
-// MACRO TYPEDEF CONSTANT ENUM
-//--------------------------------------------------------------------+
-#define LED_PORT 1
-#define LED_PIN 6
-#define LED_STATE_ON 0
-
-// WAKE button
-#define BUTTON_PORT 1
-#define BUTTON_PIN 18
-#define BUTTON_STATE_ACTIVE 0
-
-// IOCON pin mux
-#define IOCON_PIO_DIGITAL_EN 0x0100u /*!<@brief Enables digital function */
-#define IOCON_PIO_FUNC0 0x00u /*!<@brief Selects pin function 0 */
-#define IOCON_PIO_FUNC1 0x01u /*!<@brief Selects pin function 1 */
-#define IOCON_PIO_FUNC7 0x07u /*!<@brief Selects pin function 7 */
-#define IOCON_PIO_INV_DI 0x00u /*!<@brief Input function is not inverted */
-#define IOCON_PIO_MODE_INACT 0x00u /*!<@brief No addition pin function */
-#define IOCON_PIO_OPENDRAIN_DI 0x00u /*!<@brief Open drain is disabled */
-#define IOCON_PIO_SLEW_STANDARD 0x00u /*!<@brief Standard mode, output slew rate control is enabled */
-
-/****************************************************************
-name: BOARD_BootClockFROHF96M
-outputs:
-- {id: SYSTICK_clock.outFreq, value: 96 MHz}
-- {id: System_clock.outFreq, value: 96 MHz}
-settings:
-- {id: SYSCON.MAINCLKSELA.sel, value: SYSCON.fro_hf}
-sources:
-- {id: SYSCON.fro_hf.outFreq, value: 96 MHz}
-******************************************************************/
-void BootClockFROHF96M(void)
-{
- /*!< Set up the clock sources */
- /*!< Set up FRO */
- POWER_DisablePD(kPDRUNCFG_PD_FRO192M); /*!< Ensure FRO is on */
- CLOCK_SetupFROClocking(12000000U); /*!< Set up FRO to the 12 MHz, just for sure */
- CLOCK_AttachClk(kFRO12M_to_MAIN_CLK); /*!< Switch to FRO 12MHz first to ensure we can change voltage without
- accidentally being below the voltage for current speed */
-
- CLOCK_SetupFROClocking(96000000U); /*!< Set up high frequency FRO output to selected frequency */
-
- POWER_SetVoltageForFreq(96000000U); /*!< Set voltage for the one of the fastest clock outputs: System clock output */
- CLOCK_SetFLASHAccessCyclesForFreq(96000000U); /*!< Set FLASH wait states for core */
-
- /*!< Set up dividers */
- CLOCK_SetClkDiv(kCLOCK_DivAhbClk, 1U, false); /*!< Set AHBCLKDIV divider to value 1 */
-
- /*!< Set up clock selectors - Attach clocks to the peripheries */
- CLOCK_AttachClk(kFRO_HF_to_MAIN_CLK); /*!< Switch MAIN_CLK to FRO_HF */
-
- /*!< Set SystemCoreClock variable. */
- SystemCoreClock = 96000000U;
-}
-
-void board_init(void)
-{
- // Enable IOCON clock
- CLOCK_EnableClock(kCLOCK_Iocon);
-
- // Init 96 MHz clock
- BootClockFROHF96M();
-
-#if CFG_TUSB_OS == OPT_OS_NONE
- // 1ms tick timer
- SysTick_Config(SystemCoreClock / 1000);
-#elif CFG_TUSB_OS == OPT_OS_FREERTOS
- // If freeRTOS is used, IRQ priority is limit by max syscall ( smaller is higher )
- NVIC_SetPriority(USB0_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
-#endif
-
- GPIO_PortInit(GPIO, LED_PORT);
- GPIO_PortInit(GPIO, BUTTON_PORT);
-
- // LED
- gpio_pin_config_t const led_config = { kGPIO_DigitalOutput, 0};
- GPIO_PinInit(GPIO, LED_PORT, LED_PIN, &led_config);
- board_led_write(true);
-
- // Button
- const uint32_t port1_pin18_config = (
- IOCON_PIO_FUNC0 | /* Pin is configured as PIO1_18 */
- IOCON_PIO_MODE_INACT | /* No addition pin function */
- IOCON_PIO_SLEW_STANDARD | /* Standard mode, output slew rate control is enabled */
- IOCON_PIO_INV_DI | /* Input function is not inverted */
- IOCON_PIO_DIGITAL_EN | /* Enables digital function */
- IOCON_PIO_OPENDRAIN_DI /* Open drain is disabled */
- );
- /* PORT1 PIN18 (coords: 64) is configured as PIO1_18 */
- IOCON_PinMuxSet(IOCON, 1U, 18U, port1_pin18_config);
-
- gpio_pin_config_t const button_config = { kGPIO_DigitalInput, 0};
- GPIO_PinInit(GPIO, BUTTON_PORT, BUTTON_PIN, &button_config);
-
- // USB VBUS
- const uint32_t port0_pin22_config = (
- IOCON_PIO_FUNC7 | /* Pin is configured as USB0_VBUS */
- IOCON_PIO_MODE_INACT | /* No addition pin function */
- IOCON_PIO_SLEW_STANDARD | /* Standard mode, output slew rate control is enabled */
- IOCON_PIO_INV_DI | /* Input function is not inverted */
- IOCON_PIO_DIGITAL_EN | /* Enables digital function */
- IOCON_PIO_OPENDRAIN_DI /* Open drain is disabled */
- );
- /* PORT0 PIN22 (coords: 78) is configured as USB0_VBUS */
- IOCON_PinMuxSet(IOCON, 0U, 22U, port0_pin22_config);
-
- // USB Controller
- POWER_DisablePD(kPDRUNCFG_PD_USB0_PHY); /*Turn on USB0 Phy */
- POWER_DisablePD(kPDRUNCFG_PD_USB1_PHY); /*< Turn on USB1 Phy */
-
- /* reset the IP to make sure it's in reset state. */
- RESET_PeripheralReset(kUSB0D_RST_SHIFT_RSTn);
- RESET_PeripheralReset(kUSB0HSL_RST_SHIFT_RSTn);
- RESET_PeripheralReset(kUSB0HMR_RST_SHIFT_RSTn);
- RESET_PeripheralReset(kUSB1H_RST_SHIFT_RSTn);
- RESET_PeripheralReset(kUSB1D_RST_SHIFT_RSTn);
- RESET_PeripheralReset(kUSB1_RST_SHIFT_RSTn);
- RESET_PeripheralReset(kUSB1RAM_RST_SHIFT_RSTn);
-
-#if (defined USB_DEVICE_CONFIG_LPCIP3511HS) && (USB_DEVICE_CONFIG_LPCIP3511HS)
- CLOCK_EnableClock(kCLOCK_Usbh1);
- /* Put PHY powerdown under software control */
- *((uint32_t *)(USBHSH_BASE + 0x50)) = USBHSH_PORTMODE_SW_PDCOM_MASK;
- /* According to reference mannual, device mode setting has to be set by access usb host register */
- *((uint32_t *)(USBHSH_BASE + 0x50)) |= USBHSH_PORTMODE_DEV_ENABLE_MASK;
- /* enable usb1 host clock */
- CLOCK_DisableClock(kCLOCK_Usbh1);
-#endif
-
-#if 1 || (defined USB_DEVICE_CONFIG_LPCIP3511FS) && (USB_DEVICE_CONFIG_LPCIP3511FS)
- CLOCK_SetClkDiv(kCLOCK_DivUsb0Clk, 1, false);
- CLOCK_AttachClk(kFRO_HF_to_USB0_CLK);
- /* enable usb0 host clock */
- CLOCK_EnableClock(kCLOCK_Usbhsl0);
- /*According to reference mannual, device mode setting has to be set by access usb host register */
- *((uint32_t *)(USBFSH_BASE + 0x5C)) |= USBFSH_PORTMODE_DEV_ENABLE_MASK;
- /* disable usb0 host clock */
- CLOCK_DisableClock(kCLOCK_Usbhsl0);
- CLOCK_EnableUsbfs0DeviceClock(kCLOCK_UsbfsSrcFro, CLOCK_GetFreq(kCLOCK_FroHf)); /* enable USB Device clock */
-#endif
-}
-
-//--------------------------------------------------------------------+
-// Board porting API
-//--------------------------------------------------------------------+
-
-void board_led_write(bool state)
-{
- GPIO_PinWrite(GPIO, LED_PORT, LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON));
-}
-
-uint32_t board_button_read(void)
-{
- // active low
- return BUTTON_STATE_ACTIVE == GPIO_PinRead(GPIO, BUTTON_PORT, BUTTON_PIN);
-}
-
-int board_uart_read(uint8_t* buf, int len)
-{
- (void) buf; (void) len;
- return 0;
-}
-
-int board_uart_write(void const * buf, int len)
-{
- (void) buf; (void) len;
- return 0;
-}
-
-#if CFG_TUSB_OS == OPT_OS_NONE
-volatile uint32_t system_ticks = 0;
-void SysTick_Handler(void)
-{
- system_ticks++;
-}
-
-uint32_t board_millis(void)
-{
- return system_ticks;
-}
-#endif
diff --git a/hw/bsp/stm32f4/family.mk b/hw/bsp/stm32f4/family.mk
index 332d6ee02..384e7b1c2 100644
--- a/hw/bsp/stm32f4/family.mk
+++ b/hw/bsp/stm32f4/family.mk
@@ -32,8 +32,7 @@ INC += \
$(TOP)/$(BOARD_PATH) \
$(TOP)/lib/CMSIS_5/CMSIS/Core/Include \
$(TOP)/$(ST_CMSIS)/Include \
- $(TOP)/$(ST_HAL_DRIVER)/Inc \
- $(TOP)/hw/bsp/$(BOARD)
+ $(TOP)/$(ST_HAL_DRIVER)/Inc
# For TinyUSB port source
VENDOR = st