Skip to content

Commit 6839fff

Browse files
tannewtdhalbert
authored andcommitted
Move to ASF4 and introduce SAMD51 support. (adafruit#258)
* atmel-samd: Remove ASF3. This will break builds. * atmel-samd: Add ASF4 for the SAMD21 and SAMD51. * Introduce the supervisor concept to facilitate porting. The supervisor is the code which runs individual MicroPython VMs. By splitting it out we make it more consistent and easier to find. This also adds very basic SAMD21 and SAMD51 support using the supervisor. Only the REPL currently works. This begins the work for adafruit#178.
1 parent 3ad01dd commit 6839fff

File tree

1,346 files changed

+489220
-246612
lines changed

Some content is hidden

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

1,346 files changed

+489220
-246612
lines changed

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ CircuitPython:
166166
corresponding module.
167167
* `shared-module` Shared implementation of Python modules that may be
168168
based on `common-hal`.
169+
* `supervisor` Code and headers related to the supervisor which monitors and
170+
runs individual MicroPython virtual machines (from code in `py`).
169171
* `tests` Test framework and test scripts.
170172
* `tools` Various tools, including the pyboard.py module.
171173

@@ -210,4 +212,4 @@ rest are here to maintain compatibility with the
210212
[Adafruit Feather M0 Adalogger]: https://www.adafruit.com/product/2796
211213
[Arduino Zero]: https://www.arduino.cc/en/Main/ArduinoBoardZero
212214
[MicroPython]: https://github.com/micropython/micropython
213-
[Code of Conduct]: https://github.com/adafruit/circuitpython/blob/master/CODE_OF_CONDUCT.md
215+
[Code of Conduct]: https://github.com/adafruit/circuitpython/blob/master/CODE_OF_CONDUCT.md

atmel-samd/Makefile

Lines changed: 123 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Select the board to build for: if not given on the command line,
22
# then default to PYBV10.
3-
BOARD ?= arduino_zero
3+
BOARD ?= metro_m0_express
44
ifeq ($(wildcard boards/$(BOARD)/.),)
55
$(error Invalid BOARD specified)
66
endif
@@ -14,76 +14,44 @@ include ../py/mkenv.mk
1414
include boards/$(BOARD)/mpconfigboard.mk
1515

1616
# qstr definitions (must come before including py.mk)
17-
# TODO(tannewt): Support friendly pin names like the stmhal implementations do.
18-
# Add $(BUILD)/pins_qstr.h $(BUILD)/modstm_qstr.h
1917
QSTR_DEFS = qstrdefsport.h
2018

2119
# include py core make definitions
2220
include $(TOP)/py/py.mk
2321

22+
include $(TOP)/supervisor/supervisor.mk
23+
2424
CROSS_COMPILE = arm-none-eabi-
2525

2626
BOSSAC := tools/bossac_osx
2727

2828
HAL_DIR=hal/$(MCU_SERIES)
2929

30-
INC += -I.
31-
INC += -I$(TOP)
32-
INC += -I$(TOP)/lib/mp-readline
33-
INC += -I$(TOP)/lib/timeutils
34-
INC += -Iasf_conf/
35-
INC += -Iasf/common/boards/
36-
INC += -Iasf/common/services/sleepmgr/
37-
INC += -Iasf/common/services/storage/ctrl_access/
38-
INC += -Iasf/common/services/usb/
39-
INC += -Iasf/common/services/usb/class/cdc/
40-
INC += -Iasf/common/services/usb/class/cdc/device/
41-
INC += -Iasf/common/services/usb/class/hid/
42-
INC += -Iasf/common/services/usb/class/hid/device/
43-
INC += -Iasf/common/services/usb/class/hid/device/kbd/
44-
INC += -Iasf/common/services/usb/class/hid/device/mouse/
45-
INC += -Iasf/common/services/usb/class/msc/
46-
INC += -Iasf/common/services/usb/class/msc/device/
47-
INC += -Iasf/common/services/usb/udc/
48-
INC += -Iasf/common/utils
49-
INC += -Iasf/common2/services/delay/
50-
INC += $(addprefix -Iasf/sam0/,\
51-
drivers/events \
52-
drivers/extint \
53-
drivers/port \
54-
drivers/system \
55-
drivers/adc/adc_sam_d_r \
56-
drivers/dac \
57-
drivers/dac/dac_sam_d_c \
58-
drivers/sercom \
59-
drivers/sercom/i2c \
60-
drivers/system/clock \
61-
drivers/system/clock/clock_samd21_r21_da \
62-
drivers/system/interrupt \
63-
drivers/system/interrupt/system_interrupt_samd21 \
64-
drivers/system/pinmux \
65-
drivers/system/power/power_sam_d_r \
66-
drivers/system/reset/reset_sam_d_r \
67-
drivers/tc \
68-
drivers/usb \
69-
utils \
70-
utils/cmsis/samd21/include \
71-
utils/cmsis/samd21/source \
72-
utils/header_files \
73-
utils/preprocessor \
74-
)
75-
INC += -Iasf/thirdparty/CMSIS/Include
76-
INC += -Iboards
77-
INC += -Iboards/$(BOARD)/
78-
INC += -Ifreetouch/
79-
INC += -I$(BUILD)
80-
81-
CFLAGS_CORTEX_M0 = \
82-
-mthumb \
83-
-mabi=aapcs-linux \
84-
-mcpu=cortex-m0plus \
85-
-msoft-float \
86-
-mfloat-abi=soft \
30+
INC += -I. \
31+
-I.. \
32+
-I../lib/mp-readline \
33+
-I../lib/timeutils \
34+
-Iasf4/$(CHIP_FAMILY) \
35+
-Iasf4/$(CHIP_FAMILY)/hal/include \
36+
-Iasf4/$(CHIP_FAMILY)/hal/utils/include \
37+
-Iasf4/$(CHIP_FAMILY)/hri \
38+
-Iasf4/$(CHIP_FAMILY)/hpl/core \
39+
-Iasf4/$(CHIP_FAMILY)/hpl/pm \
40+
-Iasf4/$(CHIP_FAMILY)/hpl/port \
41+
-Iasf4/$(CHIP_FAMILY)/hpl/tc \
42+
-Iasf4/$(CHIP_FAMILY)/include \
43+
-Iasf4/$(CHIP_FAMILY)/CMSIS/Include \
44+
-Iasf4/$(CHIP_FAMILY)/usb \
45+
-Iasf4/$(CHIP_FAMILY)/usb/class/cdc \
46+
-Iasf4/$(CHIP_FAMILY)/usb/class/hid \
47+
-Iasf4/$(CHIP_FAMILY)/usb/device \
48+
-Iasf4_conf/$(CHIP_FAMILY) \
49+
-Iboards/$(BOARD) \
50+
-Iboards/ \
51+
-Ifreetouch \
52+
-I$(BUILD)
53+
54+
BASE_CFLAGS = \
8755
-fsingle-precision-constant \
8856
-fno-strict-aliasing \
8957
-Wdouble-promotion \
@@ -102,42 +70,49 @@ CFLAGS_CORTEX_M0 = \
10270
-Wnested-externs \
10371
-Wunreachable-code \
10472
-Wcast-align \
73+
-Wno-error=lto-type-mismatch \
10574
-D__$(CHIP_VARIANT)__ \
106-
-DUSB_DEVICE_PRODUCT_ID=$(USB_PID) \
107-
-DUSB_DEVICE_VENDOR_ID=$(USB_VID) \
108-
-DBOARD=USER_BOARD \
75+
-DCONF_USB_COMPOSITE_IDPRODUCT=$(USB_PID) \
76+
-DCONF_USB_COMPOSITE_IDVENDER=$(USB_VID) \
10977
-ffunction-sections \
11078
-fdata-sections \
11179
-fshort-enums \
112-
-D ARM_MATH_CM0PLUS=true \
113-
-DSYSTICK_MODE \
114-
-DEXTINT_CALLBACK_MODE=true \
115-
-DUDD_ENABLE \
116-
-DUSART_CALLBACK_MODE=false \
117-
-DSPI_CALLBACK_MODE=false \
118-
-DI2C_MASTER_CALLBACK_MODE=false \
119-
-DDAC_CALLBACK_MODE=false \
120-
-DTCC_ASYNC=false \
121-
-DADC_CALLBACK_MODE=false \
122-
-DEVENTS_INTERRUPT_HOOKS_MODE=false \
123-
-DI2S_CALLBACK_MODE=false \
124-
-DTC_ASYNC=true \
125-
-DUSB_DEVICE_LPM_SUPPORT \
126-
-DCIRCUITPY_CANARY_WORD=0xADAF00 \
127-
-DCIRCUITPY_SAFE_RESTART_WORD=0xDEADBEEF \
12880
--param max-inline-insns-single=500
129-
CFLAGS = $(INC) -Wall -Werror -std=gnu11 -nostdlib $(CFLAGS_CORTEX_M0) $(CFLAGS_MOD) $(COPT)
13081

13182
#Debugging/Optimization
13283
ifeq ($(DEBUG), 1)
13384
# NDEBUG disables assert() statements. This reduces code size pretty dramatically, per tannewt.
13485
# Turn on Python modules useful for debugging (e.g. uheap, ustack).
135-
# -DMICROPY_DEBUG_MODULES may also be added to an -flto build, if you wish.
136-
CFLAGS += -Os -ggdb -DNDEBUG -DENABLE_MICRO_TRACE_BUFFER -DMICROPY_DEBUG_MODULES
86+
CFLAGS = -O1 -ggdb -DNDEBUG
87+
ifeq ($(CHIP_FAMILY), samd21)
88+
CFLAGS += -DENABLE_MICRO_TRACE_BUFFER
89+
endif
13790
else
13891
# -finline-limit can shrink the image size. -finline-limit=80 or so is similar to not having it on.
13992
# There is no simple default value, though.
140-
CFLAGS += -Os -DNDEBUG -flto -finline-limit=49
93+
CFLAGS = -Os -DNDEBUG -flto -finline-limit=49
94+
endif
95+
96+
CFLAGS += $(INC) -Wall -Werror -std=gnu11 -nostdlib $(BASE_CFLAGS) $(CFLAGS_MOD) $(COPT)
97+
98+
ifeq ($(CHIP_FAMILY), samd21)
99+
CFLAGS += \
100+
-mthumb \
101+
-mabi=aapcs-linux \
102+
-mcpu=cortex-m0plus \
103+
-msoft-float \
104+
-mfloat-abi=soft \
105+
-DSAMD21
106+
endif
107+
ifeq ($(CHIP_FAMILY), samd51)
108+
CFLAGS += \
109+
-mthumb \
110+
-mabi=aapcs-linux \
111+
-mlong-calls \
112+
-mcpu=cortex-m4 \
113+
-mfloat-abi=softfp \
114+
-mfpu=fpv4-sp-d16 \
115+
-DSAMD51
141116
endif
142117

143118
ifneq ($(FROZEN_DIR),)
@@ -158,69 +133,71 @@ CFLAGS += -Wno-error=lto-type-mismatch
158133
endif
159134

160135
#LIBM_FILE_NAME = $(shell $(CC) $(CFLAGS) -print-file-name=libm.a)
161-
LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -mthumb -mcpu=cortex-m0plus -Lasf/thirdparty/CMSIS/Lib/GCC/ -Wl,-nostdlib -Wl,-T,$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
162-
LIBS = -larm_cortexM0l_math -lm -lgcc -lc
163-
164-
SRC_ASF = $(addprefix asf/sam0/,\
165-
drivers/adc/adc_sam_d_r/adc.c \
166-
drivers/dac/dac_sam_d_c/dac.c \
167-
drivers/dma/dma.c \
168-
drivers/events/events_sam_d_r/events.c \
169-
drivers/extint/extint_callback.c \
170-
drivers/extint/extint_sam_d_r/extint.c \
171-
drivers/i2s/i2s.c \
172-
drivers/nvm/nvm.c \
173-
drivers/port/port.c \
174-
drivers/sercom/i2c/i2c_sam0/i2c_master.c \
175-
drivers/sercom/sercom.c \
176-
drivers/sercom/sercom_interrupt.c \
177-
drivers/sercom/spi/spi.c \
178-
drivers/sercom/usart/usart.c \
179-
drivers/system/clock/clock_samd21_r21_da/clock.c \
180-
drivers/system/clock/clock_samd21_r21_da/gclk.c \
181-
drivers/system/interrupt/system_interrupt.c \
182-
drivers/system/pinmux/pinmux.c \
183-
drivers/system/system.c \
184-
drivers/tc/tc_interrupt.c \
185-
drivers/tc/tc_sam_d_r/tc.c \
186-
drivers/tcc/tcc.c \
187-
drivers/usb/stack_interface/usb_device_udd.c \
188-
drivers/usb/stack_interface/usb_dual.c \
189-
drivers/usb/usb_sam_d_r/usb.c \
190-
)
136+
LDFLAGS = $(CFLAGS) -nostartfiles -fshort-enums -Wl,-nostdlib -Wl,-T,$(LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
137+
LIBS := -lgcc -lc
138+
139+
140+
ifeq ($(CHIP_FAMILY), samd21)
141+
LDFLAGS += -mthumb -mcpu=cortex-m0plus -Lasf/thirdparty/CMSIS/Lib/GCC/
142+
LIBS := -lm $(LIBS) # -larm_cortexM0l_math
143+
else ifeq ($(CHIP_FAMILY), samd51)
144+
LDFLAGS += -mthumb -mcpu=cortex-m4
145+
LIBS := -lm $(LIBS)
146+
endif
147+
148+
SRC_ASF := \
149+
gcc/gcc/startup_$(CHIP_FAMILY).c \
150+
gcc/system_$(CHIP_FAMILY).c \
151+
hal/src/hal_atomic.c \
152+
hal/src/hal_delay.c \
153+
hal/src/hal_sleep.c \
154+
hal/src/hal_timer.c \
155+
hal/src/hal_usb_device.c \
156+
hpl/core/hpl_init.c \
157+
hpl/gclk/hpl_gclk.c \
158+
hpl/pm/hpl_pm.c \
159+
hpl/rtc/hpl_rtc.c \
160+
hpl/systick/hpl_systick.c \
161+
hpl/tc/hpl_tc.c \
162+
hpl/usb/hpl_usb.c \
163+
usb/class/cdc/device/cdcdf_acm.c \
164+
usb/device/usbdc.c \
165+
usb/usb_protocol.c \
166+
hal/utils/src/utils_list.c \
167+
168+
ifeq ($(CHIP_FAMILY), samd21)
169+
SRC_ASF += \
170+
hpl/core/hpl_core_m0plus_base.c \
171+
hpl/sysctrl/hpl_sysctrl.c \
172+
173+
else ifeq ($(CHIP_FAMILY), samd51)
174+
SRC_ASF += \
175+
hpl/core/hpl_core_m4.c \
176+
hpl/mclk/hpl_mclk.c \
177+
hpl/osc32kctrl/hpl_osc32kctrl.c \
178+
hpl/oscctrl/hpl_oscctrl.c \
179+
180+
endif
181+
182+
SRC_ASF := $(addprefix asf4/$(CHIP_FAMILY)/, $(SRC_ASF))
183+
184+
# Skip this source for now.
185+
# access_vfs.c \
186+
shared_dma.c \
187+
$(FLASH_IMPL) \
191188
192189
SRC_C = \
193-
access_vfs.c \
194-
autoreload.c \
195190
background.c \
196191
fatfs_port.c \
197192
flash_api.c \
198-
main.c \
199193
mphalport.c \
200194
reset.c \
201-
samd21_pins.c \
202-
shared_dma.c \
203-
rgb_led_status.c \
195+
$(CHIP_FAMILY)_pins.c \
204196
tick.c \
205-
$(FLASH_IMPL) \
197+
usb.c \
206198
bindings/samd/__init__.c \
207-
asf/common/services/sleepmgr/samd/sleepmgr.c \
208-
asf/common/services/storage/ctrl_access/ctrl_access.c \
209-
asf/common/services/usb/class/cdc/device/udi_cdc.c \
210-
asf/common/services/usb/class/composite/device/udi_composite_desc.c \
211-
asf/common/services/usb/class/hid/device/udi_hid.c \
212-
asf/common/services/usb/class/hid/device/mouse/udi_hid_mouse.c \
213-
asf/common/services/usb/class/hid/device/kbd/udi_hid_kbd.c \
214-
asf/common/services/usb/class/msc/device/udi_msc.c \
215-
asf/common/services/usb/udc/udc.c \
216-
asf/common/utils/interrupt/interrupt_sam_nvic.c \
217-
asf/common2/services/delay/sam0/systick_counter.c \
218-
asf/sam0/utils/cmsis/samd21/source/gcc/startup_samd21.c \
219-
asf/sam0/utils/cmsis/samd21/source/system_samd21.c \
220-
asf/sam0/utils/syscalls/gcc/syscalls.c \
221199
boards/$(BOARD)/board.c \
222200
boards/$(BOARD)/pins.c \
223-
freetouch/adafruit_ptc.c \
224201
lib/oofatfs/ff.c \
225202
lib/oofatfs/option/ccsbcs.c \
226203
lib/timeutils/timeutils.c \
@@ -231,26 +208,27 @@ SRC_C = \
231208
lib/utils/stdout_helpers.c \
232209
lib/utils/sys_stdio_mphal.c \
233210
lib/libc/string0.c \
234-
lib/mp-readline/readline.c
211+
lib/mp-readline/readline.c \
212+
# freetouch/adafruit_ptc.c \
235213
236214
SRC_COMMON_HAL = \
237-
analogio/__init__.c \
215+
board/__init__.c \
216+
microcontroller/__init__.c \
217+
microcontroller/Pin.c \
218+
microcontroller/Processor.c \
219+
digitalio/__init__.c \
220+
digitalio/DigitalInOut.c
221+
# analogio/__init__.c \
238222
analogio/AnalogIn.c \
239223
analogio/AnalogOut.c \
240224
audiobusio/__init__.c \
241225
audiobusio/PDMIn.c \
242226
audioio/__init__.c \
243227
audioio/AudioOut.c \
244-
board/__init__.c \
245228
busio/__init__.c \
246229
busio/I2C.c \
247230
busio/SPI.c \
248231
busio/UART.c \
249-
digitalio/__init__.c \
250-
digitalio/DigitalInOut.c \
251-
microcontroller/__init__.c \
252-
microcontroller/Pin.c \
253-
microcontroller/Processor.c \
254232
neopixel_write/__init__.c \
255233
nvm/__init__.c \
256234
nvm/ByteArray.c \
@@ -293,12 +271,12 @@ SRC_SHARED_MODULE = \
293271
SRC_SHARED_MODULE_EXPANDED = $(addprefix shared-bindings/, $(SRC_SHARED_MODULE)) \
294272
$(addprefix shared-module/, $(SRC_SHARED_MODULE))
295273

296-
OBJ = $(PY_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
274+
OBJ = $(PY_O) $(SUPERVISOR_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
297275
OBJ += $(addprefix $(BUILD)/, $(SRC_ASF:.c=.o))
298276
OBJ += $(addprefix $(BUILD)/, $(SRC_COMMON_HAL_EXPANDED:.c=.o))
299277
OBJ += $(addprefix $(BUILD)/, $(SRC_SHARED_MODULE_EXPANDED:.c=.o))
300278

301-
SRC_QSTR += $(SRC_C) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED) $(STM_SRC_C)
279+
SRC_QSTR += $(SRC_C) $(SRC_SUPERVISOR) $(SRC_COMMON_HAL_EXPANDED) $(SRC_SHARED_MODULE_EXPANDED) $(STM_SRC_C)
302280

303281
all: $(BUILD)/firmware.bin $(BUILD)/firmware.uf2
304282

atmel-samd/access_vfs.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#include "access_vfs.h"
3030
#include "autoreload.h"
3131

32-
#include "asf/common/services/usb/class/msc/device/udi_msc.h"
3332
#include "extmod/vfs.h"
3433
#include "extmod/vfs_fat.h"
3534
#include "lib/oofatfs/ff.h"

atmel-samd/access_vfs.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@
3030
#ifndef MICROPY_INCLUDED_ATMEL_SAMD_ROM_FS_H
3131
#define MICROPY_INCLUDED_ATMEL_SAMD_ROM_FS_H
3232

33-
#include "asf/common/services/storage/ctrl_access/ctrl_access.h"
34-
3533
Ctrl_status vfs_test_unit_ready(void);
3634
Ctrl_status vfs_read_capacity(uint32_t *u32_nb_sector);
3735
bool vfs_wr_protect(void);
-144 KB
Binary file not shown.

0 commit comments

Comments
 (0)