From 14355cb7d44617b2a8aaa459777ac54680a8b8a1 Mon Sep 17 00:00:00 2001 From: Valeriy Koval Date: Fri, 6 Feb 2015 18:12:56 +0200 Subject: [PATCH] Finalize with Atmel SAM platform --- platformio/boards/arduino.json | 26 +++++- platformio/boards/sam.json | 25 ------ .../builder/scripts/frameworks/arduino.py | 29 ++++++- platformio/builder/scripts/sam.py | 79 ++++++------------- platformio/platforms/sam.py | 3 +- 5 files changed, 78 insertions(+), 84 deletions(-) delete mode 100644 platformio/boards/sam.json diff --git a/platformio/boards/arduino.json b/platformio/boards/arduino.json index deba1b1b..84fa14ff 100644 --- a/platformio/boards/arduino.json +++ b/platformio/boards/arduino.json @@ -536,5 +536,29 @@ "via_ssh": true, "wait_for_upload_port": true } - } + }, + "due": { + "build": { + "core": "arduino", + "extra_flags": "-D__SAM3X8E__ -DARDUINO_SAM_DUE -DARDUINO_ARCH_SAM", + "f_cpu": "84000000L", + "mcu": "cortex-m3", + "pid": "0x003e", + "usb_product": "Arduino Due", + "variant": "arduino_due_x", + "vid": "0x2341", + "ldscript": "sam3x8e.ld" + }, + "name": "Arduino Due (Programming Port)", + "platform": "sam", + "upload": { + "disable_flushing": true, + "maximum_ram_size": 524288, + "maximum_size": 28672, + "protocol": "sam-ba", + "speed": 57600, + "use_1200bps_touch": true, + "wait_for_upload_port": false + } + } } diff --git a/platformio/boards/sam.json b/platformio/boards/sam.json deleted file mode 100644 index 1a713952..00000000 --- a/platformio/boards/sam.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "Due": { - "build": { - "core": "arduino", - "extra_flags": "-D__SAM3X8E__ -DARDUINO_SAM_DUE -DARDUINO_ARCH_SAM", - "f_cpu": "84000000L", - "mcu": "cortex-m3", - "pid": "0x003e", - "usb_product": "Arduino Due", - "variant": "arduino_due_x", - "vid": "0x2341" - }, - "name": "Arduino Due", - "platform": "sam", - "upload": { - "disable_flushing": true, - "maximum_ram_size": 524288, - "maximum_size": 28672, - "protocol": "sam-ba", - "speed": 57600, - "use_1200bps_touch": true, - "wait_for_upload_port": false - } - } -} \ No newline at end of file diff --git a/platformio/builder/scripts/frameworks/arduino.py b/platformio/builder/scripts/frameworks/arduino.py index ef7f2123..aa353081 100644 --- a/platformio/builder/scripts/frameworks/arduino.py +++ b/platformio/builder/scripts/frameworks/arduino.py @@ -2,7 +2,7 @@ # See LICENSE for details. """ - Build script for Android Framework (based on Wiring). + Build script for Arduino Framework (based on Wiring). """ from os.path import join @@ -49,6 +49,33 @@ if "variant" in env.get("BOARD_OPTIONS", {}).get("build", {}): ] ) +if env.get("BOARD_OPTIONS", {}).get("platform", None) == "sam": + env.VariantDir( + join("$BUILD_DIR", "FrameworkCMSISInc"), + join("$PLATFORMFW_DIR", "system", "CMSIS", "CMSIS", "include") + ) + env.VariantDir( + join("$BUILD_DIR", "FrameworkLibSamInc"), + join("$PLATFORMFW_DIR", "system", "libsam") + ) + env.VariantDir( + join("$BUILD_DIR", "FrameworkDeviceInc"), + join("$PLATFORMFW_DIR", "system", "CMSIS", "Device", "ATMEL") + ) + env.Append( + CPPPATH=[ + join("$BUILD_DIR", "FrameworkCMSISInc"), + join("$BUILD_DIR", "FrameworkLibSamInc"), + join("$BUILD_DIR", "FrameworkDeviceInc") + ] + ) + env.Append( + LINKFLAGS=[ + "-T", join("$PIOHOME_DIR", "packages", "ldscripts", + "${BOARD_OPTIONS['build']['ldscript']}") + ] + ) + # # Target: Build Core Library # diff --git a/platformio/builder/scripts/sam.py b/platformio/builder/scripts/sam.py index c9ca92af..a8c98183 100644 --- a/platformio/builder/scripts/sam.py +++ b/platformio/builder/scripts/sam.py @@ -28,22 +28,25 @@ env.Replace( "-c", "-g", # include debugging info (so errors include line numbers) "-x", "assembler-with-cpp", - "-mmcu=$BOARD_MCU" + "-Wall", + "-mthumb", + "-mcpu=${BOARD_OPTIONS['build']['mcu']}" ], CCFLAGS=[ "-g", # include debugging info (so errors include line numbers) "-Os", # optimize for size - # "-Wall", # show warnings + "-Wall", # show warnings "-ffunction-sections", # place each function in its own section "-fdata-sections", "-MMD", # output dependency info - "-mmcu=$BOARD_MCU" + "-mcpu=${BOARD_OPTIONS['build']['mcu']}", + "-mthumb" ], CXXFLAGS=[ - "-fno-exceptions", - "-fno-threadsafe-statics" + "-fno-rtti", + "-fno-exceptions" ], CPPDEFINES=[ @@ -52,54 +55,34 @@ env.Replace( LINKFLAGS=[ "-Os", - "-mmcu=$BOARD_MCU", "-Wl,--gc-sections", - "-Wl,--start-group" + "-mcpu=${BOARD_OPTIONS['build']['mcu']}", + "-mthumb" ], - UPLOADER=join("$PIOPACKAGES_DIR", "tool-sam", "bossac"), + UPLOADER=join("$PIOPACKAGES_DIR", "$PIOPACKAGE_UPLOADER", "bossac"), UPLOADERFLAGS=[ - "-i", - "-d", + "--info", + "--debug", "--port", "$UPLOAD_PORT", - "-U false", # @TODO "Native USB"? - "-e", - "-w", - "-v", - "-b" + "--erase", + "--write", + "--verify", + "--boot" ], - UPLOADBINCMD='"$UPLOADER" $UPLOADERFLAGS -U flash:w:$SOURCES:i', - UPLOADEEPCMD='"$UPLOADER" $UPLOADERFLAGS -U eeprom:w:$SOURCES:i' + UPLOADBINCMD='"$UPLOADER" $UPLOADERFLAGS $SOURCES' ) env.Append( BUILDERS=dict( - ElfToEep=Builder( + ElfToBin=Builder( action=" ".join([ "$OBJCOPY", "-O", - "ihex", - "-j", - ".eeprom", - '--set-section-flags=.eeprom="alloc,load"', - "--no-change-warnings", - "--change-section-lma", - ".eeprom=0", + "binary", "$SOURCES", "$TARGET"]), - suffix=".eep" - ), - - BUILDERS=dict( - ElfToBin=Builder( - action=" ".join([ - "$OBJCOPY", - "-O", - "binary", - "$SOURCES", - "$TARGET"]), - suffix=".bin" - ) + suffix=".bin" ) ) ) @@ -110,7 +93,7 @@ CORELIBS = env.ProcessGeneral() # Target: Build executable and linkable firmware # -target_elf = env.BuildFirmware(CORELIBS + ["m"]) +target_elf = env.BuildFirmware(CORELIBS + ["m", "gcc"]) # # Target: Build the .bin file @@ -121,13 +104,6 @@ if "uploadlazy" in COMMAND_LINE_TARGETS: else: target_bin = env.ElfToBin(join("$BUILD_DIR", "firmware"), target_elf) -# -# Target: Extract EEPROM data (from EEMEM directive) to .eep file -# - -target_eep = env.Alias("eep", env.ElfToEep(join("$BUILD_DIR", "firmware"), - target_elf)) - # # Target: Upload by default .bin file # @@ -135,20 +111,11 @@ target_eep = env.Alias("eep", env.ElfToEep(join("$BUILD_DIR", "firmware"), upload = env.Alias(["upload", "uploadlazy"], target_bin, ("$UPLOADBINCMD")) AlwaysBuild(upload) -# -# Target: Upload .eep file -# - -uploadeep = env.Alias(["uploadeep"], target_eep, ("$UPLOADEEPCMD")) -AlwaysBuild(uploadeep) - - # # Check for $UPLOAD_PORT variable # -is_uptarget = (set(["upload", "uploadlazy", "uploadeep"]) & - set(COMMAND_LINE_TARGETS)) +is_uptarget = (set(["upload", "uploadlazy"]) & set(COMMAND_LINE_TARGETS)) if is_uptarget: # try autodetect upload port diff --git a/platformio/platforms/sam.py b/platformio/platforms/sam.py index 0beeaa5b..3bc6ac9b 100644 --- a/platformio/platforms/sam.py +++ b/platformio/platforms/sam.py @@ -8,6 +8,7 @@ class SamPlatform(BasePlatform): """ An embedded platform for Atmel SAM microcontrollers + (with Arduino Framework) """ PACKAGES = { @@ -26,7 +27,7 @@ class SamPlatform(BasePlatform): "default": True }, - "tool-sam": { + "tool-bossac": { "alias": "uploader", "default": True }