Skip to content

Commit 733094a

Browse files
committed
Add initial RP2040 support
The RP2040 is new microcontroller from Raspberry Pi that features two Cortex M0s and eight PIO state machines that are good for crunching lots of data. It has 264k RAM and a built in UF2 bootloader too. Datasheet: https://pico.raspberrypi.org/files/rp2040_datasheet.pdf
1 parent eff68b0 commit 733094a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

87 files changed

+5676
-18
lines changed

.github/workflows/build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ jobs:
177177
- "8086_commander"
178178
- "ADM_B_NRF52840_1"
179179
- "TG-Watch"
180+
- "adafruit_feather_rp2040"
180181
- "aloriumtech_evo_m51"
181182
- "aramcon_badge_2019"
182183
- "arduino_mkr1300"
@@ -294,6 +295,7 @@ jobs:
294295
- "pyruler"
295296
- "qtpy_m0"
296297
- "qtpy_m0_haxpress"
298+
- "raspberry_pi_pico"
297299
- "raytac_mdbt50q-db-40"
298300
- "robohatmm1_m4"
299301
- "sam32"

.gitmodules

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
url = https://github.com/adafruit/nrfx.git
7676
[submodule "lib/tinyusb"]
7777
path = lib/tinyusb
78-
url = https://github.com/hathach/tinyusb.git
78+
url = https://github.com/tannewt/tinyusb.git
7979
branch = master
8080
fetchRecurseSubmodules = false
8181
[submodule "tools/huffman"]
@@ -171,3 +171,6 @@
171171
[submodule "frozen/Adafruit_CircuitPython_LC709203F"]
172172
path = frozen/Adafruit_CircuitPython_LC709203F
173173
url = https://github.com/adafruit/Adafruit_CircuitPython_LC709203F
174+
[submodule "ports/raspberrypi/sdk"]
175+
path = ports/raspberrypi/sdk
176+
url = https://github.com/raspberrypi/pico-sdk.git

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ stubs:
255255
@$(PYTHON) tools/extract_pyi.py shared-bindings/ $(STUBDIR)
256256
@$(PYTHON) tools/extract_pyi.py extmod/ulab/code/ $(STUBDIR)/ulab
257257
@$(PYTHON) tools/extract_pyi.py ports/atmel-samd/bindings $(STUBDIR)
258+
@$(PYTHON) tools/extract_pyi.py ports/raspberrypi/bindings $(STUBDIR)
258259
@$(PYTHON) setup.py -q sdist
259260

260261
.PHONY: check-stubs

conf.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@
189189
"ports/nrf/nrfx",
190190
"ports/nrf/peripherals",
191191
"ports/nrf/usb",
192+
"ports/raspberrypi/sdk",
192193
"ports/stm/st_driver",
193194
"ports/stm/packages",
194195
"ports/stm/peripherals",

docs/supported_ports.rst

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ is limited.
1313

1414
../ports/atmel-samd/README
1515
../ports/cxd56/README
16+
../ports/esp32s2/README
1617
../ports/litex/README
1718
../ports/mimxrt10xx/README
1819
../ports/nrf/README
20+
../ports/raspberrypi/README
1921
../ports/stm/README
20-
../ports/esp32s2/README

lib/tinyusb

Submodule tinyusb updated 80 files

ports/raspberrypi/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
build-*/

ports/raspberrypi/Makefile

Lines changed: 273 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,273 @@
1+
# This file is part of the MicroPython project, http://micropython.org/
2+
#
3+
# The MIT License (MIT)
4+
#
5+
# SPDX-FileCopyrightText: Copyright (c) 2019 Dan Halbert for Adafruit Industries
6+
#
7+
# Permission is hereby granted, free of charge, to any person obtaining a copy
8+
# of this software and associated documentation files (the "Software"), to deal
9+
# in the Software without restriction, including without limitation the rights
10+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11+
# copies of the Software, and to permit persons to whom the Software is
12+
# furnished to do so, subject to the following conditions:
13+
#
14+
# The above copyright notice and this permission notice shall be included in
15+
# all copies or substantial portions of the Software.
16+
#
17+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23+
# THE SOFTWARE.
24+
25+
# Select the board to build for.
26+
ifeq ($(BOARD),)
27+
$(error You must provide a BOARD parameter)
28+
else
29+
ifeq ($(wildcard boards/$(BOARD)/.),)
30+
$(error Invalid BOARD specified)
31+
endif
32+
endif
33+
34+
# If the build directory is not given, make it reflect the board name.
35+
BUILD ?= build-$(BOARD)
36+
37+
include ../../py/mkenv.mk
38+
# Board-specific
39+
include boards/$(BOARD)/mpconfigboard.mk
40+
# Port-specific
41+
include mpconfigport.mk
42+
# CircuitPython-specific
43+
include $(TOP)/py/circuitpy_mpconfig.mk
44+
45+
# qstr definitions (must come before including py.mk)
46+
QSTR_DEFS = qstrdefsport.h
47+
48+
# include py core make definitions
49+
include $(TOP)/py/py.mk
50+
51+
include $(TOP)/supervisor/supervisor.mk
52+
53+
# Include make rules and variables common across CircuitPython builds.
54+
include $(TOP)/py/circuitpy_defns.mk
55+
56+
CROSS_COMPILE = arm-none-eabi-
57+
58+
HAL_DIR=hal/$(MCU_SERIES)
59+
60+
INC += -I. \
61+
-I../.. \
62+
-I../lib/mp-readline \
63+
-I../lib/timeutils \
64+
-Iboards/$(BOARD) \
65+
-Iboards/ \
66+
-isystem sdk/ \
67+
-isystem sdk/src/common/pico_base/include/ \
68+
-isystem sdk/src/common/pico_binary_info/include/ \
69+
-isystem sdk/src/common/pico_stdlib/include/ \
70+
-isystem sdk/src/common/pico_sync/include/ \
71+
-isystem sdk/src/common/pico_time/include/ \
72+
-isystem sdk/src/common/pico_util/include/ \
73+
-isystem sdk/src/rp2040/hardware_regs/include/ \
74+
-isystem sdk/src/rp2040/hardware_structs/include/ \
75+
-isystem sdk/src/rp2_common/hardware_adc/include/ \
76+
-isystem sdk/src/rp2_common/hardware_base/include/ \
77+
-isystem sdk/src/rp2_common/hardware_claim/include/ \
78+
-isystem sdk/src/rp2_common/hardware_clocks/include/ \
79+
-isystem sdk/src/rp2_common/hardware_dma/include/ \
80+
-isystem sdk/src/rp2_common/hardware_flash/include/ \
81+
-isystem sdk/src/rp2_common/hardware_gpio/include/ \
82+
-isystem sdk/src/rp2_common/hardware_irq/include/ \
83+
-isystem sdk/src/rp2_common/hardware_i2c/include/ \
84+
-isystem sdk/src/rp2_common/hardware_pio/include/ \
85+
-isystem sdk/src/rp2_common/hardware_pll/include/ \
86+
-isystem sdk/src/rp2_common/hardware_resets/include/ \
87+
-isystem sdk/src/rp2_common/hardware_spi/include/ \
88+
-isystem sdk/src/rp2_common/hardware_sync/include/ \
89+
-isystem sdk/src/rp2_common/hardware_timer/include/ \
90+
-isystem sdk/src/rp2_common/hardware_uart/include/ \
91+
-isystem sdk/src/rp2_common/hardware_watchdog/include/ \
92+
-isystem sdk/src/rp2_common/hardware_xosc/include/ \
93+
-isystem sdk/src/rp2_common/pico_multicore/include/ \
94+
-isystem sdk/src/rp2_common/pico_fix/rp2040_usb_device_enumeration/include/ \
95+
-isystem sdk/src/rp2_common/pico_stdio/include/ \
96+
-isystem sdk/src/rp2_common/pico_printf/include/ \
97+
-isystem sdk/src/rp2_common/pico_float/include/ \
98+
-isystem sdk/src/rp2_common/pico_platform/include/ \
99+
-isystem sdk/src/rp2_common/pico_runtime/printf/include/ \
100+
-isystem sdk/src/rp2_common/pico_bootrom/include/ \
101+
-Isdk_config \
102+
-I../../lib/tinyusb/src \
103+
-I../../supervisor/shared/usb \
104+
-I$(BUILD)
105+
106+
# Pico specific configuration
107+
CFLAGS += -DPICO_ON_DEVICE=1 -DPICO_NO_BINARY_INFO=0 -DPICO_TIME_DEFAULT_ALARM_POOL_DISABLED=1 -DPICO_DIVIDER_CALL_IDIV0=0 -DPICO_DIVIDER_CALL_LDIV0=0 -DPICO_DIVIDER_HARDWARE=1 -DPICO_DOUBLE_ROM=1 -DPICO_FLOAT_ROM=1 -DPICO_MULTICORE=1 -DPICO_BITS_IN_RAM=0 -DPICO_DIVIDER_IN_RAM=0 -DPICO_DOUBLE_PROPAGATE_NANS=0 -DPICO_DOUBLE_IN_RAM=0 -DPICO_MEM_IN_RAM=0 -DPICO_FLOAT_IN_RAM=0 -DPICO_FLOAT_PROPAGATE_NANS=1 -DPICO_NO_FLASH=0 -DPICO_COPY_TO_RAM=0 -DPICO_DISABLE_SHARED_IRQ_HANDLERS=0
108+
OPTIMIZATION_FLAGS ?= -O3
109+
# TinyUSB defines
110+
CFLAGS += -DTUD_OPT_RP2040_USB_DEVICE_ENUMERATION_FIX=1 -DCFG_TUSB_MCU=OPT_MCU_RP2040 -DCFG_TUD_MIDI_RX_BUFSIZE=128 -DCFG_TUD_CDC_RX_BUFSIZE=256 -DCFG_TUD_MIDI_TX_BUFSIZE=128 -DCFG_TUD_CDC_TX_BUFSIZE=256 -DCFG_TUD_MSC_BUFSIZE=1024
111+
112+
# option to override default optimization level, set in boards/$(BOARD)/mpconfigboard.mk
113+
CFLAGS += $(OPTIMIZATION_FLAGS)
114+
115+
#Debugging/Optimization
116+
ifeq ($(DEBUG), 1)
117+
CFLAGS += -ggdb3 -Og
118+
# No LTO because we may place some functions in RAM instead of flash.
119+
else
120+
CFLAGS += -DNDEBUG
121+
122+
# No LTO because we may place some functions in RAM instead of flash.
123+
124+
ifdef CFLAGS_BOARD
125+
CFLAGS += $(CFLAGS_BOARD)
126+
endif
127+
endif
128+
129+
DISABLE_WARNINGS = -Wno-unused-function -Wno-unused-variable -Wno-strict-overflow -Wno-cast-align -Wno-strict-prototypes -Wno-nested-externs -Wno-double-promotion -Wno-sign-compare
130+
131+
CFLAGS += $(INC) -Wall -Werror -std=gnu11 -nostdlib -fshort-enums $(BASE_CFLAGS) $(CFLAGS_MOD) $(COPT) $(DISABLE_WARNINGS)
132+
133+
CFLAGS += \
134+
-march=armv6-m \
135+
-mthumb \
136+
-mabi=aapcs-linux \
137+
-mcpu=cortex-m0plus \
138+
-msoft-float \
139+
-mfloat-abi=soft
140+
141+
PICO_LDFLAGS = --specs=nosys.specs -Wl,--wrap=__aeabi_ldiv0 -Wl,--wrap=__aeabi_idiv0 -Wl,--wrap=__aeabi_lmul -Wl,--wrap=__clzsi2 -Wl,--wrap=__clzdi2 -Wl,--wrap=__ctzsi2 -Wl,--wrap=__ctzdi2 -Wl,--wrap=__popcountsi2 -Wl,--wrap=__popcountdi2 -Wl,--wrap=__clz -Wl,--wrap=__clzl -Wl,--wrap=__clzll -Wl,--wrap=__aeabi_idiv -Wl,--wrap=__aeabi_idivmod -Wl,--wrap=__aeabi_ldivmod -Wl,--wrap=__aeabi_uidiv -Wl,--wrap=__aeabi_uidivmod -Wl,--wrap=__aeabi_uldivmod -Wl,--wrap=__aeabi_dadd -Wl,--wrap=__aeabi_ddiv -Wl,--wrap=__aeabi_dmul -Wl,--wrap=__aeabi_drsub -Wl,--wrap=__aeabi_dsub -Wl,--wrap=__aeabi_cdcmpeq -Wl,--wrap=__aeabi_cdrcmple -Wl,--wrap=__aeabi_cdcmple -Wl,--wrap=__aeabi_dcmpeq -Wl,--wrap=__aeabi_dcmplt -Wl,--wrap=__aeabi_dcmple -Wl,--wrap=__aeabi_dcmpge -Wl,--wrap=__aeabi_dcmpgt -Wl,--wrap=__aeabi_dcmpun -Wl,--wrap=__aeabi_i2d -Wl,--wrap=__aeabi_l2d -Wl,--wrap=__aeabi_ui2d -Wl,--wrap=__aeabi_ul2d -Wl,--wrap=__aeabi_d2iz -Wl,--wrap=__aeabi_d2lz -Wl,--wrap=__aeabi_d2uiz -Wl,--wrap=__aeabi_d2ulz -Wl,--wrap=__aeabi_d2f -Wl,--wrap=sqrt -Wl,--wrap=cos -Wl,--wrap=sin -Wl,--wrap=tan -Wl,--wrap=atan2 -Wl,--wrap=exp -Wl,--wrap=log -Wl,--wrap=ldexp -Wl,--wrap=copysign -Wl,--wrap=trunc -Wl,--wrap=floor -Wl,--wrap=ceil -Wl,--wrap=round -Wl,--wrap=sincos -Wl,--wrap=asin -Wl,--wrap=acos -Wl,--wrap=atan -Wl,--wrap=sinh -Wl,--wrap=cosh -Wl,--wrap=tanh -Wl,--wrap=asinh -Wl,--wrap=acosh -Wl,--wrap=atanh -Wl,--wrap=exp2 -Wl,--wrap=log2 -Wl,--wrap=exp10 -Wl,--wrap=log10 -Wl,--wrap=pow -Wl,--wrap=powint -Wl,--wrap=hypot -Wl,--wrap=cbrt -Wl,--wrap=fmod -Wl,--wrap=drem -Wl,--wrap=remainder -Wl,--wrap=remquo -Wl,--wrap=expm1 -Wl,--wrap=log1p -Wl,--wrap=fma -Wl,--wrap=__aeabi_fadd -Wl,--wrap=__aeabi_fdiv -Wl,--wrap=__aeabi_fmul -Wl,--wrap=__aeabi_frsub -Wl,--wrap=__aeabi_fsub -Wl,--wrap=__aeabi_cfcmpeq -Wl,--wrap=__aeabi_cfrcmple -Wl,--wrap=__aeabi_cfcmple -Wl,--wrap=__aeabi_fcmpeq -Wl,--wrap=__aeabi_fcmplt -Wl,--wrap=__aeabi_fcmple -Wl,--wrap=__aeabi_fcmpge -Wl,--wrap=__aeabi_fcmpgt -Wl,--wrap=__aeabi_fcmpun -Wl,--wrap=__aeabi_i2f -Wl,--wrap=__aeabi_l2f -Wl,--wrap=__aeabi_ui2f -Wl,--wrap=__aeabi_ul2f -Wl,--wrap=__aeabi_f2iz -Wl,--wrap=__aeabi_f2lz -Wl,--wrap=__aeabi_f2uiz -Wl,--wrap=__aeabi_f2ulz -Wl,--wrap=__aeabi_f2d -Wl,--wrap=sqrtf -Wl,--wrap=cosf -Wl,--wrap=sinf -Wl,--wrap=tanf -Wl,--wrap=atan2f -Wl,--wrap=expf -Wl,--wrap=logf -Wl,--wrap=ldexpf -Wl,--wrap=copysignf -Wl,--wrap=truncf -Wl,--wrap=floorf -Wl,--wrap=ceilf -Wl,--wrap=roundf -Wl,--wrap=sincosf -Wl,--wrap=asinf -Wl,--wrap=acosf -Wl,--wrap=atanf -Wl,--wrap=sinhf -Wl,--wrap=coshf -Wl,--wrap=tanhf -Wl,--wrap=asinhf -Wl,--wrap=acoshf -Wl,--wrap=atanhf -Wl,--wrap=exp2f -Wl,--wrap=log2f -Wl,--wrap=exp10f -Wl,--wrap=log10f -Wl,--wrap=powf -Wl,--wrap=powintf -Wl,--wrap=hypotf -Wl,--wrap=cbrtf -Wl,--wrap=fmodf -Wl,--wrap=dremf -Wl,--wrap=remainderf -Wl,--wrap=remquof -Wl,--wrap=expm1f -Wl,--wrap=log1pf -Wl,--wrap=fmaf -Wl,--wrap=memcpy -Wl,--wrap=memset -Wl,--wrap=__aeabi_memcpy -Wl,--wrap=__aeabi_memset -Wl,--wrap=__aeabi_memcpy4 -Wl,--wrap=__aeabi_memset4 -Wl,--wrap=__aeabi_memcpy8 -Wl,--wrap=__aeabi_memset8
142+
143+
LDFLAGS = $(CFLAGS) $(PICO_LDFLAGS) -Wl,-T,link.ld -Wl,-Map=$@.map -Wl,-cref -Wl,--gc-sections
144+
145+
# Use toolchain libm if we're not using our own.
146+
ifndef INTERNAL_LIBM
147+
LIBS += -lm
148+
endif
149+
150+
LDFLAGS += -mthumb -mcpu=cortex-m0plus
151+
152+
SRC_SDK := \
153+
src/common/pico_sync/critical_section.c \
154+
src/common/pico_sync/lock_core.c \
155+
src/common/pico_sync/mutex.c \
156+
src/common/pico_time/time.c \
157+
src/common/pico_util/pheap.c \
158+
src/rp2_common/hardware_adc/adc.c \
159+
src/rp2_common/hardware_claim/claim.c \
160+
src/rp2_common/hardware_clocks/clocks.c \
161+
src/rp2_common/hardware_dma/dma.c \
162+
src/rp2_common/hardware_flash/flash.c \
163+
src/rp2_common/hardware_gpio/gpio.c \
164+
src/rp2_common/hardware_i2c/i2c.c \
165+
src/rp2_common/hardware_irq/irq.c \
166+
src/rp2_common/hardware_pio/pio.c \
167+
src/rp2_common/hardware_pll/pll.c \
168+
src/rp2_common/hardware_spi/spi.c \
169+
src/rp2_common/hardware_sync/sync.c \
170+
src/rp2_common/hardware_timer/timer.c \
171+
src/rp2_common/hardware_uart/uart.c \
172+
src/rp2_common/hardware_watchdog/watchdog.c \
173+
src/rp2_common/hardware_xosc/xosc.c \
174+
src/rp2_common/pico_bootrom/bootrom.c \
175+
src/rp2_common/pico_double/double_init_rom.c \
176+
src/rp2_common/pico_fix/rp2040_usb_device_enumeration/rp2040_usb_device_enumeration.c \
177+
src/rp2_common/pico_float/float_init_rom.c \
178+
src/rp2_common/pico_float/float_math.c \
179+
src/rp2_common/pico_multicore/multicore.c \
180+
src/rp2_common/pico_platform/platform.c \
181+
src/rp2_common/pico_printf/printf.c \
182+
src/rp2_common/pico_runtime/runtime.c \
183+
src/rp2_common/pico_stdio/stdio.c \
184+
185+
SRC_SDK := $(addprefix sdk/, $(SRC_SDK))
186+
187+
SRC_C += \
188+
boards/$(BOARD)/board.c \
189+
boards/$(BOARD)/pins.c \
190+
bindings/rp2pio/StateMachine.c \
191+
bindings/rp2pio/__init__.c \
192+
common-hal/rp2pio/StateMachine.c \
193+
common-hal/rp2pio/__init__.c \
194+
background.c \
195+
peripherals/pins.c \
196+
fatfs_port.c \
197+
lib/libc/string0.c \
198+
lib/mp-readline/readline.c \
199+
lib/oofatfs/ff.c \
200+
lib/oofatfs/option/ccsbcs.c \
201+
lib/timeutils/timeutils.c \
202+
lib/tinyusb/src/portable/raspberrypi/rp2040/dcd_rp2040.c \
203+
lib/tinyusb/src/portable/raspberrypi/rp2040/rp2040_usb.c \
204+
lib/utils/buffer_helper.c \
205+
lib/utils/context_manager_helpers.c \
206+
lib/utils/interrupt_char.c \
207+
lib/utils/pyexec.c \
208+
lib/utils/stdout_helpers.c \
209+
lib/utils/sys_stdio_mphal.c \
210+
mphalport.c \
211+
supervisor/shared/memory.c \
212+
213+
SRC_COMMON_HAL_EXPANDED = $(addprefix shared-bindings/, $(SRC_COMMON_HAL)) \
214+
$(addprefix shared-bindings/, $(SRC_BINDINGS_ENUMS)) \
215+
$(addprefix common-hal/, $(SRC_COMMON_HAL))
216+
217+
SRC_SHARED_MODULE_EXPANDED = $(addprefix shared-bindings/, $(SRC_SHARED_MODULE)) \
218+
$(addprefix shared-module/, $(SRC_SHARED_MODULE)) \
219+
$(addprefix shared-module/, $(SRC_SHARED_MODULE_INTERNAL))
220+
221+
# There may be duplicates between SRC_COMMON_HAL_EXPANDED and SRC_SHARED_MODULE_EXPANDED,
222+
# because a few modules have files both in common-hal/ and shared-modules/.
223+
# Doing a $(sort ...) removes duplicates as part of sorting.
224+
SRC_COMMON_HAL_SHARED_MODULE_EXPANDED = $(sort $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED))
225+
226+
SRC_S = supervisor/$(CHIP_FAMILY)_cpu.s
227+
SRC_S_UPPER = bs2_default_padded_checksummed.S \
228+
sdk/src/rp2_common/hardware_divider/divider.S \
229+
sdk/src/rp2_common/hardware_irq/irq_handler_chain.S \
230+
sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S \
231+
sdk/src/rp2_common/pico_double/double_aeabi.S \
232+
sdk/src/rp2_common/pico_double/double_v1_rom_shim.S \
233+
sdk/src/rp2_common/pico_divider/divider.S \
234+
sdk/src/rp2_common/pico_float/float_aeabi.S \
235+
sdk/src/rp2_common/pico_float/float_v1_rom_shim.S \
236+
sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S \
237+
sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S \
238+
sdk/src/rp2_common/pico_standard_link/crt0.S \
239+
240+
OBJ = $(PY_O) $(SUPERVISOR_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
241+
OBJ += $(addprefix $(BUILD)/, $(SRC_SDK:.c=.o))
242+
OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_SHARED_MODULE_EXPANDED:.c=.o))
243+
ifeq ($(INTERNAL_LIBM),1)
244+
OBJ += $(addprefix $(BUILD)/, $(SRC_LIBM:.c=.o))
245+
endif
246+
OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
247+
OBJ += $(addprefix $(BUILD)/, $(SRC_S_UPPER:.S=.o))
248+
OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o))
249+
250+
251+
SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED)
252+
253+
all: $(BUILD)/firmware.uf2
254+
255+
$(BUILD)/firmware.elf: $(OBJ) link.ld
256+
$(STEPECHO) "LINK $@"
257+
$(Q)$(CC) -o $@ $(LDFLAGS) $(OBJ)
258+
$(Q)$(SIZE) $@ | $(PYTHON3) $(TOP)/tools/build_memory_info.py link.ld
259+
260+
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
261+
$(STEPECHO) "Create $@"
262+
$(Q)$(OBJCOPY) -O binary $^ $@
263+
264+
$(BUILD)/firmware.uf2: $(BUILD)/firmware.bin
265+
$(STEPECHO) "Create $@"
266+
$(Q)$(PYTHON3) $(TOP)/tools/uf2/utils/uf2conv.py -f 0xe48bff56 -b 0x10000000 -c -o $@ $^
267+
268+
include $(TOP)/py/mkrules.mk
269+
270+
# Print out the value of a make variable.
271+
# https://stackoverflow.com/questions/16467718/how-to-print-out-a-variable-in-makefile
272+
print-%:
273+
@echo $* = $($*)

ports/raspberrypi/README.rst

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
RP2040
2+
==================
3+
4+
This port supports many development boards that utilize RP2040 chips. See
5+
https://circuitpython.org/downloads for all supported boards.
6+
7+
8+
Building
9+
--------
10+
11+
For build instructions see this guide: https://learn.adafruit.com/building-circuitpython/
12+
13+
14+
Port Specific modules
15+
---------------------
16+
17+
.. toctree::
18+
../../shared-bindings/rp2pio/index

0 commit comments

Comments
 (0)