mirror of
https://github.com/micropython/micropython.git
synced 2026-01-06 20:20:14 +01:00
Features are:
- 3 to 5 different frequency groups.
- Freq range of 1Hz - 24 MHz.
- Duty rate stays stable on freq change.
Keyword options to the PWM constructor:
- device=n Select a specific PWM device. If no device is specified, a free
device is chosen, if available at that pin.
- freq=nnnn
- duty_u16=nnnn
- duty_ns=nnnn
- invert=True/False Allowing two outputs on the same device/channel to have
complementary signals.
If both freq and duty are provided, PWM output will start immediately.
Pins at the same device have the same frequency. If the PWM output number
exceeds the number of channels at the PWM device, the effctive channel_no
is output_no % channel_count. So with a channel count of 4, output 7 is
assigned to channel 3. Pins at a certain channel have the same frequency
and duty rate, but may be seperately inverted.
194 lines
5.5 KiB
Makefile
194 lines
5.5 KiB
Makefile
BOARD ?= ADAFRUIT_ITSYBITSY_M4_EXPRESS
|
|
BOARD_DIR ?= boards/$(BOARD)
|
|
BUILD ?= build-$(BOARD)
|
|
|
|
CROSS_COMPILE ?= arm-none-eabi-
|
|
UF2CONV ?= $(TOP)/tools/uf2conv.py
|
|
|
|
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
|
|
|
|
MCU_SERIES_LOWER = $(shell echo $(MCU_SERIES) | tr '[:upper:]' '[:lower:]')
|
|
|
|
FROZEN_MANIFEST ?= boards/manifest.py
|
|
|
|
# Include py core make definitions
|
|
include $(TOP)/py/py.mk
|
|
include $(TOP)/extmod/extmod.mk
|
|
|
|
GIT_SUBMODULES += lib/asf4 lib/tinyusb
|
|
|
|
INC += -I.
|
|
INC += -I$(TOP)
|
|
INC += -I$(BUILD)
|
|
INC += -I$(BOARD_DIR)
|
|
INC += -I$(TOP)/lib/cmsis/inc
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/hal/include
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/hal/utils/include
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/config
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/hri
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/hpl/core
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/hpl/gclk
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/hpl/pm
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/hpl/port
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/hpl/rtc
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/hpl/tc
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/include
|
|
INC += -I$(TOP)/lib/asf4/$(MCU_SERIES_LOWER)/include/pio
|
|
INC += -I$(TOP)/lib/tinyusb/src
|
|
|
|
MAKE_PIN_AF = boards/make-pin-af.py
|
|
PIN_AF_TABLE_CSV = boards/pin-af-table-$(MCU_SERIES).csv
|
|
GEN_PIN_AF = pin_af_table.c
|
|
|
|
MAKE_PINS = boards/make-pins.py
|
|
BOARD_PINS = $(BOARD_DIR)/pins.csv
|
|
GEN_PINS_SRC = $(BUILD)/pins.c
|
|
GEN_PINS_HDR = $(BUILD)/pins.h
|
|
|
|
CFLAGS_MCU_SAMD21 = -mtune=cortex-m0plus -mcpu=cortex-m0plus -msoft-float
|
|
CFLAGS_MCU_SAMD51 = -mtune=cortex-m4 -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard
|
|
CFLAGS = $(INC) -Wall -Werror -std=c99 -nostdlib -mthumb $(CFLAGS_MCU_$(MCU_SERIES)) -fsingle-precision-constant -Wdouble-promotion
|
|
CFLAGS += -DMCU_$(MCU_SERIES) -D__$(CMSIS_MCU)__
|
|
CFLAGS += $(CFLAGS_MOD) $(CFLAGS_EXTRA)
|
|
CFLAGS += -DMPCONFIG_MCU_H='<boards/mpconfig_$(MCU_SERIES_LOWER).h>'
|
|
CFLAGS += -DPIN_AF_TABLE_C='<$(BUILD)/$(GEN_PIN_AF)>'
|
|
|
|
QSTR_GLOBAL_DEPENDENCIES += boards/mpconfig_$(MCU_SERIES_LOWER).h
|
|
|
|
LDFLAGS = -nostdlib $(addprefix -T,$(LD_FILES)) -Map=$@.map --cref
|
|
LDFLAGS += $(LDFLAGS_MOD)
|
|
|
|
LIBS = $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
|
|
|
|
# Tune for Debugging or Optimization
|
|
CFLAGS += -g # always include debug info in the ELF
|
|
ifeq ($(DEBUG),1)
|
|
CFLAGS += -O0
|
|
else
|
|
CFLAGS += -Os -DNDEBUG
|
|
LDFLAGS += --gc-sections
|
|
CFLAGS += -fdata-sections -ffunction-sections
|
|
endif
|
|
|
|
# Flags for optional C++ source code
|
|
CXXFLAGS += $(filter-out -std=c99,$(CFLAGS))
|
|
CXXFLAGS += $(CXXFLAGS_MOD)
|
|
ifneq ($(SRC_CXX)$(SRC_MOD_CXX),)
|
|
LIBSTDCPP_FILE_NAME = "$(shell $(CXX) $(CXXFLAGS) -print-file-name=libstdc++.a)"
|
|
LDFLAGS += -L"$(shell dirname $(LIBSTDCPP_FILE_NAME))"
|
|
endif
|
|
|
|
SRC_C = \
|
|
clock_config.c \
|
|
help.c \
|
|
machine_adc.c \
|
|
machine_led.c \
|
|
machine_pin.c \
|
|
main.c \
|
|
modutime.c \
|
|
modmachine.c \
|
|
modsamd.c \
|
|
mphalport.c \
|
|
pin_af.c \
|
|
$(BUILD)/pins.c \
|
|
samd_flash.c \
|
|
samd_isr.c \
|
|
samd_soc.c \
|
|
tusb_port.c \
|
|
lib/asf4/$(MCU_SERIES_LOWER)/hal/src/hal_atomic.c \
|
|
lib/asf4/$(MCU_SERIES_LOWER)/hal/src/hal_flash.c \
|
|
lib/asf4/$(MCU_SERIES_LOWER)/hpl/nvmctrl/hpl_nvmctrl.c \
|
|
lib/libm/ef_sqrt.c \
|
|
lib/libm/fmodf.c \
|
|
lib/libm/math.c \
|
|
lib/libm/nearbyintf.c \
|
|
lib/tinyusb/src/class/cdc/cdc_device.c \
|
|
lib/tinyusb/src/common/tusb_fifo.c \
|
|
lib/tinyusb/src/device/usbd.c \
|
|
lib/tinyusb/src/device/usbd_control.c \
|
|
lib/tinyusb/src/portable/microchip/samd/dcd_samd.c \
|
|
lib/tinyusb/src/tusb.c \
|
|
drivers/bus/softspi.c \
|
|
shared/libc/printf.c \
|
|
shared/libc/string0.c \
|
|
shared/readline/readline.c \
|
|
shared/runtime/gchelper_native.c \
|
|
shared/runtime/pyexec.c \
|
|
shared/runtime/stdout_helpers.c \
|
|
shared/runtime/sys_stdio_mphal.c \
|
|
shared/timeutils/timeutils.c \
|
|
|
|
SRC_C += $(SRC_MOD)
|
|
|
|
SRC_CXX += $(SRC_MOD_CXX)
|
|
|
|
ifeq ($(MCU_SERIES),SAMD21)
|
|
SRC_S = shared/runtime/gchelper_m0.s
|
|
else
|
|
SRC_S = shared/runtime/gchelper_m3.s
|
|
endif
|
|
|
|
# List of sources for qstr extraction
|
|
SRC_QSTR += \
|
|
machine_adc.c \
|
|
machine_led.c \
|
|
machine_pin.c \
|
|
machine_pwm.c \
|
|
modutime.c \
|
|
modmachine.c \
|
|
modsamd.c \
|
|
samd_flash.c \
|
|
shared/readline/readline.c \
|
|
|
|
SRC_QSTR += $(SRC_MOD) $(SRC_CXX)
|
|
|
|
OBJ += $(PY_O)
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_CXX:.cpp=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_S:.s=.o))
|
|
OBJ += $(addprefix $(BUILD)/, $(SRC_MOD:.c=.o))
|
|
|
|
ifneq ($(FROZEN_MANIFEST),)
|
|
CFLAGS += -DMICROPY_MODULE_FROZEN_MPY
|
|
CFLAGS += -DMICROPY_MODULE_FROZEN_STR
|
|
CFLAGS += -DMICROPY_QSTR_EXTRA_POOL=mp_qstr_frozen_const_pool
|
|
endif
|
|
|
|
# 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.uf2
|
|
|
|
$(BUILD)/firmware.elf: $(OBJ)
|
|
$(ECHO) "LINK $@"
|
|
$(Q)$(LD) $(LDFLAGS) -o $@ $^ $(LIBS)
|
|
$(Q)$(SIZE) $@
|
|
|
|
$(BUILD)/firmware.bin: $(BUILD)/firmware.elf
|
|
$(Q)$(OBJCOPY) -O binary -j .isr_vector -j .text -j .data $^ $(BUILD)/firmware.bin
|
|
|
|
$(BUILD)/firmware.uf2: $(BUILD)/firmware.bin
|
|
$(Q)$(PYTHON) $(UF2CONV) -b $(TEXT0) -c -o $@ $<
|
|
|
|
pin_af.c: $(BUILD)/$(GEN_PIN_AF)
|
|
|
|
$(BUILD)/$(GEN_PIN_AF): $(PIN_AF_TABLE_CSV)
|
|
$(ECHO) "Create $@"
|
|
$(Q)$(PYTHON) $(MAKE_PIN_AF) --csv $(PIN_AF_TABLE_CSV) --table $(BUILD)/$(GEN_PIN_AF) --mcu $(MCU_SERIES)
|
|
|
|
|
|
$(GEN_PINS_SRC): $(BOARD_PINS)
|
|
$(ECHO) "Create $@"
|
|
$(Q)$(PYTHON) $(MAKE_PINS) --board $(BOARD_PINS) --pins $(GEN_PINS_SRC) --inc $(GEN_PINS_HDR)
|
|
|
|
include $(TOP)/py/mkrules.mk
|