Просмотр исходного кода

Merge pull request #689 from hathach/update-lpc55

move lpc55 into its family
Ha Thach 5 лет назад
Родитель
Сommit
0374e08550

+ 1 - 0
.github/workflows/build.yml

@@ -37,6 +37,7 @@ jobs:
         family:
         family:
         # Alphabetical order
         # Alphabetical order
         - 'imxrt'
         - 'imxrt'
+        - 'lpc55'
         - 'nrf'
         - 'nrf'
         - 'rp2040'
         - 'rp2040'
         - 'samd11'
         - 'samd11'

+ 0 - 0
hw/bsp/double_m33_express/LPC55S69_cm33_core0_uf2.ld → hw/bsp/lpc55/boards/double_m33_express/LPC55S69_cm33_core0_uf2.ld


+ 60 - 0
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

+ 11 - 0
hw/bsp/lpc55/boards/double_m33_express/board.mk

@@ -0,0 +1,11 @@
+MCU_VARIANT = LPC55S69
+MCU_CORE = 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

+ 53 - 0
hw/bsp/lpc55/boards/lpcxpresso55s28/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

+ 10 - 0
hw/bsp/lpc55/boards/lpcxpresso55s28/board.mk

@@ -0,0 +1,10 @@
+MCU_VARIANT = LPC55S28
+MCU_CORE = LPC55S28
+
+CFLAGS += -DCPU_LPC55S28JBD100
+
+JLINK_DEVICE = LPC55S28
+PYOCD_TARGET = LPC55S28
+
+# flash using pyocd
+flash: flash-pyocd

+ 53 - 0
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

+ 10 - 0
hw/bsp/lpc55/boards/lpcxpresso55s69/board.mk

@@ -0,0 +1,10 @@
+MCU_VARIANT = LPC55S69
+MCU_CORE = LPC55S69_cm33_core0
+
+CFLAGS += -DCPU_LPC55S69JBD100_cm33_core0
+
+JLINK_DEVICE = LPC55S69
+PYOCD_TARGET = LPC55S69
+
+# flash using pyocd
+flash: flash-pyocd

+ 26 - 46
hw/bsp/double_m33_express/double_m33_express.c → hw/bsp/lpc55/family.c

@@ -24,7 +24,8 @@
  * This file is part of the TinyUSB stack.
  * 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_device_registers.h"
 #include "fsl_gpio.h"
 #include "fsl_gpio.h"
 #include "fsl_power.h"
 #include "fsl_power.h"
@@ -49,45 +50,23 @@ void USB1_IRQHandler(void)
 //--------------------------------------------------------------------+
 //--------------------------------------------------------------------+
 // MACRO TYPEDEF CONSTANT ENUM
 // 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
 // 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_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_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_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 */
 #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
 name: BOARD_BootClockFROHF96M
 outputs:
 outputs:
@@ -138,18 +117,20 @@ void board_init(void)
   NVIC_SetPriority(USB0_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
   NVIC_SetPriority(USB0_IRQn, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY );
 #endif
 #endif
 
 
+  // Init all GPIO ports
   GPIO_PortInit(GPIO, 0);
   GPIO_PortInit(GPIO, 0);
   GPIO_PortInit(GPIO, 1);
   GPIO_PortInit(GPIO, 1);
 
 
   // LED
   // 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_pin_config_t const led_config = { kGPIO_DigitalOutput, 1};
   GPIO_PinInit(GPIO, LED_PORT, LED_PIN, &led_config);
   GPIO_PinInit(GPIO, LED_PORT, LED_PIN, &led_config);
 
 
+  board_led_write(0);
+
+#ifdef NEOPIXEL_PIN
   // Neopixel
   // 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);
   IOCON_PinMuxSet(IOCON, NEOPIXEL_PORT, NEOPIXEL_PIN, IOCON_PIO_DIG_FUNC4_EN);
 
 
   sctpix_init(NEOPIXEL_TYPE);
   sctpix_init(NEOPIXEL_TYPE);
@@ -157,22 +138,18 @@ void board_init(void)
   sctpix_setPixel(NEOPIXEL_CH, 0, 0x100010);
   sctpix_setPixel(NEOPIXEL_CH, 0, 0x100010);
   sctpix_setPixel(NEOPIXEL_CH, 1, 0x100010);
   sctpix_setPixel(NEOPIXEL_CH, 1, 0x100010);
   sctpix_show();
   sctpix_show();
-
+#endif
 
 
   // Button
   // Button
-  /* PORT0 PIN5 configured as PIO0_5 */
   IOCON_PinMuxSet(IOCON, BUTTON_PORT, BUTTON_PIN, IOCON_PIO_DIG_FUNC0_EN);
   IOCON_PinMuxSet(IOCON, BUTTON_PORT, BUTTON_PIN, IOCON_PIO_DIG_FUNC0_EN);
-
   gpio_pin_config_t const button_config = { kGPIO_DigitalInput, 0};
   gpio_pin_config_t const button_config = { kGPIO_DigitalInput, 0};
   GPIO_PinInit(GPIO, BUTTON_PORT, BUTTON_PIN, &button_config);
   GPIO_PinInit(GPIO, BUTTON_PORT, BUTTON_PIN, &button_config);
 
 
+#if defined(UART_DEV)
   // UART
   // 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
   // Enable UART when debug log is on
   CLOCK_AttachClk(kFRO12M_to_FLEXCOMM0);
   CLOCK_AttachClk(kFRO12M_to_FLEXCOMM0);
   usart_config_t uart_config;
   usart_config_t uart_config;
@@ -200,7 +177,7 @@ void board_init(void)
   RESET_PeripheralReset(kUSB1_RST_SHIFT_RSTn);
   RESET_PeripheralReset(kUSB1_RST_SHIFT_RSTn);
   RESET_PeripheralReset(kUSB1RAM_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);
   CLOCK_EnableClock(kCLOCK_Usbh1);
   /* Put PHY powerdown under software control */
   /* Put PHY powerdown under software control */
   USBHSH->PORTMODE = USBHSH_PORTMODE_SW_PDCOM_MASK;
   USBHSH->PORTMODE = USBHSH_PORTMODE_SW_PDCOM_MASK;
@@ -210,7 +187,7 @@ void board_init(void)
   CLOCK_DisableClock(kCLOCK_Usbh1);
   CLOCK_DisableClock(kCLOCK_Usbh1);
 #endif
 #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
   // Enable USB Clock Adjustments to trim the FRO for the full speed controller
   ANACTRL->FRO192M_CTRL |= ANACTRL_FRO192M_CTRL_USBCLKADJ_MASK;
   ANACTRL->FRO192M_CTRL |= ANACTRL_FRO192M_CTRL_USBCLKADJ_MASK;
   CLOCK_SetClkDiv(kCLOCK_DivUsb0Clk, 1, false);
   CLOCK_SetClkDiv(kCLOCK_DivUsb0Clk, 1, false);
@@ -233,6 +210,8 @@ void board_init(void)
 void board_led_write(bool state)
 void board_led_write(bool state)
 {
 {
   GPIO_PinWrite(GPIO, LED_PORT, LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON));
   GPIO_PinWrite(GPIO, LED_PORT, LED_PIN, state ? LED_STATE_ON : (1-LED_STATE_ON));
+
+#ifdef NEOPIXEL_PIN
   if (state) {
   if (state) {
     sctpix_setPixel(NEOPIXEL_CH, 0, 0x100000);
     sctpix_setPixel(NEOPIXEL_CH, 0, 0x100000);
     sctpix_setPixel(NEOPIXEL_CH, 1, 0x101010);
     sctpix_setPixel(NEOPIXEL_CH, 1, 0x101010);
@@ -241,6 +220,7 @@ void board_led_write(bool state)
     sctpix_setPixel(NEOPIXEL_CH, 1, 0x000010);
     sctpix_setPixel(NEOPIXEL_CH, 1, 0x000010);
   }
   }
   sctpix_show();
   sctpix_show();
+#endif
 }
 }
 
 
 uint32_t board_button_read(void)
 uint32_t board_button_read(void)

+ 24 - 11
hw/bsp/double_m33_express/board.mk → hw/bsp/lpc55/family.mk

@@ -1,3 +1,10 @@
+UF2_FAMILY_ID = 0x2abc77ec
+
+include $(TOP)/$(BOARD_PATH)/board.mk
+
+# TODO change Default to Highspeed PORT1
+PORT ?= 0
+
 CFLAGS += \
 CFLAGS += \
   -flto \
   -flto \
   -mthumb \
   -mthumb \
@@ -5,21 +12,28 @@ CFLAGS += \
   -mcpu=cortex-m33 \
   -mcpu=cortex-m33 \
   -mfloat-abi=hard \
   -mfloat-abi=hard \
   -mfpu=fpv5-sp-d16 \
   -mfpu=fpv5-sp-d16 \
-  -DCPU_LPC55S69JBD100_cm33_core0 \
   -DCFG_TUSB_MCU=OPT_MCU_LPC55XX \
   -DCFG_TUSB_MCU=OPT_MCU_LPC55XX \
   -DCFG_TUSB_MEM_SECTION='__attribute__((section(".data")))' \
   -DCFG_TUSB_MEM_SECTION='__attribute__((section(".data")))' \
-  -DCFG_TUSB_MEM_ALIGN='__attribute__((aligned(64)))'
+  -DCFG_TUSB_MEM_ALIGN='__attribute__((aligned(64)))' \
+  -DBOARD_DEVICE_RHPORT_NUM=$(PORT)
+
+ifeq ($(PORT), 1)
+  CFLAGS += -DBOARD_DEVICE_RHPORT_SPEED=OPT_MODE_HIGH_SPEED
+  $(info "PORT1 High Speed")
+else
+  $(info "PORT0 Full Speed")
+endif
 
 
 # mcu driver cause following warnings
 # mcu driver cause following warnings
 CFLAGS += -Wno-error=unused-parameter -Wno-error=float-equal
 CFLAGS += -Wno-error=unused-parameter -Wno-error=float-equal
 
 
-MCU_DIR = hw/mcu/nxp/sdk/devices/LPC55S69
+MCU_DIR = hw/mcu/nxp/sdk/devices/$(MCU_VARIANT)
 
 
 # All source paths should be relative to the top level.
 # 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_CORE)_flash.ld
 
 
 SRC_C += \
 SRC_C += \
-	$(MCU_DIR)/system_LPC55S69_cm33_core0.c \
+	$(MCU_DIR)/system_$(MCU_CORE).c \
 	$(MCU_DIR)/drivers/fsl_clock.c \
 	$(MCU_DIR)/drivers/fsl_clock.c \
 	$(MCU_DIR)/drivers/fsl_gpio.c \
 	$(MCU_DIR)/drivers/fsl_gpio.c \
 	$(MCU_DIR)/drivers/fsl_power.c \
 	$(MCU_DIR)/drivers/fsl_power.c \
@@ -29,14 +43,13 @@ SRC_C += \
 	lib/sct_neopixel/sct_neopixel.c 
 	lib/sct_neopixel/sct_neopixel.c 
 
 
 INC += \
 INC += \
-    $(TOP)/hw/bsp/ \
-	$(TOP)/hw/bsp/$(BOARD) \
+	$(TOP)/$(BOARD_PATH) \
 	$(TOP)/lib/sct_neopixel \
 	$(TOP)/lib/sct_neopixel \
 	$(TOP)/$(MCU_DIR)/../../CMSIS/Include \
 	$(TOP)/$(MCU_DIR)/../../CMSIS/Include \
 	$(TOP)/$(MCU_DIR) \
 	$(TOP)/$(MCU_DIR) \
 	$(TOP)/$(MCU_DIR)/drivers
 	$(TOP)/$(MCU_DIR)/drivers
 
 
-SRC_S += $(MCU_DIR)/gcc/startup_LPC55S69_cm33_core0.S
+SRC_S += $(MCU_DIR)/gcc/startup_$(MCU_CORE).S
 
 
 LIBS += $(TOP)/$(MCU_DIR)/gcc/libpower_hardabi.a
 LIBS += $(TOP)/$(MCU_DIR)/gcc/libpower_hardabi.a
 
 
@@ -48,8 +61,8 @@ CHIP_FAMILY = lpc_ip3511
 FREERTOS_PORT = ARM_CM33_NTZ/non_secure
 FREERTOS_PORT = ARM_CM33_NTZ/non_secure
 
 
 # For flash-jlink target
 # For flash-jlink target
-JLINK_DEVICE = LPC55S69
+#JLINK_DEVICE = LPC55S69
 
 
 # flash using pyocd
 # flash using pyocd
-flash: $(BUILD)/$(PROJECT).hex
-	pyocd flash -t LPC55S69 $<
+#flash: $(BUILD)/$(PROJECT).hex
+#	pyocd flash -t LPC55S69 $<

+ 0 - 49
hw/bsp/lpcxpresso55s69/board.mk

@@ -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 $<

+ 0 - 227
hw/bsp/lpcxpresso55s69/lpcxpresso55s69.c

@@ -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

+ 1 - 2
hw/bsp/stm32f4/family.mk

@@ -32,8 +32,7 @@ INC += \
 	$(TOP)/$(BOARD_PATH) \
 	$(TOP)/$(BOARD_PATH) \
 	$(TOP)/lib/CMSIS_5/CMSIS/Core/Include \
 	$(TOP)/lib/CMSIS_5/CMSIS/Core/Include \
 	$(TOP)/$(ST_CMSIS)/Include \
 	$(TOP)/$(ST_CMSIS)/Include \
-	$(TOP)/$(ST_HAL_DRIVER)/Inc \
-	$(TOP)/hw/bsp/$(BOARD)
+	$(TOP)/$(ST_HAL_DRIVER)/Inc
 
 
 # For TinyUSB port source
 # For TinyUSB port source
 VENDOR = st
 VENDOR = st