RP2040.mk (4625B)
1 # 2 # Raspberry Pi RP2040 specific drivers 3 ############################################################################## 4 COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/vendor/$(MCU_FAMILY)/$(MCU_SERIES) 5 6 ifeq ($(strip $(WS2812_DRIVER)), vendor) 7 OPT_DEFS += -DRP_DMA_REQUIRED=TRUE 8 endif 9 10 # 11 # Raspberry Pi Pico SDK Support 12 ############################################################################## 13 ADEFS += -DCRT0_VTOR_INIT=1 \ 14 -DCRT0_EXTRA_CORES_NUMBER=0 \ 15 -DCRT0_INIT_VECTORS=1 16 17 CFLAGS += -DPICO_NO_FPGA_CHECK \ 18 -DNDEBUG 19 20 # 21 # Pico SDK source and header files needed by QMK and ChibiOS 22 ############################################################################## 23 PICOSDKROOT := $(TOP_DIR)/lib/pico-sdk 24 25 PICOSDKSRC = $(PICOSDKROOT)/src/rp2_common/hardware_clocks/clocks.c \ 26 $(PICOSDKROOT)/src/rp2_common/hardware_pll/pll.c \ 27 $(PICOSDKROOT)/src/rp2_common/hardware_pio/pio.c \ 28 $(PICOSDKROOT)/src/rp2_common/hardware_timer/timer.c \ 29 $(PICOSDKROOT)/src/rp2_common/hardware_flash/flash.c \ 30 $(PICOSDKROOT)/src/rp2_common/hardware_gpio/gpio.c \ 31 $(PICOSDKROOT)/src/rp2_common/hardware_claim/claim.c \ 32 $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/watchdog.c \ 33 $(PICOSDKROOT)/src/rp2_common/hardware_xosc/xosc.c \ 34 $(PICOSDKROOT)/src/rp2_common/pico_bootrom/bootrom.c 35 36 PICOSDKINC = $(CHIBIOS)//os/various/pico_bindings/dumb/include \ 37 $(PICOSDKROOT)/src/common/pico_base/include \ 38 $(PICOSDKROOT)/src/rp2_common/pico_platform/include \ 39 $(PICOSDKROOT)/src/rp2_common/hardware_base/include \ 40 $(PICOSDKROOT)/src/rp2_common/hardware_clocks/include \ 41 $(PICOSDKROOT)/src/rp2_common/hardware_claim/include \ 42 $(PICOSDKROOT)/src/rp2_common/hardware_flash/include \ 43 $(PICOSDKROOT)/src/rp2_common/hardware_gpio/include \ 44 $(PICOSDKROOT)/src/rp2_common/hardware_irq/include \ 45 $(PICOSDKROOT)/src/rp2_common/hardware_pll/include \ 46 $(PICOSDKROOT)/src/rp2_common/hardware_pio/include \ 47 $(PICOSDKROOT)/src/rp2_common/hardware_sync/include \ 48 $(PICOSDKROOT)/src/rp2_common/hardware_timer/include \ 49 $(PICOSDKROOT)/src/rp2_common/hardware_resets/include \ 50 $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \ 51 $(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \ 52 $(PICOSDKROOT)/src/rp2040/hardware_regs/include \ 53 $(PICOSDKROOT)/src/rp2040/hardware_structs/include \ 54 $(PICOSDKROOT)/src/boards/include \ 55 $(PICOSDKROOT)/src/rp2_common/pico_bootrom/include 56 57 PLATFORM_SRC += $(PICOSDKSRC) 58 EXTRAINCDIRS += $(PICOSDKINC) 59 60 PLATFORM_RP2040_PATH := $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY) 61 62 PLATFORM_SRC += $(PLATFORM_RP2040_PATH)/stage2_bootloaders.c \ 63 $(PLATFORM_RP2040_PATH)/pico_sdk_shims.c 64 65 EXTRAINCDIRS += $(PLATFORM_RP2040_PATH) 66 67 # 68 # RP2040 optimized compiler intrinsics 69 ############################################################################## 70 71 # The RP2040 sdk provides optimized compiler intrinsics which override the GCC 72 # built-ins. Some of these functions are located in the bootrom of the RP2040. 73 # Execution of these functions is realized via a vtable that is populated on 74 # bootup. This mechanism needs startup code and linker script support from 75 # ChibiOS, which is currently not implemented thus these functions are disabled 76 # ATM. 77 PICOSDKINTRINSICSSRC = $(PICOSDKROOT)/src/rp2_common/pico_divider/divider.S \ 78 $(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S 79 80 PICOSDKINTRINSICSINC = $(PICOSDKROOT)/src/common/pico_base/include \ 81 $(PICOSDKROOT)/src/rp2_common/pico_platform/include \ 82 $(PICOSDKROOT)/src/rp2_common/hardware_divider/include 83 84 # integer division intrinsics utilizing the RP2040 hardware divider 85 OPT_DEFS += -DPICO_DIVIDER_IN_RAM=1 86 OPT_DEFS += -DPICO_DIVIDER_DISABLE_INTERRUPTS=1 87 88 CFLAGS += -Wl,--wrap=__aeabi_idiv 89 CFLAGS += -Wl,--wrap=__aeabi_idivmod 90 CFLAGS += -Wl,--wrap=__aeabi_ldivmod 91 CFLAGS += -Wl,--wrap=__aeabi_uidiv 92 CFLAGS += -Wl,--wrap=__aeabi_uidivmod 93 CFLAGS += -Wl,--wrap=__aeabi_uldivmod 94 95 # 64bit integer intrinsics 96 OPT_DEFS += -DPICO_INT64_OPS_IN_RAM=1 97 98 CFLAGS += -Wl,--wrap=__aeabi_lmul 99 100 PLATFORM_SRC += $(PICOSDKINTRINSICSSRC) 101 EXTRAINCDIRS += $(PICOSDKINTRINSICSINC)