f46782dde9
This is an extremely minimal port to the NXP i.MX RT, in the style of the SAMD port It's largely based on the TinyUSB mimxrt implementation, using the NXP SDK. It currently supports the Teensy 4.0 board with a REPL over the USB-VCP interface. This commit also adds the NXP SDK submodule (also from TinyUSB) to lib/nxp_driver. Note: if you already have the tinyusb submodule initialized recursively you will need to run the following as the tinyusb sub-submodules have been rearranged (upstream): git submodule deinit lib/tinyusb rm -rf .git/modules/lib/tinyusb git submodule update --init lib/tinyusb
134 lines
3.7 KiB
Makefile
134 lines
3.7 KiB
Makefile
BOARD ?= TEENSY40
|
|
BOARD_DIR ?= boards/$(BOARD)
|
|
BUILD ?= build-$(BOARD)
|
|
|
|
CROSS_COMPILE ?= arm-none-eabi-
|
|
|
|
ifeq ($(wildcard $(BOARD_DIR)/.),)
|
|
$(error Invalid BOARD specified: $(BOARD_DIR))
|
|
endif
|
|
|
|
include ../../py/mkenv.mk
|
|
include $(BOARD_DIR)/mpconfigboard.mk
|
|
|
|
# Qstr definitions (must come before including py.mk)
|
|
QSTR_DEFS = qstrdefsport.h
|
|
QSTR_GLOBAL_DEPENDENCIES = $(BOARD_DIR)/mpconfigboard.h
|
|
|
|
# Include py core make definitions
|
|
include $(TOP)/py/py.mk
|
|
|
|
GIT_SUBMODULES = lib/tinyusb lib/nxp_driver
|
|
|
|
MCU_DIR = lib/nxp_driver/sdk/devices/$(MCU_SERIES)
|
|
LD_FILES = boards/$(MCU_SERIES).ld $(TOP)/$(MCU_DIR)/gcc/$(MCU_SERIES)xxxxx_flexspi_nor.ld
|
|
|
|
# mcu driver cause following warnings
|
|
#CFLAGS += -Wno-error=float-equal -Wno-error=nested-externs
|
|
CFLAGS += -Wno-error=unused-parameter
|
|
|
|
INC += -I.
|
|
INC += -I$(TOP)
|
|
INC += -I$(BUILD)
|
|
INC += -I$(BOARD_DIR)
|
|
INC += -I$(TOP)/lib/cmsis/inc
|
|
INC += -I$(TOP)/$(MCU_DIR)
|
|
INC += -I$(TOP)/$(MCU_DIR)/drivers
|
|
INC += -I$(TOP)/$(MCU_DIR)/project_template
|
|
INC += -I$(TOP)/lib/tinyusb/src
|
|
INC += -I$(TOP)/lib/tinyusb/hw
|
|
INC += -I$(TOP)/lib/tinyusb/hw/bsp/teensy_40
|
|
|
|
CFLAGS_MCU = -mtune=cortex-m7 -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16
|
|
CFLAGS = $(INC) -Wall -Werror -std=c99 -nostdlib -mthumb $(CFLAGS_MCU)
|
|
CFLAGS += -DCPU_$(MCU_SERIES) -DCPU_$(MCU_VARIANT)
|
|
CFLAGS += -DXIP_EXTERNAL_FLASH=1 \
|
|
-DXIP_BOOT_HEADER_ENABLE=1 \
|
|
-DCFG_TUSB_MCU=OPT_MCU_MIMXRT10XX \
|
|
-D__STARTUP_CLEAR_BSS \
|
|
-D__START=main \
|
|
-DCPU_HEADER_H='<$(MCU_SERIES).h>'
|
|
|
|
LDFLAGS = $(addprefix -T,$(LD_FILES)) -Map=$@.map --cref
|
|
LIBS = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
|
|
|
|
# Tune for Debugging or Optimization
|
|
ifeq ($(DEBUG),1)
|
|
CFLAGS += -O0 -ggdb
|
|
else
|
|
CFLAGS += -Os -DNDEBUG
|
|
LDFLAGS += --gc-sections
|
|
CFLAGS += -fdata-sections -ffunction-sections
|
|
endif
|
|
|
|
# TinyUSB Stack source
|
|
SRC_TINYUSB_C += \
|
|
lib/tinyusb/src/tusb.c \
|
|
lib/tinyusb/src/common/tusb_fifo.c \
|
|
lib/tinyusb/src/device/usbd.c \
|
|
lib/tinyusb/src/device/usbd_control.c \
|
|
lib/tinyusb/src/class/msc/msc_device.c \
|
|
lib/tinyusb/src/class/cdc/cdc_device.c \
|
|
lib/tinyusb/src/class/dfu/dfu_rt_device.c \
|
|
lib/tinyusb/src/class/hid/hid_device.c \
|
|
lib/tinyusb/src/class/midi/midi_device.c \
|
|
lib/tinyusb/src/class/usbtmc/usbtmc_device.c \
|
|
lib/tinyusb/src/class/vendor/vendor_device.c \
|
|
lib/tinyusb/src/portable/nxp/transdimension/dcd_transdimension.c
|
|
|
|
SRC_TINYUSB_IMX_C += \
|
|
$(MCU_DIR)/system_$(MCU_SERIES).c \
|
|
$(MCU_DIR)/xip/fsl_flexspi_nor_boot.c \
|
|
$(MCU_DIR)/project_template/clock_config.c \
|
|
$(MCU_DIR)/drivers/fsl_clock.c \
|
|
$(MCU_DIR)/drivers/fsl_gpio.c \
|
|
$(MCU_DIR)/drivers/fsl_common.c \
|
|
$(MCU_DIR)/drivers/fsl_lpuart.c \
|
|
$(MCU_DIR)/drivers/fsl_flexram.c \
|
|
|
|
SRC_C = \
|
|
main.c \
|
|
tusb_port.c \
|
|
board_init.c \
|
|
$(BOARD_DIR)/flash_config.c \
|
|
modutime.c \
|
|
modmachine.c \
|
|
mphalport.c \
|
|
lib/mp-readline/readline.c \
|
|
lib/libc/string0.c \
|
|
lib/utils/printf.c \
|
|
lib/utils/pyexec.c \
|
|
lib/utils/stdout_helpers.c \
|
|
$(SRC_TINYUSB_C) \
|
|
$(SRC_TINYUSB_IMX_C) \
|
|
|
|
SRC_SS = $(MCU_DIR)/gcc/startup_$(MCU_SERIES).S
|
|
|
|
SRC_S = lib/utils/gchelper_m3.s \
|
|
|
|
# List of sources for qstr extraction
|
|
SRC_QSTR += modutime.c modmachine.c
|
|
|
|
OBJ += $(PY_O)
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_SS:.S=.o))
|
|
|
|
# Workaround for bug in older gcc, warning on "static usbd_device_t _usbd_dev = { 0 };"
|
|
$(BUILD)/lib/tinyusb/src/device/usbd.o: CFLAGS += -Wno-missing-braces
|
|
|
|
all: $(BUILD)/firmware.hex
|
|
|
|
$(BUILD)/firmware.elf: $(OBJ)
|
|
$(ECHO) "LINK $@"
|
|
$(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
$(Q)$(SIZE) $@
|
|
|
|
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
|
|
$(Q)$(OBJCOPY) -O binary $^ $@
|
|
|
|
$(BUILD)/firmware.hex: $(BUILD)/firmware.elf
|
|
$(Q)$(OBJCOPY) -O ihex -R .eeprom $< $@
|
|
|
|
include $(TOP)/py/mkrules.mk
|