Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

atmega: refactor cpu/board code and build/flash variables #9130

Merged
merged 6 commits into from
Feb 8, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 12 additions & 9 deletions boards/arduino-duemilanove/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,19 @@ export CPU = atmega328p

USEMODULE += boards_common_arduino-atmega

#export needed for flash rule
export PORT_LINUX ?= /dev/ttyUSB0
export PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
export PROGRAMMER_SPEED ?= 57600
# configure the terminal program
PORT_LINUX ?= /dev/ttyUSB0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
BAUD ?= 9600

export FFLAGS += -p m328p

# PROGRAMMER defaults to arduino which is the internal flasher via USB. Can be
# overridden for debugging (which requires changes that require to use an ISP)
export PROGRAMMER ?= arduino
# PROGRAMMER defaults to arduino which is the internal flasher via USB
# using avrdude. Can be overridden for debugging (which requires changes
# that require to use an ISP)
PROGRAMMER ?= arduino
# set mcu model for avrdude
FFLAGS += -p m328p
smlng marked this conversation as resolved.
Show resolved Hide resolved
# configure programmer speed in baud
FFLAGS_EXTRA += -b 57600

BOOTLOADER_SIZE ?= 2K
ROM_RESERVED ?= $(BOOTLOADER_SIZE)
Expand Down
21 changes: 12 additions & 9 deletions boards/arduino-mega2560/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,19 @@ export CPU = atmega2560

USEMODULE += boards_common_arduino-atmega

#export needed for flash rule
export PORT_LINUX ?= /dev/ttyACM0
export PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
export PROGRAMMER_SPEED ?= 115200
# configure the terminal program
PORT_LINUX ?= /dev/ttyACM0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
BAUD ?= 9600

export FFLAGS += -p m2560

# PROGRAMMER defaults to stk500v2 which is the internal flasher via USB. Can be
# overridden for debugging (which requires changes that require to use an ISP)
export PROGRAMMER ?= stk500v2
# PROGRAMMER defaults to stk500v2 which is the internal flasher via USB
# using avrdude. Can be overridden for debugging (which requires changes
# that require to use an ISP)
PROGRAMMER ?= stk500v2
# set mcu model for avrdude
FFLAGS += -p m2560
# configure programmer speed in baud
FFLAGS_EXTRA += -b 115200

BOOTLOADER_SIZE ?= 8K
ROM_RESERVED ?= $(BOOTLOADER_SIZE)
Expand Down
21 changes: 12 additions & 9 deletions boards/arduino-uno/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,19 @@ export CPU = atmega328p

USEMODULE += boards_common_arduino-atmega

# export needed for flash rule
export PORT_LINUX ?= /dev/ttyACM0
export PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
export PROGRAMMER_SPEED ?= 115200
# configure the terminal program
PORT_LINUX ?= /dev/ttyACM0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
BAUD ?= 9600

export FFLAGS += -p m328p

# PROGRAMMER defaults to arduino which is the internal flasher via USB. Can be
# overridden for debugging (which requires changes that require to use an ISP)
export PROGRAMMER ?= arduino
# PROGRAMMER defaults to stk500v2 which is the internal flasher via USB
# using avrdude. Can be overridden for debugging (which requires changes
# that require to use an ISP)
PROGRAMMER ?= arduino
# set mcu model for avrdude
FFLAGS += -p m328p
# configure programmer speed in baud
FFLAGS_EXTRA += -b 115200

BOOTLOADER_SIZE ?= 512
ROM_RESERVED ?= $(BOOTLOADER_SIZE)
Expand Down
3 changes: 0 additions & 3 deletions boards/common/arduino-atmega/Makefile.features
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,3 @@ ifeq (,$(filter jiminy-mega256rfr2,$(BOARD)))
FEATURES_PROVIDED += arduino
FEATURES_PROVIDED += periph_pwm
endif

# The board MPU family (used for grouping by the CI system)
FEATURES_MCU_GROUP = avr8
17 changes: 4 additions & 13 deletions boards/common/arduino-atmega/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,10 @@ include $(RIOTBOARD)/common/arduino-atmega/Makefile.dep

INCLUDES += -I$(RIOTBOARD)/common/arduino-atmega/include

# refine serial port information
export BAUD ?= 9600
include $(RIOTMAKE)/tools/serial.inc.mk

export FLASHER = avrdude
export DIST_PATH = $(RIOTBOARD)/$(BOARD)/dist
export DEBUGSERVER_PORT = 4242
export DEBUGSERVER = $(DIST_PATH)/debug_srv.sh
export DEBUGSERVER_FLAGS = "-g -j usb :$(DEBUGSERVER_PORT)"
export DEBUGGER_FLAGS = "-x $(RIOTBOARD)/$(BOARD)/dist/gdb.conf $(ELFFILE)"
export DEBUGGER = $(DIST_PATH)/debug.sh $(DEBUGSERVER_FLAGS) $(DIST_PATH) $(DEBUGSERVER_PORT)
# Disable auto erase for flash and avoid error if signature doesn't match
FFLAGS_EXTRA += -F -D

export PROGRAMMER_FLAGS = -P $(PORT) -b $(PROGRAMMER_SPEED)

OFLAGS += -j .text -j .data
export FFLAGS += -c $(PROGRAMMER) $(PROGRAMMER_FLAGS) -F -D -U flash:w:$(HEXFILE)
# include avrdude flashing tool
include $(RIOTMAKE)/tools/avrdude.inc.mk
6 changes: 2 additions & 4 deletions boards/jiminy-mega256rfr2/Makefile.features
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# This board is based on an atmega CPU, thus import the features from it
include $(RIOTBOARD)/common/arduino-atmega/Makefile.features

# Put defined MCU peripherals here (in alphabetical order)
# Peripherals are defined in common/arduino-atmega/Makefile.features
# Add only additional Peripherals

# The board MPU family (used for grouping by the CI system)
FEATURES_MCU_GROUP = avr6

include $(RIOTCPU)/atmega256rfr2/Makefile.features
-include $(RIOTCPU)/atmega256rfr2/Makefile.features
32 changes: 17 additions & 15 deletions boards/jiminy-mega256rfr2/Makefile.include
Original file line number Diff line number Diff line change
@@ -1,28 +1,30 @@
# define the cpu used by the jiminy board
export CPU = atmega256rfr2

# export needed for flash rule
export PORT_LINUX ?= /dev/ttyACM0
export PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))

# Serial Baud rate for Ffasher is configured to 500kBaud
# see /usr/include/asm-generic/termbits.h for availabel baudrates on your linux system
export PROGRAMMER_SPEED ?= 0010005

export FFLAGS += -p atmega256rfr2

# configure the terminal program
PORT_LINUX ?= /dev/ttyACM0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
# refine serial port information for pyterm
# For 8MHz F_CPU following Baudrate have good error rates
# 76923
# 38400
export BAUD = 38400
BAUD ?= 38400
include $(RIOTMAKE)/tools/serial.inc.mk

# PROGRAMMER defaults to arduino which is the internal flasher via USB. Can be
# overridden for debugging (which requires changes that require to use an ISP)
export PROGRAMMER ?= wiring
# PROGRAMMER defaults to wiring which is the internal flasher via USB
# using avrdude. Can be overridden for debugging (which requires changes
# that require to use an ISP)
PROGRAMMER ?= wiring
# set mcu model for avrdude (mandatory)
FFLAGS += -p atmega256rfr2
# Serial Baud rate for flasher is configured to 500kBaud
# see /usr/include/asm-generic/termbits.h for availabel baudrates on your linux system
FFLAGS_EXTRA += -b 0010005
# avoid error if mcu signature doesn't match
FFLAGS_EXTRA += -F

# From current fuse configuration
BOOTLOADER_SIZE ?= 4K
ROM_RESERVED ?= $(BOOTLOADER_SIZE)

include $(RIOTBOARD)/common/arduino-atmega/Makefile.include
include $(RIOTMAKE)/tools/avrdude.inc.mk
5 changes: 1 addition & 4 deletions boards/mega-xplained/Makefile.features
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,4 @@ FEATURES_PROVIDED += periph_uart

# Various other features (if any)

# The board MPU family (used for grouping by the CI system)
FEATURES_MCU_GROUP = avr8

include $(RIOTCPU)/atmega1284p/Makefile.features
-include $(RIOTCPU)/atmega1284p/Makefile.features
33 changes: 16 additions & 17 deletions boards/mega-xplained/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,22 @@ BOOTLOADER_SIZE ?= 4K
ROM_RESERVED ?= $(BOOTLOADER_SIZE)

# configure the terminal program
export PORT_LINUX ?= /dev/ttyACM0
export PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbserial*)))
export BAUD ?= 9600
PORT_LINUX ?= /dev/ttyACM0
PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbmodem*)))
smlng marked this conversation as resolved.
Show resolved Hide resolved
BAUD ?= 9600
include $(RIOTMAKE)/tools/serial.inc.mk

export FLASHER = avrdude
export DIST_PATH = $(RIOTBOARD)/$(BOARD)/dist
export DEBUGSERVER_PORT = 4242
export DEBUGSERVER = $(DIST_PATH)/debug_srv.sh
export DEBUGSERVER_FLAGS = "-g -j usb :$(DEBUGSERVER_PORT)"
export DEBUGGER_FLAGS = "-x $(RIOTBOARD)/$(BOARD)/dist/gdb.conf $(ELFFILE)"
export DEBUGGER = $(DIST_PATH)/debug.sh $(DEBUGSERVER_FLAGS) $(DIST_PATH) $(DEBUGSERVER_PORT)
# PROGRAMMER defaults to the external flasher Bus Pirate ISP using avrdude.
PROGRAMMER ?= buspirate
# set mcu model for avrdude
FFLAGS += -p m1284p
# set serial port for avrdude with buspirate
ifeq ($(OS),Linux)
AVRDUDE_PORT ?= /dev/ttyUSB0
else ifeq ($(OS),Darwin)
AVRDUDE_PORT ?= $(firstword $(sort $(wildcard /dev/tty.usbserial*)))
endif
# avoid error if mcu signature doesn't match
FFLAGS_EXTRA += -F

# PROGRAMMER defaults to the Bus Pirate ISP
export PROGRAMMER ?= buspirate

export PROGRAMMER_FLAGS = -P /dev/ttyUSB0
smlng marked this conversation as resolved.
Show resolved Hide resolved

OFLAGS += -j .text -j .data
export FFLAGS += -p m1284p -c $(PROGRAMMER) $(PROGRAMMER_FLAGS) -F -U flash:w:$(HEXFILE)
include $(RIOTMAKE)/tools/avrdude.inc.mk
5 changes: 1 addition & 4 deletions boards/waspmote-pro/Makefile.features
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,4 @@ FEATURES_PROVIDED += periph_uart

# Various other features (if any)

# The board MPU family (used for grouping by the CI system)
FEATURES_MCU_GROUP = avr8

include $(RIOTCPU)/atmega1281/Makefile.features
-include $(RIOTCPU)/atmega1281/Makefile.features
38 changes: 11 additions & 27 deletions boards/waspmote-pro/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,15 @@ PORT_DARWIN ?= $(firstword $(sort $(wildcard /dev/tty.usbserial*)))
BAUD ?= 9600
include $(RIOTMAKE)/tools/serial.inc.mk

# define tools used for building the project
export PREFIX = avr-
export CC = $(PREFIX)gcc
export CXX = $(PREFIX)c++
export AR = $(PREFIX)ar
export AS = $(PREFIX)as
export LINK = $(PREFIX)gcc
export SIZE = $(PREFIX)size
export OBJCOPY = $(PREFIX)objcopy
# PROGRAMMER defaults to stk500v1 which is the internal flasher via USB
# using avrdude. Can be overridden for debugging (which requires changes
# that require to use an ISP)
PROGRAMMER ?= stk500v1
# set mcu model for avrdude
FFLAGS += -p m1281
# configure programmer speed in baud
FFLAGS_EXTRA += -b 115200
# avoid error if mcu signature doesn't match
FFLAGS_EXTRA += -F

export FLASHER = avrdude
export DIST_PATH = $(RIOTBOARD)/$(BOARD)/dist
export DEBUGSERVER_PORT = 4242
export DEBUGSERVER = $(DIST_PATH)/debug_srv.sh
export DEBUGSERVER_FLAGS = "-g -j usb :$(DEBUGSERVER_PORT)"
export DEBUGGER_FLAGS = "-x $(RIOTBOARD)/$(BOARD)/dist/gdb.conf $(ELFFILE)"
export DEBUGGER = $(DIST_PATH)/debug.sh $(DEBUGSERVER_FLAGS) $(DIST_PATH) $(DEBUGSERVER_PORT)

# PROGRAMMER defaults to stk500v1 which is the internal flasher via USB. Can be
# overridden for debugging (which requires changes that require to use an ISP)
export PROGRAMMER ?= stk500v1

ifeq ($(PROGRAMMER), stk500v1)
export PROGRAMMER_FLAGS = -P $(PORT) -b 115200
endif
ZetaR60 marked this conversation as resolved.
Show resolved Hide resolved

OFLAGS += -j .text -j .data
export FFLAGS += -p m1281 -c $(PROGRAMMER) $(PROGRAMMER_FLAGS) -F -U flash:w:$(HEXFILE)
include $(RIOTMAKE)/tools/avrdude.inc.mk
2 changes: 1 addition & 1 deletion cpu/atmega256rfr2/periph/Makefile
Original file line number Diff line number Diff line change
@@ -1 +1 @@
include $(RIOTBASE)/Makefile.base
include $(RIOTMAKE)/periph.mk
2 changes: 1 addition & 1 deletion cpu/atmega328p/Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ RAM_LEN = 2K
ROM_LEN = 32K

# CPU depends on the atmega common module, so include it
include $(RIOTCPU)/atmega_common/Makefile.include
include $(RIOTCPU)/atmega_common/Makefile.include
39 changes: 2 additions & 37 deletions cpu/atmega_common/Makefile.include
Original file line number Diff line number Diff line change
@@ -1,44 +1,9 @@
# Target architecture for the build. Use avr if you are unsure.
export TARGET_ARCH ?= avr

export CFLAGS_CPU = -mmcu=$(CPU) $(CFLAGS_FPU)
export CFLAGS_LINK = -ffunction-sections -fdata-sections -fno-builtin -fshort-enums
export CFLAGS_DBG ?= -ggdb -g3
export CFLAGS_OPT ?= -Os

export CFLAGS += $(CFLAGS_CPU) $(CFLAGS_LINK) $(CFLAGS_DBG) $(CFLAGS_OPT)
export ASFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG)
LINKFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG) $(CFLAGS_OPT) -static -lgcc -e reset_handler -Wl,--gc-sections

# export the peripheral drivers to be linked into the final binary
export USEMODULE += atmega_common_periph
export USEMODULE += periph_common

# the atmel port uses stdio_uart
export USEMODULE += stdio_uart

# include module specific includes
export INCLUDES += -I$(RIOTCPU)/atmega_common/include \
-isystem$(RIOTCPU)/atmega_common/avr_libc_extra/include \
-isystem$(RIOTCPU)/atmega_common/avr_libc_extra/include/vendor

ifeq ($(LTO),1)
# avr-gcc <4.8.3 has a bug when using LTO which causes a warning to be printed always:
# '_vector_25' appears to be a misspelled signal handler [enabled by default]
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59396
LINKFLAGS += -Wno-error
endif

# Use ROM_LEN and RAM_LEN during link
$(if $(ROM_LEN),,$(error ROM_LEN is not defined))
$(if $(RAM_LEN),,$(error RAM_LEN is not defined))
LINKFLAGS += $(LINKFLAGPREFIX)--defsym=__TEXT_REGION_LENGTH__=$(ROM_LEN)$(if $(ROM_RESERVED),-$(ROM_RESERVED))
LINKFLAGS += $(LINKFLAGPREFIX)--defsym=__DATA_REGION_LENGTH__=$(RAM_LEN)

# Use newer linker script to have ROM/RAM configuration symbols in binutils<2.26
LDSCRIPT_COMPAT = $(if $(shell $(TARGET_ARCH)-ld --verbose | grep __TEXT_REGION_LENGTH__),,\
-T$(RIOTCPU)/$(CPU)/ldscripts_compat/avr_2.26.ld)
LINKFLAGS += $(LDSCRIPT_COMPAT)

# avr libc needs some RIOT-specific support code
USEMODULE += avr_libc_extra

include $(RIOTMAKE)/arch/atmega.inc.mk
50 changes: 50 additions & 0 deletions makefiles/arch/atmega.inc.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Target architecture for the build. Use avr if you are unsure.
TARGET_ARCH ?= avr

CFLAGS_CPU = -mmcu=$(CPU) $(CFLAGS_FPU)
CFLAGS_LINK = -ffunction-sections -fdata-sections -fno-builtin -fshort-enums
CFLAGS_DBG ?= -ggdb -g3
CFLAGS_OPT ?= -Os

CFLAGS += $(CFLAGS_CPU) $(CFLAGS_LINK) $(CFLAGS_DBG) $(CFLAGS_OPT)
ASFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG)
LINKFLAGS += $(CFLAGS_CPU) $(CFLAGS_DBG) $(CFLAGS_OPT) -static -lgcc -e reset_handler -Wl,--gc-sections
OFLAGS += -j .text -j .data

# Tell the build system that the CPU depends on the atmega common files:
USEMODULE += atmega_common

# export the peripheral drivers to be linked into the final binary
USEMODULE += atmega_common_periph
USEMODULE += periph_common

# Export the peripheral drivers to be linked into the final binary, for now
# only atmega126rfr2 has periph drivers
ifeq ($(CPU), atmega256rfr2)
USEMODULE += periph
ZetaR60 marked this conversation as resolved.
Show resolved Hide resolved
endif

# the atmel port uses stdio_uart
USEMODULE += stdio_uart

# explicitly tell the linker to link the syscalls and startup code.
# without this the interrupt vectors will not be linked correctly!
UNDEF += $(BINDIR)/atmega_common/startup.o
ZetaR60 marked this conversation as resolved.
Show resolved Hide resolved

# Use ROM_LEN and RAM_LEN during link
$(if $(ROM_LEN),,$(error ROM_LEN is not defined))
$(if $(RAM_LEN),,$(error RAM_LEN is not defined))
LINKFLAGS += $(LINKFLAGPREFIX)--defsym=__TEXT_REGION_LENGTH__=$(ROM_LEN)$(if $(ROM_RESERVED),-$(ROM_RESERVED))
LINKFLAGS += $(LINKFLAGPREFIX)--defsym=__DATA_REGION_LENGTH__=$(RAM_LEN)

# Use newer linker script to have ROM/RAM configuration symbols in binutils<2.26
LDSCRIPT_COMPAT = $(if $(shell $(TARGET_ARCH)-ld --verbose | grep __TEXT_REGION_LENGTH__),,\
-T$(RIOTCPU)/$(CPU)/ldscripts_compat/avr_2.26.ld)
LINKFLAGS += $(LDSCRIPT_COMPAT)

ifeq ($(LTO),1)
# avr-gcc <4.8.3 has a bug when using LTO which causes a warning to be printed always:
# '_vector_25' appears to be a misspelled signal handler [enabled by default]
# See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59396
LINKFLAGS += -Wno-error
endif
Loading