From 5278ffa76b7cbaf6759a2253247f31df84a2e044 Mon Sep 17 00:00:00 2001 From: "Q.B" Date: Thu, 15 Jul 2021 22:29:02 +0200 Subject: [PATCH 01/62] update USB implementation, fix 64 bytes bug --- cores/arduino/USB/SAMD21_USBDevice.h | 212 ++++++++++++++------------- cores/arduino/USB/USBCore.cpp | 49 ++++--- cores/arduino/sync.h | 30 ++++ 3 files changed, 168 insertions(+), 123 deletions(-) create mode 100644 cores/arduino/sync.h diff --git a/cores/arduino/USB/SAMD21_USBDevice.h b/cores/arduino/USB/SAMD21_USBDevice.h index d2700290f..3c23271e4 100644 --- a/cores/arduino/USB/SAMD21_USBDevice.h +++ b/cores/arduino/USB/SAMD21_USBDevice.h @@ -16,7 +16,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -#if (!SAMC) #pragma once #include @@ -25,6 +24,8 @@ #include #include +#include "sync.h" + typedef uint8_t ep_t; class USBDevice_SAMD21G18x { @@ -37,7 +38,7 @@ class USBDevice_SAMD21G18x { // --------------------------- // Reset USB Device - void reset(); + inline void reset(); // Enable inline void enable() { usb.CTRLA.bit.ENABLE = 1; } @@ -48,11 +49,14 @@ class USBDevice_SAMD21G18x { #if (SAMD21 || SAML21 || SAMD51) inline void setUSBHostMode() { usb.CTRLA.bit.MODE = USB_CTRLA_MODE_HOST_Val; } #endif - inline void runInStandby() { usb.CTRLA.bit.RUNSTDBY = 1; } inline void noRunInStandby() { usb.CTRLA.bit.RUNSTDBY = 0; } inline void wakeupHost() { usb.CTRLB.bit.UPRSM = 1; } + // USB QoS + inline void setDataSensitiveQoS() { usb.QOSCTRL.bit.DQOS = 2; } + inline void setConfigSensitiveQoS() { usb.QOSCTRL.bit.CQOS = 2; } + // USB speed inline void setFullSpeed() { usb.CTRLB.bit.SPDCONF = USB_DEVICE_CTRLB_SPDCONF_FS_Val; } inline void setLowSpeed() { usb.CTRLB.bit.SPDCONF = USB_DEVICE_CTRLB_SPDCONF_LS_Val; } @@ -82,7 +86,7 @@ class USBDevice_SAMD21G18x { inline uint16_t frameNumber() { return usb.FNUM.bit.FNUM; } // Load calibration values - void calibrate(); + inline void calibrate(); // USB Device Endpoints function mapping // ------------------------------------- @@ -94,27 +98,37 @@ class USBDevice_SAMD21G18x { // Interrupts inline uint16_t epInterruptSummary() { return usb.EPINTSMRY.reg; } + inline bool epHasPendingInterrupts(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.reg != 0; } inline bool epBank0IsSetupReceived(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.RXSTP; } inline bool epBank0IsStalled(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.STALL0; } inline bool epBank1IsStalled(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.STALL1; } + inline bool epBank0IsTransferFailed(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.TRFAIL0; } + inline bool epBank1IsTransferFailed(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.TRFAIL1; } inline bool epBank0IsTransferComplete(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.TRCPT0; } inline bool epBank1IsTransferComplete(ep_t ep) { return usb.DeviceEndpoint[ep].EPINTFLAG.bit.TRCPT1; } + inline void epAckPendingInterrupts(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = 0x7F; } inline void epBank0AckSetupReceived(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_RXSTP; } inline void epBank0AckStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL(1); } inline void epBank1AckStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_STALL(2); } + inline void epBank0AckTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRFAIL(1); } + inline void epBank1AckTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRFAIL(2); } inline void epBank0AckTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT(1); } inline void epBank1AckTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT(2); } inline void epBank0EnableSetupReceived(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.RXSTP = 1; } inline void epBank0EnableStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.STALL0 = 1; } inline void epBank1EnableStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.STALL1 = 1; } + inline void epBank0EnableTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.TRFAIL0 = 1; } + inline void epBank1EnableTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.TRFAIL1 = 1; } inline void epBank0EnableTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.TRCPT0 = 1; } inline void epBank1EnableTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENSET.bit.TRCPT1 = 1; } inline void epBank0DisableSetupReceived(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.RXSTP = 1; } inline void epBank0DisableStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.STALL0 = 1; } inline void epBank1DisableStalled(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.STALL1 = 1; } + inline void epBank0DisableTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.TRFAIL0 = 1; } + inline void epBank1DisableTransferFailed(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.TRFAIL1 = 1; } inline void epBank0DisableTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.TRCPT0 = 1; } inline void epBank1DisableTransferComplete(ep_t ep) { usb.DeviceEndpoint[ep].EPINTENCLR.bit.TRCPT1 = 1; } @@ -162,6 +176,15 @@ class USBDevice_SAMD21G18x { inline void epBank0EnableAutoZLP(ep_t ep) { EP[ep].DeviceDescBank[0].PCKSIZE.bit.AUTO_ZLP = 1; } inline void epBank1EnableAutoZLP(ep_t ep) { EP[ep].DeviceDescBank[1].PCKSIZE.bit.AUTO_ZLP = 1; } + // USB Device Endpoint transactions helpers + // ---------------------------------------- + + inline void epReleaseOutBank0(ep_t ep, uint16_t s) { + epBank0SetMultiPacketSize(ep, s); + epBank0SetByteCount(ep, 0); + epBank0ResetReady(ep); + } + private: // USB Device registers UsbDevice &usb; @@ -199,32 +222,6 @@ void USBDevice_SAMD21G18x::calibrate() { usb.PADCAL.bit.TRIM = pad_trim; } -/* - * Synchronization primitives. - * TODO: Move into a separate header file and make an API out of it - */ - -class __Guard { -public: - __Guard() : primask(__get_PRIMASK()), loops(1) { - __disable_irq(); - } - ~__Guard() { - if (primask == 0) { - __enable_irq(); - // http://infocenter.arm.com/help/topic/com.arm.doc.dai0321a/BIHBFEIB.html - __ISB(); - } - } - uint32_t enter() { return loops--; } -private: - uint32_t primask; - uint32_t loops; -}; - -#define synchronized for (__Guard __guard; __guard.enter(); ) - - /* * USB EP generic handlers. */ @@ -233,33 +230,41 @@ class EPHandler { public: virtual void handleEndpoint() = 0; virtual uint32_t recv(void *_data, uint32_t len) = 0; - virtual uint32_t available() const = 0; + virtual uint32_t available() = 0; + virtual int peek() = 0; }; class DoubleBufferedEPOutHandler : public EPHandler { public: - DoubleBufferedEPOutHandler(USBDevice_SAMD21G18x &usbDev, uint32_t endPoint, uint32_t bufferSize) : + enum { size = 64 }; + + DoubleBufferedEPOutHandler(USBDevice_SAMD21G18x &usbDev, uint32_t endPoint) : usbd(usbDev), - ep(endPoint), size(bufferSize), + ep(endPoint), current(0), incoming(0), first0(0), last0(0), ready0(false), first1(0), last1(0), ready1(false), notify(false) { - data0 = reinterpret_cast(malloc(size)); - data1 = reinterpret_cast(malloc(size)); - usbd.epBank0SetSize(ep, 64); usbd.epBank0SetType(ep, 3); // BULK OUT - usbd.epBank0SetAddress(ep, const_cast(data0)); + usbd.epBank0EnableTransferComplete(ep); release(); } - virtual uint32_t recv(void *_data, uint32_t len) + virtual ~DoubleBufferedEPOutHandler() { + } + + uint32_t _recv() { - uint8_t *data = reinterpret_cast(_data); + uint32_t i = 0; + uint32_t len = 0; + + synchronized { + len = _rx_buffer.availableForStore(); + } // R/W: current, first0/1, ready0/1, notify // R : last0/1, data0/1 @@ -270,9 +275,8 @@ class DoubleBufferedEPOutHandler : public EPHandler { } } // when ready0==true the buffer is not being filled and last0 is constant - uint32_t i; - for (i=0; i(_data); + synchronized { + for (; i < len && _rx_buffer.available(); i++) { + data[i] = _rx_buffer.read_char(); + } + } + return i; + } + + virtual uint32_t _available() const { + if (current == 0) { + bool ready = ready0; + synchronized { + ready = ready0; + } + return ready ? (last0 - first0) : 0; + } else { + bool ready = false; + synchronized { + ready = ready1; + } + return ready ? (last1 - first1) : 0; } } @@ -318,87 +348,69 @@ class DoubleBufferedEPOutHandler : public EPHandler { // W : last0/1, notify if (usbd.epBank0IsTransferComplete(ep)) { - // Ack Transfer complete - usbd.epBank0AckTransferComplete(ep); - //usbd.epBank0AckTransferFailed(ep); // XXX - + uint32_t received = usbd.epBank0ByteCount(ep); + if (received == 0) { + release(); + } else if (incoming == 0) { // Update counters and swap banks for non-ZLP's - if (incoming == 0) { - last0 = usbd.epBank0ByteCount(ep); - if (last0 != 0) { - incoming = 1; - usbd.epBank0SetAddress(ep, const_cast(data1)); - synchronized { - ready0 = true; - if (ready1) { - notify = true; - return; - } - notify = false; + last0 = received; + incoming = 1; + usbd.epBank0SetAddress(ep, const_cast(data1)); + synchronized { + ready0 = true; + notify = ready1; + if (!notify) { + release(); } } } else { - last1 = usbd.epBank0ByteCount(ep); - if (last1 != 0) { - incoming = 0; - usbd.epBank0SetAddress(ep, const_cast(data0)); - synchronized { - ready1 = true; - if (ready0) { - notify = true; - return; - } - notify = false; + last1 = received; + incoming = 0; + usbd.epBank0SetAddress(ep, const_cast(data0)); + synchronized { + ready1 = true; + notify = ready0; + if (!notify) { + release(); } } } - release(); + usbd.epAckPendingInterrupts(ep); } } // Returns how many bytes are stored in the buffers - virtual uint32_t available() const { - if (current == 0) { - bool ready = false; - synchronized { - ready = ready0; - } - return ready ? (last0 - first0) : 0; - } else { - bool ready = false; - synchronized { - ready = ready1; - } - return ready ? (last1 - first1) : 0; - } + virtual uint32_t available() { + _recv(); + return _rx_buffer.available(); + } + + virtual int peek() { + _recv(); + return _rx_buffer.peek(); } void release() { - // Release OUT EP - usbd.epBank0EnableTransferComplete(ep); - usbd.epBank0SetMultiPacketSize(ep, size); - usbd.epBank0SetByteCount(ep, 0); - usbd.epBank0ResetReady(ep); + usbd.epReleaseOutBank0(ep, size); } private: USBDevice_SAMD21G18x &usbd; + RingBuffer _rx_buffer; + const uint32_t ep; - const uint32_t size; - uint32_t current, incoming; + volatile uint32_t current, incoming; - volatile uint8_t *data0; + __attribute__((__aligned__(4))) volatile uint8_t data0[size]; uint32_t first0; volatile uint32_t last0; volatile bool ready0; - volatile uint8_t *data1; + __attribute__((__aligned__(4))) volatile uint8_t data1[size]; uint32_t first1; volatile uint32_t last1; volatile bool ready1; volatile bool notify; }; - -#endif diff --git a/cores/arduino/USB/USBCore.cpp b/cores/arduino/USB/USBCore.cpp index 7b334a46b..b698d8c65 100644 --- a/cores/arduino/USB/USBCore.cpp +++ b/cores/arduino/USB/USBCore.cpp @@ -516,7 +516,7 @@ void USBDeviceClass::initEP(uint32_t ep, uint32_t config) else if (config == (USB_ENDPOINT_TYPE_BULK | USB_ENDPOINT_OUT(0))) { if (epHandlers[ep] == NULL) { - epHandlers[ep] = new DoubleBufferedEPOutHandler(usbd, ep, 256); + epHandlers[ep] = new DoubleBufferedEPOutHandler(usbd, ep); } } else if (config == (USB_ENDPOINT_TYPE_BULK | USB_ENDPOINT_IN(0))) @@ -1092,6 +1092,9 @@ void USBDeviceClass::ISRHandler() #endif } + /* Remove any stall requests for endpoint #0 */ + if (usbd.epBank0IsStalled(0)) { usbd.epBank0DisableStalled(0); } + // Endpoint 0 Received Setup interrupt if (usbd.epBank0IsSetupReceived(0)) { @@ -1120,7 +1123,7 @@ void USBDeviceClass::ISRHandler() if (usbd.epBank1IsStalled(0)) { - usbd.epBank1AckStalled(0); + // usbd.epBank1AckStalled(0); // Remove stall request usbd.epBank1DisableStalled(0); @@ -1128,27 +1131,27 @@ void USBDeviceClass::ISRHandler() } // end Received Setup handler - uint8_t i = (USB_EPT_NUM - 1); - uint8_t ept_int = usbd.epInterruptSummary() & 0xFE; // Remove endpoint number 0 (setup) - while (ept_int && i) - { - // Check if endpoint has a pending interrupt - if ((ept_int & (1 << i)) != 0) - { - // Endpoint Transfer Complete (0/1) Interrupt - if (usbd.epBank0IsTransferComplete(i) || - usbd.epBank1IsTransferComplete(i)) - { - if (epHandlers[i]) { - epHandlers[i]->handleEndpoint(); - } else { - handleEndpoint(i); - } - } - ept_int &= ~(1 << i); - } - i--; - } + uint8_t i = (USB_EPT_NUM - 1); + uint8_t ept_int = usbd.epInterruptSummary() & 0xFE; // Remove endpoint number 0 (setup) + while (ept_int && i) + { + // Check if endpoint has a pending interrupt + if ((ept_int & (1 << i)) != 0) + { + // Endpoint Transfer Complete (0/1) Interrupt + if (usbd.epBank0IsTransferComplete(i) || + usbd.epBank1IsTransferComplete(i)) + { + if (epHandlers[i]) { + epHandlers[i]->handleEndpoint(); + } else { + handleEndpoint(i); + } + } + ept_int &= ~(1 << i); + } + i--; + } } #endif diff --git a/cores/arduino/sync.h b/cores/arduino/sync.h new file mode 100644 index 000000000..2750a2911 --- /dev/null +++ b/cores/arduino/sync.h @@ -0,0 +1,30 @@ +#include + +#ifndef _SYNC_H_ +#define _SYNC_H_ +/* + * Synchronization primitives. + * TODO: Move into a separate header file and make an API out of it + */ + +class __Guard { +public: + __Guard() : primask(__get_PRIMASK()), loops(1) { + __disable_irq(); + } + ~__Guard() { + if (primask == 0) { + __enable_irq(); + // http://infocenter.arm.com/help/topic/com.arm.doc.dai0321a/BIHBFEIB.html + __ISB(); + } + } + uint32_t enter() { return loops--; } +private: + uint32_t primask; + uint32_t loops; +}; + +#define synchronized for (__Guard __guard; __guard.enter(); ) + +#endif \ No newline at end of file From 4269618484f9cc83977854fc0295ede2a756182e Mon Sep 17 00:00:00 2001 From: "Q.B" Date: Thu, 26 Aug 2021 16:08:59 +0200 Subject: [PATCH 02/62] refactor and cleanup --- boards.txt | 1735 ++--------------- .../binaries/sam_ba_MT_D11_SAMD11D14AM.bin | Bin 4068 -> 0 bytes .../sam_ba_MT_D21E_rev_A_SAMD21E17A.bin | Bin 5204 -> 0 bytes .../sam_ba_MT_D21E_rev_A_SAMD21E18A.bin | Bin 5204 -> 0 bytes .../sam_ba_MT_D21E_rev_B_SAMC21E18A.bin | Bin 3888 -> 0 bytes .../sam_ba_MT_D21E_rev_B_SAMD21E17A.bin | Bin 5200 -> 0 bytes .../sam_ba_MT_D21E_rev_B_SAMD21E18A.bin | Bin 5200 -> 0 bytes .../sam_ba_MT_D21E_rev_B_SAML21E18B.bin | Bin 5136 -> 0 bytes .../binaries/sam_ba_Xeno_Mini_SAMC21G18A.bin | Bin 3892 -> 0 bytes .../binaries/sam_ba_Xeno_Mini_SAMD21G18A.bin | Bin 5200 -> 0 bytes .../binaries/sam_ba_Xeno_Mini_SAMD51G19A.bin | Bin 5220 -> 0 bytes .../binaries/sam_ba_Xeno_Mini_SAML21G18B.bin | Bin 5136 -> 0 bytes .../zero/binaries/sam_ba_Xeno_SAMC21J18A.bin | Bin 3892 -> 0 bytes .../zero/binaries/sam_ba_Xeno_SAMD21J18A.bin | Bin 5196 -> 0 bytes .../zero/binaries/sam_ba_Xeno_SAMD51J20A.bin | Bin 5216 -> 0 bytes .../zero/binaries/sam_ba_Xeno_SAML21J18B.bin | Bin 5132 -> 0 bytes .../binaries/sam_ba_arduino_m0_SAMD21G18A.bin | Bin 5196 -> 0 bytes .../sam_ba_arduino_m0_pro_SAMD21G18A.bin | Bin 6304 -> 0 bytes .../sam_ba_arduino_mkr1000_SAMD21G18A.bin | Bin 6288 -> 0 bytes .../sam_ba_arduino_mkrfox1200_SAMD21G18A.bin | Bin 6292 -> 0 bytes .../sam_ba_arduino_mkrzero_SAMD21G18A.bin | Bin 6296 -> 0 bytes .../sam_ba_arduino_zero_SAMD21G18A.bin | Bin 6288 -> 0 bytes .../sam_ba_genuino_mkr1000_SAMD21G18A.bin | Bin 6288 -> 0 bytes .../sam_ba_genuino_zero_SAMD21G18A.bin | Bin 6288 -> 0 bytes .../sam_ba_sdcard_MT_D11_SAMD11D14AM.bin | Bin 4076 -> 0 bytes ...sam_ba_sdcard_MT_D21E_rev_A_SAMD21E17A.bin | Bin 8128 -> 0 bytes ...sam_ba_sdcard_MT_D21E_rev_A_SAMD21E18A.bin | Bin 8128 -> 0 bytes ...sam_ba_sdcard_MT_D21E_rev_B_SAMC21E18A.bin | Bin 6820 -> 0 bytes ...sam_ba_sdcard_MT_D21E_rev_B_SAMD21E17A.bin | Bin 8120 -> 0 bytes ...sam_ba_sdcard_MT_D21E_rev_B_SAMD21E18A.bin | Bin 8120 -> 0 bytes ...sam_ba_sdcard_MT_D21E_rev_B_SAML21E18B.bin | Bin 8060 -> 0 bytes .../sam_ba_sdcard_Xeno_Mini_SAMC21G18A.bin | Bin 6828 -> 0 bytes .../sam_ba_sdcard_Xeno_Mini_SAMD21G18A.bin | Bin 8124 -> 0 bytes .../sam_ba_sdcard_Xeno_Mini_SAMD51G19A.bin | Bin 8004 -> 0 bytes .../sam_ba_sdcard_Xeno_Mini_SAML21G18B.bin | Bin 8064 -> 0 bytes .../sam_ba_sdcard_Xeno_SAMC21J18A.bin | Bin 6828 -> 0 bytes .../sam_ba_sdcard_Xeno_SAMD21J18A.bin | Bin 8120 -> 0 bytes .../sam_ba_sdcard_Xeno_SAMD51J20A.bin | Bin 8000 -> 0 bytes .../sam_ba_sdcard_Xeno_SAML21J18B.bin | Bin 8060 -> 0 bytes .../sam_ba_sdcard_arduino_m0_SAMD21G18A.bin | Bin 8120 -> 0 bytes ...am_ba_sdcard_arduino_m0_pro_SAMD21G18A.bin | Bin 8124 -> 0 bytes ...m_ba_sdcard_arduino_mkr1000_SAMD21G18A.bin | Bin 8108 -> 0 bytes ...a_sdcard_arduino_mkrfox1200_SAMD21G18A.bin | Bin 8112 -> 0 bytes ...m_ba_sdcard_arduino_mkrzero_SAMD21G18A.bin | Bin 8112 -> 0 bytes .../sam_ba_sdcard_arduino_zero_SAMD21G18A.bin | Bin 8108 -> 0 bytes ...m_ba_sdcard_genuino_mkr1000_SAMD21G18A.bin | Bin 8108 -> 0 bytes .../sam_ba_sdcard_genuino_zero_SAMD21G18A.bin | Bin 8108 -> 0 bytes bootloaders/zero/board_definitions.h | 31 +- .../board_definitions_MT_D11.h | 269 --- .../board_definitions_MT_D21E_rev_A.h | 271 --- .../board_definitions_MT_D21E_rev_B.h | 285 --- .../board_definitions_Xeno.h | 300 --- .../board_definitions_Xeno_Mini.h | 299 --- .../board_definitions_arduino_m0.h | 264 --- .../board_definitions_arduino_m0_pro.h | 268 --- .../board_definitions_arduino_mkr1000.h | 270 --- .../board_definitions_arduino_mkrfox1200.h | 268 --- .../board_definitions_arduino_mkrzero.h | 269 --- .../board_definitions_arduino_zero.h | 268 --- .../board_definitions_genuino_mkr1000.h | 268 --- .../board_definitions_genuino_zero.h | 268 --- bootloaders/zero/build_all_bootloaders.sh | 62 - platform.txt | 2 +- variants/{MT_D21E => Generic_D21E}/README.md | 0 .../debug_scripts/SAMC21E15A.gdb | 0 .../debug_scripts/SAMC21E16A.gdb | 0 .../debug_scripts/SAMC21E17A.gdb | 0 .../debug_scripts/SAMC21E18A.gdb | 0 .../debug_scripts/SAMD21E15A.gdb | 0 .../debug_scripts/SAMD21E16A.gdb | 0 .../debug_scripts/SAMD21E17A.gdb | 0 .../debug_scripts/SAMD21E18A.gdb | 0 .../debug_scripts/SAML21E15B.gdb | 0 .../debug_scripts/SAML21E16B.gdb | 0 .../debug_scripts/SAML21E17B.gdb | 0 .../debug_scripts/SAML21E18B.gdb | 0 .../gcc/16KB_Bootloader/flash_128KB.ld | 0 .../gcc/16KB_Bootloader/flash_256KB.ld | 0 .../gcc/16KB_Bootloader/flash_32KB.ld | 0 .../gcc/16KB_Bootloader/flash_64KB.ld | 0 .../gcc/8KB_Bootloader/flash_128KB.ld | 0 .../gcc/8KB_Bootloader/flash_256KB.ld | 0 .../gcc/8KB_Bootloader/flash_32KB.ld | 0 .../gcc/8KB_Bootloader/flash_64KB.ld | 0 .../gcc/No_Bootloader/flash_128KB.ld | 0 .../gcc/No_Bootloader/flash_256KB.ld | 0 .../gcc/No_Bootloader/flash_32KB.ld | 0 .../gcc/No_Bootloader/flash_64KB.ld | 0 .../openocd_scripts/SAMC21E15A.cfg | 0 .../openocd_scripts/SAMC21E16A.cfg | 0 .../openocd_scripts/SAMC21E17A.cfg | 0 .../openocd_scripts/SAMC21E18A.cfg | 0 .../openocd_scripts/SAMD21E15A.cfg | 0 .../openocd_scripts/SAMD21E16A.cfg | 0 .../openocd_scripts/SAMD21E17A.cfg | 0 .../openocd_scripts/SAMD21E18A.cfg | 0 .../openocd_scripts/SAML21E15B.cfg | 0 .../openocd_scripts/SAML21E16B.cfg | 0 .../openocd_scripts/SAML21E17B.cfg | 0 .../openocd_scripts/SAML21E18B.cfg | 0 .../{MT_D11 => Generic_D21E}/pins_arduino.h | 0 .../{MT_D21E => Generic_D21E}/variant.cpp | 0 variants/{MT_D21E => Generic_D21E}/variant.h | 0 variants/MT_D11/README.md | 286 --- variants/MT_D11/debug_scripts/SAMD11D14AM.gdb | 31 - .../gcc/4KB_Bootloader/flash_16KB.ld | 217 --- .../gcc/No_Bootloader/flash_16KB.ld | 214 -- .../MT_D11/openocd_scripts/SAMD11D14AM.cfg | 30 - variants/MT_D11/variant.cpp | 243 --- variants/MT_D11/variant.h | 397 ---- variants/MT_D21E/pins_arduino.h | 21 - variants/MT_D21E_revB/README.md | 337 ---- .../MT_D21E_revB/debug_scripts/SAMC21E15A.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAMC21E16A.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAMC21E17A.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAMC21E18A.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAMD21E15A.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAMD21E16A.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAMD21E17A.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAMD21E18A.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAML21E15B.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAML21E16B.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAML21E17B.gdb | 31 - .../MT_D21E_revB/debug_scripts/SAML21E18B.gdb | 31 - .../gcc/16KB_Bootloader/flash_128KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_256KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_32KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_64KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_128KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_256KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_32KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_64KB.ld | 217 --- .../gcc/No_Bootloader/flash_128KB.ld | 214 -- .../gcc/No_Bootloader/flash_256KB.ld | 214 -- .../gcc/No_Bootloader/flash_32KB.ld | 214 -- .../gcc/No_Bootloader/flash_64KB.ld | 214 -- .../openocd_scripts/SAMC21E15A.cfg | 30 - .../openocd_scripts/SAMC21E16A.cfg | 30 - .../openocd_scripts/SAMC21E17A.cfg | 30 - .../openocd_scripts/SAMC21E18A.cfg | 30 - .../openocd_scripts/SAMD21E15A.cfg | 30 - .../openocd_scripts/SAMD21E16A.cfg | 30 - .../openocd_scripts/SAMD21E17A.cfg | 30 - .../openocd_scripts/SAMD21E18A.cfg | 30 - .../openocd_scripts/SAML21E15B.cfg | 30 - .../openocd_scripts/SAML21E16B.cfg | 30 - .../openocd_scripts/SAML21E17B.cfg | 30 - .../openocd_scripts/SAML21E18B.cfg | 30 - variants/MT_D21E_revB/pins_arduino.h | 21 - variants/MT_D21E_revB/variant.cpp | 350 ---- variants/MT_D21E_revB/variant.h | 484 ----- variants/Xeno/README.md | 263 --- variants/Xeno/debug_scripts/SAMC21J15A.gdb | 31 - variants/Xeno/debug_scripts/SAMC21J16A.gdb | 31 - variants/Xeno/debug_scripts/SAMC21J17A.gdb | 31 - variants/Xeno/debug_scripts/SAMC21J18A.gdb | 31 - variants/Xeno/debug_scripts/SAMD21J15A.gdb | 31 - variants/Xeno/debug_scripts/SAMD21J16A.gdb | 31 - variants/Xeno/debug_scripts/SAMD21J17A.gdb | 31 - variants/Xeno/debug_scripts/SAMD21J18A.gdb | 31 - variants/Xeno/debug_scripts/SAMD51J18A.gdb | 31 - variants/Xeno/debug_scripts/SAMD51J19A.gdb | 31 - variants/Xeno/debug_scripts/SAMD51J20A.gdb | 31 - variants/Xeno/debug_scripts/SAML21J16B.gdb | 31 - variants/Xeno/debug_scripts/SAML21J17B.gdb | 31 - variants/Xeno/debug_scripts/SAML21J18B.gdb | 31 - .../gcc/16KB_Bootloader/flash_128KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_256KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_32KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_64KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_m4f_1MB.ld | 217 --- .../gcc/16KB_Bootloader/flash_m4f_256KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_m4f_512KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_128KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_256KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_32KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_64KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_m4f_1MB.ld | 217 --- .../gcc/8KB_Bootloader/flash_m4f_256KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_m4f_512KB.ld | 217 --- .../gcc/No_Bootloader/flash_128KB.ld | 214 -- .../gcc/No_Bootloader/flash_256KB.ld | 214 -- .../gcc/No_Bootloader/flash_32KB.ld | 214 -- .../gcc/No_Bootloader/flash_64KB.ld | 214 -- .../gcc/No_Bootloader/flash_m4f_1MB.ld | 214 -- .../gcc/No_Bootloader/flash_m4f_256KB.ld | 214 -- .../gcc/No_Bootloader/flash_m4f_512KB.ld | 214 -- variants/Xeno/openocd_scripts/SAMC21J15A.cfg | 30 - variants/Xeno/openocd_scripts/SAMC21J16A.cfg | 30 - variants/Xeno/openocd_scripts/SAMC21J17A.cfg | 30 - variants/Xeno/openocd_scripts/SAMC21J18A.cfg | 30 - variants/Xeno/openocd_scripts/SAMD21J15A.cfg | 30 - variants/Xeno/openocd_scripts/SAMD21J16A.cfg | 30 - variants/Xeno/openocd_scripts/SAMD21J17A.cfg | 30 - variants/Xeno/openocd_scripts/SAMD21J18A.cfg | 30 - variants/Xeno/openocd_scripts/SAMD51J18A.cfg | 30 - variants/Xeno/openocd_scripts/SAMD51J19A.cfg | 30 - variants/Xeno/openocd_scripts/SAMD51J20A.cfg | 30 - variants/Xeno/openocd_scripts/SAML21J16B.cfg | 30 - variants/Xeno/openocd_scripts/SAML21J17B.cfg | 30 - variants/Xeno/openocd_scripts/SAML21J18B.cfg | 30 - variants/Xeno/pins_arduino.h | 21 - variants/Xeno/variant.cpp | 403 ---- variants/Xeno/variant.h | 501 ----- variants/Xeno_Mini/README.md | 229 --- .../Xeno_Mini/debug_scripts/SAMC21G15A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAMC21G16A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAMC21G17A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAMC21G18A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAMD21G15A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAMD21G16A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAMD21G17A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAMD21G18A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAMD51G18A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAMD51G19A.gdb | 31 - .../Xeno_Mini/debug_scripts/SAML21G16B.gdb | 31 - .../Xeno_Mini/debug_scripts/SAML21G17B.gdb | 31 - .../Xeno_Mini/debug_scripts/SAML21G18B.gdb | 31 - .../gcc/16KB_Bootloader/flash_128KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_256KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_32KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_64KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_m4f_256KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_m4f_512KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_128KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_256KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_32KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_64KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_m4f_256KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_m4f_512KB.ld | 217 --- .../gcc/No_Bootloader/flash_128KB.ld | 214 -- .../gcc/No_Bootloader/flash_256KB.ld | 214 -- .../gcc/No_Bootloader/flash_32KB.ld | 214 -- .../gcc/No_Bootloader/flash_64KB.ld | 214 -- .../gcc/No_Bootloader/flash_m4f_256KB.ld | 214 -- .../gcc/No_Bootloader/flash_m4f_512KB.ld | 214 -- .../Xeno_Mini/openocd_scripts/SAMC21G15A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAMC21G16A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAMC21G17A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAMC21G18A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAMD21G15A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAMD21G16A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAMD21G17A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAMD21G18A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAMD51G18A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAMD51G19A.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAML21G16B.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAML21G17B.cfg | 30 - .../Xeno_Mini/openocd_scripts/SAML21G18B.cfg | 30 - variants/Xeno_Mini/pins_arduino.h | 21 - variants/Xeno_Mini/variant.cpp | 365 ---- variants/Xeno_Mini/variant.h | 477 ----- variants/arduino_mzero/README.md | 214 -- .../debug_scripts/SAMD21G18A.gdb | 31 - .../gcc/16KB_Bootloader/flash_256KB.ld | 214 -- .../gcc/8KB_Bootloader/flash_256KB.ld | 217 --- .../gcc/No_Bootloader/flash_256KB.ld | 215 -- .../openocd_scripts/SAMD21G18A.cfg | 30 - variants/arduino_mzero/pins_arduino.h | 21 - variants/arduino_mzero/variant.cpp | 154 -- variants/arduino_mzero/variant.h | 288 --- variants/arduino_zero/README.md | 220 --- .../arduino_zero/debug_scripts/SAMC21G15A.gdb | 31 - .../arduino_zero/debug_scripts/SAMC21G16A.gdb | 31 - .../arduino_zero/debug_scripts/SAMC21G17A.gdb | 31 - .../arduino_zero/debug_scripts/SAMC21G18A.gdb | 31 - .../arduino_zero/debug_scripts/SAMD21G15A.gdb | 31 - .../arduino_zero/debug_scripts/SAMD21G16A.gdb | 31 - .../arduino_zero/debug_scripts/SAMD21G17A.gdb | 31 - .../arduino_zero/debug_scripts/SAMD21G18A.gdb | 31 - .../arduino_zero/debug_scripts/SAML21G16B.gdb | 31 - .../arduino_zero/debug_scripts/SAML21G17B.gdb | 31 - .../arduino_zero/debug_scripts/SAML21G18B.gdb | 31 - .../gcc/16KB_Bootloader/flash_128KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_256KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_32KB.ld | 217 --- .../gcc/16KB_Bootloader/flash_64KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_128KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_256KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_32KB.ld | 217 --- .../gcc/8KB_Bootloader/flash_64KB.ld | 217 --- .../gcc/No_Bootloader/flash_128KB.ld | 215 -- .../gcc/No_Bootloader/flash_256KB.ld | 215 -- .../gcc/No_Bootloader/flash_32KB.ld | 215 -- .../gcc/No_Bootloader/flash_64KB.ld | 215 -- .../openocd_scripts/SAMC21G15A.cfg | 30 - .../openocd_scripts/SAMC21G16A.cfg | 30 - .../openocd_scripts/SAMC21G17A.cfg | 30 - .../openocd_scripts/SAMC21G18A.cfg | 30 - .../openocd_scripts/SAMD21G15A.cfg | 30 - .../openocd_scripts/SAMD21G16A.cfg | 30 - .../openocd_scripts/SAMD21G17A.cfg | 30 - .../openocd_scripts/SAMD21G18A.cfg | 30 - .../openocd_scripts/SAML21G16B.cfg | 30 - .../openocd_scripts/SAML21G17B.cfg | 30 - .../openocd_scripts/SAML21G18B.cfg | 30 - variants/arduino_zero/pins_arduino.h | 21 - variants/arduino_zero/variant.cpp | 148 -- variants/arduino_zero/variant.h | 289 --- 299 files changed, 187 insertions(+), 28845 deletions(-) delete mode 100755 bootloaders/zero/binaries/sam_ba_MT_D11_SAMD11D14AM.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E17A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_MT_D21E_rev_B_SAMC21E18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_MT_D21E_rev_B_SAMD21E17A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_MT_D21E_rev_B_SAMD21E18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_MT_D21E_rev_B_SAML21E18B.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAMC21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAMD51G19A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAML21G18B.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_Xeno_SAMC21J18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_Xeno_SAMD21J18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_Xeno_SAMD51J20A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_Xeno_SAML21J18B.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_arduino_m0_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_arduino_m0_pro_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_arduino_mkr1000_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_arduino_mkrfox1200_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_arduino_mkrzero_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_arduino_zero_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_genuino_mkr1000_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_genuino_zero_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_MT_D11_SAMD11D14AM.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_A_SAMD21E17A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_A_SAMD21E18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_B_SAMC21E18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_B_SAMD21E17A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_B_SAMD21E18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_B_SAML21E18B.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_Xeno_Mini_SAMC21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_Xeno_Mini_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_Xeno_Mini_SAMD51G19A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_Xeno_Mini_SAML21G18B.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_Xeno_SAMC21J18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_Xeno_SAMD21J18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_Xeno_SAMD51J20A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_Xeno_SAML21J18B.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_arduino_m0_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_arduino_m0_pro_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_arduino_mkr1000_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_arduino_mkrfox1200_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_arduino_mkrzero_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_arduino_zero_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_genuino_mkr1000_SAMD21G18A.bin delete mode 100755 bootloaders/zero/binaries/sam_ba_sdcard_genuino_zero_SAMD21G18A.bin delete mode 100644 bootloaders/zero/board_definitions/board_definitions_MT_D11.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_MT_D21E_rev_A.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_MT_D21E_rev_B.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_Xeno.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_Xeno_Mini.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_arduino_m0.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_arduino_m0_pro.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_arduino_mkr1000.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_arduino_mkrfox1200.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_arduino_mkrzero.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_arduino_zero.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_genuino_mkr1000.h delete mode 100644 bootloaders/zero/board_definitions/board_definitions_genuino_zero.h rename variants/{MT_D21E => Generic_D21E}/README.md (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAMC21E15A.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAMC21E16A.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAMC21E17A.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAMC21E18A.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAMD21E15A.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAMD21E16A.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAMD21E17A.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAMD21E18A.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAML21E15B.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAML21E16B.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAML21E17B.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/debug_scripts/SAML21E18B.gdb (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/No_Bootloader/flash_128KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/No_Bootloader/flash_256KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/No_Bootloader/flash_32KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/linker_scripts/gcc/No_Bootloader/flash_64KB.ld (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAMC21E15A.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAMC21E16A.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAMC21E17A.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAMC21E18A.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAMD21E15A.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAMD21E16A.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAMD21E17A.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAMD21E18A.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAML21E15B.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAML21E16B.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAML21E17B.cfg (100%) rename variants/{MT_D21E => Generic_D21E}/openocd_scripts/SAML21E18B.cfg (100%) rename variants/{MT_D11 => Generic_D21E}/pins_arduino.h (100%) rename variants/{MT_D21E => Generic_D21E}/variant.cpp (100%) rename variants/{MT_D21E => Generic_D21E}/variant.h (100%) delete mode 100644 variants/MT_D11/README.md delete mode 100644 variants/MT_D11/debug_scripts/SAMD11D14AM.gdb delete mode 100644 variants/MT_D11/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld delete mode 100644 variants/MT_D11/linker_scripts/gcc/No_Bootloader/flash_16KB.ld delete mode 100644 variants/MT_D11/openocd_scripts/SAMD11D14AM.cfg delete mode 100644 variants/MT_D11/variant.cpp delete mode 100644 variants/MT_D11/variant.h delete mode 100644 variants/MT_D21E/pins_arduino.h delete mode 100644 variants/MT_D21E_revB/README.md delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAMC21E15A.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAMC21E16A.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAMC21E17A.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAMC21E18A.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAMD21E15A.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAMD21E16A.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAMD21E17A.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAMD21E18A.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAML21E15B.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAML21E16B.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAML21E17B.gdb delete mode 100644 variants/MT_D21E_revB/debug_scripts/SAML21E18B.gdb delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_128KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_256KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_32KB.ld delete mode 100644 variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_64KB.ld delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAMC21E15A.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAMC21E16A.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAMC21E17A.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAMC21E18A.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAMD21E15A.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAMD21E16A.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAMD21E17A.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAMD21E18A.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAML21E15B.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAML21E16B.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAML21E17B.cfg delete mode 100644 variants/MT_D21E_revB/openocd_scripts/SAML21E18B.cfg delete mode 100644 variants/MT_D21E_revB/pins_arduino.h delete mode 100644 variants/MT_D21E_revB/variant.cpp delete mode 100644 variants/MT_D21E_revB/variant.h delete mode 100644 variants/Xeno/README.md delete mode 100644 variants/Xeno/debug_scripts/SAMC21J15A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMC21J16A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMC21J17A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMC21J18A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMD21J15A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMD21J16A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMD21J17A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMD21J18A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMD51J18A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMD51J19A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAMD51J20A.gdb delete mode 100644 variants/Xeno/debug_scripts/SAML21J16B.gdb delete mode 100644 variants/Xeno/debug_scripts/SAML21J17B.gdb delete mode 100644 variants/Xeno/debug_scripts/SAML21J18B.gdb delete mode 100644 variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_1MB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_1MB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_128KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_256KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_32KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_64KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_1MB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld delete mode 100644 variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld delete mode 100644 variants/Xeno/openocd_scripts/SAMC21J15A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMC21J16A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMC21J17A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMC21J18A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMD21J15A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMD21J16A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMD21J17A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMD21J18A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMD51J18A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMD51J19A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAMD51J20A.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAML21J16B.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAML21J17B.cfg delete mode 100644 variants/Xeno/openocd_scripts/SAML21J18B.cfg delete mode 100644 variants/Xeno/pins_arduino.h delete mode 100644 variants/Xeno/variant.cpp delete mode 100644 variants/Xeno/variant.h delete mode 100644 variants/Xeno_Mini/README.md delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMC21G15A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMC21G16A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMC21G17A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMC21G18A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMD21G15A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMD21G16A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMD21G17A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMD21G18A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMD51G18A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAMD51G19A.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAML21G16B.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAML21G17B.gdb delete mode 100644 variants/Xeno_Mini/debug_scripts/SAML21G18B.gdb delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_128KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_256KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_32KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_64KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld delete mode 100644 variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMC21G15A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMC21G16A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMC21G17A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMC21G18A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMD21G15A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMD21G16A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMD21G17A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMD21G18A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMD51G18A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAMD51G19A.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAML21G16B.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAML21G17B.cfg delete mode 100644 variants/Xeno_Mini/openocd_scripts/SAML21G18B.cfg delete mode 100644 variants/Xeno_Mini/pins_arduino.h delete mode 100644 variants/Xeno_Mini/variant.cpp delete mode 100644 variants/Xeno_Mini/variant.h delete mode 100644 variants/arduino_mzero/README.md delete mode 100644 variants/arduino_mzero/debug_scripts/SAMD21G18A.gdb delete mode 100644 variants/arduino_mzero/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld delete mode 100644 variants/arduino_mzero/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld delete mode 100644 variants/arduino_mzero/linker_scripts/gcc/No_Bootloader/flash_256KB.ld delete mode 100644 variants/arduino_mzero/openocd_scripts/SAMD21G18A.cfg delete mode 100755 variants/arduino_mzero/pins_arduino.h delete mode 100644 variants/arduino_mzero/variant.cpp delete mode 100644 variants/arduino_mzero/variant.h delete mode 100644 variants/arduino_zero/README.md delete mode 100644 variants/arduino_zero/debug_scripts/SAMC21G15A.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAMC21G16A.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAMC21G17A.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAMC21G18A.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAMD21G15A.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAMD21G16A.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAMD21G17A.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAMD21G18A.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAML21G16B.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAML21G17B.gdb delete mode 100644 variants/arduino_zero/debug_scripts/SAML21G18B.gdb delete mode 100644 variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_128KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_256KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_32KB.ld delete mode 100644 variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_64KB.ld delete mode 100644 variants/arduino_zero/openocd_scripts/SAMC21G15A.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAMC21G16A.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAMC21G17A.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAMC21G18A.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAMD21G15A.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAMD21G16A.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAMD21G17A.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAMD21G18A.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAML21G16B.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAML21G17B.cfg delete mode 100644 variants/arduino_zero/openocd_scripts/SAML21G18B.cfg delete mode 100644 variants/arduino_zero/pins_arduino.h delete mode 100644 variants/arduino_zero/variant.cpp delete mode 100644 variants/arduino_zero/variant.h diff --git a/boards.txt b/boards.txt index 9190d5020..4c3f5924b 100644 --- a/boards.txt +++ b/boards.txt @@ -23,1230 +23,187 @@ menu.timer=Timer PWM Frequency menu.float=Floating Point menu.config=Build Options - -# MattairTech Xeno Mini -mattairtech_xeno_mini.name=MattairTech Xeno Mini -mattairtech_xeno_mini.vid.0=0x16D0 -mattairtech_xeno_mini.pid.0=0x0557 -mattairtech_xeno_mini.vid.1=0x16D0 -mattairtech_xeno_mini.pid.1=0x0856 -mattairtech_xeno_mini.vid.2=0x16D0 -mattairtech_xeno_mini.pid.2=0x0B41 -mattairtech_xeno_mini.vid.3=0x16D0 -mattairtech_xeno_mini.pid.3=0x0B40 -mattairtech_xeno_mini.vid.4=0x16D0 -mattairtech_xeno_mini.pid.4=0x0A0C -mattairtech_xeno_mini.vid.5=0x16D0 -mattairtech_xeno_mini.pid.5=0x0856 -mattairtech_xeno_mini.build.usb_manufacturer="MattairTech LLC" -mattairtech_xeno_mini.build.board=SAMD_ZERO -mattairtech_xeno_mini.build.core=arduino -mattairtech_xeno_mini.build.variant=Xeno_Mini -mattairtech_xeno_mini.build.variant_system_lib= -mattairtech_xeno_mini.build.vid=0x16D0 -mattairtech_xeno_mini.upload.protocol=sam-ba -mattairtech_xeno_mini.bootloader.tool=arduino:openocd -mattairtech_xeno_mini.menu.float.default=Print & String use auto-promoted doubles only -mattairtech_xeno_mini.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY -mattairtech_xeno_mini.menu.float.print=Print uses separate singles and doubles -mattairtech_xeno_mini.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES -mattairtech_xeno_mini.menu.float.string=String uses separate singles and doubles -mattairtech_xeno_mini.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES -mattairtech_xeno_mini.menu.float.both=Print & String use separate singles and doubles -mattairtech_xeno_mini.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES -mattairtech_xeno_mini.menu.config.disabled=config.h disabled -mattairtech_xeno_mini.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED -mattairtech_xeno_mini.menu.config.enabled=config.h enabled (mostly code size reductions) -mattairtech_xeno_mini.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED -mattairtech_xeno_mini.menu.clock.crystal_32k=32KHZ_CRYSTAL -mattairtech_xeno_mini.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL -mattairtech_xeno_mini.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL -mattairtech_xeno_mini.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL -mattairtech_xeno_mini.menu.clock.internal=INTERNAL_OSCILLATOR -mattairtech_xeno_mini.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL -mattairtech_xeno_mini.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR -mattairtech_xeno_mini.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB -mattairtech_xeno_mini.menu.timer.timer_732Hz=732.4Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz -mattairtech_xeno_mini.menu.timer.timer_366Hz=366.2Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz -mattairtech_xeno_mini.menu.timer.timer_244Hz=244.1Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz -mattairtech_xeno_mini.menu.timer.timer_183Hz=183.1Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz -mattairtech_xeno_mini.menu.timer.timer_146Hz=146.5Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz -mattairtech_xeno_mini.menu.timer.timer_122Hz=122.1Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz -mattairtech_xeno_mini.menu.timer.timer_105Hz=104.6Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz -mattairtech_xeno_mini.menu.timer.timer_81Hz=81.38Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz -mattairtech_xeno_mini.menu.timer.timer_61Hz=61.04Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz -mattairtech_xeno_mini.menu.timer.timer_31Hz=30.52Hz (16-bit) -mattairtech_xeno_mini.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz -mattairtech_xeno_mini.menu.timer.timer_187500Hz=187500Hz (8-bit) -mattairtech_xeno_mini.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz -mattairtech_xeno_mini.menu.timer.timer_93750Hz=93750Hz (8-bit) -mattairtech_xeno_mini.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz -mattairtech_xeno_mini.menu.timer.timer_62500Hz=62500Hz (8-bit) -mattairtech_xeno_mini.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz -mattairtech_xeno_mini.menu.timer.timer_37500Hz=37500Hz (8-bit) -mattairtech_xeno_mini.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz -mattairtech_xeno_mini.menu.timer.timer_20833Hz=20833Hz (8-bit) -mattairtech_xeno_mini.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz -mattairtech_xeno_mini.menu.timer.timer_12500Hz=12500Hz (8-bit) -mattairtech_xeno_mini.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz -mattairtech_xeno_mini.menu.timer.timer_7500Hz=7500Hz (8-bit) -mattairtech_xeno_mini.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz -mattairtech_xeno_mini.menu.timer.timer_4166Hz=4166Hz (8-bit) -mattairtech_xeno_mini.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz -mattairtech_xeno_mini.menu.timer.timer_2930Hz=2930Hz (8-bit) -mattairtech_xeno_mini.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -mattairtech_xeno_mini.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) -mattairtech_xeno_mini.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz -mattairtech_xeno_mini.menu.cpu.samd21g18a=SAMD21G18A -mattairtech_xeno_mini.menu.cpu.samd21g18a.upload.maximum_size=253952 -mattairtech_xeno_mini.menu.cpu.samd21g18a.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.samd21g18a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.samd21g18a.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samd21g18a.build.usb_product="Xeno Mini D21" -mattairtech_xeno_mini.menu.cpu.samd21g18a.build.extra_flags=-D__SAMD21G18A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.samd21g18a.build.ldscript=flash_256KB.ld -mattairtech_xeno_mini.menu.cpu.samd21g18a.build.openocdscript=openocd_scripts/SAMD21G18A.cfg -mattairtech_xeno_mini.menu.cpu.samd21g18a.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMD21G18A.bin -mattairtech_xeno_mini.menu.cpu.samd21g17a=SAMD21G17A -mattairtech_xeno_mini.menu.cpu.samd21g17a.upload.maximum_size=122880 -mattairtech_xeno_mini.menu.cpu.samd21g17a.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.samd21g17a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.samd21g17a.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samd21g17a.build.usb_product="Xeno Mini D21" -mattairtech_xeno_mini.menu.cpu.samd21g17a.build.extra_flags=-D__SAMD21G17A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.samd21g17a.build.ldscript=flash_128KB.ld -mattairtech_xeno_mini.menu.cpu.samd21g17a.build.openocdscript=openocd_scripts/SAMD21G17A.cfg -mattairtech_xeno_mini.menu.cpu.samd21g17a.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMD21G17A.bin -mattairtech_xeno_mini.menu.cpu.samd21g16a=SAMD21G16A -mattairtech_xeno_mini.menu.cpu.samd21g16a.upload.maximum_size=57344 -mattairtech_xeno_mini.menu.cpu.samd21g16a.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.samd21g16a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.samd21g16a.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samd21g16a.build.usb_product="Xeno Mini D21" -mattairtech_xeno_mini.menu.cpu.samd21g16a.build.extra_flags=-D__SAMD21G16A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.samd21g16a.build.ldscript=flash_64KB.ld -mattairtech_xeno_mini.menu.cpu.samd21g16a.build.openocdscript=openocd_scripts/SAMD21G16A.cfg -mattairtech_xeno_mini.menu.cpu.samd21g16a.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMD21G16A.bin -mattairtech_xeno_mini.menu.cpu.samd21g15a=SAMD21G15A -mattairtech_xeno_mini.menu.cpu.samd21g15a.upload.maximum_size=24576 -mattairtech_xeno_mini.menu.cpu.samd21g15a.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.samd21g15a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.samd21g15a.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samd21g15a.build.usb_product="Xeno Mini D21" -mattairtech_xeno_mini.menu.cpu.samd21g15a.build.extra_flags=-D__SAMD21G15A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.samd21g15a.build.ldscript=flash_32KB.ld -mattairtech_xeno_mini.menu.cpu.samd21g15a.build.openocdscript=openocd_scripts/SAMD21G15A.cfg -mattairtech_xeno_mini.menu.cpu.samd21g15a.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMD21G15A.bin -mattairtech_xeno_mini.menu.cpu.samd51g19a_120=SAMD51G19A_120MHz -mattairtech_xeno_mini.menu.cpu.samd51g19a_120.upload.maximum_size=516096 -mattairtech_xeno_mini.menu.cpu.samd51g19a_120.build.mcu=cortex-m4 -mattairtech_xeno_mini.menu.cpu.samd51g19a_120.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno_mini.menu.cpu.samd51g19a_120.build.f_cpu=120000000L -mattairtech_xeno_mini.menu.cpu.samd51g19a_120.build.usb_product="Xeno Mini D51" -mattairtech_xeno_mini.menu.cpu.samd51g19a_120.build.extra_flags=-D__SAMD51G19A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno_mini.menu.cpu.samd51g19a_120.build.ldscript=flash_m4f_512KB.ld -mattairtech_xeno_mini.menu.cpu.samd51g19a_120.build.openocdscript=openocd_scripts/SAMD51G19A.cfg -mattairtech_xeno_mini.menu.cpu.samd51g19a_120.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMD51G19A.bin -mattairtech_xeno_mini.menu.cpu.samd51g19a_48=SAMD51G19A_48MHz -mattairtech_xeno_mini.menu.cpu.samd51g19a_48.upload.maximum_size=516096 -mattairtech_xeno_mini.menu.cpu.samd51g19a_48.build.mcu=cortex-m4 -mattairtech_xeno_mini.menu.cpu.samd51g19a_48.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno_mini.menu.cpu.samd51g19a_48.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samd51g19a_48.build.usb_product="Xeno Mini D51" -mattairtech_xeno_mini.menu.cpu.samd51g19a_48.build.extra_flags=-D__SAMD51G19A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno_mini.menu.cpu.samd51g19a_48.build.ldscript=flash_m4f_512KB.ld -mattairtech_xeno_mini.menu.cpu.samd51g19a_48.build.openocdscript=openocd_scripts/SAMD51G19A.cfg -mattairtech_xeno_mini.menu.cpu.samd51g19a_48.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMD51G19A.bin -mattairtech_xeno_mini.menu.cpu.samd51g18a_120=SAMD51G18A_120MHz -mattairtech_xeno_mini.menu.cpu.samd51g18a_120.upload.maximum_size=253952 -mattairtech_xeno_mini.menu.cpu.samd51g18a_120.build.mcu=cortex-m4 -mattairtech_xeno_mini.menu.cpu.samd51g18a_120.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno_mini.menu.cpu.samd51g18a_120.build.f_cpu=120000000L -mattairtech_xeno_mini.menu.cpu.samd51g18a_120.build.usb_product="Xeno Mini D51" -mattairtech_xeno_mini.menu.cpu.samd51g18a_120.build.extra_flags=-D__SAMD51G18A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno_mini.menu.cpu.samd51g18a_120.build.ldscript=flash_m4f_256KB.ld -mattairtech_xeno_mini.menu.cpu.samd51g18a_120.build.openocdscript=openocd_scripts/SAMD51G18A.cfg -mattairtech_xeno_mini.menu.cpu.samd51g18a_120.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMD51G18A.bin -mattairtech_xeno_mini.menu.cpu.samd51g18a_48=SAMD51G18A_48MHz -mattairtech_xeno_mini.menu.cpu.samd51g18a_48.upload.maximum_size=253952 -mattairtech_xeno_mini.menu.cpu.samd51g18a_48.build.mcu=cortex-m4 -mattairtech_xeno_mini.menu.cpu.samd51g18a_48.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno_mini.menu.cpu.samd51g18a_48.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samd51g18a_48.build.usb_product="Xeno Mini D51" -mattairtech_xeno_mini.menu.cpu.samd51g18a_48.build.extra_flags=-D__SAMD51G18A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno_mini.menu.cpu.samd51g18a_48.build.ldscript=flash_m4f_256KB.ld -mattairtech_xeno_mini.menu.cpu.samd51g18a_48.build.openocdscript=openocd_scripts/SAMD51G18A.cfg -mattairtech_xeno_mini.menu.cpu.samd51g18a_48.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMD51G18A.bin -mattairtech_xeno_mini.menu.cpu.saml21g18b=SAML21G18B -mattairtech_xeno_mini.menu.cpu.saml21g18b.upload.maximum_size=253952 -mattairtech_xeno_mini.menu.cpu.saml21g18b.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.saml21g18b.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.saml21g18b.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.saml21g18b.build.usb_product="Xeno Mini L21" -mattairtech_xeno_mini.menu.cpu.saml21g18b.build.extra_flags=-D__SAML21G18B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.saml21g18b.build.ldscript=flash_256KB.ld -mattairtech_xeno_mini.menu.cpu.saml21g18b.build.openocdscript=openocd_scripts/SAML21G18B.cfg -mattairtech_xeno_mini.menu.cpu.saml21g18b.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAML21G18B.bin -mattairtech_xeno_mini.menu.cpu.saml21g17b=SAML21G17B -mattairtech_xeno_mini.menu.cpu.saml21g17b.upload.maximum_size=122880 -mattairtech_xeno_mini.menu.cpu.saml21g17b.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.saml21g17b.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.saml21g17b.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.saml21g17b.build.usb_product="Xeno Mini L21" -mattairtech_xeno_mini.menu.cpu.saml21g17b.build.extra_flags=-D__SAML21G17B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.saml21g17b.build.ldscript=flash_128KB.ld -mattairtech_xeno_mini.menu.cpu.saml21g17b.build.openocdscript=openocd_scripts/SAML21G17B.cfg -mattairtech_xeno_mini.menu.cpu.saml21g17b.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAML21G17B.bin -mattairtech_xeno_mini.menu.cpu.saml21g16b=SAML21G16B -mattairtech_xeno_mini.menu.cpu.saml21g16b.upload.maximum_size=57344 -mattairtech_xeno_mini.menu.cpu.saml21g16b.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.saml21g16b.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.saml21g16b.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.saml21g16b.build.usb_product="Xeno Mini L21" -mattairtech_xeno_mini.menu.cpu.saml21g16b.build.extra_flags=-D__SAML21G16B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.saml21g16b.build.ldscript=flash_64KB.ld -mattairtech_xeno_mini.menu.cpu.saml21g16b.build.openocdscript=openocd_scripts/SAML21G16B.cfg -mattairtech_xeno_mini.menu.cpu.saml21g16b.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAML21G16B.bin -mattairtech_xeno_mini.menu.cpu.saml21g15b=SAML21G15B -mattairtech_xeno_mini.menu.cpu.saml21g15b.upload.maximum_size=24576 -mattairtech_xeno_mini.menu.cpu.saml21g15b.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.saml21g15b.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.saml21g15b.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.saml21g15b.build.usb_product="Xeno Mini L21" -mattairtech_xeno_mini.menu.cpu.saml21g15b.build.extra_flags=-D__SAML21G15B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.saml21g15b.build.ldscript=flash_32KB.ld -mattairtech_xeno_mini.menu.cpu.saml21g15b.build.openocdscript=openocd_scripts/SAML21G15B.cfg -mattairtech_xeno_mini.menu.cpu.saml21g15b.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAML21G15B.bin -mattairtech_xeno_mini.menu.cpu.samc21g18a=SAMC21G18A -mattairtech_xeno_mini.menu.cpu.samc21g18a.upload.maximum_size=253952 -mattairtech_xeno_mini.menu.cpu.samc21g18a.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.samc21g18a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.samc21g18a.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samc21g18a.build.usb_product="Xeno Mini C21" -mattairtech_xeno_mini.menu.cpu.samc21g18a.build.extra_flags=-D__SAMC21G18A__ -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.samc21g18a.build.ldscript=flash_256KB.ld -mattairtech_xeno_mini.menu.cpu.samc21g18a.build.openocdscript=openocd_scripts/SAMC21G18A.cfg -mattairtech_xeno_mini.menu.cpu.samc21g18a.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMC21G18A.bin -mattairtech_xeno_mini.menu.cpu.samc21g17a=SAMC21G17A -mattairtech_xeno_mini.menu.cpu.samc21g17a.upload.maximum_size=122880 -mattairtech_xeno_mini.menu.cpu.samc21g17a.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.samc21g17a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.samc21g17a.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samc21g17a.build.usb_product="Xeno Mini C21" -mattairtech_xeno_mini.menu.cpu.samc21g17a.build.extra_flags=-D__SAMC21G17A__ -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.samc21g17a.build.ldscript=flash_128KB.ld -mattairtech_xeno_mini.menu.cpu.samc21g17a.build.openocdscript=openocd_scripts/SAMC21G17A.cfg -mattairtech_xeno_mini.menu.cpu.samc21g17a.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMC21G17A.bin -mattairtech_xeno_mini.menu.cpu.samc21g16a=SAMC21G16A -mattairtech_xeno_mini.menu.cpu.samc21g16a.upload.maximum_size=57344 -mattairtech_xeno_mini.menu.cpu.samc21g16a.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.samc21g16a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.samc21g16a.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samc21g16a.build.usb_product="Xeno Mini C21" -mattairtech_xeno_mini.menu.cpu.samc21g16a.build.extra_flags=-D__SAMC21G16A__ -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.samc21g16a.build.ldscript=flash_64KB.ld -mattairtech_xeno_mini.menu.cpu.samc21g16a.build.openocdscript=openocd_scripts/SAMC21G16A.cfg -mattairtech_xeno_mini.menu.cpu.samc21g16a.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMC21G16A.bin -mattairtech_xeno_mini.menu.cpu.samc21g15a=SAMC21G15A -mattairtech_xeno_mini.menu.cpu.samc21g15a.upload.maximum_size=24576 -mattairtech_xeno_mini.menu.cpu.samc21g15a.build.mcu=cortex-m0plus -mattairtech_xeno_mini.menu.cpu.samc21g15a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno_mini.menu.cpu.samc21g15a.build.f_cpu=48000000L -mattairtech_xeno_mini.menu.cpu.samc21g15a.build.usb_product="Xeno Mini C21" -mattairtech_xeno_mini.menu.cpu.samc21g15a.build.extra_flags=-D__SAMC21G15A__ -DARM_MATH_CM0PLUS -mattairtech_xeno_mini.menu.cpu.samc21g15a.build.ldscript=flash_32KB.ld -mattairtech_xeno_mini.menu.cpu.samc21g15a.build.openocdscript=openocd_scripts/SAMC21G15A.cfg -mattairtech_xeno_mini.menu.cpu.samc21g15a.bootloader.file=zero/binaries/sam_ba_Xeno_Mini_SAMC21G15A.bin -mattairtech_xeno_mini.menu.bootloader.8kb=8KB_BOOTLOADER -mattairtech_xeno_mini.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ -mattairtech_xeno_mini.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader -mattairtech_xeno_mini.menu.bootloader.8kb.upload.tool=MattairTech_Arduino:bossac -mattairtech_xeno_mini.menu.bootloader.8kb.upload.use_1200bps_touch=true -mattairtech_xeno_mini.menu.bootloader.8kb.upload.wait_for_upload_port=true -mattairtech_xeno_mini.menu.bootloader.8kb.upload.native_usb=true -mattairtech_xeno_mini.menu.bootloader.16kb=16KB_BOOTLOADER -mattairtech_xeno_mini.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ -mattairtech_xeno_mini.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader -mattairtech_xeno_mini.menu.bootloader.16kb.upload.tool=MattairTech_Arduino:bossac -mattairtech_xeno_mini.menu.bootloader.16kb.upload.use_1200bps_touch=true -mattairtech_xeno_mini.menu.bootloader.16kb.upload.wait_for_upload_port=true -mattairtech_xeno_mini.menu.bootloader.16kb.upload.native_usb=true -mattairtech_xeno_mini.menu.bootloader.0kb=NO_BOOTLOADER -mattairtech_xeno_mini.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ -mattairtech_xeno_mini.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -mattairtech_xeno_mini.menu.bootloader.0kb.upload.tool=arduino:openocd -mattairtech_xeno_mini.menu.bootloader.0kb.upload.use_1200bps_touch=false -mattairtech_xeno_mini.menu.bootloader.0kb.upload.wait_for_upload_port=false -mattairtech_xeno_mini.menu.bootloader.0kb.upload.native_usb=false -mattairtech_xeno_mini.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI -mattairtech_xeno_mini.menu.serial.one_uart.build.serialcom_uart=ONE_UART -mattairtech_xeno_mini.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE -mattairtech_xeno_mini.menu.serial.one_uart.build.serialcom_spi=ONE_SPI -mattairtech_xeno_mini.menu.serial.one_uart_two_spi=ONE_UART_ONE_WIRE_TWO_SPI -mattairtech_xeno_mini.menu.serial.one_uart_two_spi.build.serialcom_uart=ONE_UART -mattairtech_xeno_mini.menu.serial.one_uart_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_xeno_mini.menu.serial.one_uart_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_xeno_mini.menu.serial.one_uart_two_wire=ONE_UART_TWO_WIRE_ONE_SPI -mattairtech_xeno_mini.menu.serial.one_uart_two_wire.build.serialcom_uart=ONE_UART -mattairtech_xeno_mini.menu.serial.one_uart_two_wire.build.serialcom_wire=TWO_WIRE -mattairtech_xeno_mini.menu.serial.one_uart_two_wire.build.serialcom_spi=ONE_SPI -mattairtech_xeno_mini.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI -mattairtech_xeno_mini.menu.serial.two_uart.build.serialcom_uart=TWO_UART -mattairtech_xeno_mini.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE -mattairtech_xeno_mini.menu.serial.two_uart.build.serialcom_spi=ONE_SPI -mattairtech_xeno_mini.menu.serial.two_uart_two_spi=TWO_UART_ONE_WIRE_TWO_SPI -mattairtech_xeno_mini.menu.serial.two_uart_two_spi.build.serialcom_uart=TWO_UART -mattairtech_xeno_mini.menu.serial.two_uart_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_xeno_mini.menu.serial.two_uart_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_xeno_mini.menu.serial.two_uart_two_wire=TWO_UART_TWO_WIRE_ONE_SPI -mattairtech_xeno_mini.menu.serial.two_uart_two_wire.build.serialcom_uart=TWO_UART -mattairtech_xeno_mini.menu.serial.two_uart_two_wire.build.serialcom_wire=TWO_WIRE -mattairtech_xeno_mini.menu.serial.two_uart_two_wire.build.serialcom_spi=ONE_SPI -mattairtech_xeno_mini.menu.serial.three_uart=THREE_UART_ONE_WIRE_ONE_SPI -mattairtech_xeno_mini.menu.serial.three_uart.build.serialcom_uart=THREE_UART -mattairtech_xeno_mini.menu.serial.three_uart.build.serialcom_wire=ONE_WIRE -mattairtech_xeno_mini.menu.serial.three_uart.build.serialcom_spi=ONE_SPI -mattairtech_xeno_mini.menu.serial.three_uart_two_spi=THREE_UART_ONE_WIRE_TWO_SPI -mattairtech_xeno_mini.menu.serial.three_uart_two_spi.build.serialcom_uart=THREE_UART -mattairtech_xeno_mini.menu.serial.three_uart_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_xeno_mini.menu.serial.three_uart_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_xeno_mini.menu.serial.three_uart_two_wire=THREE_UART_TWO_WIRE_ONE_SPI -mattairtech_xeno_mini.menu.serial.three_uart_two_wire.build.serialcom_uart=THREE_UART -mattairtech_xeno_mini.menu.serial.three_uart_two_wire.build.serialcom_wire=TWO_WIRE -mattairtech_xeno_mini.menu.serial.three_uart_two_wire.build.serialcom_spi=ONE_SPI -mattairtech_xeno_mini.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI -mattairtech_xeno_mini.menu.serial.no_uart.build.serialcom_uart=NO_UART -mattairtech_xeno_mini.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE -mattairtech_xeno_mini.menu.serial.no_uart.build.serialcom_spi=ONE_SPI -mattairtech_xeno_mini.menu.usb.cdc=CDC_ONLY -mattairtech_xeno_mini.menu.usb.cdc.build.usbcom=CDC_ONLY -mattairtech_xeno_mini.menu.usb.cdc.build.pid=0x0557 -mattairtech_xeno_mini.menu.usb.cdc_hid=CDC_HID -mattairtech_xeno_mini.menu.usb.cdc_hid.build.usbcom=CDC_HID -mattairtech_xeno_mini.menu.usb.cdc_hid.build.pid=0x0856 -mattairtech_xeno_mini.menu.usb.withcdc=WITH_CDC -mattairtech_xeno_mini.menu.usb.withcdc.build.usbcom=WITH_CDC -mattairtech_xeno_mini.menu.usb.withcdc.build.pid=0x0B41 -mattairtech_xeno_mini.menu.usb.hid=HID_ONLY -mattairtech_xeno_mini.menu.usb.hid.build.usbcom=HID_ONLY -mattairtech_xeno_mini.menu.usb.hid.build.pid=0x0B40 -mattairtech_xeno_mini.menu.usb.nocdc=WITHOUT_CDC -mattairtech_xeno_mini.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -mattairtech_xeno_mini.menu.usb.nocdc.build.pid=0x0A0C -mattairtech_xeno_mini.menu.usb.none=USB_DISABLED -mattairtech_xeno_mini.menu.usb.none.build.usbcom=USB_DISABLED -mattairtech_xeno_mini.menu.usb.none.build.pid=0x0856 - - -# MattairTech Xeno -mattairtech_xeno.name=MattairTech Xeno -mattairtech_xeno.vid.0=0x16D0 -mattairtech_xeno.pid.0=0x0557 -mattairtech_xeno.vid.1=0x16D0 -mattairtech_xeno.pid.1=0x0856 -mattairtech_xeno.vid.2=0x16D0 -mattairtech_xeno.pid.2=0x0B41 -mattairtech_xeno.vid.3=0x16D0 -mattairtech_xeno.pid.3=0x0B40 -mattairtech_xeno.vid.4=0x16D0 -mattairtech_xeno.pid.4=0x0A0C -mattairtech_xeno.vid.5=0x16D0 -mattairtech_xeno.pid.5=0x0856 -mattairtech_xeno.build.usb_manufacturer="MattairTech LLC" -mattairtech_xeno.build.board=SAMD_ZERO -mattairtech_xeno.build.core=arduino -mattairtech_xeno.build.variant=Xeno -mattairtech_xeno.build.variant_system_lib= -mattairtech_xeno.build.vid=0x16D0 -mattairtech_xeno.upload.protocol=sam-ba -mattairtech_xeno.bootloader.tool=arduino:openocd -mattairtech_xeno.menu.float.default=Print & String use auto-promoted doubles only -mattairtech_xeno.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY -mattairtech_xeno.menu.float.print=Print uses separate singles and doubles -mattairtech_xeno.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES -mattairtech_xeno.menu.float.string=String uses separate singles and doubles -mattairtech_xeno.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES -mattairtech_xeno.menu.float.both=Print & String use separate singles and doubles -mattairtech_xeno.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES -mattairtech_xeno.menu.config.disabled=config.h disabled -mattairtech_xeno.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED -mattairtech_xeno.menu.config.enabled=config.h enabled (mostly code size reductions) -mattairtech_xeno.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED -mattairtech_xeno.menu.clock.crystal_32k=32KHZ_CRYSTAL -mattairtech_xeno.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL -mattairtech_xeno.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL -mattairtech_xeno.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL -mattairtech_xeno.menu.clock.internal=INTERNAL_OSCILLATOR -mattairtech_xeno.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL -mattairtech_xeno.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR -mattairtech_xeno.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB -mattairtech_xeno.menu.timer.timer_732Hz=732.4Hz (16-bit) -mattairtech_xeno.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz -mattairtech_xeno.menu.timer.timer_366Hz=366.2Hz (16-bit) -mattairtech_xeno.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz -mattairtech_xeno.menu.timer.timer_244Hz=244.1Hz (16-bit) -mattairtech_xeno.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz -mattairtech_xeno.menu.timer.timer_183Hz=183.1Hz (16-bit) -mattairtech_xeno.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz -mattairtech_xeno.menu.timer.timer_146Hz=146.5Hz (16-bit) -mattairtech_xeno.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz -mattairtech_xeno.menu.timer.timer_122Hz=122.1Hz (16-bit) -mattairtech_xeno.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz -mattairtech_xeno.menu.timer.timer_105Hz=104.6Hz (16-bit) -mattairtech_xeno.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz -mattairtech_xeno.menu.timer.timer_81Hz=81.38Hz (16-bit) -mattairtech_xeno.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz -mattairtech_xeno.menu.timer.timer_61Hz=61.04Hz (16-bit) -mattairtech_xeno.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz -mattairtech_xeno.menu.timer.timer_31Hz=30.52Hz (16-bit) -mattairtech_xeno.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz -mattairtech_xeno.menu.timer.timer_187500Hz=187500Hz (8-bit) -mattairtech_xeno.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz -mattairtech_xeno.menu.timer.timer_93750Hz=93750Hz (8-bit) -mattairtech_xeno.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz -mattairtech_xeno.menu.timer.timer_62500Hz=62500Hz (8-bit) -mattairtech_xeno.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz -mattairtech_xeno.menu.timer.timer_37500Hz=37500Hz (8-bit) -mattairtech_xeno.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz -mattairtech_xeno.menu.timer.timer_20833Hz=20833Hz (8-bit) -mattairtech_xeno.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz -mattairtech_xeno.menu.timer.timer_12500Hz=12500Hz (8-bit) -mattairtech_xeno.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz -mattairtech_xeno.menu.timer.timer_7500Hz=7500Hz (8-bit) -mattairtech_xeno.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz -mattairtech_xeno.menu.timer.timer_4166Hz=4166Hz (8-bit) -mattairtech_xeno.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz -mattairtech_xeno.menu.timer.timer_2930Hz=2930Hz (8-bit) -mattairtech_xeno.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -mattairtech_xeno.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) -mattairtech_xeno.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz -mattairtech_xeno.menu.cpu.samd21j18a=SAMD21J18A -mattairtech_xeno.menu.cpu.samd21j18a.upload.maximum_size=253952 -mattairtech_xeno.menu.cpu.samd21j18a.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.samd21j18a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.samd21j18a.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samd21j18a.build.usb_product="Xeno D21" -mattairtech_xeno.menu.cpu.samd21j18a.build.extra_flags=-D__SAMD21J18A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.samd21j18a.build.ldscript=flash_256KB.ld -mattairtech_xeno.menu.cpu.samd21j18a.build.openocdscript=openocd_scripts/SAMD21J18A.cfg -mattairtech_xeno.menu.cpu.samd21j18a.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD21J18A.bin -mattairtech_xeno.menu.cpu.samd21j17a=SAMD21J17A -mattairtech_xeno.menu.cpu.samd21j17a.upload.maximum_size=122880 -mattairtech_xeno.menu.cpu.samd21j17a.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.samd21j17a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.samd21j17a.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samd21j17a.build.usb_product="Xeno D21" -mattairtech_xeno.menu.cpu.samd21j17a.build.extra_flags=-D__SAMD21J17A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.samd21j17a.build.ldscript=flash_128KB.ld -mattairtech_xeno.menu.cpu.samd21j17a.build.openocdscript=openocd_scripts/SAMD21J17A.cfg -mattairtech_xeno.menu.cpu.samd21j17a.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD21J17A.bin -mattairtech_xeno.menu.cpu.samd21j16a=SAMD21J16A -mattairtech_xeno.menu.cpu.samd21j16a.upload.maximum_size=57344 -mattairtech_xeno.menu.cpu.samd21j16a.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.samd21j16a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.samd21j16a.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samd21j16a.build.usb_product="Xeno D21" -mattairtech_xeno.menu.cpu.samd21j16a.build.extra_flags=-D__SAMD21J16A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.samd21j16a.build.ldscript=flash_64KB.ld -mattairtech_xeno.menu.cpu.samd21j16a.build.openocdscript=openocd_scripts/SAMD21J16A.cfg -mattairtech_xeno.menu.cpu.samd21j16a.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD21J16A.bin -mattairtech_xeno.menu.cpu.samd21j15a=SAMD21J15A -mattairtech_xeno.menu.cpu.samd21j15a.upload.maximum_size=24576 -mattairtech_xeno.menu.cpu.samd21j15a.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.samd21j15a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.samd21j15a.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samd21j15a.build.usb_product="Xeno D21" -mattairtech_xeno.menu.cpu.samd21j15a.build.extra_flags=-D__SAMD21J15A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.samd21j15a.build.ldscript=flash_32KB.ld -mattairtech_xeno.menu.cpu.samd21j15a.build.openocdscript=openocd_scripts/SAMD21J15A.cfg -mattairtech_xeno.menu.cpu.samd21j15a.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD21J15A.bin -mattairtech_xeno.menu.cpu.samd51j20a_120=SAMD51J20A_120MHz -mattairtech_xeno.menu.cpu.samd51j20a_120.upload.maximum_size=1040384 -mattairtech_xeno.menu.cpu.samd51j20a_120.build.mcu=cortex-m4 -mattairtech_xeno.menu.cpu.samd51j20a_120.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno.menu.cpu.samd51j20a_120.build.f_cpu=120000000L -mattairtech_xeno.menu.cpu.samd51j20a_120.build.usb_product="Xeno D51" -mattairtech_xeno.menu.cpu.samd51j20a_120.build.extra_flags=-D__SAMD51J20A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno.menu.cpu.samd51j20a_120.build.ldscript=flash_m4f_1MB.ld -mattairtech_xeno.menu.cpu.samd51j20a_120.build.openocdscript=openocd_scripts/SAMD51J20A.cfg -mattairtech_xeno.menu.cpu.samd51j20a_120.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD51J20A.bin -mattairtech_xeno.menu.cpu.samd51j20a_48=SAMD51J20A_48MHz -mattairtech_xeno.menu.cpu.samd51j20a_48.upload.maximum_size=1040384 -mattairtech_xeno.menu.cpu.samd51j20a_48.build.mcu=cortex-m4 -mattairtech_xeno.menu.cpu.samd51j20a_48.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno.menu.cpu.samd51j20a_48.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samd51j20a_48.build.usb_product="Xeno D51" -mattairtech_xeno.menu.cpu.samd51j20a_48.build.extra_flags=-D__SAMD51J20A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno.menu.cpu.samd51j20a_48.build.ldscript=flash_m4f_1MB.ld -mattairtech_xeno.menu.cpu.samd51j20a_48.build.openocdscript=openocd_scripts/SAMD51J20A.cfg -mattairtech_xeno.menu.cpu.samd51j20a_48.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD51J20A.bin -mattairtech_xeno.menu.cpu.samd51j19a_120=SAMD51J19A_120MHz -mattairtech_xeno.menu.cpu.samd51j19a_120.upload.maximum_size=516096 -mattairtech_xeno.menu.cpu.samd51j19a_120.build.mcu=cortex-m4 -mattairtech_xeno.menu.cpu.samd51j19a_120.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno.menu.cpu.samd51j19a_120.build.f_cpu=120000000L -mattairtech_xeno.menu.cpu.samd51j19a_120.build.usb_product="Xeno D51" -mattairtech_xeno.menu.cpu.samd51j19a_120.build.extra_flags=-D__SAMD51J19A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno.menu.cpu.samd51j19a_120.build.ldscript=flash_m4f_512KB.ld -mattairtech_xeno.menu.cpu.samd51j19a_120.build.openocdscript=openocd_scripts/SAMD51J19A.cfg -mattairtech_xeno.menu.cpu.samd51j19a_120.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD51J19A.bin -mattairtech_xeno.menu.cpu.samd51j19a_48=SAMD51J19A_48MHz -mattairtech_xeno.menu.cpu.samd51j19a_48.upload.maximum_size=516096 -mattairtech_xeno.menu.cpu.samd51j19a_48.build.mcu=cortex-m4 -mattairtech_xeno.menu.cpu.samd51j19a_48.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno.menu.cpu.samd51j19a_48.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samd51j19a_48.build.usb_product="Xeno D51" -mattairtech_xeno.menu.cpu.samd51j19a_48.build.extra_flags=-D__SAMD51J19A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno.menu.cpu.samd51j19a_48.build.ldscript=flash_m4f_512KB.ld -mattairtech_xeno.menu.cpu.samd51j19a_48.build.openocdscript=openocd_scripts/SAMD51J19A.cfg -mattairtech_xeno.menu.cpu.samd51j19a_48.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD51J19A.bin -mattairtech_xeno.menu.cpu.samd51j18a_120=SAMD51J18A_120MHz -mattairtech_xeno.menu.cpu.samd51j18a_120.upload.maximum_size=253952 -mattairtech_xeno.menu.cpu.samd51j18a_120.build.mcu=cortex-m4 -mattairtech_xeno.menu.cpu.samd51j18a_120.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno.menu.cpu.samd51j18a_120.build.f_cpu=120000000L -mattairtech_xeno.menu.cpu.samd51j18a_120.build.usb_product="Xeno D51" -mattairtech_xeno.menu.cpu.samd51j18a_120.build.extra_flags=-D__SAMD51J18A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno.menu.cpu.samd51j18a_120.build.ldscript=flash_m4f_256KB.ld -mattairtech_xeno.menu.cpu.samd51j18a_120.build.openocdscript=openocd_scripts/SAMD51J18A.cfg -mattairtech_xeno.menu.cpu.samd51j18a_120.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD51J18A.bin -mattairtech_xeno.menu.cpu.samd51j18a_48=SAMD51J18A_48MHz -mattairtech_xeno.menu.cpu.samd51j18a_48.upload.maximum_size=253952 -mattairtech_xeno.menu.cpu.samd51j18a_48.build.mcu=cortex-m4 -mattairtech_xeno.menu.cpu.samd51j18a_48.build.mathlib=arm_cortexM4lf_math -mattairtech_xeno.menu.cpu.samd51j18a_48.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samd51j18a_48.build.usb_product="Xeno D51" -mattairtech_xeno.menu.cpu.samd51j18a_48.build.extra_flags=-D__SAMD51J18A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 -mattairtech_xeno.menu.cpu.samd51j18a_48.build.ldscript=flash_m4f_256KB.ld -mattairtech_xeno.menu.cpu.samd51j18a_48.build.openocdscript=openocd_scripts/SAMD51J18A.cfg -mattairtech_xeno.menu.cpu.samd51j18a_48.bootloader.file=zero/binaries/sam_ba_Xeno_SAMD51J18A.bin -mattairtech_xeno.menu.cpu.saml21j18b=SAML21J18B -mattairtech_xeno.menu.cpu.saml21j18b.upload.maximum_size=253952 -mattairtech_xeno.menu.cpu.saml21j18b.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.saml21j18b.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.saml21j18b.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.saml21j18b.build.usb_product="Xeno L21" -mattairtech_xeno.menu.cpu.saml21j18b.build.extra_flags=-D__SAML21J18B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.saml21j18b.build.ldscript=flash_256KB.ld -mattairtech_xeno.menu.cpu.saml21j18b.build.openocdscript=openocd_scripts/SAML21J18B.cfg -mattairtech_xeno.menu.cpu.saml21j18b.bootloader.file=zero/binaries/sam_ba_Xeno_SAML21J18B.bin -mattairtech_xeno.menu.cpu.saml21j17b=SAML21J17B -mattairtech_xeno.menu.cpu.saml21j17b.upload.maximum_size=122880 -mattairtech_xeno.menu.cpu.saml21j17b.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.saml21j17b.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.saml21j17b.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.saml21j17b.build.usb_product="Xeno L21" -mattairtech_xeno.menu.cpu.saml21j17b.build.extra_flags=-D__SAML21J17B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.saml21j17b.build.ldscript=flash_128KB.ld -mattairtech_xeno.menu.cpu.saml21j17b.build.openocdscript=openocd_scripts/SAML21J17B.cfg -mattairtech_xeno.menu.cpu.saml21j17b.bootloader.file=zero/binaries/sam_ba_Xeno_SAML21J17B.bin -mattairtech_xeno.menu.cpu.saml21j16b=SAML21J16B -mattairtech_xeno.menu.cpu.saml21j16b.upload.maximum_size=57344 -mattairtech_xeno.menu.cpu.saml21j16b.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.saml21j16b.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.saml21j16b.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.saml21j16b.build.usb_product="Xeno L21" -mattairtech_xeno.menu.cpu.saml21j16b.build.extra_flags=-D__SAML21J16B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.saml21j16b.build.ldscript=flash_64KB.ld -mattairtech_xeno.menu.cpu.saml21j16b.build.openocdscript=openocd_scripts/SAML21J16B.cfg -mattairtech_xeno.menu.cpu.saml21j16b.bootloader.file=zero/binaries/sam_ba_Xeno_SAML21J16B.bin -mattairtech_xeno.menu.cpu.samc21j18a=SAMC21J18A -mattairtech_xeno.menu.cpu.samc21j18a.upload.maximum_size=253952 -mattairtech_xeno.menu.cpu.samc21j18a.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.samc21j18a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.samc21j18a.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samc21j18a.build.usb_product="Xeno C21" -mattairtech_xeno.menu.cpu.samc21j18a.build.extra_flags=-D__SAMC21J18A__ -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.samc21j18a.build.ldscript=flash_256KB.ld -mattairtech_xeno.menu.cpu.samc21j18a.build.openocdscript=openocd_scripts/SAMC21J18A.cfg -mattairtech_xeno.menu.cpu.samc21j18a.bootloader.file=zero/binaries/sam_ba_Xeno_SAMC21J18A.bin -mattairtech_xeno.menu.cpu.samc21j17a=SAMC21J17A -mattairtech_xeno.menu.cpu.samc21j17a.upload.maximum_size=122880 -mattairtech_xeno.menu.cpu.samc21j17a.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.samc21j17a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.samc21j17a.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samc21j17a.build.usb_product="Xeno C21" -mattairtech_xeno.menu.cpu.samc21j17a.build.extra_flags=-D__SAMC21J17A__ -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.samc21j17a.build.ldscript=flash_128KB.ld -mattairtech_xeno.menu.cpu.samc21j17a.build.openocdscript=openocd_scripts/SAMC21J17A.cfg -mattairtech_xeno.menu.cpu.samc21j17a.bootloader.file=zero/binaries/sam_ba_Xeno_SAMC21J17A.bin -mattairtech_xeno.menu.cpu.samc21j16a=SAMC21J16A -mattairtech_xeno.menu.cpu.samc21j16a.upload.maximum_size=57344 -mattairtech_xeno.menu.cpu.samc21j16a.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.samc21j16a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.samc21j16a.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samc21j16a.build.usb_product="Xeno C21" -mattairtech_xeno.menu.cpu.samc21j16a.build.extra_flags=-D__SAMC21J16A__ -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.samc21j16a.build.ldscript=flash_64KB.ld -mattairtech_xeno.menu.cpu.samc21j16a.build.openocdscript=openocd_scripts/SAMC21J16A.cfg -mattairtech_xeno.menu.cpu.samc21j16a.bootloader.file=zero/binaries/sam_ba_Xeno_SAMC21J16A.bin -mattairtech_xeno.menu.cpu.samc21j15a=SAMC21J15A -mattairtech_xeno.menu.cpu.samc21j15a.upload.maximum_size=24576 -mattairtech_xeno.menu.cpu.samc21j15a.build.mcu=cortex-m0plus -mattairtech_xeno.menu.cpu.samc21j15a.build.mathlib=arm_cortexM0l_math -mattairtech_xeno.menu.cpu.samc21j15a.build.f_cpu=48000000L -mattairtech_xeno.menu.cpu.samc21j15a.build.usb_product="Xeno C21" -mattairtech_xeno.menu.cpu.samc21j15a.build.extra_flags=-D__SAMC21J15A__ -DARM_MATH_CM0PLUS -mattairtech_xeno.menu.cpu.samc21j15a.build.ldscript=flash_32KB.ld -mattairtech_xeno.menu.cpu.samc21j15a.build.openocdscript=openocd_scripts/SAMC21J15A.cfg -mattairtech_xeno.menu.cpu.samc21j15a.bootloader.file=zero/binaries/sam_ba_Xeno_SAMC21J15A.bin -mattairtech_xeno.menu.bootloader.8kb=8KB_BOOTLOADER -mattairtech_xeno.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ -mattairtech_xeno.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader -mattairtech_xeno.menu.bootloader.8kb.upload.tool=MattairTech_Arduino:bossac -mattairtech_xeno.menu.bootloader.8kb.upload.use_1200bps_touch=true -mattairtech_xeno.menu.bootloader.8kb.upload.wait_for_upload_port=true -mattairtech_xeno.menu.bootloader.8kb.upload.native_usb=true -mattairtech_xeno.menu.bootloader.16kb=16KB_BOOTLOADER -mattairtech_xeno.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ -mattairtech_xeno.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader -mattairtech_xeno.menu.bootloader.16kb.upload.tool=MattairTech_Arduino:bossac -mattairtech_xeno.menu.bootloader.16kb.upload.use_1200bps_touch=true -mattairtech_xeno.menu.bootloader.16kb.upload.wait_for_upload_port=true -mattairtech_xeno.menu.bootloader.16kb.upload.native_usb=true -mattairtech_xeno.menu.bootloader.0kb=NO_BOOTLOADER -mattairtech_xeno.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ -mattairtech_xeno.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -mattairtech_xeno.menu.bootloader.0kb.upload.tool=arduino:openocd -mattairtech_xeno.menu.bootloader.0kb.upload.use_1200bps_touch=false -mattairtech_xeno.menu.bootloader.0kb.upload.wait_for_upload_port=false -mattairtech_xeno.menu.bootloader.0kb.upload.native_usb=false -mattairtech_xeno.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI -mattairtech_xeno.menu.serial.one_uart.build.serialcom_uart=ONE_UART -mattairtech_xeno.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE -mattairtech_xeno.menu.serial.one_uart.build.serialcom_spi=ONE_SPI -mattairtech_xeno.menu.serial.one_uart_two_spi=ONE_UART_ONE_WIRE_TWO_SPI -mattairtech_xeno.menu.serial.one_uart_two_spi.build.serialcom_uart=ONE_UART -mattairtech_xeno.menu.serial.one_uart_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_xeno.menu.serial.one_uart_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_xeno.menu.serial.one_uart_two_wire=ONE_UART_TWO_WIRE_ONE_SPI -mattairtech_xeno.menu.serial.one_uart_two_wire.build.serialcom_uart=ONE_UART -mattairtech_xeno.menu.serial.one_uart_two_wire.build.serialcom_wire=TWO_WIRE -mattairtech_xeno.menu.serial.one_uart_two_wire.build.serialcom_spi=ONE_SPI -mattairtech_xeno.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI -mattairtech_xeno.menu.serial.two_uart.build.serialcom_uart=TWO_UART -mattairtech_xeno.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE -mattairtech_xeno.menu.serial.two_uart.build.serialcom_spi=ONE_SPI -mattairtech_xeno.menu.serial.two_uart_two_spi=TWO_UART_ONE_WIRE_TWO_SPI -mattairtech_xeno.menu.serial.two_uart_two_spi.build.serialcom_uart=TWO_UART -mattairtech_xeno.menu.serial.two_uart_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_xeno.menu.serial.two_uart_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_xeno.menu.serial.two_uart_two_wire=TWO_UART_TWO_WIRE_ONE_SPI -mattairtech_xeno.menu.serial.two_uart_two_wire.build.serialcom_uart=TWO_UART -mattairtech_xeno.menu.serial.two_uart_two_wire.build.serialcom_wire=TWO_WIRE -mattairtech_xeno.menu.serial.two_uart_two_wire.build.serialcom_spi=ONE_SPI -mattairtech_xeno.menu.serial.three_uart=THREE_UART_ONE_WIRE_ONE_SPI -mattairtech_xeno.menu.serial.three_uart.build.serialcom_uart=THREE_UART -mattairtech_xeno.menu.serial.three_uart.build.serialcom_wire=ONE_WIRE -mattairtech_xeno.menu.serial.three_uart.build.serialcom_spi=ONE_SPI -mattairtech_xeno.menu.serial.three_uart_two_spi=THREE_UART_ONE_WIRE_TWO_SPI -mattairtech_xeno.menu.serial.three_uart_two_spi.build.serialcom_uart=THREE_UART -mattairtech_xeno.menu.serial.three_uart_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_xeno.menu.serial.three_uart_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_xeno.menu.serial.three_uart_two_wire=THREE_UART_TWO_WIRE_ONE_SPI -mattairtech_xeno.menu.serial.three_uart_two_wire.build.serialcom_uart=THREE_UART -mattairtech_xeno.menu.serial.three_uart_two_wire.build.serialcom_wire=TWO_WIRE -mattairtech_xeno.menu.serial.three_uart_two_wire.build.serialcom_spi=ONE_SPI -mattairtech_xeno.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI -mattairtech_xeno.menu.serial.no_uart.build.serialcom_uart=NO_UART -mattairtech_xeno.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE -mattairtech_xeno.menu.serial.no_uart.build.serialcom_spi=ONE_SPI -mattairtech_xeno.menu.usb.cdc=CDC_ONLY -mattairtech_xeno.menu.usb.cdc.build.usbcom=CDC_ONLY -mattairtech_xeno.menu.usb.cdc.build.pid=0x0557 -mattairtech_xeno.menu.usb.cdc_hid=CDC_HID -mattairtech_xeno.menu.usb.cdc_hid.build.usbcom=CDC_HID -mattairtech_xeno.menu.usb.cdc_hid.build.pid=0x0856 -mattairtech_xeno.menu.usb.withcdc=WITH_CDC -mattairtech_xeno.menu.usb.withcdc.build.usbcom=WITH_CDC -mattairtech_xeno.menu.usb.withcdc.build.pid=0x0B41 -mattairtech_xeno.menu.usb.hid=HID_ONLY -mattairtech_xeno.menu.usb.hid.build.usbcom=HID_ONLY -mattairtech_xeno.menu.usb.hid.build.pid=0x0B40 -mattairtech_xeno.menu.usb.nocdc=WITHOUT_CDC -mattairtech_xeno.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -mattairtech_xeno.menu.usb.nocdc.build.pid=0x0A0C -mattairtech_xeno.menu.usb.none=USB_DISABLED -mattairtech_xeno.menu.usb.none.build.usbcom=USB_DISABLED -mattairtech_xeno.menu.usb.none.build.pid=0x0856 - - -# MattairTech MT-D21E (rev B) -mattairtech_mt_d21e_revb.name=MattairTech MT-D21E (rev B) -mattairtech_mt_d21e_revb.vid.0=0x16D0 -mattairtech_mt_d21e_revb.pid.0=0x0557 -mattairtech_mt_d21e_revb.vid.1=0x16D0 -mattairtech_mt_d21e_revb.pid.1=0x0856 -mattairtech_mt_d21e_revb.vid.2=0x16D0 -mattairtech_mt_d21e_revb.pid.2=0x0B41 -mattairtech_mt_d21e_revb.vid.3=0x16D0 -mattairtech_mt_d21e_revb.pid.3=0x0B40 -mattairtech_mt_d21e_revb.vid.4=0x16D0 -mattairtech_mt_d21e_revb.pid.4=0x0A0C -mattairtech_mt_d21e_revb.vid.5=0x16D0 -mattairtech_mt_d21e_revb.pid.5=0x0856 -mattairtech_mt_d21e_revb.build.mcu=cortex-m0plus -mattairtech_mt_d21e_revb.build.mathlib=arm_cortexM0l_math -mattairtech_mt_d21e_revb.build.f_cpu=48000000L -mattairtech_mt_d21e_revb.build.usb_product="MT-D21E Rev B" -mattairtech_mt_d21e_revb.build.usb_manufacturer="MattairTech LLC" -mattairtech_mt_d21e_revb.build.board=SAMD_ZERO -mattairtech_mt_d21e_revb.build.core=arduino -mattairtech_mt_d21e_revb.build.variant=MT_D21E_revB -mattairtech_mt_d21e_revb.build.variant_system_lib= -mattairtech_mt_d21e_revb.build.vid=0x16D0 -mattairtech_mt_d21e_revb.upload.protocol=sam-ba -mattairtech_mt_d21e_revb.bootloader.tool=arduino:openocd -mattairtech_mt_d21e_revb.menu.float.default=Print & String use auto-promoted doubles only -mattairtech_mt_d21e_revb.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY -mattairtech_mt_d21e_revb.menu.float.print=Print uses separate singles and doubles -mattairtech_mt_d21e_revb.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES -mattairtech_mt_d21e_revb.menu.float.string=String uses separate singles and doubles -mattairtech_mt_d21e_revb.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES -mattairtech_mt_d21e_revb.menu.float.both=Print & String use separate singles and doubles -mattairtech_mt_d21e_revb.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES -mattairtech_mt_d21e_revb.menu.config.disabled=config.h disabled -mattairtech_mt_d21e_revb.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED -mattairtech_mt_d21e_revb.menu.config.enabled=config.h enabled (mostly code size reductions) -mattairtech_mt_d21e_revb.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED -mattairtech_mt_d21e_revb.menu.clock.crystal_32k=32KHZ_CRYSTAL -mattairtech_mt_d21e_revb.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL -mattairtech_mt_d21e_revb.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL -mattairtech_mt_d21e_revb.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL -mattairtech_mt_d21e_revb.menu.clock.internal=INTERNAL_OSCILLATOR -mattairtech_mt_d21e_revb.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL -mattairtech_mt_d21e_revb.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR -mattairtech_mt_d21e_revb.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB -mattairtech_mt_d21e_revb.menu.timer.timer_732Hz=732.4Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz -mattairtech_mt_d21e_revb.menu.timer.timer_366Hz=366.2Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz -mattairtech_mt_d21e_revb.menu.timer.timer_244Hz=244.1Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz -mattairtech_mt_d21e_revb.menu.timer.timer_183Hz=183.1Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz -mattairtech_mt_d21e_revb.menu.timer.timer_146Hz=146.5Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz -mattairtech_mt_d21e_revb.menu.timer.timer_122Hz=122.1Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz -mattairtech_mt_d21e_revb.menu.timer.timer_105Hz=104.6Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz -mattairtech_mt_d21e_revb.menu.timer.timer_81Hz=81.38Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz -mattairtech_mt_d21e_revb.menu.timer.timer_61Hz=61.04Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz -mattairtech_mt_d21e_revb.menu.timer.timer_31Hz=30.52Hz (16-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz -mattairtech_mt_d21e_revb.menu.timer.timer_187500Hz=187500Hz (8-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz -mattairtech_mt_d21e_revb.menu.timer.timer_93750Hz=93750Hz (8-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz -mattairtech_mt_d21e_revb.menu.timer.timer_62500Hz=62500Hz (8-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz -mattairtech_mt_d21e_revb.menu.timer.timer_37500Hz=37500Hz (8-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz -mattairtech_mt_d21e_revb.menu.timer.timer_20833Hz=20833Hz (8-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz -mattairtech_mt_d21e_revb.menu.timer.timer_12500Hz=12500Hz (8-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz -mattairtech_mt_d21e_revb.menu.timer.timer_7500Hz=7500Hz (8-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz -mattairtech_mt_d21e_revb.menu.timer.timer_4166Hz=4166Hz (8-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz -mattairtech_mt_d21e_revb.menu.timer.timer_2930Hz=2930Hz (8-bit) -mattairtech_mt_d21e_revb.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -mattairtech_mt_d21e_revb.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) -mattairtech_mt_d21e_revb.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz -mattairtech_mt_d21e_revb.menu.cpu.samd21e18a=SAMD21E18A -mattairtech_mt_d21e_revb.menu.cpu.samd21e18a.upload.maximum_size=253952 -mattairtech_mt_d21e_revb.menu.cpu.samd21e18a.build.extra_flags=-D__SAMD21E18A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.samd21e18a.build.ldscript=flash_256KB.ld -mattairtech_mt_d21e_revb.menu.cpu.samd21e18a.build.openocdscript=openocd_scripts/SAMD21E18A.cfg -mattairtech_mt_d21e_revb.menu.cpu.samd21e18a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAMD21E18A.bin -mattairtech_mt_d21e_revb.menu.cpu.samd21e17a=SAMD21E17A -mattairtech_mt_d21e_revb.menu.cpu.samd21e17a.upload.maximum_size=122880 -mattairtech_mt_d21e_revb.menu.cpu.samd21e17a.build.extra_flags=-D__SAMD21E17A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.samd21e17a.build.ldscript=flash_128KB.ld -mattairtech_mt_d21e_revb.menu.cpu.samd21e17a.build.openocdscript=openocd_scripts/SAMD21E17A.cfg -mattairtech_mt_d21e_revb.menu.cpu.samd21e17a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAMD21E17A.bin -mattairtech_mt_d21e_revb.menu.cpu.samd21e16a=SAMD21E16A -mattairtech_mt_d21e_revb.menu.cpu.samd21e16a.upload.maximum_size=57344 -mattairtech_mt_d21e_revb.menu.cpu.samd21e16a.build.extra_flags=-D__SAMD21E16A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.samd21e16a.build.ldscript=flash_64KB.ld -mattairtech_mt_d21e_revb.menu.cpu.samd21e16a.build.openocdscript=openocd_scripts/SAMD21E16A.cfg -mattairtech_mt_d21e_revb.menu.cpu.samd21e16a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAMD21E16A.bin -mattairtech_mt_d21e_revb.menu.cpu.samd21e15a=SAMD21E15A -mattairtech_mt_d21e_revb.menu.cpu.samd21e15a.upload.maximum_size=24576 -mattairtech_mt_d21e_revb.menu.cpu.samd21e15a.build.extra_flags=-D__SAMD21E15A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.samd21e15a.build.ldscript=flash_32KB.ld -mattairtech_mt_d21e_revb.menu.cpu.samd21e15a.build.openocdscript=openocd_scripts/SAMD21E15A.cfg -mattairtech_mt_d21e_revb.menu.cpu.samd21e15a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAMD21E15A.bin -mattairtech_mt_d21e_revb.menu.cpu.saml21e18b=SAML21E18B -mattairtech_mt_d21e_revb.menu.cpu.saml21e18b.upload.maximum_size=253952 -mattairtech_mt_d21e_revb.menu.cpu.saml21e18b.build.extra_flags=-D__SAML21E18B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.saml21e18b.build.ldscript=flash_256KB.ld -mattairtech_mt_d21e_revb.menu.cpu.saml21e18b.build.openocdscript=openocd_scripts/SAML21E18B.cfg -mattairtech_mt_d21e_revb.menu.cpu.saml21e18b.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAML21E18B.bin -mattairtech_mt_d21e_revb.menu.cpu.saml21e17b=SAML21E17B -mattairtech_mt_d21e_revb.menu.cpu.saml21e17b.upload.maximum_size=122880 -mattairtech_mt_d21e_revb.menu.cpu.saml21e17b.build.extra_flags=-D__SAML21E17B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.saml21e17b.build.ldscript=flash_128KB.ld -mattairtech_mt_d21e_revb.menu.cpu.saml21e17b.build.openocdscript=openocd_scripts/SAML21E17B.cfg -mattairtech_mt_d21e_revb.menu.cpu.saml21e17b.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAML21E17B.bin -mattairtech_mt_d21e_revb.menu.cpu.saml21e16b=SAML21E16B -mattairtech_mt_d21e_revb.menu.cpu.saml21e16b.upload.maximum_size=57344 -mattairtech_mt_d21e_revb.menu.cpu.saml21e16b.build.extra_flags=-D__SAML21E16B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.saml21e16b.build.ldscript=flash_64KB.ld -mattairtech_mt_d21e_revb.menu.cpu.saml21e16b.build.openocdscript=openocd_scripts/SAML21E16B.cfg -mattairtech_mt_d21e_revb.menu.cpu.saml21e16b.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAML21E16B.bin -mattairtech_mt_d21e_revb.menu.cpu.saml21e15b=SAML21E15B -mattairtech_mt_d21e_revb.menu.cpu.saml21e15b.upload.maximum_size=24576 -mattairtech_mt_d21e_revb.menu.cpu.saml21e15b.build.extra_flags=-D__SAML21E15B__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.saml21e15b.build.ldscript=flash_32KB.ld -mattairtech_mt_d21e_revb.menu.cpu.saml21e15b.build.openocdscript=openocd_scripts/SAML21E15B.cfg -mattairtech_mt_d21e_revb.menu.cpu.saml21e15b.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAML21E15B.bin -mattairtech_mt_d21e_revb.menu.cpu.samc21e18a=SAMC21E18A -mattairtech_mt_d21e_revb.menu.cpu.samc21e18a.upload.maximum_size=253952 -mattairtech_mt_d21e_revb.menu.cpu.samc21e18a.build.extra_flags=-D__SAMC21E18A__ -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.samc21e18a.build.ldscript=flash_256KB.ld -mattairtech_mt_d21e_revb.menu.cpu.samc21e18a.build.openocdscript=openocd_scripts/SAMC21E18A.cfg -mattairtech_mt_d21e_revb.menu.cpu.samc21e18a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAMC21E18A.bin -mattairtech_mt_d21e_revb.menu.cpu.samc21e17a=SAMC21E17A -mattairtech_mt_d21e_revb.menu.cpu.samc21e17a.upload.maximum_size=122880 -mattairtech_mt_d21e_revb.menu.cpu.samc21e17a.build.extra_flags=-D__SAMC21E17A__ -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.samc21e17a.build.ldscript=flash_128KB.ld -mattairtech_mt_d21e_revb.menu.cpu.samc21e17a.build.openocdscript=openocd_scripts/SAMC21E17A.cfg -mattairtech_mt_d21e_revb.menu.cpu.samc21e17a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAMC21E17A.bin -mattairtech_mt_d21e_revb.menu.cpu.samc21e16a=SAMC21E16A -mattairtech_mt_d21e_revb.menu.cpu.samc21e16a.upload.maximum_size=57344 -mattairtech_mt_d21e_revb.menu.cpu.samc21e16a.build.extra_flags=-D__SAMC21E16A__ -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.samc21e16a.build.ldscript=flash_64KB.ld -mattairtech_mt_d21e_revb.menu.cpu.samc21e16a.build.openocdscript=openocd_scripts/SAMC21E16A.cfg -mattairtech_mt_d21e_revb.menu.cpu.samc21e16a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAMC21E16A.bin -mattairtech_mt_d21e_revb.menu.cpu.samc21e15a=SAMC21E15A -mattairtech_mt_d21e_revb.menu.cpu.samc21e15a.upload.maximum_size=24576 -mattairtech_mt_d21e_revb.menu.cpu.samc21e15a.build.extra_flags=-D__SAMC21E15A__ -DARM_MATH_CM0PLUS -mattairtech_mt_d21e_revb.menu.cpu.samc21e15a.build.ldscript=flash_32KB.ld -mattairtech_mt_d21e_revb.menu.cpu.samc21e15a.build.openocdscript=openocd_scripts/SAMC21E15A.cfg -mattairtech_mt_d21e_revb.menu.cpu.samc21e15a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_B_SAMC21E15A.bin -mattairtech_mt_d21e_revb.menu.bootloader.8kb=8KB_BOOTLOADER -mattairtech_mt_d21e_revb.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ -mattairtech_mt_d21e_revb.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader -mattairtech_mt_d21e_revb.menu.bootloader.8kb.upload.tool=MattairTech_Arduino:bossac -mattairtech_mt_d21e_revb.menu.bootloader.8kb.upload.use_1200bps_touch=true -mattairtech_mt_d21e_revb.menu.bootloader.8kb.upload.wait_for_upload_port=true -mattairtech_mt_d21e_revb.menu.bootloader.8kb.upload.native_usb=true -mattairtech_mt_d21e_revb.menu.bootloader.16kb=16KB_BOOTLOADER -mattairtech_mt_d21e_revb.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ -mattairtech_mt_d21e_revb.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader -mattairtech_mt_d21e_revb.menu.bootloader.16kb.upload.tool=MattairTech_Arduino:bossac -mattairtech_mt_d21e_revb.menu.bootloader.16kb.upload.use_1200bps_touch=true -mattairtech_mt_d21e_revb.menu.bootloader.16kb.upload.wait_for_upload_port=true -mattairtech_mt_d21e_revb.menu.bootloader.16kb.upload.native_usb=true -mattairtech_mt_d21e_revb.menu.bootloader.0kb=NO_BOOTLOADER -mattairtech_mt_d21e_revb.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ -mattairtech_mt_d21e_revb.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -mattairtech_mt_d21e_revb.menu.bootloader.0kb.upload.tool=arduino:openocd -mattairtech_mt_d21e_revb.menu.bootloader.0kb.upload.use_1200bps_touch=false -mattairtech_mt_d21e_revb.menu.bootloader.0kb.upload.wait_for_upload_port=false -mattairtech_mt_d21e_revb.menu.bootloader.0kb.upload.native_usb=false -mattairtech_mt_d21e_revb.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.one_uart.build.serialcom_uart=ONE_UART -mattairtech_mt_d21e_revb.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e_revb.menu.serial.one_uart.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.one_uart_one_wire_two_spi=ONE_UART_ONE_WIRE_TWO_SPI -mattairtech_mt_d21e_revb.menu.serial.one_uart_one_wire_two_spi.build.serialcom_uart=ONE_UART -mattairtech_mt_d21e_revb.menu.serial.one_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e_revb.menu.serial.one_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_mt_d21e_revb.menu.serial.one_uart_two_wire_one_spi=ONE_UART_TWO_WIRE_ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.one_uart_two_wire_one_spi.build.serialcom_uart=ONE_UART -mattairtech_mt_d21e_revb.menu.serial.one_uart_two_wire_one_spi.build.serialcom_wire=TWO_WIRE -mattairtech_mt_d21e_revb.menu.serial.one_uart_two_wire_one_spi.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.two_uart.build.serialcom_uart=TWO_UART -mattairtech_mt_d21e_revb.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e_revb.menu.serial.two_uart.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.three_uart_one_wire_no_spi=THREE_UART_ONE_WIRE_NO_SPI -mattairtech_mt_d21e_revb.menu.serial.three_uart_one_wire_no_spi.build.serialcom_uart=THREE_UART -mattairtech_mt_d21e_revb.menu.serial.three_uart_one_wire_no_spi.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e_revb.menu.serial.three_uart_one_wire_no_spi.build.serialcom_spi=NO_SPI -mattairtech_mt_d21e_revb.menu.serial.three_uart_no_wire_one_spi=THREE_UART_NO_WIRE_ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.three_uart_no_wire_one_spi.build.serialcom_uart=THREE_UART -mattairtech_mt_d21e_revb.menu.serial.three_uart_no_wire_one_spi.build.serialcom_wire=NO_WIRE -mattairtech_mt_d21e_revb.menu.serial.three_uart_no_wire_one_spi.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.four_uart=FOUR_UART_NO_WIRE_NO_SPI -mattairtech_mt_d21e_revb.menu.serial.four_uart.build.serialcom_uart=FOUR_UART -mattairtech_mt_d21e_revb.menu.serial.four_uart.build.serialcom_wire=NO_WIRE -mattairtech_mt_d21e_revb.menu.serial.four_uart.build.serialcom_spi=NO_SPI -mattairtech_mt_d21e_revb.menu.serial.no_uart_one_wire_two_spi=NO_UART_ONE_WIRE_TWO_SPI -mattairtech_mt_d21e_revb.menu.serial.no_uart_one_wire_two_spi.build.serialcom_uart=NO_UART -mattairtech_mt_d21e_revb.menu.serial.no_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e_revb.menu.serial.no_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_mt_d21e_revb.menu.serial.four_uart_one_wire_one_spi=FOUR_UART_ONE_WIRE_ONE_SPI (L21 only) -mattairtech_mt_d21e_revb.menu.serial.four_uart_one_wire_one_spi.build.serialcom_uart=FOUR_UART -mattairtech_mt_d21e_revb.menu.serial.four_uart_one_wire_one_spi.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e_revb.menu.serial.four_uart_one_wire_one_spi.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.five_uart_no_wire_one_spi=FIVE_UART_NO_WIRE_ONE_SPI (L21 only) -mattairtech_mt_d21e_revb.menu.serial.five_uart_no_wire_one_spi.build.serialcom_uart=FIVE_UART -mattairtech_mt_d21e_revb.menu.serial.five_uart_no_wire_one_spi.build.serialcom_wire=NO_WIRE -mattairtech_mt_d21e_revb.menu.serial.five_uart_no_wire_one_spi.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e_revb.menu.serial.five_uart_one_wire_no_spi=FIVE_UART_ONE_WIRE_NO_SPI (L21 only) -mattairtech_mt_d21e_revb.menu.serial.five_uart_one_wire_no_spi.build.serialcom_uart=FIVE_UART -mattairtech_mt_d21e_revb.menu.serial.five_uart_one_wire_no_spi.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e_revb.menu.serial.five_uart_one_wire_no_spi.build.serialcom_spi=NO_SPI -mattairtech_mt_d21e_revb.menu.serial.six_uart=SIX_UART_NO_WIRE_NO_SPI (L21 only) -mattairtech_mt_d21e_revb.menu.serial.six_uart.build.serialcom_uart=SIX_UART -mattairtech_mt_d21e_revb.menu.serial.six_uart.build.serialcom_wire=NO_WIRE -mattairtech_mt_d21e_revb.menu.serial.six_uart.build.serialcom_spi=NO_SPI -mattairtech_mt_d21e_revb.menu.usb.cdc=CDC_ONLY -mattairtech_mt_d21e_revb.menu.usb.cdc.build.usbcom=CDC_ONLY -mattairtech_mt_d21e_revb.menu.usb.cdc.build.pid=0x0557 -mattairtech_mt_d21e_revb.menu.usb.cdc_hid=CDC_HID -mattairtech_mt_d21e_revb.menu.usb.cdc_hid.build.usbcom=CDC_HID -mattairtech_mt_d21e_revb.menu.usb.cdc_hid.build.pid=0x0856 -mattairtech_mt_d21e_revb.menu.usb.withcdc=WITH_CDC -mattairtech_mt_d21e_revb.menu.usb.withcdc.build.usbcom=WITH_CDC -mattairtech_mt_d21e_revb.menu.usb.withcdc.build.pid=0x0B41 -mattairtech_mt_d21e_revb.menu.usb.hid=HID_ONLY -mattairtech_mt_d21e_revb.menu.usb.hid.build.usbcom=HID_ONLY -mattairtech_mt_d21e_revb.menu.usb.hid.build.pid=0x0B40 -mattairtech_mt_d21e_revb.menu.usb.nocdc=WITHOUT_CDC -mattairtech_mt_d21e_revb.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -mattairtech_mt_d21e_revb.menu.usb.nocdc.build.pid=0x0A0C -mattairtech_mt_d21e_revb.menu.usb.none=USB_DISABLED -mattairtech_mt_d21e_revb.menu.usb.none.build.usbcom=USB_DISABLED -mattairtech_mt_d21e_revb.menu.usb.none.build.pid=0x0856 - - -# MattairTech MT-D21E -mattairtech_mt_d21e.name=MattairTech MT-D21E (rev A) -mattairtech_mt_d21e.vid.0=0x16D0 -mattairtech_mt_d21e.pid.0=0x0557 -mattairtech_mt_d21e.vid.1=0x16D0 -mattairtech_mt_d21e.pid.1=0x0856 -mattairtech_mt_d21e.vid.2=0x16D0 -mattairtech_mt_d21e.pid.2=0x0B41 -mattairtech_mt_d21e.vid.3=0x16D0 -mattairtech_mt_d21e.pid.3=0x0B40 -mattairtech_mt_d21e.vid.4=0x16D0 -mattairtech_mt_d21e.pid.4=0x0A0C -mattairtech_mt_d21e.vid.5=0x16D0 -mattairtech_mt_d21e.pid.5=0x0856 -mattairtech_mt_d21e.build.mcu=cortex-m0plus -mattairtech_mt_d21e.build.mathlib=arm_cortexM0l_math -mattairtech_mt_d21e.build.f_cpu=48000000L -mattairtech_mt_d21e.build.usb_product="MT-D21E Rev A" -mattairtech_mt_d21e.build.usb_manufacturer="MattairTech LLC" -mattairtech_mt_d21e.build.board=SAMD_ZERO -mattairtech_mt_d21e.build.core=arduino -mattairtech_mt_d21e.build.variant=MT_D21E -mattairtech_mt_d21e.build.variant_system_lib= -mattairtech_mt_d21e.build.vid=0x16D0 -mattairtech_mt_d21e.upload.protocol=sam-ba -mattairtech_mt_d21e.bootloader.tool=arduino:openocd -mattairtech_mt_d21e.menu.float.default=Print & String use auto-promoted doubles only -mattairtech_mt_d21e.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY -mattairtech_mt_d21e.menu.float.print=Print uses separate singles and doubles -mattairtech_mt_d21e.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES -mattairtech_mt_d21e.menu.float.string=String uses separate singles and doubles -mattairtech_mt_d21e.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES -mattairtech_mt_d21e.menu.float.both=Print & String use separate singles and doubles -mattairtech_mt_d21e.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES -mattairtech_mt_d21e.menu.config.disabled=config.h disabled -mattairtech_mt_d21e.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED -mattairtech_mt_d21e.menu.config.enabled=config.h enabled (mostly code size reductions) -mattairtech_mt_d21e.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED -mattairtech_mt_d21e.menu.clock.crystal_32k=32KHZ_CRYSTAL -mattairtech_mt_d21e.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL -mattairtech_mt_d21e.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL -mattairtech_mt_d21e.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL -mattairtech_mt_d21e.menu.clock.internal=INTERNAL_OSCILLATOR -mattairtech_mt_d21e.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL -mattairtech_mt_d21e.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR -mattairtech_mt_d21e.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB -mattairtech_mt_d21e.menu.timer.timer_732Hz=732.4Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz -mattairtech_mt_d21e.menu.timer.timer_366Hz=366.2Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz -mattairtech_mt_d21e.menu.timer.timer_244Hz=244.1Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz -mattairtech_mt_d21e.menu.timer.timer_183Hz=183.1Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz -mattairtech_mt_d21e.menu.timer.timer_146Hz=146.5Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz -mattairtech_mt_d21e.menu.timer.timer_122Hz=122.1Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz -mattairtech_mt_d21e.menu.timer.timer_105Hz=104.6Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz -mattairtech_mt_d21e.menu.timer.timer_81Hz=81.38Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz -mattairtech_mt_d21e.menu.timer.timer_61Hz=61.04Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz -mattairtech_mt_d21e.menu.timer.timer_31Hz=30.52Hz (16-bit) -mattairtech_mt_d21e.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz -mattairtech_mt_d21e.menu.timer.timer_187500Hz=187500Hz (8-bit) -mattairtech_mt_d21e.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz -mattairtech_mt_d21e.menu.timer.timer_93750Hz=93750Hz (8-bit) -mattairtech_mt_d21e.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz -mattairtech_mt_d21e.menu.timer.timer_62500Hz=62500Hz (8-bit) -mattairtech_mt_d21e.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz -mattairtech_mt_d21e.menu.timer.timer_37500Hz=37500Hz (8-bit) -mattairtech_mt_d21e.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz -mattairtech_mt_d21e.menu.timer.timer_20833Hz=20833Hz (8-bit) -mattairtech_mt_d21e.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz -mattairtech_mt_d21e.menu.timer.timer_12500Hz=12500Hz (8-bit) -mattairtech_mt_d21e.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz -mattairtech_mt_d21e.menu.timer.timer_7500Hz=7500Hz (8-bit) -mattairtech_mt_d21e.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz -mattairtech_mt_d21e.menu.timer.timer_4166Hz=4166Hz (8-bit) -mattairtech_mt_d21e.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz -mattairtech_mt_d21e.menu.timer.timer_2930Hz=2930Hz (8-bit) -mattairtech_mt_d21e.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -mattairtech_mt_d21e.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) -mattairtech_mt_d21e.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz -mattairtech_mt_d21e.menu.cpu.samd21e18a=SAMD21E18A -mattairtech_mt_d21e.menu.cpu.samd21e18a.upload.maximum_size=253952 -mattairtech_mt_d21e.menu.cpu.samd21e18a.build.extra_flags=-D__SAMD21E18A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e.menu.cpu.samd21e18a.build.ldscript=flash_256KB.ld -mattairtech_mt_d21e.menu.cpu.samd21e18a.build.openocdscript=openocd_scripts/SAMD21E18A.cfg -mattairtech_mt_d21e.menu.cpu.samd21e18a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E18A.bin -mattairtech_mt_d21e.menu.cpu.samd21e17a=SAMD21E17A -mattairtech_mt_d21e.menu.cpu.samd21e17a.upload.maximum_size=122880 -mattairtech_mt_d21e.menu.cpu.samd21e17a.build.extra_flags=-D__SAMD21E17A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e.menu.cpu.samd21e17a.build.ldscript=flash_128KB.ld -mattairtech_mt_d21e.menu.cpu.samd21e17a.build.openocdscript=openocd_scripts/SAMD21E17A.cfg -mattairtech_mt_d21e.menu.cpu.samd21e17a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E17A.bin -mattairtech_mt_d21e.menu.cpu.samd21e16a=SAMD21E16A -mattairtech_mt_d21e.menu.cpu.samd21e16a.upload.maximum_size=57344 -mattairtech_mt_d21e.menu.cpu.samd21e16a.build.extra_flags=-D__SAMD21E16A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e.menu.cpu.samd21e16a.build.ldscript=flash_64KB.ld -mattairtech_mt_d21e.menu.cpu.samd21e16a.build.openocdscript=openocd_scripts/SAMD21E16A.cfg -mattairtech_mt_d21e.menu.cpu.samd21e16a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E16A.bin -mattairtech_mt_d21e.menu.cpu.samd21e15a=SAMD21E15A -mattairtech_mt_d21e.menu.cpu.samd21e15a.upload.maximum_size=24576 -mattairtech_mt_d21e.menu.cpu.samd21e15a.build.extra_flags=-D__SAMD21E15A__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d21e.menu.cpu.samd21e15a.build.ldscript=flash_32KB.ld -mattairtech_mt_d21e.menu.cpu.samd21e15a.build.openocdscript=openocd_scripts/SAMD21E15A.cfg -mattairtech_mt_d21e.menu.cpu.samd21e15a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E15A.bin -mattairtech_mt_d21e.menu.bootloader.8kb=8KB_BOOTLOADER -mattairtech_mt_d21e.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ -mattairtech_mt_d21e.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader -mattairtech_mt_d21e.menu.bootloader.8kb.upload.tool=MattairTech_Arduino:bossac -mattairtech_mt_d21e.menu.bootloader.8kb.upload.use_1200bps_touch=true -mattairtech_mt_d21e.menu.bootloader.8kb.upload.wait_for_upload_port=true -mattairtech_mt_d21e.menu.bootloader.8kb.upload.native_usb=true -mattairtech_mt_d21e.menu.bootloader.16kb=16KB_BOOTLOADER -mattairtech_mt_d21e.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ -mattairtech_mt_d21e.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader -mattairtech_mt_d21e.menu.bootloader.16kb.upload.tool=MattairTech_Arduino:bossac -mattairtech_mt_d21e.menu.bootloader.16kb.upload.use_1200bps_touch=true -mattairtech_mt_d21e.menu.bootloader.16kb.upload.wait_for_upload_port=true -mattairtech_mt_d21e.menu.bootloader.16kb.upload.native_usb=true -mattairtech_mt_d21e.menu.bootloader.0kb=NO_BOOTLOADER -mattairtech_mt_d21e.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ -mattairtech_mt_d21e.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -mattairtech_mt_d21e.menu.bootloader.0kb.upload.tool=arduino:openocd -mattairtech_mt_d21e.menu.bootloader.0kb.upload.use_1200bps_touch=false -mattairtech_mt_d21e.menu.bootloader.0kb.upload.wait_for_upload_port=false -mattairtech_mt_d21e.menu.bootloader.0kb.upload.native_usb=false -mattairtech_mt_d21e.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI -mattairtech_mt_d21e.menu.serial.one_uart.build.serialcom_uart=ONE_UART -mattairtech_mt_d21e.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e.menu.serial.one_uart.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e.menu.serial.one_uart_one_wire_two_spi=ONE_UART_ONE_WIRE_TWO_SPI -mattairtech_mt_d21e.menu.serial.one_uart_one_wire_two_spi.build.serialcom_uart=ONE_UART -mattairtech_mt_d21e.menu.serial.one_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e.menu.serial.one_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_mt_d21e.menu.serial.one_uart_two_wire_one_spi=ONE_UART_TWO_WIRE_ONE_SPI -mattairtech_mt_d21e.menu.serial.one_uart_two_wire_one_spi.build.serialcom_uart=ONE_UART -mattairtech_mt_d21e.menu.serial.one_uart_two_wire_one_spi.build.serialcom_wire=TWO_WIRE -mattairtech_mt_d21e.menu.serial.one_uart_two_wire_one_spi.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI -mattairtech_mt_d21e.menu.serial.two_uart.build.serialcom_uart=TWO_UART -mattairtech_mt_d21e.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e.menu.serial.two_uart.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e.menu.serial.three_uart_one_wire_no_spi=THREE_UART_ONE_WIRE_NO_SPI -mattairtech_mt_d21e.menu.serial.three_uart_one_wire_no_spi.build.serialcom_uart=THREE_UART -mattairtech_mt_d21e.menu.serial.three_uart_one_wire_no_spi.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e.menu.serial.three_uart_one_wire_no_spi.build.serialcom_spi=NO_SPI -mattairtech_mt_d21e.menu.serial.three_uart_no_wire_one_spi=THREE_UART_NO_WIRE_ONE_SPI -mattairtech_mt_d21e.menu.serial.three_uart_no_wire_one_spi.build.serialcom_uart=THREE_UART -mattairtech_mt_d21e.menu.serial.three_uart_no_wire_one_spi.build.serialcom_wire=NO_WIRE -mattairtech_mt_d21e.menu.serial.three_uart_no_wire_one_spi.build.serialcom_spi=ONE_SPI -mattairtech_mt_d21e.menu.serial.four_uart=FOUR_UART_NO_WIRE_NO_SPI -mattairtech_mt_d21e.menu.serial.four_uart.build.serialcom_uart=FOUR_UART -mattairtech_mt_d21e.menu.serial.four_uart.build.serialcom_wire=NO_WIRE -mattairtech_mt_d21e.menu.serial.four_uart.build.serialcom_spi=NO_SPI -mattairtech_mt_d21e.menu.serial.no_uart_one_wire_two_spi=NO_UART_ONE_WIRE_TWO_SPI -mattairtech_mt_d21e.menu.serial.no_uart_one_wire_two_spi.build.serialcom_uart=NO_UART -mattairtech_mt_d21e.menu.serial.no_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d21e.menu.serial.no_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI -mattairtech_mt_d21e.menu.usb.cdc=CDC_ONLY -mattairtech_mt_d21e.menu.usb.cdc.build.usbcom=CDC_ONLY -mattairtech_mt_d21e.menu.usb.cdc.build.pid=0x0557 -mattairtech_mt_d21e.menu.usb.cdc_hid=CDC_HID -mattairtech_mt_d21e.menu.usb.cdc_hid.build.usbcom=CDC_HID -mattairtech_mt_d21e.menu.usb.cdc_hid.build.pid=0x0856 -mattairtech_mt_d21e.menu.usb.withcdc=WITH_CDC -mattairtech_mt_d21e.menu.usb.withcdc.build.usbcom=WITH_CDC -mattairtech_mt_d21e.menu.usb.withcdc.build.pid=0x0B41 -mattairtech_mt_d21e.menu.usb.hid=HID_ONLY -mattairtech_mt_d21e.menu.usb.hid.build.usbcom=HID_ONLY -mattairtech_mt_d21e.menu.usb.hid.build.pid=0x0B40 -mattairtech_mt_d21e.menu.usb.nocdc=WITHOUT_CDC -mattairtech_mt_d21e.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -mattairtech_mt_d21e.menu.usb.nocdc.build.pid=0x0A0C -mattairtech_mt_d21e.menu.usb.none=USB_DISABLED -mattairtech_mt_d21e.menu.usb.none.build.usbcom=USB_DISABLED -mattairtech_mt_d21e.menu.usb.none.build.pid=0x0856 - - -# MattairTech MT-D11 (D11D14AM, QFN-24) -mattairtech_mt_d11.name=MattairTech MT-D11 -mattairtech_mt_d11.vid.0=0x16D0 -mattairtech_mt_d11.pid.0=0x0557 -mattairtech_mt_d11.vid.1=0x16D0 -mattairtech_mt_d11.pid.1=0x0856 -mattairtech_mt_d11.vid.2=0x16D0 -mattairtech_mt_d11.pid.2=0x0B41 -mattairtech_mt_d11.vid.3=0x16D0 -mattairtech_mt_d11.pid.3=0x0B40 -mattairtech_mt_d11.vid.4=0x16D0 -mattairtech_mt_d11.pid.4=0x0A0C -mattairtech_mt_d11.vid.5=0x16D0 -mattairtech_mt_d11.pid.5=0x0856 -mattairtech_mt_d11.build.mcu=cortex-m0plus -mattairtech_mt_d11.build.mathlib=arm_cortexM0l_math -mattairtech_mt_d11.build.f_cpu=48000000L -mattairtech_mt_d11.build.usb_product="MT-D11" -mattairtech_mt_d11.build.usb_manufacturer="MattairTech LLC" -mattairtech_mt_d11.build.board=SAMD_ZERO -mattairtech_mt_d11.build.core=arduino -mattairtech_mt_d11.build.variant=MT_D11 -mattairtech_mt_d11.build.variant_system_lib= -mattairtech_mt_d11.build.vid=0x16D0 -mattairtech_mt_d11.upload.protocol=sam-ba -mattairtech_mt_d11.bootloader.tool=arduino:openocd -mattairtech_mt_d11.menu.float.default=Print & String use auto-promoted doubles only -mattairtech_mt_d11.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY -mattairtech_mt_d11.menu.float.print=Print uses separate singles and doubles -mattairtech_mt_d11.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES -mattairtech_mt_d11.menu.float.string=String uses separate singles and doubles -mattairtech_mt_d11.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES -mattairtech_mt_d11.menu.float.both=Print & String use separate singles and doubles -mattairtech_mt_d11.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES -mattairtech_mt_d11.menu.config.disabled=config.h disabled -mattairtech_mt_d11.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED -mattairtech_mt_d11.menu.config.enabled=config.h enabled (mostly code size reductions) -mattairtech_mt_d11.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED -mattairtech_mt_d11.menu.clock.crystal_32k=32KHZ_CRYSTAL -mattairtech_mt_d11.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL -mattairtech_mt_d11.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL -mattairtech_mt_d11.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL -mattairtech_mt_d11.menu.clock.internal=INTERNAL_OSCILLATOR -mattairtech_mt_d11.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL -mattairtech_mt_d11.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR -mattairtech_mt_d11.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB -mattairtech_mt_d11.menu.timer.timer_732Hz=732.4Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz -mattairtech_mt_d11.menu.timer.timer_366Hz=366.2Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz -mattairtech_mt_d11.menu.timer.timer_244Hz=244.1Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz -mattairtech_mt_d11.menu.timer.timer_183Hz=183.1Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz -mattairtech_mt_d11.menu.timer.timer_146Hz=146.5Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz -mattairtech_mt_d11.menu.timer.timer_122Hz=122.1Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz -mattairtech_mt_d11.menu.timer.timer_105Hz=104.6Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz -mattairtech_mt_d11.menu.timer.timer_81Hz=81.38Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz -mattairtech_mt_d11.menu.timer.timer_61Hz=61.04Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz -mattairtech_mt_d11.menu.timer.timer_31Hz=30.52Hz (16-bit) -mattairtech_mt_d11.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz -mattairtech_mt_d11.menu.timer.timer_187500Hz=187500Hz (8-bit) -mattairtech_mt_d11.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz -mattairtech_mt_d11.menu.timer.timer_93750Hz=93750Hz (8-bit) -mattairtech_mt_d11.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz -mattairtech_mt_d11.menu.timer.timer_62500Hz=62500Hz (8-bit) -mattairtech_mt_d11.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz -mattairtech_mt_d11.menu.timer.timer_37500Hz=37500Hz (8-bit) -mattairtech_mt_d11.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz -mattairtech_mt_d11.menu.timer.timer_20833Hz=20833Hz (8-bit) -mattairtech_mt_d11.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz -mattairtech_mt_d11.menu.timer.timer_12500Hz=12500Hz (8-bit) -mattairtech_mt_d11.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz -mattairtech_mt_d11.menu.timer.timer_7500Hz=7500Hz (8-bit) -mattairtech_mt_d11.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz -mattairtech_mt_d11.menu.timer.timer_4166Hz=4166Hz (8-bit) -mattairtech_mt_d11.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz -mattairtech_mt_d11.menu.timer.timer_2930Hz=2930Hz (8-bit) -mattairtech_mt_d11.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -mattairtech_mt_d11.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) -mattairtech_mt_d11.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz -mattairtech_mt_d11.build.extra_flags=-D__SAMD11D14AM__ {build.usb_flags} -DARM_MATH_CM0PLUS -mattairtech_mt_d11.build.ldscript=flash_16KB.ld -mattairtech_mt_d11.build.openocdscript=openocd_scripts/SAMD11D14AM.cfg -mattairtech_mt_d11.bootloader.file=zero/binaries/sam_ba_MT_D11_SAMD11D14AM.bin -mattairtech_mt_d11.menu.bootloader.4kb=4KB_BOOTLOADER -mattairtech_mt_d11.menu.bootloader.4kb.build.bootloader_size=__4KB_BOOTLOADER__ -mattairtech_mt_d11.menu.bootloader.4kb.build.ldscript_path=linker_scripts/gcc/4KB_Bootloader -mattairtech_mt_d11.menu.bootloader.4kb.upload.tool=MattairTech_Arduino:bossac -mattairtech_mt_d11.menu.bootloader.4kb.upload.use_1200bps_touch=true -mattairtech_mt_d11.menu.bootloader.4kb.upload.wait_for_upload_port=true -mattairtech_mt_d11.menu.bootloader.4kb.upload.native_usb=true -mattairtech_mt_d11.menu.bootloader.4kb.upload.maximum_size=12288 -mattairtech_mt_d11.menu.bootloader.0kb=NO_BOOTLOADER -mattairtech_mt_d11.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ -mattairtech_mt_d11.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -mattairtech_mt_d11.menu.bootloader.0kb.upload.tool=arduino:openocd -mattairtech_mt_d11.menu.bootloader.0kb.upload.use_1200bps_touch=false -mattairtech_mt_d11.menu.bootloader.0kb.upload.wait_for_upload_port=false -mattairtech_mt_d11.menu.bootloader.0kb.upload.native_usb=false -mattairtech_mt_d11.menu.bootloader.0kb.upload.maximum_size=16384 -mattairtech_mt_d11.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI -mattairtech_mt_d11.menu.serial.one_uart.build.serialcom_uart=ONE_UART -mattairtech_mt_d11.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d11.menu.serial.one_uart.build.serialcom_spi=ONE_SPI -mattairtech_mt_d11.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI -mattairtech_mt_d11.menu.serial.no_uart.build.serialcom_uart=NO_UART -mattairtech_mt_d11.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d11.menu.serial.no_uart.build.serialcom_spi=ONE_SPI -mattairtech_mt_d11.menu.serial.two_uart=TWO_UART_ONE_WIRE_NO_SPI -mattairtech_mt_d11.menu.serial.two_uart.build.serialcom_uart=TWO_UART -mattairtech_mt_d11.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE -mattairtech_mt_d11.menu.serial.two_uart.build.serialcom_spi=NO_SPI -mattairtech_mt_d11.menu.usb.cdc=CDC_ONLY -mattairtech_mt_d11.menu.usb.cdc.build.usbcom=CDC_ONLY -mattairtech_mt_d11.menu.usb.cdc.build.pid=0x0557 -mattairtech_mt_d11.menu.usb.cdc_hid=CDC_HID -mattairtech_mt_d11.menu.usb.cdc_hid.build.usbcom=CDC_HID -mattairtech_mt_d11.menu.usb.cdc_hid.build.pid=0x0856 -mattairtech_mt_d11.menu.usb.withcdc=WITH_CDC -mattairtech_mt_d11.menu.usb.withcdc.build.usbcom=WITH_CDC -mattairtech_mt_d11.menu.usb.withcdc.build.pid=0x0B41 -mattairtech_mt_d11.menu.usb.hid=HID_ONLY -mattairtech_mt_d11.menu.usb.hid.build.usbcom=HID_ONLY -mattairtech_mt_d11.menu.usb.hid.build.pid=0x0B40 -mattairtech_mt_d11.menu.usb.nocdc=WITHOUT_CDC -mattairtech_mt_d11.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -mattairtech_mt_d11.menu.usb.nocdc.build.pid=0x0A0C -mattairtech_mt_d11.menu.usb.none=USB_DISABLED -mattairtech_mt_d11.menu.usb.none.build.usbcom=USB_DISABLED -mattairtech_mt_d11.menu.usb.none.build.pid=0x0856 - +# Generic D21E +d21e17.name=Generic D21E +d21e17.vid.0=0x16D0 +d21e17.pid.0=0x0557 +d21e17.vid.1=0x16D0 +d21e17.pid.1=0x0856 +d21e17.vid.2=0x16D0 +d21e17.pid.2=0x0B41 +d21e17.vid.3=0x16D0 +d21e17.pid.3=0x0B40 +d21e17.vid.4=0x16D0 +d21e17.pid.4=0x0A0C +d21e17.vid.5=0x16D0 +d21e17.pid.5=0x0856 +d21e17.build.mcu=cortex-m0plus +d21e17.build.mathlib=arm_cortexM0l_math +d21e17.build.f_cpu=48000000L +d21e17.build.usb_product="MT-D21E Rev A" +d21e17.build.usb_manufacturer="Fab Foundation" +d21e17.build.board=SAMD_ZERO +d21e17.build.core=arduino +d21e17.build.variant=MT_D21E +d21e17.build.variant_system_lib= +d21e17.build.vid=0x16D0 +d21e17.upload.protocol=sam-ba +d21e17.bootloader.tool=arduino:openocd +d21e17.menu.float.default=Print & String use auto-promoted doubles only +d21e17.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY +d21e17.menu.float.print=Print uses separate singles and doubles +d21e17.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES +d21e17.menu.float.string=String uses separate singles and doubles +d21e17.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES +d21e17.menu.float.both=Print & String use separate singles and doubles +d21e17.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES +d21e17.menu.config.disabled=config.h disabled +d21e17.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED +d21e17.menu.config.enabled=config.h enabled (mostly code size reductions) +d21e17.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED +d21e17.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR +d21e17.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB +d21e17.menu.clock.internal=INTERNAL_OSCILLATOR +d21e17.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL +d21e17.menu.clock.crystal_32k=32KHZ_CRYSTAL +d21e17.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL +d21e17.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL +d21e17.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL +d21e17.menu.timer.timer_732Hz=732.4Hz (16-bit) +d21e17.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz +d21e17.menu.timer.timer_366Hz=366.2Hz (16-bit) +d21e17.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz +d21e17.menu.timer.timer_244Hz=244.1Hz (16-bit) +d21e17.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz +d21e17.menu.timer.timer_183Hz=183.1Hz (16-bit) +d21e17.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz +d21e17.menu.timer.timer_146Hz=146.5Hz (16-bit) +d21e17.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz +d21e17.menu.timer.timer_122Hz=122.1Hz (16-bit) +d21e17.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz +d21e17.menu.timer.timer_105Hz=104.6Hz (16-bit) +d21e17.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz +d21e17.menu.timer.timer_81Hz=81.38Hz (16-bit) +d21e17.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz +d21e17.menu.timer.timer_61Hz=61.04Hz (16-bit) +d21e17.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz +d21e17.menu.timer.timer_31Hz=30.52Hz (16-bit) +d21e17.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz +d21e17.menu.timer.timer_187500Hz=187500Hz (8-bit) +d21e17.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz +d21e17.menu.timer.timer_93750Hz=93750Hz (8-bit) +d21e17.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz +d21e17.menu.timer.timer_62500Hz=62500Hz (8-bit) +d21e17.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz +d21e17.menu.timer.timer_37500Hz=37500Hz (8-bit) +d21e17.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz +d21e17.menu.timer.timer_20833Hz=20833Hz (8-bit) +d21e17.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz +d21e17.menu.timer.timer_12500Hz=12500Hz (8-bit) +d21e17.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz +d21e17.menu.timer.timer_7500Hz=7500Hz (8-bit) +d21e17.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz +d21e17.menu.timer.timer_4166Hz=4166Hz (8-bit) +d21e17.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz +d21e17.menu.timer.timer_2930Hz=2930Hz (8-bit) +d21e17.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz +d21e17.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) +d21e17.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz +d21e17.menu.cpu.samd21e17a=SAMD21E17A +d21e17.menu.cpu.samd21e17a.upload.maximum_size=122880 +d21e17.menu.cpu.samd21e17a.build.extra_flags=-D__SAMD21E17A__ {build.usb_flags} -DARM_MATH_CM0PLUS +d21e17.menu.cpu.samd21e17a.build.ldscript=flash_128KB.ld +d21e17.menu.cpu.samd21e17a.build.openocdscript=openocd_scripts/SAMD21E17A.cfg +d21e17.menu.cpu.samd21e17a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E17A.bin +d21e17.menu.cpu.samd21e18a=SAMD21E18A +d21e17.menu.cpu.samd21e18a.upload.maximum_size=253952 +d21e17.menu.cpu.samd21e18a.build.extra_flags=-D__SAMD21E18A__ {build.usb_flags} -DARM_MATH_CM0PLUS +d21e17.menu.cpu.samd21e18a.build.ldscript=flash_256KB.ld +d21e17.menu.cpu.samd21e18a.build.openocdscript=openocd_scripts/SAMD21E18A.cfg +d21e17.menu.cpu.samd21e18a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E18A.bin +d21e17.menu.cpu.samd21e15a=SAMD21E15A +d21e17.menu.cpu.samd21e15a.upload.maximum_size=24576 +d21e17.menu.cpu.samd21e15a.build.extra_flags=-D__SAMD21E15A__ {build.usb_flags} -DARM_MATH_CM0PLUS +d21e17.menu.cpu.samd21e15a.build.ldscript=flash_32KB.ld +d21e17.menu.cpu.samd21e15a.build.openocdscript=openocd_scripts/SAMD21E15A.cfg +d21e17.menu.cpu.samd21e15a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E15A.bin +d21e17.menu.cpu.samd21e16a=SAMD21E16A +d21e17.menu.cpu.samd21e16a.upload.maximum_size=57344 +d21e17.menu.cpu.samd21e16a.build.extra_flags=-D__SAMD21E16A__ {build.usb_flags} -DARM_MATH_CM0PLUS +d21e17.menu.cpu.samd21e16a.build.ldscript=flash_64KB.ld +d21e17.menu.cpu.samd21e16a.build.openocdscript=openocd_scripts/SAMD21E16A.cfg +d21e17.menu.cpu.samd21e16a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E16A.bin +d21e17.menu.bootloader.8kb=8KB_BOOTLOADER +d21e17.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ +d21e17.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader +d21e17.menu.bootloader.8kb.upload.tool=MattairTech_Arduino:bossac +d21e17.menu.bootloader.8kb.upload.use_1200bps_touch=true +d21e17.menu.bootloader.8kb.upload.wait_for_upload_port=true +d21e17.menu.bootloader.8kb.upload.native_usb=true +d21e17.menu.bootloader.16kb=16KB_BOOTLOADER +d21e17.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ +d21e17.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader +d21e17.menu.bootloader.16kb.upload.tool=MattairTech_Arduino:bossac +d21e17.menu.bootloader.16kb.upload.use_1200bps_touch=true +d21e17.menu.bootloader.16kb.upload.wait_for_upload_port=true +d21e17.menu.bootloader.16kb.upload.native_usb=true +d21e17.menu.bootloader.0kb=NO_BOOTLOADER +d21e17.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ +d21e17.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader +d21e17.menu.bootloader.0kb.upload.tool=arduino:openocd +d21e17.menu.bootloader.0kb.upload.use_1200bps_touch=false +d21e17.menu.bootloader.0kb.upload.wait_for_upload_port=false +d21e17.menu.bootloader.0kb.upload.native_usb=false +d21e17.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI +d21e17.menu.serial.one_uart.build.serialcom_uart=ONE_UART +d21e17.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE +d21e17.menu.serial.one_uart.build.serialcom_spi=ONE_SPI +d21e17.menu.serial.one_uart_one_wire_two_spi=ONE_UART_ONE_WIRE_TWO_SPI +d21e17.menu.serial.one_uart_one_wire_two_spi.build.serialcom_uart=ONE_UART +d21e17.menu.serial.one_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE +d21e17.menu.serial.one_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI +d21e17.menu.serial.one_uart_two_wire_one_spi=ONE_UART_TWO_WIRE_ONE_SPI +d21e17.menu.serial.one_uart_two_wire_one_spi.build.serialcom_uart=ONE_UART +d21e17.menu.serial.one_uart_two_wire_one_spi.build.serialcom_wire=TWO_WIRE +d21e17.menu.serial.one_uart_two_wire_one_spi.build.serialcom_spi=ONE_SPI +d21e17.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI +d21e17.menu.serial.two_uart.build.serialcom_uart=TWO_UART +d21e17.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE +d21e17.menu.serial.two_uart.build.serialcom_spi=ONE_SPI +d21e17.menu.serial.three_uart_one_wire_no_spi=THREE_UART_ONE_WIRE_NO_SPI +d21e17.menu.serial.three_uart_one_wire_no_spi.build.serialcom_uart=THREE_UART +d21e17.menu.serial.three_uart_one_wire_no_spi.build.serialcom_wire=ONE_WIRE +d21e17.menu.serial.three_uart_one_wire_no_spi.build.serialcom_spi=NO_SPI +d21e17.menu.serial.three_uart_no_wire_one_spi=THREE_UART_NO_WIRE_ONE_SPI +d21e17.menu.serial.three_uart_no_wire_one_spi.build.serialcom_uart=THREE_UART +d21e17.menu.serial.three_uart_no_wire_one_spi.build.serialcom_wire=NO_WIRE +d21e17.menu.serial.three_uart_no_wire_one_spi.build.serialcom_spi=ONE_SPI +d21e17.menu.serial.four_uart=FOUR_UART_NO_WIRE_NO_SPI +d21e17.menu.serial.four_uart.build.serialcom_uart=FOUR_UART +d21e17.menu.serial.four_uart.build.serialcom_wire=NO_WIRE +d21e17.menu.serial.four_uart.build.serialcom_spi=NO_SPI +d21e17.menu.serial.no_uart_one_wire_two_spi=NO_UART_ONE_WIRE_TWO_SPI +d21e17.menu.serial.no_uart_one_wire_two_spi.build.serialcom_uart=NO_UART +d21e17.menu.serial.no_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE +d21e17.menu.serial.no_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI +d21e17.menu.usb.cdc=CDC_ONLY +d21e17.menu.usb.cdc.build.usbcom=CDC_ONLY +d21e17.menu.usb.cdc.build.pid=0x0557 +d21e17.menu.usb.cdc_hid=CDC_HID +d21e17.menu.usb.cdc_hid.build.usbcom=CDC_HID +d21e17.menu.usb.cdc_hid.build.pid=0x0856 +d21e17.menu.usb.withcdc=WITH_CDC +d21e17.menu.usb.withcdc.build.usbcom=WITH_CDC +d21e17.menu.usb.withcdc.build.pid=0x0B41 +d21e17.menu.usb.hid=HID_ONLY +d21e17.menu.usb.hid.build.usbcom=HID_ONLY +d21e17.menu.usb.hid.build.pid=0x0B40 +d21e17.menu.usb.nocdc=WITHOUT_CDC +d21e17.menu.usb.nocdc.build.usbcom=WITHOUT_CDC +d21e17.menu.usb.nocdc.build.pid=0x0A0C +d21e17.menu.usb.none=USB_DISABLED +d21e17.menu.usb.none.build.usbcom=USB_DISABLED +d21e17.menu.usb.none.build.pid=0x0856 # Generic D11C14A (SOIC-14) d11c14a.name=Generic D11C14A @@ -1266,7 +223,7 @@ d11c14a.build.mcu=cortex-m0plus d11c14a.build.mathlib=arm_cortexM0l_math d11c14a.build.f_cpu=48000000L d11c14a.build.usb_product="D11C14A" -d11c14a.build.usb_manufacturer="MattairTech LLC" +d11c14a.build.usb_manufacturer="Fab Foundation" d11c14a.build.board=SAMD_ZERO d11c14a.build.core=arduino d11c14a.build.variant=Generic_D11C14A @@ -1408,7 +365,7 @@ d11d14as.build.mcu=cortex-m0plus d11d14as.build.mathlib=arm_cortexM0l_math d11d14as.build.f_cpu=48000000L d11d14as.build.usb_product="D11D14AS" -d11d14as.build.usb_manufacturer="MattairTech LLC" +d11d14as.build.usb_manufacturer="Fab Foundation" d11d14as.build.board=SAMD_ZERO d11d14as.build.core=arduino d11d14as.build.variant=Generic_D11D14AS @@ -1526,329 +483,3 @@ d11d14as.menu.usb.nocdc.build.pid=0x0A0C d11d14as.menu.usb.none=USB_DISABLED d11d14as.menu.usb.none.build.usbcom=USB_DISABLED d11d14as.menu.usb.none.build.pid=0x0856 - - -# MattairTech Core for Arduino/Genuino Zero (Autodetect Port) -arduino_zero.name=Arduino/Genuino Zero (Autodetect Port) -arduino_zero.bootloader.file=zero/binaries/sam_ba_arduino_zero_SAMD21G18A.bin -arduino_zero.vid.0=0x2341 -arduino_zero.pid.0=0x804d -arduino_zero.vid.1=0x2341 -arduino_zero.pid.1=0x004d -# If the board is a 2341:824d use 2341:824d for build and set other parameters as well -arduino_zero.vid.2=0x2341 -arduino_zero.pid.2=0x824d -arduino_zero.vid.2.build.vid=0x2341 -arduino_zero.vid.2.build.pid=0x824d -arduino_zero.vid.2.build.usb_product="Genuino Zero" -arduino_zero.vid.2.bootloader.file=zero/binaries/sam_ba_genuino_zero_SAMD21G18A.bin -# If the board is a 2341:024d use 2341:824d for build and set other parameters as well -arduino_zero.vid.3=0x2341 -arduino_zero.pid.3=0x024d -arduino_zero.vid.3.build.vid=0x2341 -arduino_zero.vid.3.build.pid=0x824d -arduino_zero.vid.3.build.usb_product="Genuino Zero" -arduino_zero.vid.3.bootloader.file=zero/binaries/sam_ba_genuino_zero_SAMD21G18A.bin -# Programming port -arduino_zero.vid.4=0x03eb -arduino_zero.pid.4=0x2157 -arduino_zero.vid.4.upload.tool=arduino:openocd -arduino_zero.vid.4.upload.use_1200bps_touch=false -arduino_zero.vid.4.upload.wait_for_upload_port=false -arduino_zero.vid.4.upload.native_usb=false -arduino_zero.upload.tool=MattairTech_Arduino:bossac -arduino_zero.upload.use_1200bps_touch=true -arduino_zero.upload.wait_for_upload_port=true -arduino_zero.upload.native_usb=true -arduino_zero.build.mcu=cortex-m0plus -arduino_zero.build.mathlib=arm_cortexM0l_math -arduino_zero.build.f_cpu=48000000L -arduino_zero.build.usb_product="Arduino Zero" -arduino_zero.build.usb_manufacturer="Arduino LLC" -arduino_zero.build.board=SAMD_ZERO -arduino_zero.build.core=arduino -arduino_zero.build.variant=arduino_zero -arduino_zero.build.variant_system_lib= -arduino_zero.build.vid=0x2341 -arduino_zero.build.pid=0x804d -arduino_zero.upload.protocol=sam-ba -arduino_zero.menu.float.default=Print & String use auto-promoted doubles only -arduino_zero.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY -arduino_zero.menu.float.print=Print uses separate singles and doubles -arduino_zero.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES -arduino_zero.menu.float.string=String uses separate singles and doubles -arduino_zero.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES -arduino_zero.menu.float.both=Print & String use separate singles and doubles -arduino_zero.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES -arduino_zero.menu.config.disabled=config.h disabled -arduino_zero.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED -arduino_zero.menu.config.enabled=config.h enabled (mostly code size reductions) -arduino_zero.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED -arduino_zero.menu.clock.crystal_32k=32KHZ_CRYSTAL -arduino_zero.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL -arduino_zero.menu.clock.internal=INTERNAL_OSCILLATOR -arduino_zero.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL -arduino_zero.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR -arduino_zero.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB -arduino_zero.menu.timer.timer_732Hz=732.4Hz (16-bit) -arduino_zero.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz -arduino_zero.menu.timer.timer_366Hz=366.2Hz (16-bit) -arduino_zero.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz -arduino_zero.menu.timer.timer_244Hz=244.1Hz (16-bit) -arduino_zero.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz -arduino_zero.menu.timer.timer_183Hz=183.1Hz (16-bit) -arduino_zero.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz -arduino_zero.menu.timer.timer_146Hz=146.5Hz (16-bit) -arduino_zero.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz -arduino_zero.menu.timer.timer_122Hz=122.1Hz (16-bit) -arduino_zero.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz -arduino_zero.menu.timer.timer_105Hz=104.6Hz (16-bit) -arduino_zero.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz -arduino_zero.menu.timer.timer_81Hz=81.38Hz (16-bit) -arduino_zero.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz -arduino_zero.menu.timer.timer_61Hz=61.04Hz (16-bit) -arduino_zero.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz -arduino_zero.menu.timer.timer_31Hz=30.52Hz (16-bit) -arduino_zero.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz -arduino_zero.menu.timer.timer_187500Hz=187500Hz (8-bit) -arduino_zero.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz -arduino_zero.menu.timer.timer_93750Hz=93750Hz (8-bit) -arduino_zero.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz -arduino_zero.menu.timer.timer_62500Hz=62500Hz (8-bit) -arduino_zero.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz -arduino_zero.menu.timer.timer_37500Hz=37500Hz (8-bit) -arduino_zero.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz -arduino_zero.menu.timer.timer_20833Hz=20833Hz (8-bit) -arduino_zero.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz -arduino_zero.menu.timer.timer_12500Hz=12500Hz (8-bit) -arduino_zero.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz -arduino_zero.menu.timer.timer_7500Hz=7500Hz (8-bit) -arduino_zero.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz -arduino_zero.menu.timer.timer_4166Hz=4166Hz (8-bit) -arduino_zero.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz -arduino_zero.menu.timer.timer_2930Hz=2930Hz (8-bit) -arduino_zero.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -arduino_zero.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) -arduino_zero.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz -arduino_zero.bootloader.tool=arduino:openocd -arduino_zero.build.extra_flags=-D__SAMD21G18A__ {build.usb_flags} -DARM_MATH_CM0PLUS -arduino_zero.build.ldscript=flash_256KB.ld -arduino_zero.build.openocdscript=openocd_scripts/SAMD21G18A.cfg -arduino_zero.menu.bootloader.8kb=8KB_BOOTLOADER -arduino_zero.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ -arduino_zero.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader -arduino_zero.menu.bootloader.8kb.upload.maximum_size=253952 -arduino_zero.menu.bootloader.16kb=16KB_BOOTLOADER -arduino_zero.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ -arduino_zero.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader -arduino_zero.menu.bootloader.16kb.upload.maximum_size=245760 -arduino_zero.menu.bootloader.0kb=NO_BOOTLOADER -arduino_zero.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ -arduino_zero.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -arduino_zero.menu.bootloader.0kb.upload.tool=arduino:openocd -arduino_zero.menu.bootloader.0kb.upload.use_1200bps_touch=false -arduino_zero.menu.bootloader.0kb.upload.wait_for_upload_port=false -arduino_zero.menu.bootloader.0kb.upload.native_usb=false -arduino_zero.menu.bootloader.0kb.upload.maximum_size=262144 -arduino_zero.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI -arduino_zero.menu.serial.one_uart.build.serialcom_uart=ONE_UART -arduino_zero.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE -arduino_zero.menu.serial.one_uart.build.serialcom_spi=ONE_SPI -arduino_zero.menu.serial.one_uart_two_wire_two_spi=ONE_UART_TWO_WIRE_TWO_SPI -arduino_zero.menu.serial.one_uart_two_wire_two_spi.build.serialcom_uart=ONE_UART -arduino_zero.menu.serial.one_uart_two_wire_two_spi.build.serialcom_wire=TWO_WIRE -arduino_zero.menu.serial.one_uart_two_wire_two_spi.build.serialcom_spi=TWO_SPI -arduino_zero.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI -arduino_zero.menu.serial.two_uart.build.serialcom_uart=TWO_UART -arduino_zero.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE -arduino_zero.menu.serial.two_uart.build.serialcom_spi=ONE_SPI -arduino_zero.menu.serial.two_uart_two_wire_two_spi=TWO_UART_TWO_WIRE_TWO_SPI -arduino_zero.menu.serial.two_uart_two_wire_two_spi.build.serialcom_uart=TWO_UART -arduino_zero.menu.serial.two_uart_two_wire_two_spi.build.serialcom_wire=TWO_WIRE -arduino_zero.menu.serial.two_uart_two_wire_two_spi.build.serialcom_spi=TWO_SPI -arduino_zero.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI -arduino_zero.menu.serial.no_uart.build.serialcom_uart=NO_UART -arduino_zero.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE -arduino_zero.menu.serial.no_uart.build.serialcom_spi=ONE_SPI -arduino_zero.menu.serial.no_uart_two_wire_two_spi=NO_UART_TWO_WIRE_TWO_SPI -arduino_zero.menu.serial.no_uart_two_wire_two_spi.build.serialcom_uart=NO_UART -arduino_zero.menu.serial.no_uart_two_wire_two_spi.build.serialcom_wire=TWO_WIRE -arduino_zero.menu.serial.no_uart_two_wire_two_spi.build.serialcom_spi=TWO_SPI -arduino_zero.menu.usb.cdc=CDC_ONLY -arduino_zero.menu.usb.cdc.build.usbcom=CDC_ONLY -arduino_zero.menu.usb.cdc_hid=CDC_HID -arduino_zero.menu.usb.cdc_hid.build.usbcom=CDC_HID -arduino_zero.menu.usb.withcdc=WITH_CDC -arduino_zero.menu.usb.withcdc.build.usbcom=WITH_CDC -arduino_zero.menu.usb.hid=HID_ONLY -arduino_zero.menu.usb.hid.build.usbcom=HID_ONLY -arduino_zero.menu.usb.nocdc=WITHOUT_CDC -arduino_zero.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -arduino_zero.menu.usb.none=USB_DISABLED -arduino_zero.menu.usb.none.build.usbcom=USB_DISABLED - - -# MattairTech Core for Arduino M0 / M0 Pro (Autodetect Port) -mzero.name=Arduino M0 / M0 Pro (Autodetect Port) -mzero.bootloader.file=zero/binaries/sam_ba_arduino_m0_pro_SAMD21G18A.bin -# M0 Pro (Programming port) -mzero.vid.0=0x03eb -mzero.pid.0=0x2111 -mzero.vid.0.upload.tool=arduino:openocd -mzero.vid.0.upload.use_1200bps_touch=false -mzero.vid.0.upload.wait_for_upload_port=false -mzero.vid.0.upload.native_usb=false -# M0 Pro (Native Port) -mzero.vid.1=0x2a03 -mzero.pid.1=0x004d -mzero.vid.2=0x2a03 -mzero.pid.2=0x804d -mzero.vid.3=0x2a03 -mzero.pid.3=0x004f -mzero.vid.4=0x2a03 -mzero.pid.4=0x804f -mzero.build.vid=0x2a03 -mzero.build.pid=0x804f -# M0 -mzero.vid.5=0x2a03 -mzero.pid.5=0x004e -mzero.vid.5.build.vid=0x2a03 -mzero.vid.5.build.pid=0x804e -mzero.vid.5.bootloader.file=zero/binaries/sam_ba_arduino_m0_SAMD21G18A.bin -mzero.vid.6=0x2a03 -mzero.pid.6=0x804e -mzero.vid.6.build.vid=0x2a03 -mzero.vid.6.build.pid=0x804e -mzero.vid.6.bootloader.file=zero/binaries/sam_ba_arduino_m0_SAMD21G18A.bin -mzero.upload.tool=MattairTech_Arduino:bossac -mzero.upload.protocol=sam-ba -mzero.upload.use_1200bps_touch=true -mzero.upload.wait_for_upload_port=true -mzero.upload.native_usb=true -mzero.build.mcu=cortex-m0plus -mzero.build.mathlib=arm_cortexM0l_math -mzero.build.f_cpu=48000000L -mzero.build.usb_product="Arduino M0 / M0 Pro" -mzero.build.board=SAM_ZERO -mzero.build.core=arduino -mzero.build.variant=arduino_mzero -mzero.build.variant_system_lib= -mzero.menu.float.default=Print & String use auto-promoted doubles only -mzero.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY -mzero.menu.float.print=Print uses separate singles and doubles -mzero.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES -mzero.menu.float.string=String uses separate singles and doubles -mzero.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES -mzero.menu.float.both=Print & String use separate singles and doubles -mzero.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES -mzero.menu.config.disabled=config.h disabled -mzero.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED -mzero.menu.config.enabled=config.h enabled (mostly code size reductions) -mzero.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED -mzero.menu.clock.crystal_32k=32KHZ_CRYSTAL -mzero.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL -mzero.menu.clock.internal=INTERNAL_OSCILLATOR -mzero.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL -mzero.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR -mzero.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB -mzero.menu.timer.timer_732Hz=732.4Hz (16-bit) -mzero.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz -mzero.menu.timer.timer_366Hz=366.2Hz (16-bit) -mzero.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz -mzero.menu.timer.timer_244Hz=244.1Hz (16-bit) -mzero.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz -mzero.menu.timer.timer_183Hz=183.1Hz (16-bit) -mzero.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz -mzero.menu.timer.timer_146Hz=146.5Hz (16-bit) -mzero.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz -mzero.menu.timer.timer_122Hz=122.1Hz (16-bit) -mzero.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz -mzero.menu.timer.timer_105Hz=104.6Hz (16-bit) -mzero.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz -mzero.menu.timer.timer_81Hz=81.38Hz (16-bit) -mzero.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz -mzero.menu.timer.timer_61Hz=61.04Hz (16-bit) -mzero.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz -mzero.menu.timer.timer_31Hz=30.52Hz (16-bit) -mzero.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz -mzero.menu.timer.timer_187500Hz=187500Hz (8-bit) -mzero.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz -mzero.menu.timer.timer_93750Hz=93750Hz (8-bit) -mzero.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz -mzero.menu.timer.timer_62500Hz=62500Hz (8-bit) -mzero.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz -mzero.menu.timer.timer_37500Hz=37500Hz (8-bit) -mzero.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz -mzero.menu.timer.timer_20833Hz=20833Hz (8-bit) -mzero.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz -mzero.menu.timer.timer_12500Hz=12500Hz (8-bit) -mzero.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz -mzero.menu.timer.timer_7500Hz=7500Hz (8-bit) -mzero.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz -mzero.menu.timer.timer_4166Hz=4166Hz (8-bit) -mzero.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz -mzero.menu.timer.timer_2930Hz=2930Hz (8-bit) -mzero.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -mzero.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) -mzero.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz -mzero.build.extra_flags=-D__SAMD21G18A__ -mthumb {build.usb_flags} -DARM_MATH_CM0PLUS -mzero.build.ldscript=flash_256KB.ld -mzero.build.openocdscript=openocd_scripts/SAMD21G18A.cfg -mzero.bootloader.tool=arduino:openocd -mzero.menu.bootloader.16kb=16KB_BOOTLOADER -mzero.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ -mzero.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader -mzero.menu.bootloader.16kb.upload.maximum_size=245760 -mzero.menu.bootloader.16kb.upload.tool=arduino:avrdude -mzero.menu.bootloader.16kb.upload.protocol=stk500v2 -mzero.menu.bootloader.16kb.upload.speed=57600 -mzero.menu.bootloader.16kb.build.emu.mcu=atmega2560 -mzero.menu.bootloader.8kb=8KB_BOOTLOADER -mzero.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ -mzero.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader -mzero.menu.bootloader.8kb.upload.maximum_size=253952 -mzero.menu.bootloader.8kb.upload.tool=MattairTech_Arduino:bossac -mzero.menu.bootloader.0kb=NO_BOOTLOADER -mzero.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ -mzero.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -mzero.menu.bootloader.0kb.upload.tool=arduino:openocd -mzero.menu.bootloader.0kb.upload.use_1200bps_touch=false -mzero.menu.bootloader.0kb.upload.wait_for_upload_port=false -mzero.menu.bootloader.0kb.upload.native_usb=false -mzero.menu.bootloader.0kb.upload.maximum_size=262144 -mzero.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI -mzero.menu.serial.one_uart.build.serialcom_uart=ONE_UART -mzero.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE -mzero.menu.serial.one_uart.build.serialcom_spi=ONE_SPI -mzero.menu.serial.one_uart_two_wire_two_spi=ONE_UART_TWO_WIRE_TWO_SPI -mzero.menu.serial.one_uart_two_wire_two_spi.build.serialcom_uart=ONE_UART -mzero.menu.serial.one_uart_two_wire_two_spi.build.serialcom_wire=TWO_WIRE -mzero.menu.serial.one_uart_two_wire_two_spi.build.serialcom_spi=TWO_SPI -mzero.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI -mzero.menu.serial.two_uart.build.serialcom_uart=TWO_UART -mzero.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE -mzero.menu.serial.two_uart.build.serialcom_spi=ONE_SPI -mzero.menu.serial.two_uart_two_wire_two_spi=TWO_UART_TWO_WIRE_TWO_SPI -mzero.menu.serial.two_uart_two_wire_two_spi.build.serialcom_uart=TWO_UART -mzero.menu.serial.two_uart_two_wire_two_spi.build.serialcom_wire=TWO_WIRE -mzero.menu.serial.two_uart_two_wire_two_spi.build.serialcom_spi=TWO_SPI -mzero.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI -mzero.menu.serial.no_uart.build.serialcom_uart=NO_UART -mzero.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE -mzero.menu.serial.no_uart.build.serialcom_spi=ONE_SPI -mzero.menu.serial.no_uart_two_wire_two_spi=NO_UART_TWO_WIRE_TWO_SPI -mzero.menu.serial.no_uart_two_wire_two_spi.build.serialcom_uart=NO_UART -mzero.menu.serial.no_uart_two_wire_two_spi.build.serialcom_wire=TWO_WIRE -mzero.menu.serial.no_uart_two_wire_two_spi.build.serialcom_spi=TWO_SPI -mzero.menu.usb.cdc=CDC_ONLY -mzero.menu.usb.cdc.build.usbcom=CDC_ONLY -mzero.menu.usb.cdc_hid=CDC_HID -mzero.menu.usb.cdc_hid.build.usbcom=CDC_HID -mzero.menu.usb.withcdc=WITH_CDC -mzero.menu.usb.withcdc.build.usbcom=WITH_CDC -mzero.menu.usb.hid=HID_ONLY -mzero.menu.usb.hid.build.usbcom=HID_ONLY -mzero.menu.usb.nocdc=WITHOUT_CDC -mzero.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -mzero.menu.usb.none=USB_DISABLED -mzero.menu.usb.none.build.usbcom=USB_DISABLED diff --git a/bootloaders/zero/binaries/sam_ba_MT_D11_SAMD11D14AM.bin b/bootloaders/zero/binaries/sam_ba_MT_D11_SAMD11D14AM.bin deleted file mode 100755 index 475e9fcb16dac21e0b90ce9615eb59da768f3a4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4068 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 diff --git a/bootloaders/zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E17A.bin b/bootloaders/zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E17A.bin deleted file mode 100755 index 5cccdd80a9234a4d06c481b7ecbafa4c5bc0062c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5204 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 diff --git a/bootloaders/zero/binaries/sam_ba_MT_D21E_rev_B_SAMD21E17A.bin b/bootloaders/zero/binaries/sam_ba_MT_D21E_rev_B_SAMD21E17A.bin deleted file mode 100755 index 0512e9375bd4bec67da7648a8c696f269496af2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5200 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 diff --git a/bootloaders/zero/binaries/sam_ba_MT_D21E_rev_B_SAML21E18B.bin b/bootloaders/zero/binaries/sam_ba_MT_D21E_rev_B_SAML21E18B.bin deleted file mode 100755 index 4ecf17ebeb00a11e8f98858af31a090f49294172..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5136 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 Z{d%0!2(A%?-iBa>mr*Tz&(r$w`8WJ3#3uj% diff --git a/bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAMC21G18A.bin b/bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAMC21G18A.bin deleted file mode 100755 index 312982fe3382ef9b69b0b7209031279744babdcc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3892 zcmaJ^e|!^Fw!e2Kzxyj`3#91?)1)nFQXx%SEG=M|ux*lQDS{Av9m?nT^ zbO1XXg1IjjAzHOZWg%pU8h}s6^Z`RqmCy%BUhV5(6vevg41N8zcV(@hXTGCrj?zJz zHHpY&kS2tzVz&6Abs%CB?g?pVGiMU9cOYUCY+}M?I5jS07JW>A#4OyF8z+wmQKDIV ziOC%>2Q=c62rA7wohxcfu~b`#WNl%tK!|ghfe0Z`A|bvtYS|>_i<=n&)}yi8I5YU= z0blTKf9Nd;&4i`X=IEhTz5 zthp;q*mFQyodZJYBUhi+kDSEoggS(X)z~pdKYWsDw=sH&X+Q0=F(lAU1{*`fNEX{| z0@~0Y5$gJD%fKHC8@4y|8rtG-=9+m7-%Pf-)#Ptklo7%O7QrGO(Q8hcf&tzXG%!iY z7(xYep6zH2fS>x1A!y;i;?pp*56wgd_)^GsOAk9@Mn3S3Mo*q4GXIc@X8^PS0+1QX z3RFd3WHeG{D3k4EG9{CoQU4nz8AA@q+QwWv^<9&uJcApGqr`?GjoiuH96$xcp_}nk z94ymne)Qtol!hG9vt5j7P|q@k(~EQ=TiEuzq{hRec&^6Pbt(!8QG)pIRFp(CY(UPu zSVny&TSPg+?&tpmvdHlUdbJsszdpz8#<8`qPJLr>xb*q&fwu)^=Na?*Z5QGRHP^t- zEU=>i2vI*ZA@&k+G3!MKPJaxa(O$$2`4_E^=K0FUi`YKaKVEpkaKY*+H~A=W6Ur*+ z@cqh93H^~gaifo*Onx;Zg+3i?<8|z2221IVCO>klWpE6a50CnOH--e;!V|2GxhX-c z@5Fd0THH|F=;E<=LhNz`xhbhIR9HU_W*+CmF$ZUo?R>$g-HBYL?BFH@l;lxmB4-Wd z@N2Ib+7!oD{}?vPE#R$nO7doE@jff7DWte@tTjY&R@wP-5-SNPM({e}sxnN4^m_D=ODKqo=p) zQ5)33ZvY2iOUyFxVK2P^LsUr?rBLG0Aw!=bN>T>OLaEh_of?T?$&igBS*sw_fi8VG z9ib|qo~VhUg6n#XB1xeVS4`u=65=&7q0%<6EzU)n-R;)2nk}{+Oj<0f0Q-z3#Gt3B z#E<0r%JKwc#5Gsrc(=!qCWsDJFwyPSE+K;+6!fgdo6isOq^u1Z`6GNDr6fO4w7nk4 zfpVBz^<(+IE7uHbHK81+TQ#13h@+ZsUBFXoF%gZ`BZq@K!LG8e@3jeEHk@d5^ByX{ z)mP9}cbr9bEB6IEnHmpY8+WYXNYKR_`B#`f4}8w%^EOd&A?fgWhYQ7)o2RnBD*MXciqJZR-WUg{v{<&K#Irx_Y`Md_k z{u-}y=SaU~t+3{wDC;3MYP1*cTQ{12NIEKutd7oydAjNj$@5?y>?jwW0Xbf7bf-(B zk&~WcSNuJ4U#1X9?3L%c7f3byir^rR?Mm`cs)k<+aNzvZgywESRIR;YJ9C6Dd+KakXd_cGRut0OqN^R9;t}W;ZgBr zE7?hQZ(wvWr&vazMBxowsiUsP3)w1=z3pXHO7FFbuy2{GTFkv+f7f+mo1cM>XAqm zYjkP`tvrD({ydI_(V0`VC6$BsRaeOyp_T%7>TNbqA7B=s9-!8tCIcb3Tj@6e(*SDi zsb_->XM_=W-vZ45dJ$*>a05^Q{98aVjFSL8z(Os8IW>b1Ra<$CO@6&x>LR2(zJSBB zEF zW<9+qi}isuB{}9+*q#x{49+D%XE*~gC`U+#O8mc2?|BkA5s6CRL4zv2fjq%lSNrt+S?U?3>Z@n&bp<(xW2)r0 z!*}J>@kW;^iYf&q zxpK6>hnXVzon-83=Yz2^&dYF`piWFH$)75yOG(aEPLt`ecH{Chk#HI63{N9FQ0YgK2E54x{qc&1#YL0=cU_T_ z()K1sXU55r=rc^*{u>Gh$@VHh7hmi+kYhciF#OJQLXrd1M7^yWm77 zW!3ImDWb;??{*@Fii?Fb8N*$GH$Opzz2_o$)4sTNv`%obhtl6!@7;YzmFe)m0y#Pv zGWNy7!}Di)64-H6a00QgjT`>ruMPL zG+jY^J!MtMQ(5h;s;=~)CQ}A#2DBgtd}koN_R00nU9A6X zp}mxx#--1se)r?6w|+Q&{G4lVS|7h5xb^kb`<9)24}4d8GUKyvD-IRDnY%{w z_=>tEh4Zwt&g{DRVfXrvUjL`~>f}A2Py70-;{Tb_q3a#{(Bmstj;XDfUw`UnM>B6s zzI3Gf(#x;x-?MvG(_;ahIFawSo;SQ$wZr-Rv4v;uzdU~UM*CpTCwn%3@@!~c%Y947 zuDWW9**s-AQ!>&GY0H5`ApuYK=-Z#}x9_&NQPOBVj5{;g?iOJ(X{`h+Vpl!s3| x_f5}xA0IgN>d>}v%ciXUY2%7VIwwVDNSTT8Y6ci`wQvDVN3GDFsSd#Je*tT$Zhim& diff --git a/bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAMD21G18A.bin deleted file mode 100755 index 09a24d6eab73d8da74dd77aa31d639be634efce0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5200 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 diff --git a/bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAMD51G19A.bin b/bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAMD51G19A.bin deleted file mode 100755 index 9f312e5a9ca7ab9e9a58f419a14ce7685c078540..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5220 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 diff --git a/bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAML21G18B.bin b/bootloaders/zero/binaries/sam_ba_Xeno_Mini_SAML21G18B.bin deleted file mode 100755 index 853202c25f1b6a72b61cdef76bcb43caa22172dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5136 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 diff --git a/bootloaders/zero/binaries/sam_ba_Xeno_SAMC21J18A.bin b/bootloaders/zero/binaries/sam_ba_Xeno_SAMC21J18A.bin deleted file mode 100755 index e2703b97fbdfd10115a08808807ce44c0a48bbb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3892 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 diff --git a/bootloaders/zero/binaries/sam_ba_Xeno_SAMD51J20A.bin b/bootloaders/zero/binaries/sam_ba_Xeno_SAMD51J20A.bin deleted file mode 100755 index 99ac30b776dfe6637075cd2e8baf8e3e4fb9335e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5216 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 diff --git a/bootloaders/zero/binaries/sam_ba_Xeno_SAML21J18B.bin b/bootloaders/zero/binaries/sam_ba_Xeno_SAML21J18B.bin deleted file mode 100755 index 71feed89595e61c8700d432081bee89a774d34ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5132 zcmaJ_4RjPmwyy4;{|U+D2k1;1=;;oSWKbqEAR(YOGnmXwClL`e3;{b3-3}sj5ZMmP z&p<#XAPXe&3_(RiS6G%6qazENC5S%6pJgU4&xGLGS=6kuKI20-F@f~n9)ibr&O0yX zd~>Vn-m1EF|EfCIHzN8@Jwmqu@&W(f-_&35r$c*@5g}XDP{PW{X^iW6#bAyd=@d?IG_n*y4I(NBn4-vFa1)>Le2Z7aGZTLtqfhUeO%bb#h9 zGRiZ>#|23_P2Nnlx7ejIK^<)qEHdV9Z?Q;rxi`<$IXY;QId5BwO}Z&JS{WInWShLj zo6&Cb>*T5yG%4j$hOD22#f!3$qR-BdaCxq`y#<#j8JAy7tZb3948n#BSq_4eXz%SAi z>K!#m*GjET7@}2G-PHtplUn<3)Qec6##f``F`-Vd$~cqmvr1BNThVk-))vj?vFzq* z*3bBwD^c%=0mhGdEdvgogHxg2I|nwiU3$Bm;iIHxIc~iESBf9UWQhx`soWkfit8Os zNjNty55>nY`>};7Mkk6BY&~Z2Wf68?V(!*Vc_U-t>|lMJV}#%0vrFYm?Da{G?LPY^ zdp(w*$Ps2x@7=0qN2EiX0g=dnGSO}lakLOd+PV6o8PvGoLm2kV80wQu165uU`S zLbz<6bDSZTLWP+HVw%C?3kharGWDCW2WDmPr!kc*pct@_QN{M9_)Sy2zNp+Bb_ZHl0h0 zS$UAwH6*?0#oH^EzodI9$pm^D1E{xU2xG6#M<9}k+ zxhQS}f7aDV#gIF^>IzjS_OHZQV%6r_FuTyJaf!9f#_Ja~pKEJqqnW<*Et^(J#ZvSI zmS7g5cjl$@>A{NSZH^4CUZ3PE8edVRPUW&^&rd0JO&C+Pd;DXlX#S!{M{>EohVcuQ zK8C`MS@X@MW0oEV&g}UWD;X~Is}?xznRycUP}@g~LrvduXybgBcu7B)&;cbOPKrAD zup=bqm1*7zi8_ZyAFt-%G>=z?A?7fqxu#jhVZ2$|SBo*J-oaRy9aq|=Z?4Icobn~3 z?jps9M2fe2`{G$8VTRq&=ws{DzVm7(Zx_RCLvjPYAEo=QRF2}=B@LjP#yzF7JG30o z+Ha^f-nj(ze$daZPhuKpOlwe?&1q@Y~@uhmGch(oiqxP-9eZa_WL&Y;C* z_$|viBY`0Uh5;Mu*z(JG@}Gx#Mga5x9FQDL@fSoldv)>TU^3t6O^#cX5hYK1`(lWV zlM(N=&M(V#o)JQS59;03uTvVm1MSFxpB?BK>VchT0q_)lll}o}q>*p(S~`rp*L11U z5VVKw>me^MVlLJ7eUIj2RV9$7FaENs_C~`dl#>}7QIgD$r`WJ_{ogn=ZZa^uHJ={}JHQHJ-<=q@kS$tYO)?x!eZ8U&~ z41BW}izl(=K5&c|i(#I@g#Neeh=X@=@a{kyqI=lx{n4D#oU%L-bB~K%Z9z^dJ|Q@v zWHjtQn!{qOU{M&6O{_anNLEjr=+s`eeY zj(T4kFtysEn^}EHm!1{WzWf_BskN{3nc@3tN$8t=WO#S&@qj7Z zUTcb^;keHd=9slLhwm+ve|K*hULdDXxbKL6OA$#exd+AHQRvHIM*wYyyJAJR`SK>X zDH@c`@Vi$D=b>0t_YP$fWM(t)FDU3zd3PJTKhb-zy9xY=;`esX?cU91Va?v^*vQK< zwhOpSEHXUuLZXjiTsKXreH(7%M{>ma7PW8ZjTznbiTRVe(dGQ^ZHe}n?k6=G%kB0= z9<5>EH_L)KO>t`^jmZ%ky;z4O($KOYkecA&36AdX!t|DlY#zs>cOR7XhQXCkU8P1Qu{Si9^JnbGi z0F=l@o%?@Y>k5hT@EFa6YIZ6%$AX&e3Le?WHv4AsS|($W6u8y#usedlk73{ejjsbr zeZ3EIwFKmiQ9X|_*lz3yDW-$W zfkBK;9?s)*;4LpQP9a4Hg)wSh=O8VQ8s^!e#u9DK?g4^Abe&fpV?;lzdSVqAOLDeW ztq$0t`d|`8P??lX#8?KTr9rJqXgn!uDlx#TVFZkx9zbjptU!zTR37wS9waD|k`i+L z(WDYR$R)%0QIMNRO`+gsiJ?ixST4Lo3ZVAv9L%=gM*i62fm!{-`kA5xWuj7{3YuC` z4j#vXP^AT_cn;WV9qjLlS|}>8^|)CE{d4nTx;!k7M4f_bGy-)`o{Mxxc97N?&)N@p ztuZYc&AE7oYkaN`Dbw;ZC1l2CeBXl|aj{lOW_ig%?;x9`5p;)SWu|p&jeZVZf zFJ^-7Csh4$7wGmB*j(Fx)tld4Gu7#W=>n0c`97%i+PxUoY*UO-Z!}hdSXQ{euVuC! zw@ZI1y-?;9T~t;z=V&Vam`4mLe8f+t#=@^%_^|Z-K%Qt8w|l>7KgVZ@c3Fiuf47^3 zs9)CoZkY$-+z@N!&jzv}Q#-(BE7g;JLcZTQJ$?#iTA{8`oqzIU?mVH{eu~G$ED_7c zgp*}(`?b3Tq<93kNQ*=+YbcK+tXlvL-lSrV@mg2_{M7HUkGN2sp7(FT5KxTci-#O#h>MA z*qM-q6hHKucn9>X;XdU-=(*dXTC?>2DZ^|*d=dn<+a>L@$-tz8|W<9r>Xd?G7t9A zUcirooT!vJli~@>#aHsHf3{rvkoM+1raa(W7@r}o4s?iGZk!vMA+CZp0qrx;mP$KB zsFBb+1-%u(83FA#pq)$Iobkt@3cfl}QI;u$g0Q0CqSD1h)JP#qCK|P`NkYUtn*MW2 z-J%nsN$uM^_Dg9qABFV3~=aopacJj-j-`TF5FAqTDWw1Wz@37srzM z?4Q@Q4LzWwQm*Omx1{jq99;(~;#jILQ{Z8A)^vUD)Q)L|1&XZYIY7&|0zeL65?~5I z%fsDJ3${Qz0>}nvx%V`TFNg8HfE9p!012=TuobWy`1L?{0(Jo!0jX3a?5XQ`u#gln z_^LE2lk)I*rsxnb#o)&!?G*Z9ujq#9_^;ZEG~F~^G@Y!La*p6R)D|-1elFai)q=yY zwk?X-MlTWjsN&sunCGV+TPs0rCL6tYEK|Zf1Mn6_>^l{h2jvaM%g0K^{n56f{Q1dpj@Qf5)l`siRzmPuKkGk-ZPRQMB;H+E+54DcJUT-%!tUpT2$WUH_Nm zPl~U|oT-w;bJ&89&VSqa+pk~!$zNZ+&vL|h^2g9$gD2Mh$Fdsx9E+zgE$>Fxy)__MrY)>d(6;JIfuyt(4y z;vdS=?{eRM-&iU6fcod}KKuOog{;$suP!(s?~3d>vgw1@t{zN^-*%?#`<2~c+d=e> z>k6%#GoCAwekGi&Yib-kbm{dw&r+Xkyt4S(YxwT8YfQU)syAcqua`Wq>YM0?FCX4p zzjeir_kKC);)wVDKILro3mKbqkE|}P%ATj6-Sx`AiGADt^vpv&8~VnaoB8P{6aMFp zJ%;0>9(-iYnvq3Q9w_O2?0oW1lfQm{-`DlqPaZuoyZm9lL7phKk=>@v1&4Che^}9V z_tmk3Kkew)|JKpwx1I>j3r$-#YVG%ynEmy{_d?zyFJ_t7ycAMdg3e!SRpN(vo4)Rf-Z9tel8$*~;Uq_gbYSuxJT41tKzX|6w Vf@=h!cOY2dMN|#Hv$Q_^{Tl=$!Z-i` diff --git a/bootloaders/zero/binaries/sam_ba_arduino_m0_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_arduino_m0_SAMD21G18A.bin deleted file mode 100755 index 7e5a6d6f7b932d05b7cc71f8adedd3c145c4ab6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5196 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 E0Ra7d(f|Me diff --git a/bootloaders/zero/binaries/sam_ba_arduino_mkr1000_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_arduino_mkr1000_SAMD21G18A.bin deleted file mode 100755 index e202db26291f0a83772f429e666fb95ab9a42734..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6288 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 diff --git a/bootloaders/zero/binaries/sam_ba_arduino_mkrfox1200_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_arduino_mkrfox1200_SAMD21G18A.bin deleted file mode 100755 index bf54b8ae9b3d2e8d1baa40eb7556784e574de8ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6292 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 diff --git a/bootloaders/zero/binaries/sam_ba_arduino_mkrzero_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_arduino_mkrzero_SAMD21G18A.bin deleted file mode 100755 index eb92c57dc61e38759236e75719634f26c84b8026..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6296 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 diff --git a/bootloaders/zero/binaries/sam_ba_arduino_zero_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_arduino_zero_SAMD21G18A.bin deleted file mode 100755 index b8d663f03a603e3e65782c6dfee6b767ffcfadac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6288 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 diff --git a/bootloaders/zero/binaries/sam_ba_genuino_mkr1000_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_genuino_mkr1000_SAMD21G18A.bin deleted file mode 100755 index 75bcc442f834b460a70df689d434b83dc08ddaf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6288 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 diff --git a/bootloaders/zero/binaries/sam_ba_genuino_zero_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_genuino_zero_SAMD21G18A.bin deleted file mode 100755 index e5fabf9d6af91b830acdf9e7cec83511c3d18fa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6288 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 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_B_SAMC21E18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_B_SAMC21E18A.bin deleted file mode 100755 index 4a452f0fc549b81e1dea8bb96bbf421ea3f51c72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6820 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 Vp%)091|^0c&#K{@r?=tn{{oPKHoyP? diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_B_SAML21E18B.bin b/bootloaders/zero/binaries/sam_ba_sdcard_MT_D21E_rev_B_SAML21E18B.bin deleted file mode 100755 index ee5a7a9c283d18b25bff4d82fd62e6fe81de47c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8060 zcmaJmX?PS>w)a-=ovpI~y;PFwt^l1hOBTQgsFi9ANmmjvf`$;V5*S}~WTb=0RH8sb zbPS>+Br=8s6^IK6I2dUimy7|OQAX$46-1MuV`abz%43X!+98ClcdCi=`Qv>rUrycS zoO|!NXS?^F9^ZnfXAv2;x7!l9PB%rK%Hv>z>SxDApr3DDFlI`mz0;EWY2VyguMTgkI60je}HCSr_zMcYJ z@O6GDtk7K&?2uUMn{ooWMFJ`Sj7iI8bM38@350br;=}Er-g&mp62%T z$@Coo#+kG#y(;bx46uV z9W18J+dM_vZ0+;#87+?sr!nA z(#TBT-55WePM)^u$twSJl0i(8Cf8E%0izEmkwMpTAw_TYR`Vu#Hu+%2b46*~yI8Rn zk}iC#du)Hzos$>Dv zp!S??>@bXhl%p~E{w&wgki9}j7Kmvi@}x*s&g!$Tsb1R}*Q%*rQ?+)ok6^0T9H3XA zZ)+He@P4}#(*=Q&>BTseNZB~1FD^qs zk7Sah$kCqNpifl>KR~JKRLN~_q+BQ)Nfyv&b3KtmX&3meQ>-xarKxiMWajifnm!@*5zM8eY&NODbF5X)_wPuYnm&sbR zEU7$qTKbxuQ-6($m#w^a5|iz1ow|JWuTjuhw9HhVzWNwo7A>n;=VGe=s~dKEVrc+$ zsIH^hp~~+Ds1w{-VNiE9#si91{ldcqoz+54g{rM;LF-h@`~3{;=Kk6s*c^6sG<1jr z^mhdIG-6jWdo>)SGt1BFIvR2U9&ym1JwtNU0?FCgh~y{>y67EkUbx ziLFE@O7)(roy^g7t-za#eM_Nts6L?9k1H0=Q-?;p03`a7 zN(w{USgn-kOXS+vM9C~Cls&~p!ibivE$roiudB2L2|PrMk&muv^hV#)hNA zuo9)l&NR*SQVa3Zz_qjHegnrE2W#~{d(gfK{PGOWRdT-{R&}f>8l>_|yr3u}p`a1D zZQ+EnL~bfc2R)nq4z!4V7CpHf7d(Bt#e>7mAU{LJwBU?Q{{-A#lwvd4dhO?iM^s;g zc^1JuT7W>vOJ;;0Ce9}%aX9{0_&hFmoVTvFF$EbSc1`wX1nxDSv*s3<8B%OTNzPr& z;}A7^yKUl5h9J#eHCC&(p~l7B5T>8X=*4?kJb-d6Qd&7lKF)Y;H9V1nrM1FSAbBN@wgFs$tkURQ=)8rx$`2T#!2a+9^x78l5! zSjPfuF#rax7x!9GJ*IasRtDt|l9#P2!m>A`y{NYvya#CXU^RNKgT+!jUF8L1VR0B2 zT#d=}XWbHDaRgZ0m;_@cY~h9w=zXMpJec)7jxWbAyGh20Msmk-2cqGu3b(QPz6&+B zl`X76!Udh(KMgZ;P|i0Jrr`9WZtmd;MBNa=ZY;UWknApVLj>M6hTOMG>PfQjDsnTD z68Ts`ZcTWMVvrK~%ecDY-Qz(jh?Phrs;*3yD^AAchB!BGOyvN-j7I)-6}KaIVt6vQ zmo*Grr4o>jh8TPqC3bA;0_q>~WQ`HOyIS%=~3r$xw6f=8adf(v`QsrzXm=5v6B zNc3r85BLwO`ic=`H^r%SDUqL|#vX(~{`HmSO2Xo8ud{Ey9qf_d+Ur#ff!)BE!jQLH zOC~_XH4OfSLQWW`V7I4#3r#XpoH`e96p^A7>}ybQCn}N86?c4Zw-Pz6xXo($iE;tH zA1llZZTL~DWCjsdwXhpTom9+O3Y33RGz5-S5iXrLAsMz%`1^AWlh!?g%<|VdEhh@MKdCjc`Ck1p)Nstoq}eLN(_|^ zJ8V?68F&T`qb#3%##us@A{CF_q@?bnTEVXzT!!arXGWygMC`dJT^3*VT##m!1)ZmK z-vGsO1!ts(*T7mzWGk%mZ)sroo7l`{O3^g1$9^K~n`y4{TvC-Y3${V4)Hf-S`Y4)t zSvon~1hdQoE_z}sI+fgIc#d|)s8k?U>(QC`tTc`cD3JsOft*u7V&6u2mIr^^*b{Uv zp|%6RQxw$?8CJ_&7$(qUq(LbFsVEj}LEoQ(kHsU5c7`>`G997cgY5;MSb;`E8Ki?V zkPbL~?FRH|DRDdSG7?2@@Y$(Tsv@_ zWtHYHQM~Y{VYPN5`nHV<;5l8O9VNEUKf*q*fL|Pmy5S5~*Jk!2L=dW-Zp&~8h}t6% zH$KK{`r5@6{w3aCt7@n1KxgC}f?Y%q!?coj6S2ubq-RLfE~DTuOHbn;Iry&1|v~@RJk_ zGsH=&MHj4=>ec%k-JRCzjJBe)-ALAuRQe;+UP+!TK|z znAVdS3_+n;DExa_bA%%Ep#KPXM7s2qOKnvm3#~+ku3HK9uuL~150>=Q7Wtn|T}|^~ zw;5i#i6S$+tD77|hF2Z`xT0}i2qX7J*he0j;L3s-dSQmYOD{F8Zn}lY^qQoXHm}}% z3yjY6p4*h^r8hgE_nde@yc^`E?$s&2ZpE$t;tvJ*MpzRhc`$gc(LtcL1C4MSm%27N z^m~g}Z>lSHXzku}4`ppi^=1*Y7k6k)?e<;=a-flaN3A|vX)_tL9_FpS7M2=lWA_he zXioq%E!|t3R4}*&FF3m;1^7tyYF_T!lIpE5PRQ@uk^-_s^4m5~?L3>Fi`Wpgu2u-7 z^IExs?JQcs5(QrjCmb7z>C`-;DADf_`bj}(By$}WM$!ox(Zrz#1NvRG zNP*n&oU!5A3#!>Wiq2cXo~9ahXL?HdbqAHmQ&IEb^uR%QA8eIhgi-42XBl~*=2AD6 zQ`C=W%DIbOQS{z=-N7|BC9(;miNdY2?r2U+5^ZP9uT;DRf|vvb}K&&s(iyn}tCZxwlR>E-Sm^5}3*#XJH3epU;f_j)&) zRTB32VWx1N!697`aDk^5xwR7RXlr?moj;H)<2?nY$3#5e&c;EESQy3bnFD|YAN2HH z;FZXwYwlXz;f!GGu=xlrYAEEP!e2L8=yZkzTT=0bb^qAXHK8%r7B`vdt=rO5tLp1& zEv6p~7-eHN3g0svN5(l{8CFj!4V4O-x*lU9p;;W>Nka6PLZdm>q>yoU1{%5VS{{ja7Q)TQe+_pwv%1swvkRE6+Dmr6 zK2fIX`MNk+i97&%F%KLNcCv=P1Ae})4LCXK2(jPy6JU?40|vRvf64kntrD>V*97bo zQ%1Q<{IwY`NN3#EeRXPtRXM#b>(Nkdd2U6Hfb%oM7rT*%lxF#6l}&+r?-T}yY2GZm z1W)YlIGs z6xqHwg^QhhE_=WMp7KK&xF30N42_%~8wb0Ad(YVUVdz8X65KhBh#7}m&)lu|8>syT zq~3ikGLqkgX9N6EaKur@P&BewK_jn@8G9_DZM3fJtd8cR5jZGGrx1;tfzkr9*+(EM z5Ymyo$Bg7;G9I*|j5DadSVI%JcLXefjYdrW!;0r8i`58a>m@hoFGk?kwo&F-pyxIA zr$M23Yb7rDpJ9X|p|^ZmAys^{bULZrpd&3*;rh719pdXHZ&YXkZDK)C5(`>PM4Y!E znB4dpXA9omXoa@XYYpyfJXUH9_B9$?QV7Cp4l=H$hJ&}w7hk+Bg(wu0NWy!l@axe#l*9`5Dx58_&1Mr{7Xs~Lim+p+U z?iy+b9V6+sp~|71v;%jr{_vzP!t`0dy233JJ^Ny96lR80FP}4-*Wwno!`;n0x?pH~ zZ2asY^hMs#qp^DW&~Mc;oIO;~a&LnRz78|?7^S$D6qj3QV{yN^rL}u=X>trh#4z4p zU>ZxcF^mRsX9lR9?Z%!dVYnZM3FwK+W>~$iJ5ZV|YhC!@x>7WfKE9wuJ2At2m>VBD z7o+l*_5qhx<$_$$LXn<^Xyh}{ax`*D`3l|&_!M@1BG;B8Ixgsj+x%bURi(&f4q985 zxGYSK&l1RJNuqKYEA(jGXyAmLB05@(1uO7*YgZ%6!QoCllF#bTCS4zYNVc_XaqaR} z_)c{v2dphgPR!VXc`cCB2zLQa&22mfCES1pI{!1*IV-%~!j!AJ;R)H|T;A}QOtfsF zJG=`y^>v9`k|5JW1oK-E=rIU5D5Zy>)a0N6QC58;Gpvbmb|*9L_yRIyMz*2DG1kK+R9jZ)Hq-X>3s2U(%MLifN2*{PlK1(bzC51 zEYm|KD*<{RxQ6I|h^lwHKx~fDP<)vV=n|p77U-svb4bW`gwYH`SbeV+ zLhSKIv+OgiKMohbsL=`jj3EtaB$FW$!YdNuIrhOToewNN2(r>b?j$#4CdtxAj+sQ@ zKRYL^g)9RSw6dCQKrIjx#Y&_-w8I*=V6VN4jSH*RXv!w~bEjs*-RXurTL78xg71g% zp#u+PyUWIA ztuK|=#LfdRoCE3`zz8@scQ+CWmm!+wKjE5Oj~=rJ{=58>3XhOWI{b{YeevJmo@?bl z=4O)_@U`V zB^vP#&yCVsFftC}3OVq{5}cpIci7+Ju;37I9_HVyfb2(KK9A%AK3|{&G-4Pl5Zr>@ zn!_LUS%eeTWd2oOYT$6`%RZA3N8$yk{7aBEfjba?m^ZTQM{<2p zH4l4KzSFZpS|DsF?T2@~68RvyKv)lT4b)FSJy6~+K#YXeThO`>FbPmU4)tvE`iNJe zHJrb+rozTo`(Q>smrNB_l9PCcsA*GQcN(~1s{Ai0&lfykO=>>DBUG2-nEsxOYTBzy z%Y3}Rsx^?fO^IxTwfhCOlyH^Htgi|rX93?C zx>m@Q!ruCYB6+zd3Hlbp%|Vr~mDk8N!38v5Uz^RbF`C(OwI^4aDx?Z%+C{6TO|$0- zRv&hYd2r4@JBsJ($sdQaxI&=4&gH_WflhMeGs)yUQ*NFq2YqSCv$*=KLUHm^@SeT} zg7#3qUn4Em|rME;(+=i#39w+dZ9c9a2((rwGMuG0b)Ts;4A<~pilL^ zSE2uX=)VN;7l7{pJ_Ps_;7fobfFFYLYk*;ZivY=FEv%{SziYl#z}W0H$TJ|HXcL?~ zmh~k>K;4CILMz&da_T>Oi&frKUR0jq%vB8hT7-J5O+*P3yq@1mM{q})6NXo?%W}Mh zopBmxWf}If+P(UB#-uH;-LRq7zkcbjRtr>FnHQBWow+DK?^devR~spoD$CCUHd1gb z-NJ+?-=#wYCJ+W)OoB6VGD7J9MF1-&%15Bw2q$I5x{XwRK9!%FcLU1HpFelr{DK=% zl{o<|2dG9gd~ZhivvSdjqV;PY@ZYy?e%12omFlLQ7M5C_`!MsulE3i70pr%}UB3PI zzWVryqtbs5efND{iiNm8ztR<|gxvl5&+2Y$vo=5YT6I^?>AmkMm;ZjQF3UTI(&Ds# zuK8fY^NSu?TK@tUazA3){jaY-`SHk~pEz^Jy!F$PC+F%v-}uu#yYD<+yyA_fmuycL zKKfN8I{eJ%?|krn$=6lC6dpDHZqEoLKBxTYyDz^Q|HSd`{68#zPJFUu*P*R{ zef8r0cxmQ|itpDA1ugs0$=q|4cF9zxIPhQmo6YTQSGxvZyXigh^p#&h_7hK6>Hc?(L7<_v39}&p4Ct=YPz3FKb`gR_#3-7O%-#s#|pSrLi~m zJo?9{?;hS9N&jHs=clLrd)_YnvB`JcvvK33;yHJg4gC64;+5Ioe7NVE?T@{A_|T%N zUzO;^=|Zn{$hfVr%f0ENnzOfD%(!}GM}OzrhdbVWz_+yehWg1(-`2`~LXy`<={voO{o? z=XKAy7gr*B0fA5mpcdf&`_1{U`FYUBSqNF#D2#~{gG=&CkIzO1u=B@FA&B%9ACI!ON6(IRvd)UK3j}(p>FMf7; z%*;6g#FhCTrjrQpt5*GrO}KLbTcfW-$WN{~V!U`5uZ_$^h**J{ImQcz*>w)qD6{L1 z_#G?>-%Tb5OGqS#-Hr%a-xG_>?5Pd`ui0GGy+F{>*?|T80s+H+Cbyv35~y#;2xC`v zBwKvns5@*41qDmU#3p5P7`f)$yRkV4d>X^1P&N-c{vIg%Q57=5KZX34jG!$m@&j)) zy5ks;`9>;{0iXvU05Zc_!OHk*RwrkMGr2Z4Q?@7>HIK1L2{E#*l|9%0?R;H%20xfU z1MgnaDQ)afFLDtFhZ3m->`ZI6GnKgfje`9cxpvmlXXIGZkp@H95p^t=HF=b%B|j## zbE+x{QUcvPqpAb(s0n%PQbtWCS3ogQ-}0{j7cozvM;GAoC+1jvSXu+;G|n0mEnfZ| z%xytAcC)?5aUwCG*&*yR1NPAYMB)KzwDbURGHW%1({IH`^(S$y^Q5iG?k~?5v3q17 zKXSY2gsr69;-|z-D9g3c|44v}^u+Aq20uYr0-Ci(x=Z4ic`UyNZ((siD$15u7f{q$ z{UiQ>eGyL-VR=h~ULhE=$S!Av*Vq>E1}0C@73t;Go|F1@e!|`c^ZFuEHrB55v-TVK z)gJ6VsVD6Z`#X48S8KL~>}ipbZY$WIA7C|eRNsSpY^Vh@>-;u9Dk9_nJHHAmf&BI= z%{CA+a1O!1b+A}YXXXbGvxdbIF267=&tLUQaPt})(;`?b+YC~l^2lLFRRIqROBV4A=;1BWH6;sTzD}`N3ohbpVBB(wW`bS z_ELDDBVo+rk?AFJpg`x|UXxSEop&kaAOMav+5}fgj&jK%)a_ z805=%pQJ_uUT$iLjsnH36bYR6RObP&CV)i%8sD0oRmRgf!sQS~Q4a?k{F!D`O^5Nq zXI01;!~+)wab-`8zMBy=|7Bpd1H7oR8`%)6`H2Z+m*>*C)#NWJQ@5srj+Q!09bpZ$ zH#%0#0b3-v_Lj@OtF5Vw2Vy!ZgMtWqeM2P;EWGct5svb4*Lkt=`rrw5=xVA zHP{5BVNX+&cc#$TbMo7XWw6U+;G%n&Vu4yR4_D}l2jz0H-hd9Ld-6Ccq9(Id1oF)R z8GWDPSsuJ>X?N5$n|=uRb*h^8`B|O+RDwh!5s9us1R4PsBSag}^GWcnbX0;iNF=ge zjZheDExLXo8jR;tPR>X<#XQPkM4yF-Il#+LDdYuTEhtb%)M_#~mQuZ>jHe-x!MQ}r z`=e~F-Rm6dL~zqhrF4ph^Y;{<`b$D7idQvKIiLj&hy|8`%+$Nuv??; zhl`9LH2Ykg?-UTdSs*4o%#ywB;=<~q3GUMm0{ts-ck&e-D<^WE*tcYDAGB|a%03+H0O`;R<5k_XDV0z>* zUDaI~uR{c*`JtMesFDow7RwE=x0$d9Mug2Vg4xJ25WNbiiQw4NytvSzopBxR#2yXWmz)#@sQUVTHm z&u-w5d;LBKuLt@iDa;tCd_O^>aY*`$LOw@Rr7->+c*H3AYq!>`Lsmvj9=~iQ^aBcW zAM#<@K(AE3Th_H~BAhlqz$~Mw{6Nz(Cy^h})<2?>-cu6to`G|eQW(?c#4hZrWL0;(i<6^gX{T!ruopL6SS8 zC+>3+sBQawxq&pfYq`^~rMhW(W3^M~2%NazvphH8A(#N}(3#sEJx=6A1NA9e*dAI# zMQwX{Tey{_``g%U{UqayfTrc!tFy|Fti)4}uFL^GAVb>SyD~S>Qk_xOyD|r4iImsu zzJ`f*1DCWT`mP2cGK$wJ9c*XSLY62$mdMyQFsxI{fU2f`KJz`eVefkr8Q-8?G2ijGt1^-cWVY2KH27e0;Po*r(sACLc>#_Kb?`WRbi| zc@|bVD3fa*wSCdq7+qA=hZx$mkzH7IaEX5BV!IYckrzpu6#d?!)-1;1w>)2mOQ^zT z8YG=IJhw_Ihg=%TE0x=;%ggPeiAnQ&>b+=v*3fi-c!7qJbTI8px=`p-ITCA$A~12e6;lKGAlF6Pk}9I^OcR?tn9j? zG51O@l^bYW+1;S&>p}x&{unVSra~m$mPn)0T+b)88;YcJK~tAwOfo)>!y71w9#>Jh z{1&!OY7%wy5##lTmFDfu8PpobW)}62qHrf_Lu0F?uI3|pyZo$JZ^6^c{GY=K&9Y|y zbPJ*IEo$=UCF~vD&o^rAM=wDnmHCKW`IG(G#;wg!=52j%MknfYjLUxtcFm`7`?eM> zXF{ER*5)sV^Gtv>B;>J85lm+&TbohG8hcm66k(Hnuk$H8+BBViE#al0zMxaXwpPd` zqWgujVrqhWEm4cXa4#-WARj)|@l7s?3vtd@jx}6l^mg z$2i}(-^J+)M)5S~3XkGl9P-rjr7b;fGhw#m7%YLZMx%QRPg4%QkRl*9-ae#7Ni9!% zYG^B)Bcp*0LwQ<-70KhA;2RfU}%ut%DcAV$|g4L#GmuyVD4vvyf+| zBmYIHZ6~a{+emLSBFNpU9s_t2$^@$d^KhTc*6uIJbv}k&ng&hXrZ`ENsBB8BMlpB* z!I5DHPja?MWG0Of?Xe*=AJ&w_Eff`6yU#3=6e=u|bdbLzL8oYWJP=ZlSci1G*4fgg zY;kn4X;PL8`^|+!Ur9kB#HVXY?Ga?gQ+`a~T_sFfL}a*#gWAWUbw^9+=be`hmDqgBXVY zlw0P0aGxXcN$sbzd_oE3Z1%g_XMPNKiH-k=8&BoKzk~m<_We+iU=|)`|Iz#2@NKRZ zA^Dx-Oc9b=j=wWYi%15kn>!eCLQdN!fR5AyK~lWIH%WdKR;CGUEY<%?5SJD49gbHy zEI0*RiunVxpt9&KW^RV z)5%*n8Yq*IloEtqJLiI4S~RKL1ii<@jF2NZ_yOfEA0g8Mb{P}__Hhe;4(7HJE)t?x zo_bvQgHJCr!b3r)po6iW5;J|d@}D>xocTKSL6D6m?Z*9UhbuLbjS`ta`Ii=J^zv1Cn*FNdzBk~3*{-oJ)u6xl_A$jO%awrn}l{Z zv?H~BLLsHi?1$c+Fp~l8eb6qXF0a^~TEsPn7R|Er^O&a0AYy z!SNhBj5A)T_m#*6LaufTOWYNlQljvh&`#~E_E@R z7fdCeQE4ib+&=vOw3_{&8ZGNeB{pI(>dpvehU!RIlga=K%8jIhC;ng1-kwNESx8hk zT&Em^8U^Jcw&)jxO5nUN1C#<(0K5Va2QbCoiV?uW4yYN2-}C^V;A|`W#-1!KMrrG{ znENy2$QL9HvmNT-{~bTABBq_yOKS3;DoHWJS(lA6bw}b__FZjziPcH8s3t#Dam66q zvXO2p%&5u3DpWMIwL8r+-%oOW)KhOJg8u068`%9I=VTmt^i&o#hI*Z)VfSv3OHa%x z;tj~>khT2x8#RM7P>xmvl}vg#TP%XuZj|um7OF539S=Hb#gpt&T=Cb~243}8RNKz#bFwfm5p+>lO{MW%8a;bjH8u`)T79(6>ZVu$yYXvLO*np~lli#>3= z8YNUP0V>C(!~H$%L^%MN#qYg0NFyK*hbo~>yV>Tcs9jCgsc3Vw;QfGB)z_$GC%T$w z^MrF-k#Cgj3gI@hhze~o2Fz*dB*`!dlJGeG@(%5r z$azT_jVC31Z88C08Ba&!zL#qiT%h4VuI;Oodt$@}?A1#;?=+}j)Z{0rNs9h?!c_t~ z%TsZC6l!*>3VA1J(gyjdlrj=EYGG2*qhH)GhBA(5R=!&_9jxCh=N&jgl;N1-Cq zNjBJR2Sj92(e~Y*B0Amh&P+&X%$P`;g5fT}9k)}_vM*zJ)Bc2h*iZ1763Texyua!l zO-M(mutEZTxvej?vc-q6$79^a>UvkPM6Ve;@nGU4`n4ZIP}L_|S$xRva0F^hTUp`| zaxOBt1CLy3Z-MqlSK7y*t!0}|GnUNe6A3G2eI4$2sQwY%6EMC+1c_~a8?k`|AF@MI zg9-;E68!6cn)x~#c*tP`pVR!#8b?eUOG+OtdS|Xy7g)PVYPGEm-ix(5VF=#*5WF?? zR1dyxdi^O_@!#z^c?jJLa4WzrfP(trhN@O|9cg(hwPtGa2boAJVZ(exn%zd5n*G+lNvFF)49=!i#&AW@-#pF~zy^4DN?4y_d z`SHhJ7VS;z7S@NJd}77^I}hLT)2!U-W#i`LM>3yQ-}vFnuP=V;d~@>O7CbFJ+PZPq zs=vQ*W?Q;E_N`ez-gP``-G<&SIYH}Y7x=3qzvU0CX>YsGb>ziq2dP6VPuz0u1!6Q*qF*p8c4S9W=qf4J!AwP*4#oL|@1`P!b2*X|9^t-q#aU_vtJywvO|e3~l|K51>FUj&-v4#y-(G#Q|Ixvx zuex*Mig~l{xutDfY`UB|kgr*QDNm1(c^aBGdq&mV>&nKlp;=ej!%fr-I8_=V{QeDW C7sy-y diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Xeno_Mini_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_Xeno_Mini_SAMD21G18A.bin deleted file mode 100755 index e5478d524c5dc5804ee575dd2bb043559b589d23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8124 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 Z6T#{Qp%)090wsnY(5m5^ueagve*sr~I5_|S diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Xeno_Mini_SAMD51G19A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_Xeno_Mini_SAMD51G19A.bin deleted file mode 100755 index 1d93f815e6ba787f4c995438790c4461dc74c724..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8004 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 O;Sm;q-xBQ`{{0_8Ya|l@ diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Xeno_SAMC21J18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_Xeno_SAMC21J18A.bin deleted file mode 100755 index 59e5e3e4b9f1b20b13cf2e9c2968bc9082522b09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6828 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

)YQ8Myz)%%N$x0Iuk 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 E7uS(0xc~qF diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_arduino_mkrzero_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_arduino_mkrzero_SAMD21G18A.bin deleted file mode 100755 index 3af55636939d068dc2b6591af12da6297df7c73f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8112 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 F`+w%BDW(7b diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_arduino_zero_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_arduino_zero_SAMD21G18A.bin deleted file mode 100755 index eeef76fcb3d9b9722c97ab2167313ad3c6a13fd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8108 zcmaJmdwdi{(%rMqYy#ONJZ5(%VRk3LCd(ra9uW{HGZ3;n2_g>}tT>^Mc4!ocoXFSvmA?$oLA>PkFzTcN0 zwcXQI-Bn#(RbAEeZA5gb1);kE3IYDVznMS72cbVR6(MKTTEfUEU{fsu3J{997-{Hz z%rIeRi;NI$td}zaA$!ygc#~o)wg(LgTd_$pzO68dl!jUMme!)5Xdi`n4-d?BM!i9= z;E+*vf=Y)-IaS_Fwl%xM5jrCjA(RS-jPu%>9bvcJoo(+RLr$6HTAQ8WJCwtqqD-V&GKYi-c`n!1OoSuPAX$p0J-y7?Ky#P%(YLd)U!*(}i z_v(3eZj=(C_iSlcox;ouv)&=X&Q)_(EtS$rTj_CZ#A4-_ic6~}vVMMHMRGAI0#q!K z1{eF;$jIXajEW1TNMgjaP(;jqtC&?5Ep6QeD{-EtaJSq;*M?h8Vnpk@{`5(ZZGzFi z2X!OHw2EJ47O=QQOq2;<8lM;r&uT4N0-JG08G-g*sP+{*_zM-Ndvve27o}xZ=x36=?1(I+rh9kcxyiO{q?&vY zjQLbk3h#Q{C2#aOST~%F*_#YJ+~I|l?yX7QZM=Jvdn@j5kvHPQ-8cFS9V0Vht%yWc z!tRV@pXbvjO6eGykTP!++8WDN`Yi<(^5r2E3Z$x}K!)5^ zWh-_i?lP5CEnG1yM6hL5hnU6an{t*W_;2Q8CO=#}TA%#Q63nErsY;>%)aG4Dhd83G ze8r3A7nAHDr!9!PEBi2WZ2N#6#X&(aJJK;>XtP0Np z9~1PPvg&^R6$E2iy}35REanWXXcb#H0O))M#onR&H01Go-R@#d}Wox1(Ua3 zPRgv~oqT)v3)xP;#9R0;!l^>esQr&bd3w}De*c>NkG#bD`Gz$OkJRx5-?#>Ke|p=j z)pM8Hke4{q+ZFFZAdeAihnViP6CmF9g<&t?JE#~H+Jpwq(QXqs`-KW?$Q^O72VXvq zbM&0=x(u6uT_I!d#7nx~9gWzL-=z#H87z#Xm`Gs#-+&e|&!eXo;r!?Ba|W=og^Q`S z*`p$3*8c-=`%tPY!PV-%+|_OPFsw5J)-eNwqdb+NJVsneP8M*|FYy&z>bXKLbFuju zGWHGQGs4U5m&u%b2TRGjP_lO?`y@|=Tbo_-4wj%Cyb(laX!R!>AqFhD_ae-Jcs4l-w$uG=UnKKIoK%Wm z^;4`Db&u=Ajfg?ncBP)Pwp}fEEve&dD$d{A{9_k80cC%!Vj6BudU}gUAbN5X`?2aT zL7KnB4-xz6UgV#t8h6i>TgcCcP z*w+Q!KUk0bRre>gHp7_icNpzw`c?S-L}$mCl_%)pF@$2A!fu##T6bjX(EbtPf$2P+ zb_Mc^A61YPt%>Tfqx${DdMpyhG|TC+N8|J0tG54lZQPLG;QL&Bj=*}|HE=6d&NgmY z33{SS!akuSh3i#2t5d+sf}tSX#Cq&fyjTbpGa|${h-!MQT(5#_8c&O$DJ9nTz*Tj8NyK~B@-iw@%nO>jbb|6bpLz1{?$crEUS zyV~H*?n8(m3>)2?;gJx%MAgA;A5@LTS*QG_1H2v z$qZGL85t2I@7B&q8-1q|@G&QQmfVcYj6riB&?Kpv+$1Bb$4v5!O!CWQ56~lw5|D=J zVf}n{UqN&(f>;Z_sK+MhCIkw0^#C^h7y_yW+%r$1k0i(fp?FDb!}=T;8O`V zKUhd@ZsgJw0(fRoa{)h8$FM@8x=i)~w=~`w@-*)y%QET$Z=5j?ZO1EZJaL-GTlH)F3}`Arh<`j>blEY<=~ z(B$FBJQaI=B_ra_gME8En8n%=}r(WEc3UZ|JrdQiGrtvjJgYw!orh+b! z_O2^XG09~WVlG6ltdPR#qFHO?_7*PYi2O@kgHCk!pQ)o;*W=$J^rMbYcl1HQOpTE0 zPgrO)9;v4^#1Kaw30rqEG7Wme6MDPGPc7r-6<#61o<`bsj|ddETMp~7XX1{d>EXjr zOKj3!hFM0Xw17HPe!ZE_E^J2(?cK>OE9EUT?asJ7ozmRzPB>BOa8ERtSd-dEp z6qu=gY?aRIv8i#}4r>EJnW)6PdhTt7_PWA2|7O?t?01!M+4m~jxwqPuQm5zNXwIgN zcV*9>B;jYr)!|8RHluOHN}w86QgUq`^{RyP0~N?`R&ir}-5cDLjuZ{=$xqlO<0)<~ z5n{x&IQEb204(@mpzW%t$FAS@S6Gf_M0RyKjxn-{Mgdy+YMqlwXDP5H17A@2_l->h zC+6Ger_%V!jV%?%dEJ7n`H`?)vu7dY!LCFq(fe8#2A?<4X>d|^VoWSLPQW`Th#teK zG;tp{S6L>T=?k`d&ui6(ss~Y9+gs2+_iRGO+USX}DMa+w29&tv}rJ4{dw z`=@INO{~#l7jI+#hz_yR=s$fMBB?5dUD|J5FIOI@jxeV!ZG-lrz3y=t&%>%26mB?J zV`NQeFAI@6ANDg5=9nNSUKYmmAniakYTV*#s+cP6avk?P??St#i|=;%DX7lrc)zV> z39%?8Stv9nG$8q`^Ovjl_sfjvrs@L~k8{(Nm*us@7A{rErKF4pGEjH;b}of?6hKzA z{5IaZg|nPn!%bzIDz3Z5n!y@fBUUDAdhFM*7e~h-X$NO(J5()J)`KL+JyGtvb^`2i zS=gpERbMAxs?cL@keYyosp+hrJWy#wSVPh~y6%bQmgdgRmT=w(NRq; z=X(!u!&KBgsb{EQ_L(VnxJja^hFNJs|J~gT}N60)I)vnMl^BL8XJAk2E`C6bZSU@A4&%Jqv4vP?a_EFprh{Bd+jaGs70`p zFk(EW=rrY(;*cZJaQ_&!$N|Er11(hR2|G26N`jNo`&d*{WMYV%d0}UGtsOIeC-IaN zxeTE!tLmq!ixBv>sfRrgZh3?I@q$#eX)ezHXBR@T=sO{^lqSC&98KwyEtHckSe+Q2 zC%;+z)@)O_Ue1rGa(-O`k;vyqQfl82T#@@~N%*$&WMoI}iJ(2wR%@?IB?#UTVSVdX z9lm#p{PMl2M1h=45&V(j$BIa*awbwwYxJdvH;A@DjC!au;nF5}gw^o*X|I={3Pa=5WQQ#-fz&mZ53F6DMU(ce$+{H@U{S)KWH%UAi}*WhnubeY893b~SGZru1WoehmLJOl{EIk1@fUn+*n~JYD&S0uL%-anKkz!~o#FF*@fP{-c?taX`$ zx=o>dWviajoZdyNwrND&My8RUCK#0^u1kj3DI$_r2kE2|0UWgIqtKeNQHQJ<-Z4Tk z^-Fb`+*{jdtvPS1qkV>ymr3`kpD-6|AFwU~3_F0i02pGRpP~IkwYRpz8UiZk|1rPO zdiT#(Hs<61P~~XwmI6L@7+^oZ^8g0`UIrk*2Qh$`M(CgyS|36mP=J7cC!u{2;4r`; z_;-bjfYRG{6e9luKp9_sqDF--Y|v=!qtkSb%OY zj0b^kG&O;OmktGuu_;EqS^&{!Y&_FFmi(bBA7=Fo$Y+n5C_9w`u@I_Ai0L>)2yQVv zs~vP@hBuU)sDq+{kDo}8LH?|4#SAYDNHS~2O9QGy8j|NC^O5aj;?#ZaCN5DitT7>r zXwMm$1^LtDTvr$+;Hlqr;UhUrVpwK`u!G)CHiQS!?O~f>&htp^l1Z}!6QqwM7kK?! zy5)rN{%`_xZt!3I=C?QOTg;&}(bRt@@NgFxb$}gk#yekkR4G9WBYq~V^F49G9sYCa zXR`xR4&|w4y$!QIgaSBk{(;Bzg=vS=LPOk-+`Hl5Lc*e=Cr%=b8Ewpc~@`u6*-x!SH>gp4DW*N_&7$!>lvfeBfie;I08W zNt+!=f(jNir>+zp{*UI`;>Mfpaqa%VVs)zYaIhWfc|G=Fe5$k>`X=a~f_}KPU4j@1 zU+=)zLx33s{gcqoqVCLiEnY5E2g_%>#Ig{qDCSUU(h_Q@=#fqJMulgBEYpyGPHCPL z0Bh1?yW;_=EQtHh@9DUyp)6Pu$`Mn<5abmLDJRTC0kcwU=s(Xb-sqYNvt}69K;e2l zwibA|OI(ofm1pmBB*h zf7W%z@7GeOoVz}1P8JgU=5|sdF#KvPzn2-C+oN|=Wu4G?I34v+XVlckbph7r|Sy(={tzvC8Vp4!{=DH zn=i2+;D~d`Q*QV1PY(3=LI0D1{w3%e8M-F{D+vjgyPTBsJ%~H-VgkD2Z6}Fh;vh>B zJ4_I>Tp$L@>Q+qf?)A1l_&tu_>L$UDjd0$` zcqK*5X{gIk_APZ`MtD|Fw6&<`J^Opl!|b2;&87r%;p(biS3k6pE-B&BPyMoAu3l-d zPsRODEo>oE3Xd+BKp4(w7(#aeEC8ql*gep;K)V)h$k{8`(s_AwUQX_0l$$qY;^Zm0 zxoDwd5LyIKh8Xyrj`GIkpv42+rYu}kw#4A(b#nBwoX6Og=KQzV6}E56+8H{y{PibK z9asO{`R#YPsZL@|-dtaFF1-7%{!8Uu_2iaE-Y9EoIk)eOe&cVKD>L~Cv>6ZiN7aW9 zzc}OZ`86*IQUBu!yZ`moXFnYK(^Kc?Ow6!5Q2f=x-%78@ti6IH{7k_oXRmks?(5&*EZ$nZ$8jX^_77#Bhu&KEY|Se7 z97q0?)a=_AFMa&}t>>@R?p?Tj>bvfvFRysw(JLi?D))^sO%sy}sn@PQefyuEe)>iB z@x&JCso?(SHoW=J`K8~_PMe-L?!Juh;1~2ie*49jeV=*WpYr=fFUU{V?L4ySe_p?K zFi9PIYW8<4J0s46=yc9y+B|0@TNM5;@$D@Q^|zWXym9v#>fFZ5OK-eR>`1-gYs;I+ z4Vn9!%KKM;6aDz5!@IXW{?HHiel_O&pg;Y6!kNqiLpGToe0Ww>=6uVHi?8&)wdaXH zJoiA?hFJQC)BbvH)W0X~w4NCDiwD=P9a=Qu{*sPgogI90{MR4t`FiWNw~ro~vGAA0 zR(Z74N_N^e7c}|Te_Vd?o@*JmZfi)A&je69!qN;pm$)Ram#%R>3q!Hgv*Oz?u=$Ctc|IYgzPxrhq{Gmx3 z7R-KlY5ln7>FVI_48sEKLoA5plF@=WGYaR=%p1oAXAkuIyC{L+!3>Hsd= zL4g5u4WKI!(GXC9_y7?XqoeC1Yee@dS6#b<>?VL~XTgoiy2eGF5X1DX4skz!-0#kp z>hq{N=hUfFRj2A?XftBUtq5HYPz><@{TBQTAAIbYrcgd8yk;7Qe9>Ij(>_EJ(d+cxM$YRf`LM`y`TwD-ceyGO>lV!n`1 zbSfw}Nn^s4lCEr}y4pRFD3cZDNVUeP;DWApXT+oQ=Q?_*uuI|i&URPi8s&I>Y?xMD z%6@g8SspPxbi3qI_%HiR;or+g!yM+f#fy1kV=Fc061nU(}ELFAteAMi#``5QS{W zjcgofLki;1B2=6$MUlC;cx((kA$%Lgk7d%Q-8On@{bZU$Tq>F8DtwQ#si}0-zf4ZI zIfW`INuN&Nll5fr81XG^P(`#Kr1a_#-j`bHn8{P)YclA{`a_mI$=g%*kU(FvtUfvH z{`68YNO;PhHg= zdy@B%Rdq}67#AkEs=CAMa`aU-#}L9-i!oamDV=Q0{%QqgGq`j$Sp;g!o|MBp(N%rN zQmR!5FG0HCIO)R;g)jo8_Ja=;rv)3)0YTvRpvM>@m$ddl$=;Y!IF(X`k zN2hNLx80f|luWFyGiGwx^OvNS=S|A2+coi5sAS2C)nmCFVb8>6tA2%|zTzcG<(aEa z0A~J@>bv}0)ql0aZr@%UfwMH%F?G@8_im_1VgWJgtCA;|o2OGHXTj+cKC^zT-T^!C zmmRAyy#}kCwOh_i5SJ^<+fgunE>p}36Ta51tvj4T>(*|W@Vi4Ueo%FbJL?epK^-M} zB9u6$0xT9zD9Y|fZ4&CAf8`{*pI8O88?O{Jq=^|^VJ*p;nAulSMYF%~%4l(P*aNl{ zT)TShv9*`hMmj*-icK9H);kB{QfvsVNk(Ws)E5C5Lxw@xFpz*>yW>1D`j3geQ2li2_rwHd(oEs;b&uckv=9(l*0tQzBoIRDI@JHsRg2!t zpYK9G;+?_1L>~fvOkX>OyjIQte>)U`y@2hYQdDdgTX<);UF02SYiwap)Uy$6`3%l8 z^1kgebpm#U%)Jv&8%BRD>OcXvI;w26IFV+f!Hs_dTEsqq9$tnEAG_HV#OgLauGuRl zMW<~12jC8%ba#@w({rJ(-?U+vXFkkh0f@u|I!nEexR{zM;*?+Fi@4l-ky_>E3bPdK zA17o*Ry!_Gd4*1nR`#G&-)`~wB)j#9N}&TtTmU^9OXMX-hGQ? zEyI4&y@P9&2-Z@bM1|bRk-U+0T(A}gU>7@aCxsd?yOX0hluKv=zqAv#?w1;7;MQbr=#U7+%#Psz)&gZn z50nMKV?R8I0t+ zC(ar)Il#}M{(t_6TTo!MI!-*m+k382|2=UdW5jn3k$MhzCL`XT!25xp;NM`4R#?NP zU8DPRVgk_pW@wO!!iwvLNZ_=yWDMw}17HU5Z1QdDSy3!SBzzt@lZIPBx>WBdYqkIQ zNinjQ;{M03;G)iUW*rMwo*}S+1+VoVK(Ko=OLOTys~aR5rgYG2O8AK`RdmHXGSEf0K}?B*W7OR;W_I#vT@XcUX$lFEKt}xq$&9HfIQMr9 zq`T^w8nAtxqFo*4TC|t}bKpQhPqW;@Pw&c52#DCppi9lsyJYOd&v&+Or+6SV;;Y~! zvouLz6+}>iM?WoZ_P?EkpLcPmsIADtnlv{9O^T)~Z3?n^EtJ42l(0(i0zJYg3F(*_ zH@vRlFN#$n@U>uzMtqh*vM4Y`tAV+b2)8gcoYYRRyLlEoSPnf4ta~ENYu9Q4pH6s$ z(PDagE1#hfux1Wj3HY%Fh8dEzRf->0%Mff~Z~K0#DyzBpTszW9nxcz3mON(|CB+E6 z{zvmpyG2C)hfa7TE37{)fms`!#SsjehSW!O@_B~NhyLfmDl)at{AQ~XxmY9KdreE2 z`*gMu1+ivhHtYY`(6(U~>^4haH!yUTuxf*s$P&!)4;p0P3l#+}!9McoQT}Y0p%Z5K zoA&I6RU2+3CJ0H|vzu0Jx)DZC5H4(-Ah4Uf(0f5StlS22GxzFKUZL=we@RCpQX{Mh zk~|W<(C8&l^WjE_+_koiUfY3^RU2zdycUme;oj_x8A3L}3b@sh)Z*#%A}{102`cOk zZKI>qF^LK{@k~!Mf2fCKgAq7sZFNa%;n~f2?zzqBz(O}wWnL7IoBk>JFKNtx0$8Hxb^aQ#2 zgq1*1U)RN_23 zr=9^xClBMc=!KArB5kw2x}>nstvJ|ZE}%8Y&LdgXxbWqYzfkywS<3ATvb5yjciQO< zD7ZlTz$TwD;&T)BUA7j2Ch6pYX8tvm@wp?o@JiqG+&9!|xi_gh`B%GE(kB;RZqKEU z_vKd1lJTR{n((Yw+R?O9HCPWbsrh!V_JxcKgEc5%(Qs>X(@XrEo-`frD@@v<;5i;X z8GOXN1P)B?0W8>HuvNdG_(BCzHneQ8SuathUvkwYs%ulqx5_p@91f>@Z0) z^`B`Vbg99JpSy|!6MCdtv;Oc^@T8g)aqGWzKT~_KKFXf7c8%JP_IsvfJpr?3(YWPM zgBdlU{Tz7eLfFqt7(+r#yefj3QToAp)Vj^xRx?-L<38?v!j1OaAidESpdmYF62rQd zBgSL2Y^BkZ@CfG%&s?Z~e3)m%wACN1xu3s5eMVVNY~$0_d|J-BEerKWuIAHtR}n-- ztFPky+j#5gb^Khet>$Zw)G%6S8l>7}-H87h_Tub0Ebrp&U5D$X+GgP7xHras+f9Hz zu8P?8w)(HBr)!M32e>9+r;kSiWsj9{&`ok!@O3H8O^d}KXPBYUjsI~hKNDS?fY(4^fi=YL2sFottAiK& zAbw&HLSG}j2=bvJcq5v*Wu2WlWQSx36}xn#zXd4+{1~|A7)LA-4;rZd#X(1hD`pj~ zWvrBls|G{+4BS6vE^?4C^FS-zdBQ=Dqf_8yj3Ev+l#ncucT2<-S?|E?-zhvN zO{qdC$EF47`Vs`TO%8A;A{{UBKb)0Iwp8N6fA%31kG&qY$QjCOp~GpDIjl$7;fso+}`cONS4&dYw4v(2|?d z{Q()Wk8Wqvp7u?lv|$V}j1hi@X$)D0F(kaX*`ao>9S6s&5Fe`q^dxjAtlrfg38m>4 zKR$9-2=!+U&26%b%rFP$#z!v8QO7&sR9nEio_YbuVaOOM6lTbnw)U*FTb6uby zZ&Mk6)tZNNmv7mc9XippnQay3iDqVrn^NI*iij38K{%;K0SBdaFO+01>QQvlIwq*( zFjp6-{f(`*hBIUn<2SjyKzY{uggMuEn{5SPxDm`*zz`$#Ed3{{{f#}gFi^SvkMXUx z>wh-0IUfIqDo=;E6tJ-)0FMJa0dNrD82|!o5Cixagbw+j^ds~x4G8#q8Oo;sjsP5n z_EP}KO^%=Gf*npL5nqz9>*l%jCP*l;FA?ub#KD)<0lgh;8T;`re3X(ifaXTXXhs9h zwBroG-BDtnLCHQE`xB7gFv_?QoGWH8Gw0lVm81~^o>%qDrL0k?R%4dpTpi|k@Dt$_ zxNY6EOUA4ps9lhWUBg9Ujxrm(dX0kK6;~140y8jjKAj8g1qn00iww^(5KAeu0^Mln z4*}g|dIk+I9V(h)SIvC22)xhKM7C!t^?hF&k-YO2b~7K5VA<{={QV?9x1Z0 z8)RjHH5-oB)}d>#u#~o6C-EmT-nd4&Mm^+y!PH-~gQY&etDP%Mi;-AB!9O51jBs{#^cX zMNrP8z4e^0W#LB<>r&E(;&eI-z8>j=^7liza+17*|ElY~;cUYIJ%6{C1+8!BeYe7l zm~3i?_)f?Rmf9^F@w<%IN=fCG;C0&TFftkZ3f=REQe2QLwR&C`vFw#`K9*jqfLpAq zKtg(bDOT$^qF!?Cd#_y@$1$#{Gt%Uz2w2BAAUO7!(UeCxa3$4931ufbEk%5)TNJ1}# zR*UF^R&q41{{mWj!>pVxd!&B-t{|Z?GWOYY8RqfJzbnmXB77u7S!0Y|{Wn3Y#>(4E zy|M-RzUx~U%+P)-Qn2R*#seT5^9HVc<$lq$eWabz7173cVV#zR@92wR9rFcu9ni^o zMKA?2Sdg4{mw5MoB-fQN-)xWTw+5GMbLG23-H^{4@%IvQ<+V^Jq5d}1Bjw#P_(*8I z4y`)@GYaZ2Lp_JSHsXauwOAjju5e3LVVF_Mqch|c^jOKOkj-X>M?#co^1rCOKn{X7 z8S%Y|pj;Kg!{_&Kf^4Y@m4)-9G${;m#ZuY@BT>+zmYVV}@JN^Y=EA7?rZ&*H*@&-) zwYz0LMEJ{fKD-np=K|ZgaJ5Jb!QQ&%VtrXK75WxJ>|n~5l1SYx`+=tK>U5DGrkSo+ z1@p9ta)yj1U82Zla^FL|O${jdaL+$6fM?q1@B6aFBA~s-<-CNQP4yRWY4oh5y!@nG z^r=1Hh`b^t<5&FLaACU>TAE5L>Ibiw>C`SQ25BM}F#{!H8@B*aKHL#|o z`xkR48Dpnl*QdZ+qFeS!ShtlD5px&TkyEjZloS8aSz_{L@?!Fo>|Dx`B8NJwl890+ zI{dzs2XmvG87gGLe%H%Q{FKu;JKKJUw{&fR|0X11FCOT-h<<8^5WIx+HSzc~=kW+- zj)OdL8hNW7e&NB9`T?kaI8r|kbu&WuCSf%x=|Z22cD)IH2VP7-R)YOyqLetqQN%71 ze3l#7Kso&?3GZI78Kd9ih3y^+?AY{Iu9*2EN~#}Lzq{DXrCc2(y_IU_3DwN42H}+y zu_qxfL%Ba{OS2*i2V$Ki18+Lsd;&)Qylx?rEX8Ze|5vN?#GHA z_$;32d;G6&zV~kF=SzPpKdW$#8j1+8MIWB}y61Oa{{Bko_WFI!qrum{ulgkX>V`)f z)_4{<3+JTgUOjjIgSUQs;!@-Or90=o;W_rq9S_`lvFuOP{wd@O5{_~@c zKFvLz+#x>{di=3XuiSZN<#!bsHxx{}IV&>yN#l>-eEQkY$KJQ*{C?S!%EL{&k8b&& z7cU)3(Wbs#@$Fr`QP&}KGVcOoSu~L=iTs!J+P0SFAKT8pbp1Q@>CG2bUVf3-m44aZ zRWOquQ~8_PTi1RS`{3y#d$-?z=l3^#KIP1)KmC2iJJ|=vY_Z&a_rkjD#n$=fo*jI3 z-vfVm?6$s5@yz$;{q^*uf6v-&J2CDTx36D6wq(YwWj((-HTuf*FW=wy<@Oz~9XmRI z=`Txd%4E5d>UC@_Y71=qp!(d6m$H7mva@^t8^>DT_;q-3)$E3G8@_d_o|kg>%$asI z_3Jx6E&u4bj-AK9c>L5ulkT}tT>^Mc4!ocoXFSvmA?$oLA>PkFzTcN0 zwcXQI-Bn#(RbAEeZA5gb1);kE3IYDVznMS72cbVR6(MKTTEfUEU{fsu3J{997-{Hz z%rIeRi;NI$td}zaA$!ygc#~o)wg(LgTd_$pzO68dl!jUMme!)5Xdi`n4-d?BM!i9= z;E+*vf=Y)-IaS_Fwl%xM5jrCjA(RS-jPu%>9bvcJoo(+RLr$6HTAQ8WJCwtqqD-V&GKYi-c`n!1OoSuPAX$p0J-y7?Ky#P%(YLd)U!*(}i z_v(3eZj=(C_iSlcox;ouv)&=X&Q)_(EtS$rTj_CZ#A4-_ic6~}vVMMHMRGAI0#q!K z1{eF;$jIXajEW1TNMgjaP(;jqtC&?5Ep6QeD{-EtaJSq;*M?h8Vnpk@{`5(ZZGzFi z2X!OHw2EJ47O=QQOq2;<8lM;r&uT4N0-JG08G-g*sP+{*_zM-Ndvve27o}xZ=x36=?1(I+rh9kcxyiO{q?&vY zjQLbk3h#Q{C2#aOST~%F*_#YJ+~I|l?yX7QZM=Jvdn@j5kvHPQ-8cFS9V0Vht%yWc z!tRV@pXbvjO6eGykTP!++8WDN`Yi<(^5r2E3Z$x}K!)5^ zWh-_i?lP5CEnG1yM6hL5hnU6an{t*W_;2Q8CO=#}TA%#Q63nErsY;>%)aG4Dhd83G ze8r3A7nAHDr!9!PEBi2WZ2N#6#X&(aJJK;>XtP0Np z9~1PPvg&^R6$E2iy}35REanWXXcb#H0O))M#onR&H01Go-R@#d}Wox1(Ua3 zPRgv~oqT)v3)xP;#9R0;!l^>esQr&bd3w}De*c>NkG#bD`Gz$OkJRx5-?#>Ke|p=j z)pM8Hke4{q+ZFFZAdeAihnViP6CmF9g<&t?JE#~H+Jpwq(QXqs`-KW?$Q^O72VXvq zbM&0=x(u6uT_I!d#7nx~9gWzL-=z#H87z#Xm`Gs#-+&e|&!eXo;r!?Ba|W=og^Q`S z*`p$3*8c-=`%tPY!PV-%+|_OPFsw5J)-eNwqdb+NJVsneP8M*|FYy&z>bXKLbFuju zGWHGQGs4U5m&u%b2TRGjP_lO?`y@|=Tbo_-4wj%Cyb(laX!R!>AqFhD_ae-Jcs4l-w$uG=UnKKIoK%Wm z^;4`Db&u=Ajfg?ncBP)Pwp}fEEve&dD$d{A{9_k80cC%!Vj6BudU}gUAbN5X`?2aT zL7KnB4-xz6UgV#t8h6i>TgcCcP z*w+Q!KUk0bRre>gHp7_icNpzw`c?S-L}$mCl_%)pF@$2A!fu##T6bjX(EbtPf$2P+ zb_Mc^A61YPt%>Tfqx${DdMpyhG|TC+N8|J0tG54lZQPLG;QL&Bj=*}|HE=6d&NgmY z33{SS!akuSh3i#2t5d+sf}tSX#Cq&fyjTbpGa|${h-!MQT(5#_8c&O$DJ9nTz*Tj8NyK~B@-iw@%nO>jbb|6bpLz1{?$crEUS zyV~H*?n8(m3>)2?;gJx%MAgA;A5@LTS*QG_1H2v z$qZGL85t2I@7B&q8-1q|@G&QQmfVcYj6riB&?Kpv+$1Bb$4v5!O!CWQ56~lw5|D=J zVf}n{UqN&(f>;Z_sK+MhCIkw0^#C^h7y_yW+%r$1k0i(fp?FDb!}=T;8O`V zKUhd@ZsgJw0(fRoa{)h8$FM@8x=i)~w=~`w@-*)y%QET$Z=5j?ZO1EZJaL-GTlH)F3}`Arh<`j>blEY<=~ z(B$FBJQaI=B_ra_gME8En8n%=}r(WEc3UZ|JrdQiGrtvjJgYw!orh+b! z_O2^XG09~WVlG6ltdPR#qFHO?_7*PYi2O@kgHCk!pQ)o;*W=$J^rMbYcl1HQOpTE0 zPgrO)9;v4^#1Kaw30rqEG7Wme6MDPGPc7r-6<#61o<`bsj|ddETMp~7XX1{d>EXjr zOKj3!hFM0Xw17HPe!ZE_E^J2(?cK>OE9EUT?asJ7ozmRzPB>BOa8ERtSd-dEp z6qu=gY?aRIv8i#}4r>EJnW)6PdhTt7_PWA2|7O?t?01!M+4m~jxwqPuQm5zNXwIgN zcV*9>B;jYr)!|8RHluOHN}w86QgUq`^{RyP0~N?`R&ir}-5cDLjuZ{=$xqlO<0)<~ z5n{x&IQEb204(@mpzW%t$FAS@S6Gf_M0RyKjxn-{Mgdy+YMqlwXDP5H17A@2_l->h zC+6Ger_%V!jV%?%dEJ7n`H`?)vu7dY!LCFq(fe8#2A?<4X>d|^VoWSLPQW`Th#teK zG;tp{S6L>T=?k`d&ui6(ss~Y9+gs2+_iRGO+USX}DMa+w29&tv}rJ4{dw z`=@INO{~#l7jI+#hz_yR=s$fMBB?5dUD|J5FIOI@jxeV!ZG-lrz3y=t&%>%26mB?J zV`NQeFAI@6ANDg5=9nNSUKYmmAniakYTV*#s+cP6avk?P??St#i|=;%DX7lrc)zV> z39%?8Stv9nG$8q`^Ovjl_sfjvrs@L~k8{(Nm*us@7A{rErKF4pGEjH;b}of?6hKzA z{5IaZg|nPn!%bzIDz3Z5n!y@fBUUDAdhFM*7e~h-X$NO(J5()J)`KL+JyGtvb^`2i zS=gpERbMAxs?cL@keYyosp+hrJWy#wSVPh~y6%bQmgdgRmT=w(NRq; z=X(!u!&KBgsb{EQ_L(VnxJja^hFNJs|J~gT}N60)I)vnMl^BL8XJAk2E`C6bZSU@A4&%Jqv4vP?a_EFprh{Bd+jaGs70`p zFk(EW=rrY(;*cZJaQ_&!$N|Er11(hR2|G26N`jNo`&d*{WMYV%d0}UGtsOIeC-IaN zxeTE!tLmq!ixBv>sfRrgZh3?I@q$#eX)ezHXBR@T=sO{^lqSC&98KwyEtHckSe+Q2 zC%;+z)@)O_Ue1rGa(-O`k;vyqQfl82T#@@~N%*$&WMoI}iJ(2wR%@?IB?#UTVSVdX z9lm#p{PMl2M1h=45&V(j$BIa*awbwwYxJdvH;A@DjC!au;nF5}gw^o*X|I={3Pa=5WQQ#-fz&mZ53F6DMU(ce$+{H@U{S)KWH%UAi}*WhnubeY893b~SGZru1WoehmLJOl{EIk1@fUn+*n~JYD&S0uL%-anKkz!~o#FF*@fP{-c?taX`$ zx=o>dWviajoZdyNwrND&My8RUCK#0^u1kj3DI$_r2kE2|0UWgIqtKeNQHQJ<-Z4Tk z^-Fb`+*{jdtvPS1qkV>ymr3`kpD-6|AFwU~3_F0i02pGRpP~IkwYRpz8UiZk|1rPO zdiT#(Hs<61P~~XwmI6L@7+^oZ^8g0`UIrk*2Qh$`M(CgyS|36mP=J7cC!u{2;4r`; z_;-bjfYRG{6e9luKp9_sqDF--Y|v=!qtkSb%OY zj0b^kG&O;OmktGuu_;EqS^&{!Y&_FFmi(bBA7=Fo$Y+n5C_9w`u@I_Ai0L>)2yQVv zs~vP@hBuU)sDq+{kDo}8LH?|4#SAYDNHS~2O9QGy8j|NC^O5aj;?#ZaCN5DitT7>r zXwMm$1^LtDTvr$+;Hlqr;UhUrVpwK`u!G)CHiQS!?O~f>&htp^l1Z}!6QqwM7kK?! zy5)rN{%`_xZt!3I=C?QOTg;&}(bRt@@NgFxb$}gk#yekkR4G9WBYq~V^F49G9sYCa zXR`xR4&|w4y$!QIgaSBk{(;Bzg=vS=LPOk-+`Hl5Lc*e=Cr%=b8Ewpc~@`u6*-x!SH>gp4DW*N_&7$!>lvfeBfie;I08W zNt+!=f(jNir>+zp{*UI`;>Mfpaqa%VVs)zYaIhWfc|G=Fe5$k>`X=a~f_}KPU4j@1 zU+=)zLx33s{gcqoqVCLiEnY5E2g_%>#Ig{qDCSUU(h_Q@=#fqJMulgBEYpyGPHCPL z0Bh1?yW;_=EQtHh@9DUyp)6Pu$`Mn<5abmLDJRTC0kcwU=s(Xb-sqYNvt}69K;e2l zwibA|OI(ofm1pmBB*h zf7W%z@7GeOoVz}1P8JgU=5|sdF#KvPzn2-C+oN|=Wu4G?I34v+XVlckbph7r|Sy(={tzvC8Vp4!{=DH zn=i2+;D~d`Q*QV1PY(3=LI0D1{w3%e8M-F{D+vjgyPTBsJ%~H-VgkD2Z6}Fh;vh>B zJ4_I>Tp$L@>Q+qf?)A1l_&tu_>L$UDjd0$` zcqK*5X{gIk_APZ`MtD|Fw6&<`J^Opl!|b2;&87r%;p(biS3k6pE-B&BtY1FV-!J>+ z>XiojRNVj6!WJ^61R^kjFr3jagzf@Z08k6Cd!TKBb}ihHvsbRA^YZAtoZQJMH*drb9KuKv06+wXEyoy3~FxxVOJc=uoZm&&{9$t{n(QP$LQZr>UG#@{YiX7UqgGamAf zst+H2amM5GYhDtf{>Kw`|Ld#IemM50r_Rrtw0cy^upH}O*Z%n6?)y&`Eq-g=E3W4X zp7=5r@7n*@_dfif_^XA#m0poqdj(1OnSxKwUhnwb*T276ytR6d<4EA`AId%ty|wPy znpN&Oj{GU9*|#rV`uP1@&tI$EyKwu|cil%{Uh%}ES4#d=?i*v8CMFe9uU&uo_CG)U z^o#7{i7nDo!Trx|c=Mt2OTV9;Ha&0LeHr1wFX(^#_KPq3KJ&ak<@bwTke{yGd1TZ7 zyngLqk~;R(?C(}~Mw|!H>72{7dCo|-DEwdI+glpyZ#7+bBG@_Z!)}ri{Ct ze0{|irJugqvi -#if defined(BOARD_ID_arduino_zero) - #include "board_definitions/board_definitions_arduino_zero.h" -#elif defined(BOARD_ID_genuino_zero) - #include "board_definitions/board_definitions_genuino_zero.h" -#elif defined(BOARD_ID_arduino_mkr1000) - #include "board_definitions/board_definitions_arduino_mkr1000.h" -#elif defined(BOARD_ID_genuino_mkr1000) - #include "board_definitions/board_definitions_genuino_mkr1000.h" -#elif defined(BOARD_ID_arduino_mkrzero) - #include "board_definitions/board_definitions_arduino_mkrzero.h" -#elif defined(BOARD_ID_arduino_mkrfox1200) - #include "board_definitions/board_definitions_arduino_mkrfox1200.h" -#elif defined(BOARD_ID_Xeno) - #include "board_definitions/board_definitions_Xeno.h" -#elif defined(BOARD_ID_Xeno_Mini) - #include "board_definitions/board_definitions_Xeno_Mini.h" -#elif defined(BOARD_ID_MT_D21E_rev_A) - #include "board_definitions/board_definitions_MT_D21E_rev_A.h" -#elif defined(BOARD_ID_MT_D21E_rev_B) - #include "board_definitions/board_definitions_MT_D21E_rev_B.h" -#elif defined(BOARD_ID_MT_D11) - #include "board_definitions/board_definitions_MT_D11.h" -#elif defined(BOARD_ID_Generic_x21E) +#if defined(BOARD_ID_Generic_x21E) #include "board_definitions/board_definitions_Generic_x21E.h" #elif defined(BOARD_ID_Generic_x21G) #include "board_definitions/board_definitions_Generic_x21G.h" @@ -54,10 +33,6 @@ #include "board_definitions/board_definitions_Generic_D11D14AS.h" #elif defined(BOARD_ID_Generic_D11C14A) #include "board_definitions/board_definitions_Generic_D11C14A.h" -#elif defined(BOARD_ID_arduino_m0) - #include "board_definitions/board_definitions_arduino_m0.h" -#elif defined(BOARD_ID_arduino_m0_pro) - #include "board_definitions/board_definitions_arduino_m0_pro.h" #else #error You must define a BOARD_ID and add the corresponding definitions in board_definitions.h #endif @@ -125,7 +100,7 @@ #elif (SAML21 || SAMC21 || SAMD51) #define BOOT_DOUBLE_TAP_ADDRESS (HSRAM_ADDR + HSRAM_SIZE - 4) #else - #error "board_definitions.h: Missing dependency or unsupported chip. Please install CMSIS-Atmel from MattairTech (see Prerequisites for Building in README.md)." + #error "board_definitions.h: Missing dependency or unsupported chip. Please install CMSIS-Atmel (see Prerequisites for Building in README.md)." #endif #define BOOT_DOUBLE_TAP_DATA (*((volatile uint32_t *) BOOT_DOUBLE_TAP_ADDRESS)) diff --git a/bootloaders/zero/board_definitions/board_definitions_MT_D11.h b/bootloaders/zero/board_definitions/board_definitions_MT_D11.h deleted file mode 100644 index c90ee5b83..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_MT_D11.h +++ /dev/null @@ -1,269 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -//#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 0 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA14C_SERCOM0_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PA10C_SERCOM0_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PA11C_SERCOM0_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (15) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -//#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (3) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (4) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if defined(SDCARD_ENABLED) - #define SAM_BA_INTERFACE SAM_BA_NONE -#else - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (5) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 0 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" -#define STRING_PRODUCT "MT-D11" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x16 -#define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 -#define USB_PID_LOW 0x57 - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 0 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PA05C_SERCOM0_PAD3 -#define BOOT_USART_PAD2 PINMUX_PA04C_SERCOM0_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (15) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (16) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (0) -//#define BOARD_LEDRX_PIN (16) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (16) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_HIGH_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_MT_D21E_rev_A.h b/bootloaders/zero/board_definitions/board_definitions_MT_D21E_rev_A.h deleted file mode 100644 index 15034bf9a..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_MT_D21E_rev_A.h +++ /dev/null @@ -1,271 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 3 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA22C_SERCOM3_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PA18D_SERCOM3_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PA19D_SERCOM3_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (23) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (3) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (4) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#if (SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES) - // The pin functions as a toggle between the two interfaces - #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_USBCDC_LOW -#else - // The pin functions as an enable for the compiled interface - #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#endif -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (5) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" -#define STRING_PRODUCT "MT-D21E Rev A" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x16 -#define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 -#define USB_PID_LOW 0x57 - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 0 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3 -#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (27) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (28) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (0) -//#define BOARD_LEDRX_PIN (28) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (28) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_HIGH_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_MT_D21E_rev_B.h b/bootloaders/zero/board_definitions/board_definitions_MT_D21E_rev_B.h deleted file mode 100644 index 34d70752f..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_MT_D21E_rev_B.h +++ /dev/null @@ -1,285 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 3 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA22C_SERCOM3_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PA18D_SERCOM3_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PA19D_SERCOM3_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (23) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (3) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (4) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if (SAMC21) - #define SAM_BA_INTERFACE SAM_BA_UART_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#if (SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES) - // The pin functions as a toggle between the two interfaces - #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_USBCDC_LOW -#else - // The pin functions as an enable for the compiled interface - #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#endif -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (5) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE - #if (SAMC21) - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL - #else - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB - #endif -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" -#if (SAMD21) - #define STRING_PRODUCT "MT-D21E Rev B D21" -#elif (SAML21) - #define STRING_PRODUCT "MT-D21E Rev B L21" -#elif (SAMC21) - #define STRING_PRODUCT "MT-D21E Rev B C21" -#endif - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x16 -#define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 -#define USB_PID_LOW 0x57 - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 0 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3 -#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (27) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (6) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (0) -//#define BOARD_LEDRX_PIN (6) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (6) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_HIGH_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_Xeno.h b/bootloaders/zero/board_definitions/board_definitions_Xeno.h deleted file mode 100644 index 7fba80255..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_Xeno.h +++ /dev/null @@ -1,300 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 5 -#if (SAMD51) - #define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD3_TX_PAD0_SCK_PAD1 - #define SDCARD_SPI_PAD0 PINMUX_PA23D_SERCOM5_PAD0 - #define SDCARD_SPI_PAD1 PINMUX_PA22D_SERCOM5_PAD1 - #define SDCARD_SPI_PAD2 PINMUX_UNUSED - #define SDCARD_SPI_PAD3 PINMUX_PA21C_SERCOM5_PAD3 -#else - #define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 - #define SDCARD_SPI_PAD0 PINMUX_PB30D_SERCOM5_PAD0 - #define SDCARD_SPI_PAD1 PINMUX_UNUSED - #define SDCARD_SPI_PAD2 PINMUX_PB22D_SERCOM5_PAD2 - #define SDCARD_SPI_PAD3 PINMUX_PB23D_SERCOM5_PAD3 -#endif - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (1) -#define SDCARD_SPI_CS_PIN (31) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (3) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (4) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. -*/ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if (SAMC21) - #define SAM_BA_INTERFACE SAM_BA_UART_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#if (SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES) - // The pin functions as a toggle between the two interfaces - #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_USBCDC_LOW -#else - // The pin functions as an enable for the compiled interface - #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#endif -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (5) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE - #if (SAMC21) - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL - #else - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB - #endif -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#if (SAMD51) -#define VARIANT_MCK (120000000ul) -//#define VARIANT_MCK (48000000ul) -#else -#define VARIANT_MCK (48000000ul) -#endif - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" -#if (SAMD21) - #define STRING_PRODUCT "Xeno D21" -#elif (SAML21) - #define STRING_PRODUCT "Xeno L21" -#elif (SAMC21) - #define STRING_PRODUCT "Xeno C21" -#elif (SAMD51) - #define STRING_PRODUCT "Xeno D51" -#endif - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x16 -#define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 -#define USB_PID_LOW 0x57 - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 4 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD1_TX_PAD0 -#define BOOT_USART_PAD3 PINMUX_UNUSED -#define BOOT_USART_PAD2 PINMUX_UNUSED -#define BOOT_USART_PAD1 PINMUX_PB09D_SERCOM4_PAD1 -#define BOOT_USART_PAD0 PINMUX_PB08D_SERCOM4_PAD0 - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (1) -#define BOOT_LOAD_PIN (16) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (1) -#define BOARD_LED_PIN (2) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (0) -//#define BOARD_LEDRX_PIN (22) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (23) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_HIGH_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_Xeno_Mini.h b/bootloaders/zero/board_definitions/board_definitions_Xeno_Mini.h deleted file mode 100644 index e9ec70491..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_Xeno_Mini.h +++ /dev/null @@ -1,299 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 5 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD3_TX_PAD0_SCK_PAD1 -#if (SAMD51) - #define SDCARD_SPI_PAD0 PINMUX_PA23D_SERCOM5_PAD0 - #define SDCARD_SPI_PAD1 PINMUX_PA22D_SERCOM5_PAD1 - #define SDCARD_SPI_PAD2 PINMUX_UNUSED - #define SDCARD_SPI_PAD3 PINMUX_PA21C_SERCOM5_PAD3 -#else - #define SDCARD_SPI_PAD0 PINMUX_PA22D_SERCOM5_PAD0 - #define SDCARD_SPI_PAD1 PINMUX_PA23D_SERCOM5_PAD1 - #define SDCARD_SPI_PAD2 PINMUX_UNUSED - #define SDCARD_SPI_PAD3 PINMUX_PA21C_SERCOM5_PAD3 -#endif - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (20) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (4) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (5) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. -*/ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if (SAMC21) - #define SAM_BA_INTERFACE SAM_BA_UART_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#if (SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES) - // The pin functions as a toggle between the two interfaces - #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_USBCDC_LOW -#else - // The pin functions as an enable for the compiled interface - #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#endif -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (6) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE - #if (SAMC21) - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL - #else - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB - #endif -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 24000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#if (SAMD51) -#define VARIANT_MCK (120000000ul) -//#define VARIANT_MCK (48000000ul) -#else -#define VARIANT_MCK (48000000ul) -#endif - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" -#if (SAMD21) - #define STRING_PRODUCT "Xeno Mini D21" -#elif (SAML21) - #define STRING_PRODUCT "Xeno Mini L21" -#elif (SAMC21) - #define STRING_PRODUCT "Xeno Mini C21" -#elif (SAMD51) - #define STRING_PRODUCT "Xeno Mini D51" -#endif - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x16 -#define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 -#define USB_PID_LOW 0x57 - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 4 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD1_TX_PAD0 -#define BOOT_USART_PAD0 PINMUX_PB08D_SERCOM4_PAD0 -#define BOOT_USART_PAD1 PINMUX_PB09D_SERCOM4_PAD1 -#define BOOT_USART_PAD2 PINMUX_UNUSED -#define BOOT_USART_PAD3 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (19) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (1) -#define BOARD_LED_PIN (2) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (0) -//#define BOARD_LEDRX_PIN (20) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (21) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_HIGH_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_arduino_m0.h b/bootloaders/zero/board_definitions/board_definitions_arduino_m0.h deleted file mode 100644 index 38fab2992..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_arduino_m0.h +++ /dev/null @@ -1,264 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 4 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA12D_SERCOM4_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PB10D_SERCOM4_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PB11D_SERCOM4_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (18) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (6) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (7) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (21) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_PRODUCT "Arduino m0" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x2A -#define USB_VID_LOW 0x03 -#define USB_PID_HIGH 0x00 -#define USB_PID_LOW 0x4E - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 5 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PB23D_SERCOM5_PAD3 -#define BOOT_USART_PAD2 PINMUX_PB22D_SERCOM5_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (21) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (17) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (1) -//#define BOARD_LEDRX_PIN (3) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_LOW_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (27) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_LOW_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_arduino_m0_pro.h b/bootloaders/zero/board_definitions/board_definitions_arduino_m0_pro.h deleted file mode 100644 index 3141dcbb3..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_arduino_m0_pro.h +++ /dev/null @@ -1,268 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 4 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA12D_SERCOM4_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PB10D_SERCOM4_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PB11D_SERCOM4_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (18) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (6) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (7) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if defined(SDCARD_ENABLED) - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (21) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_PRODUCT "Arduino m0 pro" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x2A -#define USB_VID_LOW 0x03 -#define USB_PID_HIGH 0x00 -#define USB_PID_LOW 0x4D - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 5 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PB23D_SERCOM5_PAD3 -#define BOOT_USART_PAD2 PINMUX_PB22D_SERCOM5_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (21) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (17) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (1) -//#define BOARD_LEDRX_PIN (3) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_LOW_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (27) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_LOW_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_arduino_mkr1000.h b/bootloaders/zero/board_definitions/board_definitions_arduino_mkr1000.h deleted file mode 100644 index 3e73b56c5..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_arduino_mkr1000.h +++ /dev/null @@ -1,270 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 4 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA12D_SERCOM4_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PB10D_SERCOM4_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PB11D_SERCOM4_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (18) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (6) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (7) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if defined(SDCARD_ENABLED) - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (21) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_32768HZ_CRYSTAL -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_PRODUCT "Arduino MKR1000" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x23 -#define USB_VID_LOW 0x41 -#define USB_PID_HIGH 0x00 -#define USB_PID_LOW 0x4E - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 0 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3 -#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (21) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -// PA20 (digital pin 6) -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (20) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -// No RX/TX led -//#define BOARD_LEDRX_PORT -//#define BOARD_LEDRX_PIN -//#define BOARD_LEDRX_POLARITY LED_POLARITY_LOW_ON - -//#define BOARD_LEDTX_PORT -//#define BOARD_LEDTX_PIN -//#define BOARD_LEDTX_POLARITY LED_POLARITY_LOW_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_arduino_mkrfox1200.h b/bootloaders/zero/board_definitions/board_definitions_arduino_mkrfox1200.h deleted file mode 100644 index 28eea9bc7..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_arduino_mkrfox1200.h +++ /dev/null @@ -1,268 +0,0 @@ -/* - Copyright (c) 2016 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 4 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA12D_SERCOM4_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PB10D_SERCOM4_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PB11D_SERCOM4_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (18) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (6) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (7) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if defined(SDCARD_ENABLED) - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (21) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_32768HZ_CRYSTAL -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_PRODUCT "Arduino MKRFox1200" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x23 -#define USB_VID_LOW 0x41 -#define USB_PID_HIGH 0x00 -#define USB_PID_LOW 0x50 - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 5 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PB23D_SERCOM5_PAD3 -#define BOOT_USART_PAD2 PINMUX_PB22D_SERCOM5_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (21) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -// PA20 (digital pin 6) -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (20) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -// No RX/TX led -//#define BOARD_LEDRX_PORT -//#define BOARD_LEDRX_PIN -//#define BOARD_LEDRX_POLARITY LED_POLARITY_LOW_ON - -//#define BOARD_LEDTX_PORT -//#define BOARD_LEDTX_PIN -//#define BOARD_LEDRX_POLARITY LED_POLARITY_LOW_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_arduino_mkrzero.h b/bootloaders/zero/board_definitions/board_definitions_arduino_mkrzero.h deleted file mode 100644 index 88c9e98cb..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_arduino_mkrzero.h +++ /dev/null @@ -1,269 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 4 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA12D_SERCOM4_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PB10D_SERCOM4_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PB11D_SERCOM4_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (18) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (6) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (7) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if defined(SDCARD_ENABLED) - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (21) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_32768HZ_CRYSTAL -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_PRODUCT "Arduino MKRZero" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x23 -#define USB_VID_LOW 0x41 -#define USB_PID_HIGH 0x00 -#define USB_PID_LOW 0x4F - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 5 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PB23D_SERCOM5_PAD3 -#define BOOT_USART_PAD2 PINMUX_PB22D_SERCOM5_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (21) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (1) -#define BOARD_LED_PIN (8) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -// No RX/TX led -//#define BOARD_LEDRX_PORT -//#define BOARD_LEDRX_PIN -//#define BOARD_LEDRX_POLARITY LED_POLARITY_LOW_ON - -//#define BOARD_LEDTX_PORT -//#define BOARD_LEDTX_PIN -//#define BOARD_LEDTX_POLARITY LED_POLARITY_LOW_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_arduino_zero.h b/bootloaders/zero/board_definitions/board_definitions_arduino_zero.h deleted file mode 100644 index 85dd431d3..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_arduino_zero.h +++ /dev/null @@ -1,268 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 4 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA12D_SERCOM4_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PB10D_SERCOM4_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PB11D_SERCOM4_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (18) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (6) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (7) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if defined(SDCARD_ENABLED) - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (21) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_32768HZ_CRYSTAL -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_PRODUCT "Arduino Zero" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x23 -#define USB_VID_LOW 0x41 -#define USB_PID_HIGH 0x00 -#define USB_PID_LOW 0x4D - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 0 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3 -#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (21) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (17) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (1) -//#define BOARD_LEDRX_PIN (3) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_LOW_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (27) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_LOW_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_genuino_mkr1000.h b/bootloaders/zero/board_definitions/board_definitions_genuino_mkr1000.h deleted file mode 100644 index 5c9991f24..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_genuino_mkr1000.h +++ /dev/null @@ -1,268 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 4 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA12D_SERCOM4_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PB10D_SERCOM4_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PB11D_SERCOM4_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (18) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (6) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (7) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if defined(SDCARD_ENABLED) - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (21) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_32768HZ_CRYSTAL -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_PRODUCT "Genuino MKR1000" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x23 -#define USB_VID_LOW 0x41 -#define USB_PID_HIGH 0x02 -#define USB_PID_LOW 0x4E - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 0 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3 -#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (21) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (20) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (0) -//#define BOARD_LEDRX_PIN (20) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_LOW_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (20) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_LOW_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_genuino_zero.h b/bootloaders/zero/board_definitions/board_definitions_genuino_zero.h deleted file mode 100644 index 3c60be5d0..000000000 --- a/bootloaders/zero/board_definitions/board_definitions_genuino_zero.h +++ /dev/null @@ -1,268 +0,0 @@ -/* - Copyright (c) 2017 MattairTech LLC. All right reserved. - Copyright (c) 2015 Arduino LLC. All right reserved. - Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _BOARD_DEFINITIONS_H_ -#define _BOARD_DEFINITIONS_H_ - -#include - -/* The SAM-BA interface, which is used with both USB CDC and UART (TTL - * serial), can operate in either binary (default) or terminal mode. If - * TERMINAL_MODE_ENABLED is defined, additional terminal handling code - * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled - * in. To switch to terminal mode, type 'T#' (you should then see a prompt). - * Then, type 'V#' to show version information. See README.md for more commands. - * Size: ~228B. Enabled by default. Disable with 4KB bootloader. - */ -#define TERMINAL_MODE_ENABLED - -/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. - * See "SD Card Bootloader" section. This define can also be set from the - * makefile (so it can be used with the build_all_bootloaders.sh script). - * Size: ~2788B. Disabled by default. Available with 4KB bootloader. - */ -#ifndef SDCARD_ENABLED -//#define SDCARD_ENABLED -#endif - -/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. - * When setting SDCARD_SPI_PADx defines, consult the appropriate header file - * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- - * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ - * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. - * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and - * associated pins are only initialized if either pin is active. - */ -#define SDCARD_SPI_SERCOM_INSTANCE 4 -#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 -#define SDCARD_SPI_PAD0 PINMUX_PA12D_SERCOM4_PAD0 -#define SDCARD_SPI_PAD1 PINMUX_UNUSED -#define SDCARD_SPI_PAD2 PINMUX_PB10D_SERCOM4_PAD2 -#define SDCARD_SPI_PAD3 PINMUX_PB11D_SERCOM4_PAD3 - -/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN - * must also be defined. PORT can be 0 (Port A) or 1 (Port B). - */ -#define SDCARD_SPI_CS_PORT (0) -#define SDCARD_SPI_CS_PIN (18) - -/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can - * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must - * also be defined. See "SD Card External Pins" section for more information. PORT - * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. - */ -#define SDCARD_USE_PIN1 -#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN1_PORT (0) -#define SDCARD_PIN1_PIN (6) -#define SDCARD_PIN1_CONFIG INPUT_PULLUP - -//#define SDCARD_USE_PIN2 -#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SDCARD_PIN2_PORT (0) -#define SDCARD_PIN2_PIN (7) -#define SDCARD_PIN2_CONFIG INPUT_PULLUP - -/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH - * after programming will not occur, nor will the initial check to see if the - * FLASH contents are already the same as the file. - * Size: ~284B. By default, this is not defined, so verification will be enabled. - */ -//#define SDCARD_VERIFICATION_DISABLED - -/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not - * automatically run the firmware that was just installed. Instead, the LED will - * blink with status code LED_STATUS_SUCCESS. This option also applies when the - * binary file on the SD card already matches the installed firmware. In this - * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. - * By default, SDCARD_AUTORUN_DISABLED is defined. - */ -#define SDCARD_AUTORUN_DISABLED - -/* Two different binary files can be loaded, depending on external pin settings. - * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be - * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. - * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be - * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is - * loaded when PIN2 is enabled. If only one pin or no pin is configured, only - * SDCARD_FILENAME_PRIMARY is loaded. - */ -//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" -//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" - -/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or - * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except - * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 - * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, - * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). - */ -#if defined(SDCARD_ENABLED) - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_BOTH_INTERFACES -#endif - -/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which - * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one - * interface is used, then the pin acts as an enable. In both cases, the value of - * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of - * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and - * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are - * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, - * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the - * device is not selected/enabled. If no interface is selected by the pin, the LED - * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. - * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. - */ -//#define SAM_BA_INTERFACE_USE_PIN -#define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define SAM_BA_INTERFACE_PIN_PORT (0) -#define SAM_BA_INTERFACE_PIN_PIN (21) -#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP - -/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands - * will become available which will speed up programming when using the Arduino - * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. - * Size: ~904B. This is defined and set to 1 by default (except with 4KB). - */ -#define ARDUINO_EXTENDED_CAPABILITIES 1 - -/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to - * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, - * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or - * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If - * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must - * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL - * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so - * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB - * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in - * open-loop mode, except when connected to a USB port with data lines (and - * not suspended), where it will calibrate against the USB SOF signal. - */ -#ifndef CLOCKCONFIG_CLOCK_SOURCE -#define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_32768HZ_CRYSTAL -#endif - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* Master clock frequency (also Fcpu frequency). With the D51, - * this can be either 120000000ul or 48000000ul. See README.md. - */ -#define VARIANT_MCK (48000000ul) - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and - * STRING_PRODUCT will be sent to the host. - * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). - */ -#define USB_VENDOR_STRINGS_ENABLED -#define STRING_PRODUCT "Genuino Zero" - -/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ -#define USB_VID_HIGH 0x23 -#define USB_VID_LOW 0x41 -#define USB_PID_HIGH 0x02 -#define USB_PID_LOW 0x4D - -/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. - * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting - * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: - * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ - * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED - * if not used. By default, this interface is not enabled (except with the C21). - */ -#define BOOT_USART_SERCOM_INSTANCE 0 -#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 -#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3 -#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2 -#define BOOT_USART_PAD1 PINMUX_UNUSED -#define BOOT_USART_PAD0 PINMUX_UNUSED - -/* - * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly - * tapping two times on the reset button (within 1/2 second). - * Size: ~96B. Enabled by default. - */ -#define BOOT_DOUBLE_TAP_ENABLED - -/* - * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected - * pin is active after reset. There is a 10ms delay before testing the pin to - * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 - * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or - * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. - * Size: ~84B. Disabled by default. - */ -//#define BOOT_LOAD_PIN_ENABLED -#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW -#define BOOT_LOAD_PIN_PORT (0) -#define BOOT_LOAD_PIN (21) -#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP - -/* - * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an - * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader - * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). - * Size: ~160B. Enabled by default. - */ -#define BOARD_LED_FADE_ENABLED - -/* - * If the LED PORT is defined, then the LED on the associated pin is enabled. - * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. - * By default, only BOARD_LED is enabled. - */ -#define BOARD_LED_PORT (0) -#define BOARD_LED_PIN (17) -#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON - -//#define BOARD_LEDRX_PORT (1) -//#define BOARD_LEDRX_PIN (3) -//#define BOARD_LEDRX_POLARITY LED_POLARITY_LOW_ON - -//#define BOARD_LEDTX_PORT (0) -//#define BOARD_LEDTX_PIN (27) -//#define BOARD_LEDTX_POLARITY LED_POLARITY_LOW_ON - -#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/build_all_bootloaders.sh b/bootloaders/zero/build_all_bootloaders.sh index e9ec96577..f017511a6 100755 --- a/bootloaders/zero/build_all_bootloaders.sh +++ b/bootloaders/zero/build_all_bootloaders.sh @@ -3,26 +3,6 @@ make clean # With SDCARD_DISABLED -BOARD_ID=Xeno MCU=SAMD21J18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Xeno MCU=SAML21J18B SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Xeno MCU=SAMC21J18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Xeno MCU=SAMD51J20A SDCARD=SDCARD_DISABLED make all mostly_clean - -BOARD_ID=Xeno_Mini MCU=SAMD51G19A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Xeno_Mini MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Xeno_Mini MCU=SAML21G18B SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Xeno_Mini MCU=SAMC21G18A SDCARD=SDCARD_DISABLED make all mostly_clean - -BOARD_ID=MT_D21E_rev_A MCU=SAMD21E17A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=MT_D21E_rev_A MCU=SAMD21E18A SDCARD=SDCARD_DISABLED make all mostly_clean - -BOARD_ID=MT_D21E_rev_B MCU=SAMD21E17A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=MT_D21E_rev_B MCU=SAMD21E18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=MT_D21E_rev_B MCU=SAML21E18B SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=MT_D21E_rev_B MCU=SAMC21E18A SDCARD=SDCARD_DISABLED make all mostly_clean - -BOARD_ID=MT_D11 MCU=SAMD11D14AM SDCARD=SDCARD_DISABLED make all mostly_clean - BOARD_ID=Generic_x21E MCU=SAMD21E15A SDCARD=SDCARD_DISABLED make all mostly_clean BOARD_ID=Generic_x21E MCU=SAMD21E16A SDCARD=SDCARD_DISABLED make all mostly_clean BOARD_ID=Generic_x21E MCU=SAMD21E17A SDCARD=SDCARD_DISABLED make all mostly_clean @@ -75,38 +55,7 @@ BOARD_ID=Generic_D11D14AM MCU=SAMD11D14AM SDCARD=SDCARD_DISABLED make all mostly BOARD_ID=Generic_D11D14AS MCU=SAMD11D14AS SDCARD=SDCARD_DISABLED make all mostly_clean BOARD_ID=Generic_D11C14A MCU=SAMD11C14A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=arduino_zero MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=genuino_zero MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=arduino_mkr1000 MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=genuino_mkr1000 MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=arduino_mkrzero MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=arduino_mkrfox1200 MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean - -BOARD_ID=arduino_m0 MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=arduino_m0_pro MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean - - # With SDCARD_ENABLED -BOARD_ID=Xeno MCU=SAMD21J18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Xeno MCU=SAML21J18B SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Xeno MCU=SAMC21J18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Xeno MCU=SAMD51J20A SDCARD=SDCARD_ENABLED make all mostly_clean - -BOARD_ID=Xeno_Mini MCU=SAMD51G19A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Xeno_Mini MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Xeno_Mini MCU=SAML21G18B SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Xeno_Mini MCU=SAMC21G18A SDCARD=SDCARD_ENABLED make all mostly_clean - -BOARD_ID=MT_D21E_rev_A MCU=SAMD21E17A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=MT_D21E_rev_A MCU=SAMD21E18A SDCARD=SDCARD_ENABLED make all mostly_clean - -BOARD_ID=MT_D21E_rev_B MCU=SAMD21E17A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=MT_D21E_rev_B MCU=SAMD21E18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=MT_D21E_rev_B MCU=SAML21E18B SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=MT_D21E_rev_B MCU=SAMC21E18A SDCARD=SDCARD_ENABLED make all mostly_clean - -BOARD_ID=MT_D11 MCU=SAMD11D14AM SDCARD=SDCARD_ENABLED make all mostly_clean - BOARD_ID=Generic_x21E MCU=SAMD21E15A SDCARD=SDCARD_ENABLED make all mostly_clean BOARD_ID=Generic_x21E MCU=SAMD21E16A SDCARD=SDCARD_ENABLED make all mostly_clean BOARD_ID=Generic_x21E MCU=SAMD21E17A SDCARD=SDCARD_ENABLED make all mostly_clean @@ -159,17 +108,6 @@ BOARD_ID=Generic_D11D14AM MCU=SAMD11D14AM SDCARD=SDCARD_ENABLED make all mostly_ BOARD_ID=Generic_D11D14AS MCU=SAMD11D14AS SDCARD=SDCARD_ENABLED make all mostly_clean BOARD_ID=Generic_D11C14A MCU=SAMD11C14A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=arduino_zero MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=genuino_zero MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=arduino_mkr1000 MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=genuino_mkr1000 MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=arduino_mkrzero MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=arduino_mkrfox1200 MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean - -BOARD_ID=arduino_m0 MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=arduino_m0_pro MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean - mv -v *.bin ./binaries/ echo Done building bootloaders! - diff --git a/platform.txt b/platform.txt index 5ba8a633f..6b330549f 100644 --- a/platform.txt +++ b/platform.txt @@ -17,7 +17,7 @@ # For more info: # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification -name=MattairTech SAM D|L|C core for Arduino +name=Fab SAM D|L|C core for Arduino version=1.6.18 # Compile variables diff --git a/variants/MT_D21E/README.md b/variants/Generic_D21E/README.md similarity index 100% rename from variants/MT_D21E/README.md rename to variants/Generic_D21E/README.md diff --git a/variants/MT_D21E/debug_scripts/SAMC21E15A.gdb b/variants/Generic_D21E/debug_scripts/SAMC21E15A.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAMC21E15A.gdb rename to variants/Generic_D21E/debug_scripts/SAMC21E15A.gdb diff --git a/variants/MT_D21E/debug_scripts/SAMC21E16A.gdb b/variants/Generic_D21E/debug_scripts/SAMC21E16A.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAMC21E16A.gdb rename to variants/Generic_D21E/debug_scripts/SAMC21E16A.gdb diff --git a/variants/MT_D21E/debug_scripts/SAMC21E17A.gdb b/variants/Generic_D21E/debug_scripts/SAMC21E17A.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAMC21E17A.gdb rename to variants/Generic_D21E/debug_scripts/SAMC21E17A.gdb diff --git a/variants/MT_D21E/debug_scripts/SAMC21E18A.gdb b/variants/Generic_D21E/debug_scripts/SAMC21E18A.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAMC21E18A.gdb rename to variants/Generic_D21E/debug_scripts/SAMC21E18A.gdb diff --git a/variants/MT_D21E/debug_scripts/SAMD21E15A.gdb b/variants/Generic_D21E/debug_scripts/SAMD21E15A.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAMD21E15A.gdb rename to variants/Generic_D21E/debug_scripts/SAMD21E15A.gdb diff --git a/variants/MT_D21E/debug_scripts/SAMD21E16A.gdb b/variants/Generic_D21E/debug_scripts/SAMD21E16A.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAMD21E16A.gdb rename to variants/Generic_D21E/debug_scripts/SAMD21E16A.gdb diff --git a/variants/MT_D21E/debug_scripts/SAMD21E17A.gdb b/variants/Generic_D21E/debug_scripts/SAMD21E17A.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAMD21E17A.gdb rename to variants/Generic_D21E/debug_scripts/SAMD21E17A.gdb diff --git a/variants/MT_D21E/debug_scripts/SAMD21E18A.gdb b/variants/Generic_D21E/debug_scripts/SAMD21E18A.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAMD21E18A.gdb rename to variants/Generic_D21E/debug_scripts/SAMD21E18A.gdb diff --git a/variants/MT_D21E/debug_scripts/SAML21E15B.gdb b/variants/Generic_D21E/debug_scripts/SAML21E15B.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAML21E15B.gdb rename to variants/Generic_D21E/debug_scripts/SAML21E15B.gdb diff --git a/variants/MT_D21E/debug_scripts/SAML21E16B.gdb b/variants/Generic_D21E/debug_scripts/SAML21E16B.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAML21E16B.gdb rename to variants/Generic_D21E/debug_scripts/SAML21E16B.gdb diff --git a/variants/MT_D21E/debug_scripts/SAML21E17B.gdb b/variants/Generic_D21E/debug_scripts/SAML21E17B.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAML21E17B.gdb rename to variants/Generic_D21E/debug_scripts/SAML21E17B.gdb diff --git a/variants/MT_D21E/debug_scripts/SAML21E18B.gdb b/variants/Generic_D21E/debug_scripts/SAML21E18B.gdb similarity index 100% rename from variants/MT_D21E/debug_scripts/SAML21E18B.gdb rename to variants/Generic_D21E/debug_scripts/SAML21E18B.gdb diff --git a/variants/MT_D21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld b/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld b/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld b/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld b/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld b/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld b/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld b/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld b/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld b/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld b/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld b/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld diff --git a/variants/MT_D21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld b/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld similarity index 100% rename from variants/MT_D21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld rename to variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld diff --git a/variants/MT_D21E/openocd_scripts/SAMC21E15A.cfg b/variants/Generic_D21E/openocd_scripts/SAMC21E15A.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAMC21E15A.cfg rename to variants/Generic_D21E/openocd_scripts/SAMC21E15A.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAMC21E16A.cfg b/variants/Generic_D21E/openocd_scripts/SAMC21E16A.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAMC21E16A.cfg rename to variants/Generic_D21E/openocd_scripts/SAMC21E16A.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAMC21E17A.cfg b/variants/Generic_D21E/openocd_scripts/SAMC21E17A.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAMC21E17A.cfg rename to variants/Generic_D21E/openocd_scripts/SAMC21E17A.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAMC21E18A.cfg b/variants/Generic_D21E/openocd_scripts/SAMC21E18A.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAMC21E18A.cfg rename to variants/Generic_D21E/openocd_scripts/SAMC21E18A.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAMD21E15A.cfg b/variants/Generic_D21E/openocd_scripts/SAMD21E15A.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAMD21E15A.cfg rename to variants/Generic_D21E/openocd_scripts/SAMD21E15A.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAMD21E16A.cfg b/variants/Generic_D21E/openocd_scripts/SAMD21E16A.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAMD21E16A.cfg rename to variants/Generic_D21E/openocd_scripts/SAMD21E16A.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAMD21E17A.cfg b/variants/Generic_D21E/openocd_scripts/SAMD21E17A.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAMD21E17A.cfg rename to variants/Generic_D21E/openocd_scripts/SAMD21E17A.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAMD21E18A.cfg b/variants/Generic_D21E/openocd_scripts/SAMD21E18A.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAMD21E18A.cfg rename to variants/Generic_D21E/openocd_scripts/SAMD21E18A.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAML21E15B.cfg b/variants/Generic_D21E/openocd_scripts/SAML21E15B.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAML21E15B.cfg rename to variants/Generic_D21E/openocd_scripts/SAML21E15B.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAML21E16B.cfg b/variants/Generic_D21E/openocd_scripts/SAML21E16B.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAML21E16B.cfg rename to variants/Generic_D21E/openocd_scripts/SAML21E16B.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAML21E17B.cfg b/variants/Generic_D21E/openocd_scripts/SAML21E17B.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAML21E17B.cfg rename to variants/Generic_D21E/openocd_scripts/SAML21E17B.cfg diff --git a/variants/MT_D21E/openocd_scripts/SAML21E18B.cfg b/variants/Generic_D21E/openocd_scripts/SAML21E18B.cfg similarity index 100% rename from variants/MT_D21E/openocd_scripts/SAML21E18B.cfg rename to variants/Generic_D21E/openocd_scripts/SAML21E18B.cfg diff --git a/variants/MT_D11/pins_arduino.h b/variants/Generic_D21E/pins_arduino.h similarity index 100% rename from variants/MT_D11/pins_arduino.h rename to variants/Generic_D21E/pins_arduino.h diff --git a/variants/MT_D21E/variant.cpp b/variants/Generic_D21E/variant.cpp similarity index 100% rename from variants/MT_D21E/variant.cpp rename to variants/Generic_D21E/variant.cpp diff --git a/variants/MT_D21E/variant.h b/variants/Generic_D21E/variant.h similarity index 100% rename from variants/MT_D21E/variant.h rename to variants/Generic_D21E/variant.h diff --git a/variants/MT_D11/README.md b/variants/MT_D11/README.md deleted file mode 100644 index d8f52d1d0..000000000 --- a/variants/MT_D11/README.md +++ /dev/null @@ -1,286 +0,0 @@ -# MattairTech MT-D11 (ATsamD11D14AM) - -``` -=========================== MattairTech MT-D11 (ATsamD11D14AM) ========================== -Other COM PWM Analog INT Arduino* Arduino* INT PWM COM Other -========================================================================================= - ------------------- -DAC * 2 | A2 | USB | Gnd | -REF * 3 | A3 | | Vcc | - TCC00 * * 4 | A4 ----- A31 | 31 * TC21 RX1 SWDIO - TCC01 * * 5 | A5 A30 | 30 TC20 TX1 SWDCLK - TCC02 * 6 | A6 A27 | 27 * - TCC03 * 7 | A7 A23 | 23 SCL - MOSI / TX2 * * 10 | A10 A22 | 22 * SDA - SCK / RX2 * 11 | A11 A17 | 17 TC11 - MISO * NMI 14 | A14 A16 | 16 * TC10 LED -BTN SS * * 15 | A15 RST | BOOT - ------------------- - -* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port - pin number printed on the board is also used in Arduino (but without the 'A') for all - of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). When - using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the top - left pin (A2). PIN_MAP_COMPACT uses less FLASH. -* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -* Leave pin A30 floating (or use external pullup) during reset. -* DO NOT connect voltages higher than 3.3V! -* Tone available on TC2. -``` - - -## Pins descriptions for the MattairTech MT-D11 - -### PIN_MAP_STANDARD -``` -============================================================================================================================================ -Arduino | Silk | Port | Alternate Function | Comments (! means not used with this peripheral assignment) ---------|-------|-------|-----------------------|------------------------------------------------------------------------------------------- -0 | --- | ---- | NOT A PIN | NOT A PIN -1 | --- | ---- | NOT A PIN | NOT A PIN -2 | A2 | PA02 | DAC | !EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT -3 | A3 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] -4 | A4 | PA04 | REFB / VM | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] -5 | A5 | PA05 | | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] -6 | A6 | PA06 | | !EIC/EXTINT[6] ADC/AIN[4] AC/AIN[2] PTC/Y[4] !SERCOM0/PAD[0] !SERCOM0/PAD[2] !TC2/WO[0] TCC0/WO[2] -7 | A7 | PA07 | | !EIC/EXTINT[7] ADC/AIN[5] AC/AIN[3] PTC/Y[5] !SERCOM0/PAD[1] !SERCOM0/PAD[3] !TC2/WO[1] TCC0/WO[3] -8 | -- | PA08 | Xin32 / Xin | Xin32 -9 | -- | PA09 | Xout32 / Xout | Xout32 -10 | A10 | PA10 | SPI MOSI / TX2 | EIC/EXTINT[2] ADC/AIN[8] PTC/X[2] PTC/Y[8] SERCOM0/PAD[2] !SERCOM2/PAD[2] !TC2/WO[0] !TCC0/WO[2] -11 | A11 | PA11 | SPI SCK / RX2 | !EIC/EXTINT[3] ADC/AIN[9] PTC/X[3] PTC/Y[9] SERCOM0/PAD[3] !SERCOM2/PAD[3] !TC2/WO[1] !TCC0/WO[3] -12 | --- | ---- | NOT A PIN | NOT A PIN -13 | --- | ---- | NOT A PIN | NOT A PIN -14 | A14 | PA14 | SPI MISO | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[0] -15 | A15 | PA15 | Button / SPI SS | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[1] Button -16 | A16 | PA16 | LED | EIC/EXTINT[0] PTC/X[4] PTC/Y[10] !SERCOM1/PAD[2] !SERCOM2/PAD[2] TC1/WO[0] !TCC0/WO[6] LED -17 | A17 | PA17 | HOST_ENABLE | !EIC/EXTINT[1] PTC/X[5] PTC/Y[11] !SERCOM1/PAD[3] !SERCOM2/PAD[3] TC1/WO[1] !TCC0/WO[7] HOST_ENABLE -18 | --- | ---- | NOT A PIN | NOT A PIN -19 | --- | ---- | NOT A PIN | NOT A PIN -20 | --- | ---- | NOT A PIN | NOT A PIN -21 | --- | ---- | NOT A PIN | NOT A PIN -22 | A22 | PA22 | I2C/SDA w/pullup | EIC/EXTINT[6] PTC/X[6] PTC/Y[12] !SERCOM1/PAD[0] SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[4] -23 | A23 | PA23 | I2C/SCL w/pullup | !EIC/EXTINT[7] PTC/X[7] PTC/Y[13] !SERCOM1/PAD[1] SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[5] -24 | --- | PA24 | USB_NEGATIVE | USB/DM -25 | --- | PA25 | USB_POSITIVE | USB/DP -26 | --- | ---- | NOT A PIN | NOT A PIN -27 | A27 | PA27 | | EIC/EXTINT[7] PTC/X[10] -28 | A28 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) -29 | --- | ---- | NOT A PIN | NOT A PIN -30 | A30 | PA30 | TX1 / SWD CLK | !EIC/EXTINT[2] !SERCOM1/PAD[0] SERCOM1/PAD[2] TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot -31 | A31 | PA31 | RX1 / SWD IO | EIC/EXTINT[3] !SERCOM1/PAD[1] SERCOM1/PAD[3] TC2/WO[1] !TCC0/WO[3] SWD IO -============================================================================================================================================ -``` - -### PIN_MAP_COMPACT -``` -============================================================================================================================================ -Arduino | Silk | Port | Alternate Function | Comments (! means not used with this peripheral assignment) ---------|-------|-------|-----------------------|------------------------------------------------------------------------------------------- -0 | A2 | PA02 | DAC | !EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT -1 | A3 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] -2 | A4 | PA04 | REFB / VM | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] -3 | A5 | PA05 | | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] -4 | A6 | PA06 | | !EIC/EXTINT[6] ADC/AIN[4] AC/AIN[2] PTC/Y[4] !SERCOM0/PAD[0] !SERCOM0/PAD[2] !TC2/WO[0] TCC0/WO[2] -5 | A7 | PA07 | | !EIC/EXTINT[7] ADC/AIN[5] AC/AIN[3] PTC/Y[5] !SERCOM0/PAD[1] !SERCOM0/PAD[3] !TC2/WO[1] TCC0/WO[3] -6 | A10 | PA10 | SPI MOSI / TX2 | EIC/EXTINT[2] ADC/AIN[8] PTC/X[2] PTC/Y[8] SERCOM0/PAD[2] !SERCOM2/PAD[2] !TC2/WO[0] !TCC0/WO[2] -7 | A11 | PA11 | SPI SCK / RX2 | !EIC/EXTINT[3] ADC/AIN[9] PTC/X[3] PTC/Y[9] SERCOM0/PAD[3] !SERCOM2/PAD[3] !TC2/WO[1] !TCC0/WO[3] -8 | A14 | PA14 | SPI MISO | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[0] -9 | A15 | PA15 | Button / SPI SS | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[1] Button -10 | A16 | PA16 | LED | EIC/EXTINT[0] PTC/X[4] PTC/Y[10] !SERCOM1/PAD[2] !SERCOM2/PAD[2] TC1/WO[0] !TCC0/WO[6] LED -11 | A17 | PA17 | HOST_ENABLE | !EIC/EXTINT[1] PTC/X[5] PTC/Y[11] !SERCOM1/PAD[3] !SERCOM2/PAD[3] TC1/WO[1] !TCC0/WO[7] HOST_ENABLE -12 | A22 | PA22 | I2C/SDA w/pullup | EIC/EXTINT[6] PTC/X[6] PTC/Y[12] !SERCOM1/PAD[0] SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[4] -13 | A23 | PA23 | I2C/SCL w/pullup | !EIC/EXTINT[7] PTC/X[7] PTC/Y[13] !SERCOM1/PAD[1] SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[5] -14 | A27 | PA27 | | EIC/EXTINT[7] PTC/X[10] -15 | A30 | PA30 | TX1 / SWD CLK | !EIC/EXTINT[2] !SERCOM1/PAD[0] SERCOM1/PAD[2] TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot -16 | A31 | PA31 | RX1 / SWD IO | EIC/EXTINT[3] !SERCOM1/PAD[1] SERCOM1/PAD[3] TC2/WO[1] !TCC0/WO[3] SWD IO -============================================================================================================================================ - -* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port - pin number printed on the board is also used in Arduino (but without the 'A') for all - of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). When - using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the top - left pin (A2). PIN_MAP_COMPACT uses less RAM. -* The following Arduino pin numbers are not mapped to a physical pin: 0, 1, 8, 9, 12, 13, 18, 19, 20, 21, 24, 25, 26, 28, and 29. -* Pins 24 and 25 are in use by USB (USB_NEGATIVE and USB_POSITIVE). -* Leave pin A30 floating (or use external pullup) during reset. -* Pins 8 and 9 are by default connected to the 32.768KHz crystal. -* The tone library uses TC2. -``` - - -## Board Configuration Notes - -* **Crystals** - * Either the 32.768KHz crystal or the 16MHz crystal can be used. Be sure to set the correct solder jumpers. - * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. - -* **LED (LED_BUILTIN)** - * Bring the pin HIGH to turn the LED on. - * The LED is enabled (solder jumper) by default. - -* **Button (BUTTON_BUILTIN)** - * Pressing the button will bring the pin LOW. The pullup must be enabled first. - * If the debouncing capacitor is connected, delay reading the pin at least 6ms after turning on the pullup. - * The button is connected to the Reset pin by default, but can be connected to pin 15 via the solder jumper. - * BTN pin is shared with SPI SS, so the button must be configured as reset (default) when using SPI. - -* **GPIO** - * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. - * Each pin can source or sink a maximum of 7 mA (when PER_ATTR_DRIVE_STRONG is set for the pin, enabled by default). - * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). - -* **Analog Inputs** - * 10 pins can be configured as ADC analog inputs. - * Each pin measures from ground to 3.3 volts by default. - * Each pin provides 10 bits of resolution (1024 values) by default. - * 12-bit resolution supported by using the analogReadResolution() function. - * The upper end of the measurement range can be changed using the analogReference() function. - * A reference voltage can be connected to REF. In this case, the capacitor should be enabled via the solder jumper. - -* **DAC** - * One analog output is available on pin 2. - * Provides a 10-bit voltage output with the analogWrite() function. - -* **PWM** - * 8 pins can be configured as PWM outputs. - * Each pin provides 8 bits of resolution (256 values) by default. - * 12-bit resolution supported by using the analogWriteResolution() function. - -* **External Interrupts** - * 8 pins can be configured with external interrupts. - -* **SERCOM** - * 3 SERCOM are available. - * Up to 2 UART instances - * 1 SPI instance - * 1 WIRE (I2C) instance - * The WIRE pullup resistors are enabled by default. - - - -## PinDescription table format - -### Note that in 1.6.18-beta-b1 a new compact table format was added. -The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE -to use a more compact format that uses only 4 bytes per pin (currently only available -for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used -(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to -pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC -column. Note that external libraries that reference the PinDescription table directly (uncommon) -will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which -is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. - -### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. -MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. -If using board variant files with the old format, the new core will still read the -table the old way, losing any new features introduced by the new column. Additionally, -new definitions have been added for D51, L21, and C21 support. - -### Each pin can have multiple functions. -The PinDescription table describes how each of the pins can be used by the Arduino -core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, -communications, etc.), and the PinDescription table configures which functions can -be used for each pin. This table is mainly accessed by the pinPeripheral function in -wiring_private.c, which is used to attach a pin to a particular peripheral function. -The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), -analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to -verify that the pin can perform the function requested, and to configure the pin for -that function. Most of the contents of pinMode() are now in pinPeripheral(). - -### Pin Mapping -There are different ways that pins can be mapped. Typically, there is no relation -between the arduino pin number used, and the actual port pin designator. Thus, the -pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, -a cross reference table is needed to find the arduino pin number. However, this results -in the least amount of space used by the table. Another method, used by default by the -MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino -pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins -are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added -for pins that are used for other purposes or for pins that do not exist (especially the -D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp -from the MT-D11 variant. The Xeno combines both methods, using the actual port pin -designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then -using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be -used, leaving the other pin for some number above 31. - -**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** - -### Port -This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### Pin -This is the pin (bit) within the port. Valid values are 0-31. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetPortPin() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column -using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, -use SetPortPin(NOT_A_PORT, 0). - -### PinType -This indicates what peripheral function the pin can be attached to. In most cases, -this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute -field. It can also be set to a specific peripheral. In this case, any attempt to -configure the pin (using pinPeripheral or pinMode) as anything else will fail (and -pinPeripheral will return -1). This can be used to prevent accidental re-configuration -of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin -is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See -WVariant.h for valid entries. These entries are also used as a parameter to -pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function -now calls pinPeripheral() with the desired mode. Note that this field is not used to -select between the different peripherals possible with each of the SERCOM and TIMER -functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE -is defined, PinType is not used (the pin is treated as PIO_MULTI). - -### PeripheralAttribute -This is an 8-bit bitfield used for various peripheral configuration. It is primarily -used to select between the different peripherals possible with each of the SERCOM and -TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four -pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on -the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. -Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the -pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, -buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are -two) is also selected here. Note that the D51 adds a third timer attribute and -requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. - -### PinAttribute -This is a 32-bit bitfield used to list all of the valid peripheral functions that a -pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain -attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL -includes all of the GPIO functions, while PIN_ATTR_TIMER includes both -PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). -PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for -limiting a pin to only input related functions or output functions. This allows a pin -to have a more flexible configuration, while restricting the direction (ie: to avoid -contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### TCChannel -This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available -on multiple pins. In general, only one pin should be configured in the pinDescription -table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column -to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on -the D21). See WVariant.h for valid entries. - -### ADCChannelNumber -This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC -instances, which are selected in the PeripheralAttribute column. See WVariant.h for -valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### ExtInt -This is the interrupt (if any) assigned to the pin. Some interrupt numbers are -available on multiple pins. In general, only one pin should be configured in the -pinDescription table per interrupt number. Thus, for example, if an interrupt was -needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid -entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetExtIntADC() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined -into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, -ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). - -### GCLKCCL -This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support -the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, -L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/MT_D11/debug_scripts/SAMD11D14AM.gdb b/variants/MT_D11/debug_scripts/SAMD11D14AM.gdb deleted file mode 100644 index ebd381b55..000000000 --- a/variants/MT_D11/debug_scripts/SAMD11D14AM.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd11d14am" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D11/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld b/variants/MT_D11/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld deleted file mode 100644 index 1e2d5f052..000000000 --- a/variants/MT_D11/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x1000, LENGTH = 0x00004000-0x1000 /* First 4KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x1000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D11/linker_scripts/gcc/No_Bootloader/flash_16KB.ld b/variants/MT_D11/linker_scripts/gcc/No_Bootloader/flash_16KB.ld deleted file mode 100644 index bd135b3dd..000000000 --- a/variants/MT_D11/linker_scripts/gcc/No_Bootloader/flash_16KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00004000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D11/openocd_scripts/SAMD11D14AM.cfg b/variants/MT_D11/openocd_scripts/SAMD11D14AM.cfg deleted file mode 100644 index 5cbf9770f..000000000 --- a/variants/MT_D11/openocd_scripts/SAMD11D14AM.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd11d14am -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/MT_D11/variant.cpp b/variants/MT_D11/variant.cpp deleted file mode 100644 index ec95c56e0..000000000 --- a/variants/MT_D11/variant.cpp +++ /dev/null @@ -1,243 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 26 April 2018 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - - -#include "variant.h" - -/* - * Pins descriptions - */ -#if defined(PIN_MAP_STANDARD) -#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) -const PinDescription g_APinDescription[]= -{ - // 0..1 pins don't exist - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - - // 2..7 - Analog capable pins (DAC available on 0) - { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel0 ) }, - { SetPortPin( PORTA, 3 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel1 ) }, - { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, - { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, - { SetPortPin( PORTA, 6 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel4 ) }, - { SetPortPin( PORTA, 7 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel5 ) }, - - // 8..9 are unused (pins in use by 32.768KHz crystal, which in turn is used by the Arduino core) - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - - // 10..11 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 9) - { SetPortPin( PORTA, 10 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel8 ) }, // SPI MOSI - { SetPortPin( PORTA, 11 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel9 ) }, // SPI SCK - - // 12..13 pins don't exist - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - - // 14..15 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 15) - { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel6 ) }, // SPI MISO - { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, // Button / SPI SS (unused) - - // 16..17 Digital functions (LED available on pin 10) - { SetPortPin( PORTA, 16 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_0, No_ADC_Channel ) }, // LED - { SetPortPin( PORTA, 17 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, - - // 18..21 pins don't exist - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - - // 22..23 SERCOM/I2C (Wire) or Digital functions - { SetPortPin( PORTA, 22 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, // SDA - { SetPortPin( PORTA, 23 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SCL - - // 24..26 are unused (25 and 26 in use by USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist) - { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM - { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - - // 27..29 Digital functions (pin 28 is Reset and pin 29 does not exist) - { SetPortPin( PORTA, 27 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_7, No_ADC_Channel ) }, - { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - - // 30..31 SERCOM/UART (Serial1) or Digital functions or Debug interface (SWD CLK and SWD IO) - { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH0, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // TX / SWD CLK - { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH1, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // RX / SWD IO -} ; -#else -const PinDescription g_APinDescription[]= -{ - // 0..1 pins don't exist - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 2..7 - Analog capable pins (DAC available on 2) - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH2, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH3, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 8..9 are unused (pins in use by 32.768KHz crystal, which in turn is used by the Arduino core) - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 10..11 - SERCOM/SPI (SPI) or Analog or Digital functions - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_2, GCLK_CCL_NONE }, // SPI MOSI - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SPI SCK - - // 12..13 pins don't exist - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 14..15 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 15) - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // SPI MISO - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, // Button / SPI SS (unused) - - // 16..17 Digital functions (LED available on pin 16) - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // LED - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 18..21 pins don't exist - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 22..23 SERCOM/I2C (Wire) or Digital functions - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // SDA - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SCL - - // 24..26 are unused (25 and 26 in use by USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist) - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 Digital functions (pin 28 is Reset and pin 29 does not exist) - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 SERCOM/UART (Serial1) or Digital functions or Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TX / SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // RX / SWD IO -} ; -#endif -#elif defined(PIN_MAP_COMPACT) -#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) -const PinDescription g_APinDescription[]= -{ - // 0..5 - Analog capable pins (DAC available on 0) - { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel0 ) }, - { SetPortPin( PORTA, 3 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel1 ) }, - { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, - { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, - { SetPortPin( PORTA, 6 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel4 ) }, - { SetPortPin( PORTA, 7 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel5 ) }, - - // 6..9 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 9) - { SetPortPin( PORTA, 10 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel8 ) }, // SPI MOSI - { SetPortPin( PORTA, 11 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel9 ) }, // SPI SCK - { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel6 ) }, // SPI MISO - { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, // Button / SPI SS (unused) - - // 10..11 Digital functions (LED available on pin 10) - { SetPortPin( PORTA, 16 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_0, No_ADC_Channel ) }, // LED - { SetPortPin( PORTA, 17 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, - - // 12..13 SERCOM/I2C (Wire) or Digital functions - { SetPortPin( PORTA, 22 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, // SDA - { SetPortPin( PORTA, 23 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SCL - - // 14 Digital functions - { SetPortPin( PORTA, 27 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_7, No_ADC_Channel ) }, - - // 15..16 SERCOM/UART (Serial1) or Digital functions or Debug interface (SWD CLK and SWD IO) - { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH0, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // TX / SWD CLK - { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH1, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // RX / SWD IO -} ; -#else -const PinDescription g_APinDescription[]= -{ - // 0..5 - Analog capable pins (DAC available on 0) - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH2, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH3, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 6..9 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 9) - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_2, GCLK_CCL_NONE }, // SPI MOSI - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SPI SCK - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // SPI MISO - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, // Button / SPI SS (unused) - - // 10..11 Digital functions (LED available on pin 10) - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // LED - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 12..13 SERCOM/I2C (Wire) or Digital functions - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // SDA - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SCL - - // 14 Digital functions - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, - - // 15..16 SERCOM/UART (Serial1) or Digital functions or Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TX / SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // RX / SWD IO -} ; -#endif -#endif - -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TC1, TC2 } ; - -// Multi-serial objects instantiation -SERCOM sercom0( SERCOM0 ) ; -SERCOM sercom1( SERCOM1 ) ; -SERCOM sercom2( SERCOM2 ) ; - -#if defined(ONE_UART) || defined(TWO_UART) -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - -void SERCOM1_Handler() -{ - Serial1.IrqHandler(); -} -#endif - -#if defined(TWO_UART) -Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; - -void SERCOM0_Handler() -{ - Serial2.IrqHandler(); -} -#endif diff --git a/variants/MT_D11/variant.h b/variants/MT_D11/variant.h deleted file mode 100644 index 22c7abb4c..000000000 --- a/variants/MT_D11/variant.h +++ /dev/null @@ -1,397 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 16 June 2018 by Justin Mattair (www.mattairtech.com) - * See README.md for documentation and pin mapping information - */ - -#ifndef _VARIANT_MATTAIRTECH_MT_D11_ -#define _VARIANT_MATTAIRTECH_MT_D11_ - -/* This variant requires the MattairTech SAM D|L|C Core for Arduino >= 1.6.18-beta-b1. - * The format is different than the stock Arduino SAMD core, - * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. - */ -#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10618 - -/*---------------------------------------------------------------------------- - * Clock Configuration - *----------------------------------------------------------------------------*/ - -/** Master clock frequency (also Fcpu frequency) */ -#define VARIANT_MCK (48000000ul) - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" -#include "sam.h" -#include "../../config.h" - -#ifdef __cplusplus -#include "SERCOM.h" -#include "Uart.h" -#endif // __cplusplus - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/*---------------------------------------------------------------------------- - * Pins - *----------------------------------------------------------------------------*/ - -// Number of pins defined in PinDescription array -#define PIN_MAP_STANDARD -//#define PIN_MAP_COMPACT - -#if defined PIN_MAP_STANDARD - #define NUM_PIN_DESCRIPTION_ENTRIES (32u) -#elif defined PIN_MAP_COMPACT - #define NUM_PIN_DESCRIPTION_ENTRIES (17u) -#else - #error "variant.h: You must set PIN_MAP_STANDARD or PIN_MAP_COMPACT" -#endif - -#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES -#define NUM_DIGITAL_PINS PINS_COUNT -#define NUM_ANALOG_INPUTS (10u) -#define NUM_ANALOG_OUTPUTS (1u) -#define analogInputToDigitalPin(p) (p) - -#define digitalPinToPort(P) ( &(PORT->Group[GetPort(P)]) ) -#define digitalPinToBitMask(P) ( 1 << GetPin(P) ) - -#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) - #define digitalPinHasPWM(P) ( g_APinDescription[P].ulTCChannel != NOT_ON_TIMER ) -#else - #define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) -#endif - -//#define analogInPinToBit(P) ( ) -#define portOutputRegister(port) ( &(port->OUT.reg) ) -#define portInputRegister(port) ( &(port->IN.reg) ) -#define portModeRegister(port) ( &(port->DIR.reg) ) - -/* - * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD - * architecture. If you need to check if a pin supports PWM you must - * use digitalPinHasPWM(..). - * - * https://github.com/arduino/Arduino/issues/1833 - */ -// #define digitalPinToTimer(P) - -/* LEDs - * None of these defines are currently used by the core. - * The MT-D11 onboard LED is on pin 16. - * The RX and TX LEDs are not present. - * You may optionally add them to any free pins. - */ -#if defined PIN_MAP_STANDARD -#define PIN_LED_13 (16u) -#define PIN_LED_RXL (10u) -#define PIN_LED_TXL (11u) -#elif defined PIN_MAP_COMPACT -#define PIN_LED_13 (10u) -#define PIN_LED_RXL (6u) -#define PIN_LED_TXL (7u) -#endif - -#define PIN_LED PIN_LED_13 -#define PIN_LED2 PIN_LED_RXL -#define PIN_LED3 PIN_LED_TXL -#define LED_BUILTIN PIN_LED_13 - -/* Buttons - * Note that Button A is connected to Reset by default. - * A solder jumper can be changed to route Button A to pin 15 instead. - * Thre is a debouncing capacitor connected, so delay reading the pin - * at least 6ms after turning on the pullup to allow the capacitor to charge. - */ -#if defined PIN_MAP_STANDARD -#define BUTTON (15u) -#elif defined PIN_MAP_COMPACT -#define BUTTON (9u) -#endif - -#define BUTTON_BUILTIN BUTTON - - -/* - * Analog pins - */ -#if defined PIN_MAP_STANDARD -#define PIN_A2 (2ul) -#define PIN_A3 (3ul) -#define PIN_A4 (4ul) -#define PIN_A5 (5ul) -#define PIN_A6 (6ul) -#define PIN_A7 (7ul) -#define PIN_A10 (10ul) -#define PIN_A11 (11ul) -#define PIN_A14 (14ul) -#define PIN_A15 (15ul) -#define PIN_DAC0 (2ul) -#elif defined PIN_MAP_COMPACT -#define PIN_A2 (0ul) -#define PIN_A3 (1ul) -#define PIN_A4 (2ul) -#define PIN_A5 (3ul) -#define PIN_A6 (4ul) -#define PIN_A7 (5ul) -#define PIN_A10 (6ul) -#define PIN_A11 (7ul) -#define PIN_A14 (8ul) -#define PIN_A15 (9ul) -#define PIN_DAC0 (0ul) -#endif - -static const uint8_t A2 = PIN_A2; -static const uint8_t A3 = PIN_A3; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; -static const uint8_t A6 = PIN_A6; -static const uint8_t A7 = PIN_A7; -static const uint8_t A10 = PIN_A10; -static const uint8_t A11 = PIN_A11; -static const uint8_t A14 = PIN_A14; -static const uint8_t A15 = PIN_A15; -static const uint8_t DAC0 = PIN_DAC0; - -#define ADC_RESOLUTION 12 - -// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 - -/* Set default analog voltage reference */ -#define VARIANT_AR_DEFAULT AR_DEFAULT - -/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ -#if defined PIN_MAP_STANDARD -#define REFA_PIN (3ul) -#define REFB_PIN (4ul) -#elif defined PIN_MAP_COMPACT -#define REFA_PIN (1ul) -#define REFB_PIN (2ul) -#endif - - -// The ATN pin may be used in the future as the first SPI chip select. -// On boards that do not have the Arduino physical form factor, it can to set to any free pin. -#if defined PIN_MAP_STANDARD -#define PIN_ATN (15ul) -#elif defined PIN_MAP_COMPACT -#define PIN_ATN (9ul) -#endif -static const uint8_t ATN = PIN_ATN; - - -/* - * Serial interfaces - */ -// Serial1 -#if defined PIN_MAP_STANDARD -#define PIN_SERIAL1_RX (31ul) -#define PIN_SERIAL1_TX (30ul) -#elif defined PIN_MAP_COMPACT -#define PIN_SERIAL1_RX (16ul) -#define PIN_SERIAL1_TX (15ul) -#endif - -#define PAD_SERIAL1_TX (UART_TX_PAD_2) -#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) -#define SERCOM_INSTANCE_SERIAL1 &sercom1 - -// Serial2 -#if defined PIN_MAP_STANDARD -#define PIN_SERIAL2_RX (11ul) -#define PIN_SERIAL2_TX (10ul) -#elif defined PIN_MAP_COMPACT -#define PIN_SERIAL2_RX (7ul) -#define PIN_SERIAL2_TX (6ul) -#endif - -#define PAD_SERIAL2_TX (UART_TX_PAD_2) -#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) -#define SERCOM_INSTANCE_SERIAL2 &sercom0 - - -/* - * SPI Interfaces - */ -#if defined(ONE_SPI) -#define SPI_INTERFACES_COUNT 1 -#else -#define SPI_INTERFACES_COUNT 0 -#endif - -#if defined PIN_MAP_STANDARD -#define PIN_SPI_MISO (14u) -#define PIN_SPI_MOSI (10u) -#define PIN_SPI_SCK (11u) -#define PIN_SPI_SS (15u) -#elif defined PIN_MAP_COMPACT -#define PIN_SPI_MISO (8u) -#define PIN_SPI_MOSI (6u) -#define PIN_SPI_SCK (7u) -#define PIN_SPI_SS (9u) -#endif - -#define PERIPH_SPI sercom0 -#define PAD_SPI_TX SPI_PAD_2_SCK_3 -#define PAD_SPI_RX SERCOM_RX_PAD_0 - -static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI = PIN_SPI_MOSI ; -static const uint8_t MISO = PIN_SPI_MISO ; -static const uint8_t SCK = PIN_SPI_SCK ; - - -/* - * Wire Interfaces - */ -#if defined(ONE_WIRE) -#define WIRE_INTERFACES_COUNT 1 -#else -#define WIRE_INTERFACES_COUNT 0 -#endif - -#if defined PIN_MAP_STANDARD -#define PIN_WIRE_SDA (22u) -#define PIN_WIRE_SCL (23u) -#elif defined PIN_MAP_COMPACT -#define PIN_WIRE_SDA (12u) -#define PIN_WIRE_SCL (13u) -#endif - -#define PERIPH_WIRE sercom2 -#define WIRE_IT_HANDLER SERCOM2_Handler - -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; - - -/* - * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to - * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. - */ -#if defined PIN_MAP_STANDARD -#define PIN_USB_DM (24ul) -#define PIN_USB_DP (25ul) -//#define PIN_USB_HOST_ENABLE (17ul) -#elif defined PIN_MAP_COMPACT -// USB pins not directly accessible using PIN_MAP_COMPACT -#define PIN_USB_DM (0ul) -#define PIN_USB_DP (0ul) -//#define PIN_USB_HOST_ENABLE (0ul) -#endif - -#define PIN_USB_HOST_ENABLE_VALUE HIGH - -#ifdef __cplusplus -} -#endif - - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#ifdef __cplusplus - -/* ========================= - * ===== SERCOM DEFINITION - * ========================= -*/ -extern SERCOM sercom0; -extern SERCOM sercom1; -extern SERCOM sercom2; - -extern Uart Serial1; -extern Uart Serial2; - -#endif - -// These serial port names are intended to allow libraries and architecture-neutral -// sketches to automatically default to the correct port name for a particular type -// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, -// the first hardware serial port whose RX/TX pins are not dedicated to another use. -// -// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor -// -// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial -// -// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library -// -// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. -// -// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX -// pins are NOT connected to anything by default. -#define SERIAL_PORT_USBVIRTUAL SerialUSB -// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). -// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. -// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. -// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get -// the USB Host debugging output. -#define SERIAL_PORT_MONITOR Serial1 -// Serial has no physical pins broken out, so it's not listed as HARDWARE port -#define SERIAL_PORT_HARDWARE Serial1 -#define SERIAL_PORT_HARDWARE_OPEN Serial1 - -// The MT-D11 does not have the EDBG support chip, which provides a USB-UART bridge -// accessible using Serial (the Arduino serial monitor is normally connected to this). -// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. -// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. -// Remember to use while(!Serial); to wait for a connection before Serial printing. - -// When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -#if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) -#define Serial SerialUSB -#else -#define Serial Serial1 -#endif - -#endif /* _VARIANT_MATTAIRTECH_MT_D11_ */ diff --git a/variants/MT_D21E/pins_arduino.h b/variants/MT_D21E/pins_arduino.h deleted file mode 100644 index db0e40c3d..000000000 --- a/variants/MT_D21E/pins_arduino.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// API compatibility -#include "variant.h" - diff --git a/variants/MT_D21E_revB/README.md b/variants/MT_D21E_revB/README.md deleted file mode 100644 index 2b510eb59..000000000 --- a/variants/MT_D21E_revB/README.md +++ /dev/null @@ -1,337 +0,0 @@ -# MattairTech MT-D21E (rev B) (ATSAMx21Exxx) - -``` -========================== MattairTech MT-D21E rev B (ATSAMx21Exxx) ===================== -Other COM PWM Analog INT Arduino* Arduino* INT PWM COM Other -========================================================================================= - ------------------- -XI32(+) | A0 RST | BOOT(+) -XO32(+) | A1 Gnd | -DAC * 2 | A2 Vbat | -REFA * 3 | A3 A31 | 31 * RX3 IO/B(+) -REFB * * 4 | A4 A30 | 30 * TX3 CLK(+) -DAC1(L) * * 5 | A5 NC | -LED(+) TCC10 * 6 | A6 A28 (D/C)| 28 * -VM TCC11 * 7 | A7 A27 | 27 * A/CS(+M) - SDA1/MISO1 TCC00 * NMI 8 | A8 A23 | 23 * TC41/TC01~ SS - SCL1/SS1 TCC01 * * 9 | A9 A22 | 22 * TC40/TC00~ MISO(+M) - TX1 TCC02 * 10 | A10 A19 | 19 * SCK(+M) - RX1 TCC03 * 11 | A11 A18 | 18 * MOSI(+M) - TX2/MOSI1 TC30/TC40~ * 14 | A14 A17 | 17 * TCC21 SCL/RX4(+) - RX2/SCK1 TC31/TC41~ 15 | A15 A16 | 16 * TCC20 SDA/TX4(+) - | NC NC | - M=Memory device installed | NC NC | ! Vcc is 3.3V by default. - | Vbus 3.3V| DO NOT exceed 3.6V on Vcc or -USB D- (D/L)(+), CAN TX (C) TC50 24 | A24 _____ Vcc | any IO pin with the D21 or -USB D+ (D/L)(+), CAN RX (C) TC51 25 | A25 | | Vin | L21 installed. 5V is allowed - | Gnd | USB | Gnd | ONLY with the C21 installed. - Chip Variant: ------------------- - D=D21, L=L21, C=C21 - -* Most pins can be used for more than one function. The port pin number printed - on the board is also used in Arduino (but without the 'A') for all of the supported - functions (ie: digitalRead(), analogRead(), analogWrite(), attachInterrupt(), etc.). -* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -* Leave pin A30 floating (or use external pullup) during reset. -* Tone available on TC5. - -+ This alternate function is enabled by default (+M functions enabled only when a memory - device is installed). Thus, the associated header pin cannot be used. Solder jumpers - can be used to enable or disable the alternate onboard function. - -~ When two timers are shown, the second is for L21/C21. TC5 is TC1 on the L21/C21. - -Silkscreen Legend: - Top: A circled pin means analog function and '*' means alternate function (see + above) - Bottom: A circled pin means analog function -``` - -## COM Arrangement When Using "L21 Only" Options - -The following applies only to the L21 and only when using menu options with (L21 only). -If using the L21 with the other options, use the above ASCII diagram. - -The additional options are: - -* FOUR_UART_ONE_WIRE_ONE_SPI -* FIVE_UART_NO_WIRE_ONE_SPI -* FIVE_UART_ONE_WIRE_NO_SPI -* SIX_UART_NO_WIRE_NO_SPI - -``` - ------------------- - | A0 RST | - | A1 Gnd | - | A2 Vbat | - | A3 A31 | - | A4 A30 | - | A5 NC | - | A6 NC | - | A7 A27 | CS (MEM) -TX3 | A8 A23 | SS/RX5 -RX3 | A9 A22 | MISO/TX5 -TX1 | A10 A19 | SCK -RX1 | A11 A18 | MOSI -TX2 | A14 A17 | SCL/RX5/RX6 -RX2 | A15 A16 | SDA/TX5/TX6 - | NC NC | - | NC NC | - | Vbus 3.3V| -USB/TX4 | A24 _____ Vcc | -USB/RX4 | A25 | | Vin | - | Gnd | USB | Gnd | - ------------------- - -* If the memory device is installed, it is connected to SPI (A18, A19, and A22). - If selecting an option without SPI, then A22 will become TX5. Be sure to keep the - memory device CS pin high. You can disconnect A27 from CS by desoldering J13. -* Serial4 is shared with the USB pins. Thus, USB cannot be used is using Serial4. Be - sure to disconnect the USB connector D- and D+ pins by desoldering J4 and J7. -* It is not necessary to use all serial instances, and they can be skipped. For - example, with the FIVE_UART_NO_WIRE_ONE_SPI option, USB can still be used by NOT - calling Serial4.begin(), thus not enabling the Serial4 peripheral. However, Serial5 - can still be used. -* Serial5 can be located either on pins A16/A17 or A22/A23. If SPI is enabled, then - Serial5 is on pins A16/A17, otherwise it is on pins A22/A23. -* SERCOM5 has low-power capabilities and can run in power domain PD0, at the expense - of DMA support and a few other features (see core README.md). It is available in two - locations only, A24/A25 and A22/A23. If SPI is enabled, then SERCOM5 is connected to - Serial4 on A24/A25 (must disable USB), otherwise, it uses Serial5 on A22/A23. -* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -``` - - -## Pins descriptions for the MattairTech MT-D21E (rev B) -``` -============================================================================================================================================ -Arduino | Silk | Port | Alternate Function | Comments (! means not used with this peripheral assignment) ---------|-------|-------|-----------------------|------------------------------------------------------------------------------------------- -0 | A0 | PA00 | Xin32 | Xin32 -1 | A1 | PA01 | Xout32 | Xout32 -2 | A2 | PA02 | DAC0 | !EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT -3 | A3 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] -4 | A4 | PA04 | REFB | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[0] !TCC0/WO[0] -5 | A5 | PA05 | DAC1(L21) | EIC/EXTINT[5] ADC/AIN[5] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[1] !TCC0/WO[1] DAC1(L21) -6 | A6 | PA06 | LED | !EIC/EXTINT[6] ADC/AIN[6] AC/AIN[2] PTC/Y[4] !SERCOM0/PAD[2] !TCC1/WO[0] LED -7 | A7 | PA07 | Voltage Measurement | !EIC/EXTINT[7] ADC/AIN[7] AC/AIN[3] PTC/Y[5] !SERCOM0/PAD[3] !TCC1/WO[1] -8 | A8 | PA08 | SDA1/MISO1 | EIC/NMI ADC/AIN[16] PTC/X[0] !SERCOM0/PAD[0] SERCOM2/PAD[0] TCC0/WO[0] !TCC1/WO[2] -9 | A9 | PA09 | SCL1/SS1 | EIC/EXTINT[9] ADC/AIN[17] PTC/X[1] !SERCOM0/PAD[1] SERCOM2/PAD[1] TCC0/WO[1] !TCC1/WO[3] -10 | A10 | PA10 | TX1 | !EIC/EXTINT[10] ADC/AIN[18] PTC/X[2] SERCOM0/PAD[2] !SERCOM2/PAD[2] !TCC1/WO[0] TCC0/WO[2] -11 | A11 | PA11 | RX1 | !EIC/EXTINT[11] ADC/AIN[19] PTC/X[3] SERCOM0/PAD[3] !SERCOM2/PAD[3] !TCC1/WO[1] TCC0/WO[3] -12 | --- | ---- | NOT A PIN | NOT A PIN -13 | --- | ---- | NOT A PIN | NOT A PIN -14 | A14 | PA14 | Xin, TX2/MOSI1 | EIC/EXTINT[14] SERCOM2/PAD[2] TC3/WO[0] !TCC0/WO[4] Xin, HOST_ENABLE -15 | A15 | PA15 | Xout, RX2/SCK1 | !EIC/EXTINT[15] SERCOM2/PAD[3] TC3/WO[1] !TCC0/WO[5] Xout -16 | A16 | PA16 | SDA/TX4 w/pullup | EIC/EXTINT[0] PTC/X[4] SERCOM1/PAD[0] SERCOM3/PAD[0] TCC2/WO[0] !TCC0/WO[6] -17 | A17 | PA17 | SCL/RX4 w/pullup | EIC/EXTINT[1] PTC/X[5] SERCOM1/PAD[1] SERCOM3/PAD[1] TCC2/WO[1] !TCC0/WO[7] -18 | A18 | PA18 | MOSI | EIC/EXTINT[2] PTC/X[6] !SERCOM1/PAD[2] SERCOM3/PAD[2] !TC3/WO[0] !TCC0/WO[2] -19 | A19 | PA19 | SCK | EIC/EXTINT[3] PTC/X[7] !SERCOM1/PAD[3] SERCOM3/PAD[3] !TC3/WO[1] !TCC0/WO[3] -20 | --- | ---- | NOT A PIN | NOT A PIN -21 | --- | ---- | NOT A PIN | NOT A PIN -22 | A22 | PA22 | MISO | EIC/EXTINT[6] PTC/X[10] SERCOM3/PAD[0] TC4/WO[0] !TCC0/WO[4] -23 | A23 | PA23 | SS | EIC/EXTINT[7] PTC/X[11] SERCOM3/PAD[1] TC4/WO[1] !TCC0/WO[5] -24 | A24- | PA24 | USB_NEGATIVE | USB/DM TC5/WO[0] -25 | A25+ | PA25 | USB_POSITIVE | USB/DP TC5/WO[1] -26 | --- | ---- | NOT A PIN | NOT A PIN -27 | A27 | PA27 | A/CS | EIC/EXTINT[15] A/CS (Jumper A / memory device chip select) -28 | A28 | PA28 | | EIC/EXTINT[8] -29 | --- | ---- | NOT A PIN | NOT A PIN -30 | A30 | PA30 | SWDCLK / TX3 | EIC/EXTINT[10] SERCOM1/PAD[2] TCC1/WO[0] SWD CLK, leave floating during boot -31 | A31 | PA31 | Button B / SWDIO / RX3| EIC/EXTINT[11] SERCOM1/PAD[3] TCC1/WO[1] Button B SWD IO --- | RST | ---- | | Reset, BOOT (double tap bootloader entry) -============================================================================================================================================ - -* Most pins can be used for more than one function. The port pin number printed - on the board is also used in Arduino (but without the 'A') for all of the supported - functions (ie: digitalRead(), analogRead(), analogWrite(), attachInterrupt(), etc.). -* The following Arduino pin numbers are not mapped to a physical pin: 12, 13, 20, 21, 26, and 29. -* Pins 24 and 25 are by default in use by USB (USB_NEGATIVE and USB_POSITIVE). -* TC5(D21) is available on these pins otherwise. The tone library uses TC5. -* A0 and A1 are by default connected to the 32.768KHz crystal. -* Leave pin A30 floating (or use external pullup) during reset. -* This table does not list "L21 Only" COM configurations. -``` - - -## Board Configuration Notes - -* **Crystals** - * Either the 32.768KHz crystal or the 16MHz crystal can be used. Be sure to set the correct solder jumpers. - * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. - -* **LED (LED_BUILTIN)** - * Bring the pin HIGH to turn the LED on. - * The LED is enabled (solder jumper) by default. - -* **Button (BUTTON_BUILTIN)** - * Button (B) is connected to the Reset pin by default, but can be connected to pin 31 via the solder jumper. - * Pressing the button will bring the pin LOW. The pullup must be enabled first. - * If the debouncing capacitor is connected, delay reading the pin at least 6ms after turning on the pullup. - -* **Jumper** - * Jumper (A) is connected (solder jumper) to pin 27 by default. - * Since this pin is shared with the optional memory device CD pin, **leave the jumper off** when a memory device is installed. - -* **GPIO** - * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. - * When PER_ATTR_DRIVE_STRONG is set for the pin (enabled by default), each pin can source or sink a maximum of: - * **D21:** 7mA high, 10mA low - * **L21:** 5mA high, 6mA low (8 high drive pins: 10mA high, 12mA low) - * **C21:** 6mA high, 10mA low (2 high drive pins (A10, A11): 12mA high, 20mA low) - * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). - -* **Analog Inputs** - * 10 pins can be configured as ADC analog inputs. - * Each pin measures from ground to 3.3 volts by default. - * Each pin provides 10 bits of resolution (1024 values) by default. - * 12-bit resolution supported by using the analogReadResolution() function. - * The upper end of the measurement range can be changed using the analogReference() function. - * A reference voltage can be connected to REFA or REFB. In these cases, the capacitors should be enabled via the solder jumpers. - -* **DAC** - * D21/C21: One 10-bit 350Ksps analog output is available on pin 2. - * L21: Two 12-bit 1Msps analog outputs are available on pins 2 and 5. - -* **PWM** - * 12 pins can be configured as PWM outputs. - * Each pin provides 8 bits of resolution (256 values) by default. - * 12-bit resolution supported by using the analogWriteResolution() function. - -* **External Interrupts** - * 14 pins can be configured with external interrupts. - -* **SERCOM** - * 4 SERCOM are available (6 on the L21E). - * Up to 4 UART instances (6 on the L21E). - * Up to 2 SPI instances. - * Up to 2 WIRE (I2C) instances. - * The WIRE pullup resistors are enabled by default. - - - -## PinDescription table format - -### Note that in 1.6.18-beta-b1 a new compact table format was added. -The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE -to use a more compact format that uses only 4 bytes per pin (currently only available -for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used -(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to -pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC -column. Note that external libraries that reference the PinDescription table directly (uncommon) -will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which -is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. - -### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. -MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. -If using board variant files with the old format, the new core will still read the -table the old way, losing any new features introduced by the new column. Additionally, -new definitions have been added for D51, L21, and C21 support. - -### Each pin can have multiple functions. -The PinDescription table describes how each of the pins can be used by the Arduino -core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, -communications, etc.), and the PinDescription table configures which functions can -be used for each pin. This table is mainly accessed by the pinPeripheral function in -wiring_private.c, which is used to attach a pin to a particular peripheral function. -The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), -analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to -verify that the pin can perform the function requested, and to configure the pin for -that function. Most of the contents of pinMode() are now in pinPeripheral(). - -### Pin Mapping -There are different ways that pins can be mapped. Typically, there is no relation -between the arduino pin number used, and the actual port pin designator. Thus, the -pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, -a cross reference table is needed to find the arduino pin number. However, this results -in the least amount of space used by the table. Another method, used by default by the -MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino -pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins -are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added -for pins that are used for other purposes or for pins that do not exist (especially the -D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp -from the MT-D11 variant. The Xeno combines both methods, using the actual port pin -designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then -using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be -used, leaving the other pin for some number above 31. - -**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** - -### Port -This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### Pin -This is the pin (bit) within the port. Valid values are 0-31. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetPortPin() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column -using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, -use SetPortPin(NOT_A_PORT, 0). - -### PinType -This indicates what peripheral function the pin can be attached to. In most cases, -this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute -field. It can also be set to a specific peripheral. In this case, any attempt to -configure the pin (using pinPeripheral or pinMode) as anything else will fail (and -pinPeripheral will return -1). This can be used to prevent accidental re-configuration -of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin -is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See -WVariant.h for valid entries. These entries are also used as a parameter to -pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function -now calls pinPeripheral() with the desired mode. Note that this field is not used to -select between the different peripherals possible with each of the SERCOM and TIMER -functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE -is defined, PinType is not used (the pin is treated as PIO_MULTI). - -### PeripheralAttribute -This is an 8-bit bitfield used for various peripheral configuration. It is primarily -used to select between the different peripherals possible with each of the SERCOM and -TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four -pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on -the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. -Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the -pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, -buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are -two) is also selected here. Note that the D51 adds a third timer attribute and -requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. - -### PinAttribute -This is a 32-bit bitfield used to list all of the valid peripheral functions that a -pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain -attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL -includes all of the GPIO functions, while PIN_ATTR_TIMER includes both -PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). -PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for -limiting a pin to only input related functions or output functions. This allows a pin -to have a more flexible configuration, while restricting the direction (ie: to avoid -contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### TCChannel -This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available -on multiple pins. In general, only one pin should be configured in the pinDescription -table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column -to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on -the D21). See WVariant.h for valid entries. - -### ADCChannelNumber -This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC -instances, which are selected in the PeripheralAttribute column. See WVariant.h for -valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### ExtInt -This is the interrupt (if any) assigned to the pin. Some interrupt numbers are -available on multiple pins. In general, only one pin should be configured in the -pinDescription table per interrupt number. Thus, for example, if an interrupt was -needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid -entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetExtIntADC() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined -into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, -ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). - -### GCLKCCL -This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support -the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, -L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/MT_D21E_revB/debug_scripts/SAMC21E15A.gdb b/variants/MT_D21E_revB/debug_scripts/SAMC21E15A.gdb deleted file mode 100644 index 070351956..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAMC21E15A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e15" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAMC21E16A.gdb b/variants/MT_D21E_revB/debug_scripts/SAMC21E16A.gdb deleted file mode 100644 index acabddd1d..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAMC21E16A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e16" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAMC21E17A.gdb b/variants/MT_D21E_revB/debug_scripts/SAMC21E17A.gdb deleted file mode 100644 index 4ae2dd669..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAMC21E17A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e17" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAMC21E18A.gdb b/variants/MT_D21E_revB/debug_scripts/SAMC21E18A.gdb deleted file mode 100644 index 2ca3b2cdc..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAMC21E18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e18" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAMD21E15A.gdb b/variants/MT_D21E_revB/debug_scripts/SAMD21E15A.gdb deleted file mode 100644 index 4ae3c04f0..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAMD21E15A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e15" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAMD21E16A.gdb b/variants/MT_D21E_revB/debug_scripts/SAMD21E16A.gdb deleted file mode 100644 index eb114b493..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAMD21E16A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e16" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAMD21E17A.gdb b/variants/MT_D21E_revB/debug_scripts/SAMD21E17A.gdb deleted file mode 100644 index cb1c7c44e..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAMD21E17A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e17" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAMD21E18A.gdb b/variants/MT_D21E_revB/debug_scripts/SAMD21E18A.gdb deleted file mode 100644 index 13ee2a173..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAMD21E18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAML21E15B.gdb b/variants/MT_D21E_revB/debug_scripts/SAML21E15B.gdb deleted file mode 100644 index f4cdf835f..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAML21E15B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e15" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAML21E16B.gdb b/variants/MT_D21E_revB/debug_scripts/SAML21E16B.gdb deleted file mode 100644 index 50e424551..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAML21E16B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e16" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAML21E17B.gdb b/variants/MT_D21E_revB/debug_scripts/SAML21E17B.gdb deleted file mode 100644 index 29323011f..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAML21E17B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e17" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/debug_scripts/SAML21E18B.gdb b/variants/MT_D21E_revB/debug_scripts/SAML21E18B.gdb deleted file mode 100644 index b48a48445..000000000 --- a/variants/MT_D21E_revB/debug_scripts/SAML21E18B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e18" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld deleted file mode 100644 index c541d8cd0..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00020000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld deleted file mode 100644 index a0b9f951f..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld deleted file mode 100644 index 5d8d047a9..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00008000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld deleted file mode 100644 index 3f7223790..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00010000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld deleted file mode 100644 index 07940acbd..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00020000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld deleted file mode 100644 index 825aee666..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld deleted file mode 100644 index 0d3aaf7a9..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00008000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld deleted file mode 100644 index 1c36f57e1..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00010000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_128KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_128KB.ld deleted file mode 100644 index 941e0adee..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00020000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_256KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_256KB.ld deleted file mode 100644 index 865514cbb..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_32KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_32KB.ld deleted file mode 100644 index 407777c80..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_64KB.ld b/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_64KB.ld deleted file mode 100644 index 6f3d4d3e8..000000000 --- a/variants/MT_D21E_revB/linker_scripts/gcc/No_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/MT_D21E_revB/openocd_scripts/SAMC21E15A.cfg b/variants/MT_D21E_revB/openocd_scripts/SAMC21E15A.cfg deleted file mode 100644 index b6b72ccda..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAMC21E15A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21e15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAMC21E16A.cfg b/variants/MT_D21E_revB/openocd_scripts/SAMC21E16A.cfg deleted file mode 100644 index 613b357da..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAMC21E16A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21e16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAMC21E17A.cfg b/variants/MT_D21E_revB/openocd_scripts/SAMC21E17A.cfg deleted file mode 100644 index c687b08f0..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAMC21E17A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21e17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAMC21E18A.cfg b/variants/MT_D21E_revB/openocd_scripts/SAMC21E18A.cfg deleted file mode 100644 index b87fb0116..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAMC21E18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21e18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAMD21E15A.cfg b/variants/MT_D21E_revB/openocd_scripts/SAMD21E15A.cfg deleted file mode 100644 index 0355cc401..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAMD21E15A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21e15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAMD21E16A.cfg b/variants/MT_D21E_revB/openocd_scripts/SAMD21E16A.cfg deleted file mode 100644 index 4eaf7acfc..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAMD21E16A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21e16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAMD21E17A.cfg b/variants/MT_D21E_revB/openocd_scripts/SAMD21E17A.cfg deleted file mode 100644 index 6b5641483..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAMD21E17A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21e17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAMD21E18A.cfg b/variants/MT_D21E_revB/openocd_scripts/SAMD21E18A.cfg deleted file mode 100644 index b99d610ef..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAMD21E18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21e18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAML21E15B.cfg b/variants/MT_D21E_revB/openocd_scripts/SAML21E15B.cfg deleted file mode 100644 index 82fbb0650..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAML21E15B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21e15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAML21E16B.cfg b/variants/MT_D21E_revB/openocd_scripts/SAML21E16B.cfg deleted file mode 100644 index c74f6102a..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAML21E16B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21e16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAML21E17B.cfg b/variants/MT_D21E_revB/openocd_scripts/SAML21E17B.cfg deleted file mode 100644 index 3b844e436..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAML21E17B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21e17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/MT_D21E_revB/openocd_scripts/SAML21E18B.cfg b/variants/MT_D21E_revB/openocd_scripts/SAML21E18B.cfg deleted file mode 100644 index 4e7a27fde..000000000 --- a/variants/MT_D21E_revB/openocd_scripts/SAML21E18B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21e18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/MT_D21E_revB/pins_arduino.h b/variants/MT_D21E_revB/pins_arduino.h deleted file mode 100644 index db0e40c3d..000000000 --- a/variants/MT_D21E_revB/pins_arduino.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// API compatibility -#include "variant.h" - diff --git a/variants/MT_D21E_revB/variant.cpp b/variants/MT_D21E_revB/variant.cpp deleted file mode 100644 index 371225065..000000000 --- a/variants/MT_D21E_revB/variant.cpp +++ /dev/null @@ -1,350 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 3 February 2018 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - - -#include "variant.h" - -/* - * Pins descriptions - */ -const PinDescription g_APinDescription[]= -{ -#if (SAMD21) - // 0..1 are unused by default (pins in use by 32.768KHz crystal, which is used by the Arduino core) - { PORTA, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 2..9 - Analog capable pins (DAC available on 2) - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // DAC - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // LED - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TCC1_CH1, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH0, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH1, ADC_Channel17, EXTERNAL_INT_9, GCLK_CCL_NONE }, - - // 10..11 - SERCOM/UART (Serial1) or Analog or Digital functions - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TCC0_CH2, ADC_Channel18, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TCC0_CH3, ADC_Channel19, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 12..13 pins don't exist - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 14..15 - SERCOM/UART (Serial2) or Digital functions - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, // HOST_ENABLE - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ATN - - // 16..17 SERCOM/I2C (Wire) or Serial4 or Digital functions -#if (defined(FOUR_UART) && !defined(USE_SIX_SERCOM)) - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#else - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#endif - - // 18..23 - SERCOM/SPI (SPI) or Digital functions (pins 20..21 do not exist) - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 Digital functions / A/CS (pin 29 does not exist) - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, // A/CS - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_8, GCLK_CCL_NONE }, // - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_11, GCLK_CCL_NONE }, // SWD IO - -#elif (SAML21) - // 0..1 are unused by default (pins in use by 32.768KHz crystal, which is used by the Arduino core) - { PORTA, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 2..9 - Analog capable pins (DAC available on 2) - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // DAC - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // LED - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH1, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - #if defined(USE_SIX_SERCOM) - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel17, EXTERNAL_INT_9, GCLK_CCL_NONE }, - #else - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel17, EXTERNAL_INT_9, GCLK_CCL_NONE }, - #endif - - // 10..11 - SERCOM/UART (Serial1) or Analog or Digital functions - #if defined(USE_SIX_SERCOM) - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH2, ADC_Channel18, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH3, ADC_Channel19, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - #else - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH2, ADC_Channel18, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH3, ADC_Channel19, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - #endif - - // 12..13 pins don't exist - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 14..15 - SERCOM/UART (Serial2) or Digital functions - #if defined(USE_SIX_SERCOM) - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, // HOST_ENABLE - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ATN - #else - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, // HOST_ENABLE - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ATN - #endif - - // 16..17 SERCOM/I2C (Wire) or Serial4 or Digital functions -#if (defined(FOUR_UART) && !defined(USE_SIX_SERCOM)) - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#else - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#endif - - // 18..23 - SERCOM/SPI (SPI) or Digital functions (pins 20..21 do not exist) - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - #if (defined(USE_SIX_SERCOM) && !defined(ONE_SPI)) - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH0, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH1, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, - #else - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH0, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH1, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, - #endif - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - #if defined(USE_SIX_SERCOM) - #if defined(ONE_SPI) - { PORTA, 24, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - #else - { PORTA, 24, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - #endif - #else - { PORTA, 24, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - #endif - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 Digital functions / A/CS (pin 29 does not exist) - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, // A/CS - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_11, GCLK_CCL_NONE }, // SWD IO - -#elif (SAMC21) - // 0..1 are unused by default (pins in use by 32.768KHz crystal, which is used by the Arduino core) - { PORTA, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 2..9 - Analog capable pins (DAC available on 2) - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // DAC - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // LED - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH1, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel10, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel11, EXTERNAL_INT_9, GCLK_CCL_NONE }, - - // 10..11 - SERCOM/UART (Serial1) or Analog or Digital functions - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH2, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH3, ADC_Channel11, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 12..13 pins don't exist - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 14..15 - SERCOM/UART (Serial2) or Digital functions - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, // HOST_ENABLE - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ATN - - // 16..17 SERCOM/I2C (Wire) or Serial4 or Digital functions -#if (defined(FOUR_UART) && !defined(USE_SIX_SERCOM)) - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#else - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#endif - - // 18..23 - SERCOM/SPI (SPI) or Digital functions (pins 20..21 do not exist) - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH0, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH1, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 Digital functions / A/CS (pin 29 does not exist) - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, // A/CS - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_8, GCLK_CCL_NONE }, // - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_11, GCLK_CCL_NONE }, // SWD IO - -#endif -} ; - -#if (SAMD21) -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ; -#else -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC0, TC1, TC4 } ; -#endif - -// Multi-serial objects instantiation -SERCOM sercom0( SERCOM0 ) ; -SERCOM sercom1( SERCOM1 ) ; -SERCOM sercom2( SERCOM2 ) ; -SERCOM sercom3( SERCOM3 ) ; -#if (SAML21) -SERCOM sercom4( SERCOM4 ) ; -SERCOM sercom5( SERCOM5 ) ; -#endif - -// All microcontrollers support configurations with four SERCOM -#if !defined(USE_SIX_SERCOM) -#if defined(ONE_UART) || defined(TWO_UART) || defined(THREE_UART) || defined(FOUR_UART) -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - -void SERCOM0_Handler() -{ - Serial1.IrqHandler(); -} -#endif - -#if defined(TWO_UART) || defined(THREE_UART) || defined(FOUR_UART) -Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; - -void SERCOM2_Handler() -{ - Serial2.IrqHandler(); -} -#endif - -#if defined(THREE_UART) || defined(FOUR_UART) -Uart Serial3( SERCOM_INSTANCE_SERIAL3, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX ) ; - -void SERCOM1_Handler() -{ - Serial3.IrqHandler(); -} -#endif - -#if defined(FOUR_UART) -Uart Serial4( SERCOM_INSTANCE_SERIAL4, PIN_SERIAL4_RX, PIN_SERIAL4_TX, PAD_SERIAL4_RX, PAD_SERIAL4_TX ) ; - -void SERCOM3_Handler() -{ - Serial4.IrqHandler(); -} -#endif - -// In addition to the configurations using four SERCOMs, the L21E supports USE_SIX_SERCOM -#else -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - -void SERCOM2_Handler() -{ - Serial1.IrqHandler(); -} - -Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; - -void SERCOM4_Handler() -{ - Serial2.IrqHandler(); -} - -Uart Serial3( SERCOM_INSTANCE_SERIAL3, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX ) ; - -void SERCOM0_Handler() -{ - Serial3.IrqHandler(); -} - -Uart Serial4( SERCOM_INSTANCE_SERIAL4, PIN_SERIAL4_RX, PIN_SERIAL4_TX, PAD_SERIAL4_RX, PAD_SERIAL4_TX ) ; - -#if defined(ONE_SPI) -void SERCOM5_Handler() -#else -void SERCOM3_Handler() -#endif -{ - Serial4.IrqHandler(); -} - -#if defined(FIVE_UART) || defined(SIX_UART) -Uart Serial5( SERCOM_INSTANCE_SERIAL5, PIN_SERIAL5_RX, PIN_SERIAL5_TX, PAD_SERIAL5_RX, PAD_SERIAL5_TX ) ; - -#if defined(ONE_SPI) -void SERCOM1_Handler() -#else -void SERCOM5_Handler() -#endif -{ - Serial5.IrqHandler(); -} -#endif - -#if defined(SIX_UART) -Uart Serial6( SERCOM_INSTANCE_SERIAL6, PIN_SERIAL6_RX, PIN_SERIAL6_TX, PAD_SERIAL6_RX, PAD_SERIAL6_TX ) ; - -void SERCOM1_Handler() -{ - Serial6.IrqHandler(); -} -#endif -#endif diff --git a/variants/MT_D21E_revB/variant.h b/variants/MT_D21E_revB/variant.h deleted file mode 100644 index 4fda4281d..000000000 --- a/variants/MT_D21E_revB/variant.h +++ /dev/null @@ -1,484 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 9 December 2016 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - -#ifndef _VARIANT_MATTAIRTECH_MT_D21E_REVB_ -#define _VARIANT_MATTAIRTECH_MT_D21E_REVB_ - -/* The definitions here need the MattairTech SAMD core >=1.6.8. - * The format is different than the stock Arduino SAMD core, - * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. - */ -#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10608 - -/*---------------------------------------------------------------------------- - * Clock Configuration - *----------------------------------------------------------------------------*/ - -/** Master clock frequency (also Fcpu frequency) */ -#define VARIANT_MCK (48000000ul) - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" -#include "sam.h" - -#ifdef __cplusplus -#include "SERCOM.h" -#include "Uart.h" -#endif // __cplusplus - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/*---------------------------------------------------------------------------- - * Pins - *----------------------------------------------------------------------------*/ - -// Number of pins defined in PinDescription array -#define NUM_PIN_DESCRIPTION_ENTRIES (32u) - -#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES -#define NUM_DIGITAL_PINS PINS_COUNT -#define NUM_ANALOG_INPUTS (10u) - -#if (SAMD || SAMC) -#define NUM_ANALOG_OUTPUTS (1u) -#elif (SAML) -#define NUM_ANALOG_OUTPUTS (2u) -#else -#error "variant.h: Unsupported chip" -#endif - -#define analogInputToDigitalPin(p) (p) - -#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) ) -#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin ) -//#define analogInPinToBit(P) ( ) -#define portOutputRegister(port) ( &(port->OUT.reg) ) -#define portInputRegister(port) ( &(port->IN.reg) ) -#define portModeRegister(port) ( &(port->DIR.reg) ) -#define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) - -/* - * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD - * architecture. If you need to check if a pin supports PWM you must - * use digitalPinHasPWM(..). - * - * https://github.com/arduino/Arduino/issues/1833 - */ -// #define digitalPinToTimer(P) - -/* LEDs - * None of these defines are currently used by the core. - * The MT-D21E (rev B) onboard LED is on pin 6. - * The RX and TX LEDs are not present. - * You may optionally add them to any free pins. - */ -#define PIN_LED_13 (6u) -#define PIN_LED_RXL (30u) -#define PIN_LED_TXL (31u) -#define PIN_LED PIN_LED_13 -#define PIN_LED2 PIN_LED_RXL -#define PIN_LED3 PIN_LED_TXL -#define LED_BUILTIN PIN_LED_13 - -/* Buttons - * Note that Button B is connected to Reset by default. - * A solder jumper can be changed to route Button B to pin 31 instead. - * There is a debouncing capacitor connected, so delay reading the pin for - * at least 45ms after turning on the pullup to allow the capacitor to charge. - */ -#define JUMPER_A (27u) -#define BUTTON_B (31u) -#define BUTTON_BUILTIN BUTTON_B - - -/* - * Analog pins - */ -#define PIN_A2 (2ul) -#define PIN_A3 (3ul) -#define PIN_A4 (4ul) -#define PIN_A5 (5ul) -#define PIN_A6 (6ul) -#define PIN_A7 (7ul) -#define PIN_A8 (8ul) -#define PIN_A9 (9ul) -#define PIN_A10 (10ul) -#define PIN_A11 (11ul) -#define PIN_DAC0 (2ul) -#if (SAML) -#define PIN_DAC1 (5ul) -#endif - -static const uint8_t A2 = PIN_A2; -static const uint8_t A3 = PIN_A3; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; -static const uint8_t A6 = PIN_A6; -static const uint8_t A7 = PIN_A7; -static const uint8_t A8 = PIN_A8; -static const uint8_t A9 = PIN_A9; -static const uint8_t A10 = PIN_A10; -static const uint8_t A11 = PIN_A11; -static const uint8_t DAC0 = PIN_DAC0; -#if (SAML) -static const uint8_t DAC1 = PIN_DAC1; -#endif - -#define ADC_RESOLUTION 12 - -// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 - -/* Set default analog voltage reference */ -#define VARIANT_AR_DEFAULT AR_DEFAULT - -/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ -#define REFA_PIN (3ul) -#define REFB_PIN (4ul) - - -// The ATN pin may be used in the future as the first SPI chip select. -// On boards that do not have the Arduino physical form factor, it can to set to any free pin. -#define PIN_ATN (15ul) -static const uint8_t ATN = PIN_ATN; - - -/* - * Serial interfaces - */ -#if ((defined(FOUR_UART) && (defined(ONE_SPI) || defined(ONE_WIRE))) || defined(FIVE_UART) || defined(SIX_UART)) - #if (SAML) - #define USE_SIX_SERCOM - #else - #error "variant.h: Only the L21E supports configurations with six SERCOM" - #endif -#endif - -// All microcontrollers support configurations with four SERCOM -#if !defined(USE_SIX_SERCOM) - -// Serial1 -#define PIN_SERIAL1_RX (11ul) -#define PIN_SERIAL1_TX (10ul) -#define PAD_SERIAL1_TX (UART_TX_PAD_2) -#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL1 &sercom0 - -// Serial2 -#define PIN_SERIAL2_RX (15ul) -#define PIN_SERIAL2_TX (14ul) -#define PAD_SERIAL2_TX (UART_TX_PAD_2) -#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL2 &sercom2 - -// Serial3 -#define PIN_SERIAL3_RX (31ul) -#define PIN_SERIAL3_TX (30ul) -#define PAD_SERIAL3_TX (UART_TX_PAD_2) -#define PAD_SERIAL3_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL3 &sercom1 - -// Serial4 -#define PIN_SERIAL4_RX (17ul) -#define PIN_SERIAL4_TX (16ul) -#define PAD_SERIAL4_TX (UART_TX_PAD_0) -#define PAD_SERIAL4_RX (SERCOM_RX_PAD_1) - -#define SERCOM_INSTANCE_SERIAL4 &sercom3 - -// In addition to the configurations using four SERCOMs, the L21E supports USE_SIX_SERCOM -#else - -// Serial1 -#define PIN_SERIAL1_RX (11ul) -#define PIN_SERIAL1_TX (10ul) -#define PAD_SERIAL1_TX (UART_TX_PAD_2) -#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL1 &sercom2 - -// Serial2 -#define PIN_SERIAL2_RX (15ul) -#define PIN_SERIAL2_TX (14ul) -#define PAD_SERIAL2_TX (UART_TX_PAD_2) -#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL2 &sercom4 - -// Serial3 -#define PIN_SERIAL3_RX (9ul) -#define PIN_SERIAL3_TX (8ul) -#define PAD_SERIAL3_TX (UART_TX_PAD_0) -#define PAD_SERIAL3_RX (SERCOM_RX_PAD_1) - -#define SERCOM_INSTANCE_SERIAL3 &sercom0 - -// Serial4 -#define PIN_SERIAL4_RX (25ul) -#define PIN_SERIAL4_TX (24ul) -#define PAD_SERIAL4_TX (UART_TX_PAD_2) -#define PAD_SERIAL4_RX (SERCOM_RX_PAD_3) - -#if defined(ONE_SPI) - #define SERCOM_INSTANCE_SERIAL4 &sercom5 -#else - #define SERCOM_INSTANCE_SERIAL4 &sercom3 -#endif - -// Serial5 (L21 only) -#if defined(ONE_SPI) - #define PIN_SERIAL5_RX (17ul) - #define PIN_SERIAL5_TX (16ul) - #define PAD_SERIAL5_TX (UART_TX_PAD_0) - #define PAD_SERIAL5_RX (SERCOM_RX_PAD_1) - #define SERCOM_INSTANCE_SERIAL5 &sercom1 -#else - #define PIN_SERIAL5_RX (23ul) - #define PIN_SERIAL5_TX (22ul) - #define PAD_SERIAL5_TX (UART_TX_PAD_0) - #define PAD_SERIAL5_RX (SERCOM_RX_PAD_1) - #define SERCOM_INSTANCE_SERIAL5 &sercom5 -#endif - -// Serial6 (L21 only) -#define PIN_SERIAL6_RX (17ul) -#define PIN_SERIAL6_TX (16ul) -#define PAD_SERIAL6_TX (UART_TX_PAD_0) -#define PAD_SERIAL6_RX (SERCOM_RX_PAD_1) - -#define SERCOM_INSTANCE_SERIAL6 &sercom1 -#endif - - -/* - * SPI Interfaces - */ -#if defined(TWO_SPI) -#define SPI_INTERFACES_COUNT 2 -#else -#define SPI_INTERFACES_COUNT 1 -#endif - -#define PIN_SPI_MISO (22u) -#define PIN_SPI_MOSI (18u) -#define PIN_SPI_SCK (19u) -#define PIN_SPI_SS (23u) -#define PERIPH_SPI sercom3 -#define PAD_SPI_TX SPI_PAD_2_SCK_3 -#define PAD_SPI_RX SERCOM_RX_PAD_0 - -static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI = PIN_SPI_MOSI ; -static const uint8_t MISO = PIN_SPI_MISO ; -static const uint8_t SCK = PIN_SPI_SCK ; - -#define PIN_SPI1_MISO (8u) -#define PIN_SPI1_MOSI (14u) -#define PIN_SPI1_SCK (15u) -#define PIN_SPI1_SS (9u) -#define PERIPH_SPI1 sercom2 -#define PAD_SPI1_TX SPI_PAD_2_SCK_3 -#define PAD_SPI1_RX SERCOM_RX_PAD_0 - -static const uint8_t SS1 = PIN_SPI1_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI1 = PIN_SPI1_MOSI ; -static const uint8_t MISO1 = PIN_SPI1_MISO ; -static const uint8_t SCK1 = PIN_SPI1_SCK ; - - -/* - * Wire Interfaces - */ -#if defined(TWO_WIRE) -#define WIRE_INTERFACES_COUNT 2 -#else -#define WIRE_INTERFACES_COUNT 1 -#endif - -#define PIN_WIRE_SDA (16u) -#define PIN_WIRE_SCL (17u) -#if defined(THREE_UART) && defined(ONE_WIRE) && defined(NO_SPI) - #define PERIPH_WIRE sercom3 - #define WIRE_IT_HANDLER SERCOM3_Handler -#else - #define PERIPH_WIRE sercom1 - #define WIRE_IT_HANDLER SERCOM1_Handler -#endif - -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; - -#define PIN_WIRE1_SDA (8u) -#define PIN_WIRE1_SCL (9u) -#define PERIPH_WIRE1 sercom2 -#define WIRE1_IT_HANDLER SERCOM2_Handler - -static const uint8_t SDA1 = PIN_WIRE1_SDA; -static const uint8_t SCL1 = PIN_WIRE1_SCL; - - -/* - * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to - * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. - */ -#define PIN_USB_DM (24ul) -#define PIN_USB_DP (25ul) -//#define PIN_USB_HOST_ENABLE (14ul) -#define PIN_USB_HOST_ENABLE_VALUE HIGH - -/* - * I2S Interfaces - */ -#define I2S_INTERFACES_COUNT 1 - -#define I2S_DEVICE 0 -#define I2S_CLOCK_GENERATOR 3 -#define PIN_I2S_SD (7u) -#define PIN_I2S_SCK (10u) -#define PIN_I2S_FS (11u) - -#ifdef __cplusplus -} -#endif - - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#ifdef __cplusplus - -/* ========================= - * ===== SERCOM DEFINITION - * ========================= -*/ -extern SERCOM sercom0; -extern SERCOM sercom1; -extern SERCOM sercom2; -extern SERCOM sercom3; -#if (SAML) -extern SERCOM sercom4; -extern SERCOM sercom5; -#endif - -extern Uart Serial1; -extern Uart Serial2; -extern Uart Serial3; -extern Uart Serial4; -#if (SAML) -extern Uart Serial5; -extern Uart Serial6; -#endif - -#endif - -// These serial port names are intended to allow libraries and architecture-neutral -// sketches to automatically default to the correct port name for a particular type -// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, -// the first hardware serial port whose RX/TX pins are not dedicated to another use. -// -// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor -// -// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial -// -// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library -// -// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. -// -// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX -// pins are NOT connected to anything by default. -#if (!SAMC) - #define SERIAL_PORT_USBVIRTUAL SerialUSB -#endif -// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). -// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. -// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. -// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get -// the USB Host debugging output. -#if (SAMC) - #define SERIAL_PORT_MONITOR Serial2 -#else - #define SERIAL_PORT_MONITOR Serial1 -#endif - -// Serial has no physical pins broken out, so it's not listed as HARDWARE port -#if (SAMC) - #define SERIAL_PORT_HARDWARE Serial2 - #define SERIAL_PORT_HARDWARE_OPEN Serial2 -#else - #define SERIAL_PORT_HARDWARE Serial1 - #define SERIAL_PORT_HARDWARE_OPEN Serial1 -#endif - -// The MT-D21E does not have the EDBG support chip, which provides a USB-UART bridge -// accessible using Serial (the Arduino serial monitor is normally connected to this). -// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. -// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. -// Remember to use while(!Serial); to wait for a connection before Serial printing. -#if (SAMC) - #define Serial Serial1 -#else - // When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. - #if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) - #define Serial SerialUSB - #else - #define Serial Serial1 - #endif -#endif - -#endif /* _VARIANT_MATTAIRTECH_MT_D21E_REVB_ */ diff --git a/variants/Xeno/README.md b/variants/Xeno/README.md deleted file mode 100644 index 68dc7c217..000000000 --- a/variants/Xeno/README.md +++ /dev/null @@ -1,263 +0,0 @@ -# MattairTech Xeno (ATSAMD51J/ATSAMD21J/ATSAML21J/ATSAMC21J) - -``` -============== MattairTech Xeno (ATSAMD51J/ATSAMD21J/ATSAML21J/ATSAMC21J) =============== -Alt COM PWM Analog INT Arduino* Arduino* INT Analog PWM COM Alt -========================================================================================= - ------------------- -INT1: | no / B3 | 49 I O VBAT / SDCD+ (SD) -MOTOR_ERROR/IMU_INT/AUX_SW_ERROR | external --- B5 | 48 I INT1+ - | pin \ B4 | 47 3SEN+ (3.3Vsw) -XBDS (XBEE) O 0 | B0 RST | BOOT -MECS+ (MEM) O 1 | B1 A31 | 31 RX1 IO (PROG) / XBDO+ (XBEE) -DAC0 O I 2 | A2 A30 | 30 CLK+ (PROG) -REFA* O 3 | A3 A28(D21/C21)| 28 SHCS (SPI) -3SVO (3.3Vsw) / REFB O 4 | A4 A27 | 27 I INT2 (XBEE, I2C) -DAC1* O 5 | A5 X34 (B2)| 34 O TC~ LED+ / XBRT (XBEE) -CMVO (CUR) O 6 | B6 X33(B16)| 33 I INT0+ / BTN -ASEN+ (HOST) O 7 | B7 X32(B17)| 32 I TC~ MOPS+ (MOTOR) - TX3 O I 8 | B8 A23 | 23 TC~ - RX3 O I 9 | B9 A22 | 22 TC~ -VHDV (VccH) MOSI1 O I 10 | A10 A21 | 21 TC~ -VBDV+ (Vbus) SCK1 O I 11 | A11 A20 | 20 I TC~ -XBCT (XBEE) SDA1/MISO1 TCC~ I 12 | A12 A19 | 19 TC~ CMRI (CUR) - SCL1/SS1 TCC~ I 13 | A13 A18 | 18 TC~ TX1 XBDI+ (XBEE) -HSEN (HOST) TC~ I 14 | B14 A17 | 17 SCL SCL+ (I2C) -BKFS+ (BUCK) TC~ 15 | B15 A16 | 16 SDA SDA+ (I2C) - | Vaux 3.3V | -USB D- (+) / CAN TX | A24 _____ VccL | ! VccL is 3.3V by default. -USB D+ (+) / CAN RX | A25 | | VccH | DO NOT exceed 3.6V on VccL or - | Gnd | USB | Gnd | any IO pin with the D51, D21, - USB: D51/D21/L21 only ------------------- or L21 installed. 5V allowed - CAN: D51/C21 only ONLY with the C21 installed. - 1------------------- By default, VccH is 5V. -MISO+ (SD, MEM, SPI) 43 (S43) | B30 Vcon | -SCK+ (SD, MEM, SPI) 44 (S44) | B23 SPI B22 | 45 (S45) MOSI+ (SD, MEM, SPI) -SHCS(SPI) / SDCS+(SD) 28/46 (S46) | A28(B31) Gnd | - ------------------- - - 1------------------- -L0+ (LVL) TX2 O I 35 (L35) | A6 A7 | 36 (L36) I O RX2 L1+ (LVL) -L2+ (LVL) TCC~ O NMI 37 (L37) | A8 LEVEL A9 | 38 (L38) O TCC~ L3+ (LVL) - | VccH SHIFT VccH | - | Gnd Gnd | -B1+ (MOTOR) TCC~ 39 (M39) | B10 B11 | 40 (M40) TCC~ B2+ (MOTOR) -A1+ (MOTOR) TCC~ 41 (M41) | B12 MOTOR B13 | 42 (M42) TCC~ A2+ (MOTOR) - | Vmotor Gnd | - ------------------- - -* Most pins can be used for more than one function. The same port pin number printed on - the board is also used in Arduino (without the 'A') for all of the Arduino functions. - DAC1 is present only on the D51 and L21. With the D51, REFA should be tied to VccL. - -+ This alternate function is enabled by default if installed. Thus, the associated header - pin cannot be used unless a solder jumper is available to disable the function. - -~ D21/L21/C21: 3 TCC (4,2,2 ch.), 5 TC (2 ch.). D51: 5 TCC (6,4,3,2,2 ch.), 6 TC (2 ch.). - The D51 adds timers to pins A10, A11, A30, A31, B30, B31, A6, A7, A16, A17, B8, and B9, - however, the timer on pin B17 is not present. - -I For the D51, the interrupt on pin A27 is moved to pin B15. - -* The D51 SERCOM configuration is different for UART and SPI. Third UART not available. - TX1=8, RX1=9, TX2=4, RX2=5, MOSI=23, MISO=21, SCK=22, MOSI1=38, MISO1=11, SCK1=37. - -Silkscreen Legend: - Top: A circle around pin is analog function, '~' is timer, small 'I' is interrupt - Bottom: A box around pin means 'Other' function enabled by default depending on variant -``` - - -## Board Configuration Notes - -* **Crystals** - * Either the 32.768KHz crystal or the 16MHz crystal can be used. These pins do not route to headers. - * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. - -* **LED (LED_BUILTIN)** - * Bring the pin HIGH to turn the LED on. - * The LED is enabled (solder jumper) by default. - -* **Button (BUTTON_BUILTIN)** - * Button is connected to the Reset pin by default, but can be connected to pin 33 (B16) via solder jumper J2. - * Pressing the button will bring the pin LOW. The pullup must be enabled first. - * A debouncing capacitor is connected, so delay reading the pin at least 10ms after turning on the pullup. - -* **GPIO** - * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. - * When PER_ATTR_DRIVE_STRONG is set for the pin (enabled by default), each pin can source or sink a maximum of: - * **D21:** 7mA high, 10mA low - * **L21:** 5mA high, 6mA low (8 high drive pins: 10mA high, 12mA low) - * **C21:** 6mA high, 10mA low (2 high drive pins (A10, A11): 12mA high, 20mA low) - * **D51:** 8mA high, 8mA low - * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). - -* **Analog Inputs** - * Up to 18 pins can be configured as ADC analog inputs. - * Each pin measures from ground to 3.3 volts by default. - * Each pin provides 10 bits of resolution (1024 values) by default. - * 12-bit resolution supported by using the analogReadResolution() function. - * The upper end of the measurement range can be changed using the analogReference() function. - * A reference voltage can be connected to REFA. In this case, the capacitors should be enabled via solder jumper J33. - -* **DAC** - * D21/C21: One 10-bit 350Ksps analog output is available on pin 2. - * L21/D51: Two 12-bit 1Msps analog outputs are available on pins 2 and 5. - -* **PWM** - * Up to 18 pins can be configured as PWM outputs (29 for D51). - * Each pin provides 8 bits of resolution (256 values) by default. - * 12-bit resolution supported by using the analogWriteResolution() function. - -* **External Interrupts** - * Up to 16 pins can be configured with external interrupts. - -* **SERCOM** - * 6 SERCOM are available. - * Up to 3 UART instances (two for D51). More in a future release. - * Up to 2 SPI instances. - * Up to 2 WIRE (I2C) instances. - * The WIRE pullup resistors are enabled by default. - -* **Special Notes for D51** - * Due to errata with the D51 DAC, VccL must be routed to the REFA pin with an external jumper wire. - * In order to use the SPI bus (Micro SD, optional memory device, SPI mode of Xbee radio): - * Needed because SERCOM5 on the D51 must use IOSET2. - * Solder a jumper wire between A21 and B30 (S43, pin 1 of the SPI header, MISO). - * Solder a jumper wire between A23 and B22 (S45, pin 4 of the SPI header, MOSI). - * Solder a jumper wire between A22 and B23 (S44, pin 3 of the SPI header, SCK). - * B22, B23, and B30 cannot be used for other purposes (leave floating) - - * In order to use the Xbee radio UART interface (use SPI mode to avoid this fix): - * Needed because D51 UART transmit data pinout options (TXPO) do not include TX on pad 2. - * Solder a jumper wire between B8 (SERCOM4, TX pad 0) and A18 (XBDI). Solder a jumper wire between B9 (SERCOM4, RX pad 1) and A31 (XBDO). - * A18 and A31 cannot be used for other purposes (leave floating) - - - -## PinDescription table format - -### Note that in 1.6.18-beta-b1 a new compact table format was added. -The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE -to use a more compact format that uses only 4 bytes per pin (currently only available -for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used -(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to -pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC -column. Note that external libraries that reference the PinDescription table directly (uncommon) -will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which -is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. - -### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. -MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. -If using board variant files with the old format, the new core will still read the -table the old way, losing any new features introduced by the new column. Additionally, -new definitions have been added for D51, L21, and C21 support. - -### Each pin can have multiple functions. -The PinDescription table describes how each of the pins can be used by the Arduino -core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, -communications, etc.), and the PinDescription table configures which functions can -be used for each pin. This table is mainly accessed by the pinPeripheral function in -wiring_private.c, which is used to attach a pin to a particular peripheral function. -The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), -analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to -verify that the pin can perform the function requested, and to configure the pin for -that function. Most of the contents of pinMode() are now in pinPeripheral(). - -### Pin Mapping -There are different ways that pins can be mapped. Typically, there is no relation -between the arduino pin number used, and the actual port pin designator. Thus, the -pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, -a cross reference table is needed to find the arduino pin number. However, this results -in the least amount of space used by the table. Another method, used by default by the -MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino -pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins -are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added -for pins that are used for other purposes or for pins that do not exist (especially the -D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp -from the MT-D11 variant. The Xeno combines both methods, using the actual port pin -designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then -using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be -used, leaving the other pin for some number above 31. - -**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** - -### Port -This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### Pin -This is the pin (bit) within the port. Valid values are 0-31. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetPortPin() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column -using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, -use SetPortPin(NOT_A_PORT, 0). - -### PinType -This indicates what peripheral function the pin can be attached to. In most cases, -this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute -field. It can also be set to a specific peripheral. In this case, any attempt to -configure the pin (using pinPeripheral or pinMode) as anything else will fail (and -pinPeripheral will return -1). This can be used to prevent accidental re-configuration -of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin -is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See -WVariant.h for valid entries. These entries are also used as a parameter to -pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function -now calls pinPeripheral() with the desired mode. Note that this field is not used to -select between the different peripherals possible with each of the SERCOM and TIMER -functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE -is defined, PinType is not used (the pin is treated as PIO_MULTI). - -### PeripheralAttribute -This is an 8-bit bitfield used for various peripheral configuration. It is primarily -used to select between the different peripherals possible with each of the SERCOM and -TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four -pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on -the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. -Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the -pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, -buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are -two) is also selected here. Note that the D51 adds a third timer attribute and -requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. - -### PinAttribute -This is a 32-bit bitfield used to list all of the valid peripheral functions that a -pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain -attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL -includes all of the GPIO functions, while PIN_ATTR_TIMER includes both -PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). -PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for -limiting a pin to only input related functions or output functions. This allows a pin -to have a more flexible configuration, while restricting the direction (ie: to avoid -contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### TCChannel -This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available -on multiple pins. In general, only one pin should be configured in the pinDescription -table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column -to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on -the D21). See WVariant.h for valid entries. - -### ADCChannelNumber -This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC -instances, which are selected in the PeripheralAttribute column. See WVariant.h for -valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### ExtInt -This is the interrupt (if any) assigned to the pin. Some interrupt numbers are -available on multiple pins. In general, only one pin should be configured in the -pinDescription table per interrupt number. Thus, for example, if an interrupt was -needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid -entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetExtIntADC() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined -into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, -ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). - -### GCLKCCL -This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support -the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, -L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/Xeno/debug_scripts/SAMC21J15A.gdb b/variants/Xeno/debug_scripts/SAMC21J15A.gdb deleted file mode 100644 index e26cd21fb..000000000 --- a/variants/Xeno/debug_scripts/SAMC21J15A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21j15" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMC21J16A.gdb b/variants/Xeno/debug_scripts/SAMC21J16A.gdb deleted file mode 100644 index 6851f6b22..000000000 --- a/variants/Xeno/debug_scripts/SAMC21J16A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21j16" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMC21J17A.gdb b/variants/Xeno/debug_scripts/SAMC21J17A.gdb deleted file mode 100644 index 13dc5c5ed..000000000 --- a/variants/Xeno/debug_scripts/SAMC21J17A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21j17" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMC21J18A.gdb b/variants/Xeno/debug_scripts/SAMC21J18A.gdb deleted file mode 100644 index 81ea4cca2..000000000 --- a/variants/Xeno/debug_scripts/SAMC21J18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21j18" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMD21J15A.gdb b/variants/Xeno/debug_scripts/SAMD21J15A.gdb deleted file mode 100644 index 3e2147946..000000000 --- a/variants/Xeno/debug_scripts/SAMD21J15A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21j15" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMD21J16A.gdb b/variants/Xeno/debug_scripts/SAMD21J16A.gdb deleted file mode 100644 index 45b07adf8..000000000 --- a/variants/Xeno/debug_scripts/SAMD21J16A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21j16" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMD21J17A.gdb b/variants/Xeno/debug_scripts/SAMD21J17A.gdb deleted file mode 100644 index bad81e6a4..000000000 --- a/variants/Xeno/debug_scripts/SAMD21J17A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21j17" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMD21J18A.gdb b/variants/Xeno/debug_scripts/SAMD21J18A.gdb deleted file mode 100644 index 12fd6a422..000000000 --- a/variants/Xeno/debug_scripts/SAMD21J18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21j18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMD51J18A.gdb b/variants/Xeno/debug_scripts/SAMD51J18A.gdb deleted file mode 100644 index f62cc56d1..000000000 --- a/variants/Xeno/debug_scripts/SAMD51J18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51j18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMD51J19A.gdb b/variants/Xeno/debug_scripts/SAMD51J19A.gdb deleted file mode 100644 index 6d4b6057f..000000000 --- a/variants/Xeno/debug_scripts/SAMD51J19A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51j19" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAMD51J20A.gdb b/variants/Xeno/debug_scripts/SAMD51J20A.gdb deleted file mode 100644 index d5e4e596b..000000000 --- a/variants/Xeno/debug_scripts/SAMD51J20A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51j20" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAML21J16B.gdb b/variants/Xeno/debug_scripts/SAML21J16B.gdb deleted file mode 100644 index 063110e68..000000000 --- a/variants/Xeno/debug_scripts/SAML21J16B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21j16" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAML21J17B.gdb b/variants/Xeno/debug_scripts/SAML21J17B.gdb deleted file mode 100644 index d400b5be5..000000000 --- a/variants/Xeno/debug_scripts/SAML21J17B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21j17" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/debug_scripts/SAML21J18B.gdb b/variants/Xeno/debug_scripts/SAML21J18B.gdb deleted file mode 100644 index 2eb86f9f3..000000000 --- a/variants/Xeno/debug_scripts/SAML21J18B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21j18" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld b/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld deleted file mode 100644 index c541d8cd0..000000000 --- a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00020000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld b/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld deleted file mode 100644 index a0b9f951f..000000000 --- a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld b/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld deleted file mode 100644 index 5d8d047a9..000000000 --- a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00008000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld b/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld deleted file mode 100644 index 3f7223790..000000000 --- a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00010000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_1MB.ld b/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_1MB.ld deleted file mode 100644 index 93f85ccf1..000000000 --- a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_1MB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00100000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld b/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld deleted file mode 100644 index b541a7a7c..000000000 --- a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld b/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld deleted file mode 100644 index e773c4011..000000000 --- a/variants/Xeno/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00080000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld b/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld deleted file mode 100644 index 07940acbd..000000000 --- a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00020000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld b/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld deleted file mode 100644 index 825aee666..000000000 --- a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld b/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld deleted file mode 100644 index 0d3aaf7a9..000000000 --- a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00008000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld b/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld deleted file mode 100644 index 1c36f57e1..000000000 --- a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00010000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_1MB.ld b/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_1MB.ld deleted file mode 100644 index 6c8a50c79..000000000 --- a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_1MB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00100000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld b/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld deleted file mode 100644 index 6a1504ce3..000000000 --- a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld b/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld deleted file mode 100644 index ab041e7dd..000000000 --- a/variants/Xeno/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00080000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_128KB.ld b/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_128KB.ld deleted file mode 100644 index 941e0adee..000000000 --- a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00020000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_256KB.ld b/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_256KB.ld deleted file mode 100644 index 865514cbb..000000000 --- a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_32KB.ld b/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_32KB.ld deleted file mode 100644 index 407777c80..000000000 --- a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_64KB.ld b/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_64KB.ld deleted file mode 100644 index 6f3d4d3e8..000000000 --- a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_1MB.ld b/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_1MB.ld deleted file mode 100644 index 9afa3cabc..000000000 --- a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_1MB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld b/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld deleted file mode 100644 index 6c42fe70f..000000000 --- a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld b/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld deleted file mode 100644 index 11c2ad812..000000000 --- a/variants/Xeno/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno/openocd_scripts/SAMC21J15A.cfg b/variants/Xeno/openocd_scripts/SAMC21J15A.cfg deleted file mode 100644 index 1627bc1d1..000000000 --- a/variants/Xeno/openocd_scripts/SAMC21J15A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21j15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMC21J16A.cfg b/variants/Xeno/openocd_scripts/SAMC21J16A.cfg deleted file mode 100644 index f023da3f7..000000000 --- a/variants/Xeno/openocd_scripts/SAMC21J16A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21j16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMC21J17A.cfg b/variants/Xeno/openocd_scripts/SAMC21J17A.cfg deleted file mode 100644 index ab42301f6..000000000 --- a/variants/Xeno/openocd_scripts/SAMC21J17A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21j17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMC21J18A.cfg b/variants/Xeno/openocd_scripts/SAMC21J18A.cfg deleted file mode 100644 index 6405303fe..000000000 --- a/variants/Xeno/openocd_scripts/SAMC21J18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21j18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMD21J15A.cfg b/variants/Xeno/openocd_scripts/SAMD21J15A.cfg deleted file mode 100644 index 62eaa7f81..000000000 --- a/variants/Xeno/openocd_scripts/SAMD21J15A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21j15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMD21J16A.cfg b/variants/Xeno/openocd_scripts/SAMD21J16A.cfg deleted file mode 100644 index 8126a24ba..000000000 --- a/variants/Xeno/openocd_scripts/SAMD21J16A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21j16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMD21J17A.cfg b/variants/Xeno/openocd_scripts/SAMD21J17A.cfg deleted file mode 100644 index 4888424cf..000000000 --- a/variants/Xeno/openocd_scripts/SAMD21J17A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21j17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMD21J18A.cfg b/variants/Xeno/openocd_scripts/SAMD21J18A.cfg deleted file mode 100644 index 083166bd0..000000000 --- a/variants/Xeno/openocd_scripts/SAMD21J18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21j18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMD51J18A.cfg b/variants/Xeno/openocd_scripts/SAMD51J18A.cfg deleted file mode 100644 index ba41ff29e..000000000 --- a/variants/Xeno/openocd_scripts/SAMD51J18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd51j18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMD51J19A.cfg b/variants/Xeno/openocd_scripts/SAMD51J19A.cfg deleted file mode 100644 index 9824ace30..000000000 --- a/variants/Xeno/openocd_scripts/SAMD51J19A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd51j19 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAMD51J20A.cfg b/variants/Xeno/openocd_scripts/SAMD51J20A.cfg deleted file mode 100644 index f816759e1..000000000 --- a/variants/Xeno/openocd_scripts/SAMD51J20A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd51j20 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAML21J16B.cfg b/variants/Xeno/openocd_scripts/SAML21J16B.cfg deleted file mode 100644 index 9d2a32500..000000000 --- a/variants/Xeno/openocd_scripts/SAML21J16B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21j16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAML21J17B.cfg b/variants/Xeno/openocd_scripts/SAML21J17B.cfg deleted file mode 100644 index 9791acb19..000000000 --- a/variants/Xeno/openocd_scripts/SAML21J17B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21j17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/Xeno/openocd_scripts/SAML21J18B.cfg b/variants/Xeno/openocd_scripts/SAML21J18B.cfg deleted file mode 100644 index acf8883a6..000000000 --- a/variants/Xeno/openocd_scripts/SAML21J18B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21j18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/Xeno/pins_arduino.h b/variants/Xeno/pins_arduino.h deleted file mode 100644 index db0e40c3d..000000000 --- a/variants/Xeno/pins_arduino.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// API compatibility -#include "variant.h" - diff --git a/variants/Xeno/variant.cpp b/variants/Xeno/variant.cpp deleted file mode 100644 index d55a91aa3..000000000 --- a/variants/Xeno/variant.cpp +++ /dev/null @@ -1,403 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 29 January 2018 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - - -#include "variant.h" - -/* - * Pins descriptions - */ -const PinDescription g_APinDescription[]= -{ -#if (SAMD51) - // 0..11 - Analog capable pins - { PORTB, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel12, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel13, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, ADC_Channel0, EXTERNAL_INT_8, GCLK_CCL_NONE }, - { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, ADC_Channel1, EXTERNAL_INT_9, GCLK_CCL_NONE }, - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH2, ADC_Channel10, EXTERNAL_INT_10, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, ADC_Channel11, EXTERNAL_INT_11, GCLK_CCL_NONE }, - - // 12..Digital functions - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, - { PORTB, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, - { PORTB, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH4, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH6, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH7, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 - Digital functions - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO - - // 32..34 - X pins - { PORTB, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // X32 - { PORTB, 16, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // X33 - { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH2, ADC_Channel14, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // X34, LED - - // 35..38 - Level Shifter Header - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // L35 - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // L36 - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH0, ADC_Channel2, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // L37 - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC0_CH1, ADC_Channel3, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // L38 - - // 39..42 - Motor Controller Header - { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M39 - { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M40 - { PORTB, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC3_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M41 - { PORTB, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M42 - - // 43..46 - SPI Header - { PORTB, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S43 - { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S44 - { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S45 - { PORTB, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S46 - - // 47..49 - No header pins - { PORTB, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 47 - { PORTB, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, // 48 - { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel15, EXTERNAL_INT_3, GCLK_CCL_NONE }, // 49 - -#elif (SAMD21) - // 0..11 - Analog capable pins - { PORTB, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel14, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel15, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, - { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_9, GCLK_CCL_NONE }, - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_10, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, - - // 12..Digital functions - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, - { PORTB, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, - { PORTB, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC7_CH0, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC7_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 - Digital functions - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO - - // 32..34 - X pins - { PORTB, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC6_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // X32 - { PORTB, 16, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // X33 - { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC6_CH0, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // X34, LED - - // 35..38 - Level Shifter Header - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // L35 - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // L36 - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC1_CH2, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // L37 - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TCC1_CH3, ADC_Channel17, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // L38 - - // 39..42 - Motor Controller Header - { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M39 - { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M40 - { PORTB, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M41 - { PORTB, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M42 - - // 43..46 - SPI Header - { PORTB, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S43 - { PORTB, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S44 - { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S45 - { PORTB, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S46 - - // 47..49 - No header pins - { PORTB, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 47 - { PORTB, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, // 48 - { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_3, GCLK_CCL_NONE }, // 49 - -#elif (SAML21) - // 0..11 - Analog capable pins - { PORTB, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel14, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel15, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, - { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_9, GCLK_CCL_NONE }, - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_10, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, - - // 12..Digital functions - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, - { PORTB, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, - { PORTB, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 - Digital functions - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO - - // 32..34 - X pins - { PORTB, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // X32 - { PORTB, 16, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // X33 - { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC2_CH0, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // X34, LED - - // 35..38 - Level Shifter Header - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // L35 - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // L36 - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH2, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // L37 - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH3, ADC_Channel17, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // L38 - - // 39..42 - Motor Controller Header - { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M39 - { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M40 - { PORTB, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M41 - { PORTB, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M42 - - // 43..46 - SPI Header - { PORTB, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S43 - { PORTB, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S44 - { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S45 - { PORTB, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S46 - - // 47..49 - No header pins - { PORTB, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 47 - { PORTB, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, // 48 - { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_3, GCLK_CCL_NONE }, // 49 - -#elif (SAMC21) - // 0..11 - Analog capable pins - { PORTB, 0, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 1, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_8, GCLK_CCL_NONE }, - { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_9, GCLK_CCL_NONE }, - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_10, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_11, GCLK_CCL_NONE }, - - // 12..Digital functions - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, - { PORTB, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, - { PORTB, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 - Digital functions - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO - - // 32..34 - X pins - { PORTB, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // X32 - { PORTB, 16, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // X33 - { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC2_CH0, ADC_Channel2, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // X34, LED - - // 35..38 - Level Shifter Header - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // L35 - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // L36 - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH2, ADC_Channel10, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // L37 - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH3, ADC_Channel11, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // L38 - - // 39..42 - Motor Controller Header - { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M39 - { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M40 - { PORTB, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M41 - { PORTB, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M42 - - // 43..46 - SPI Header - { PORTB, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S43 - { PORTB, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S44 - { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S45 - { PORTB, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S46 - - // 47..49 - No header pins - { PORTB, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 47 - { PORTB, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, // 48 - { PORTB, 3, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_3, GCLK_CCL_NONE }, // 49 - -#else - #error "variant.cpp: Unsupported chip" -#endif -} ; - -#if (SAMD21) -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5, TC6, TC7 } ; -#elif (SAMC21 || SAML21) -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC0, TC1, TC2, TC3, TC4 } ; -#elif (SAMD51) -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TCC3, TCC4, TC0, TC1, TC2, TC3, TC4, TC5 } ; -#endif - -// Multi-serial objects instantiation -SERCOM sercom0( SERCOM0 ) ; -SERCOM sercom1( SERCOM1 ) ; -SERCOM sercom2( SERCOM2 ) ; -SERCOM sercom3( SERCOM3 ) ; -SERCOM sercom4( SERCOM4 ) ; -SERCOM sercom5( SERCOM5 ) ; - -#if defined(ONE_UART) || defined(TWO_UART) || defined(THREE_UART) -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - - #if (SAMD51) - void SERCOM4_0_Handler(void) { - Serial1.dataRegisterEmptyHandler(); - } - - void SERCOM4_2_Handler(void) { - Serial1.availableDataHandler(); - } - - void SERCOM4_3_Handler(void) { - Serial1.errorHandler(); - } - #else - void SERCOM1_Handler() { - Serial1.IrqHandler(); - } - #endif -#endif - -#if defined(TWO_UART) || defined(THREE_UART) -Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; - - #if (SAMD51) - void SERCOM0_0_Handler(void) { - Serial2.dataRegisterEmptyHandler(); - } - - void SERCOM0_2_Handler(void) { - Serial2.availableDataHandler(); - } - - void SERCOM0_3_Handler(void) { - Serial2.errorHandler(); - } - #else - void SERCOM0_Handler() { - Serial2.IrqHandler(); - } - #endif -#endif - -#if defined(THREE_UART) -Uart Serial3( SERCOM_INSTANCE_SERIAL3, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX ) ; - - #if (SAMD51) - void SERCOM4_0_Handler(void) { - Serial3.dataRegisterEmptyHandler(); - } - - void SERCOM4_2_Handler(void) { - Serial3.availableDataHandler(); - } - - void SERCOM4_3_Handler(void) { - Serial3.errorHandler(); - } - #else - void SERCOM4_Handler() { - Serial3.IrqHandler(); - } - #endif -#endif diff --git a/variants/Xeno/variant.h b/variants/Xeno/variant.h deleted file mode 100644 index 6344c0663..000000000 --- a/variants/Xeno/variant.h +++ /dev/null @@ -1,501 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 29 January 2018 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - -#ifndef _VARIANT_MATTAIRTECH_XENO_ -#define _VARIANT_MATTAIRTECH_XENO_ - -/* The definitions here need the MattairTech SAMD core >=1.6.8. - * The format is different than the stock Arduino SAMD core, - * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. - */ -#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10608 - -/*---------------------------------------------------------------------------- - * Clock Configuration - *----------------------------------------------------------------------------*/ - -/* Master clock frequency (also Fcpu frequency). With the D51, this can be - * either 120000000ul or 48000000ul (selected in the menu). See README.md. - */ -#define VARIANT_MCK (F_CPU) - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* Define CORTEX_M_CACHE_ENABLED to enable the Cortex M cache (D51 only). - */ -#define CORTEX_M_CACHE_ENABLED - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" -#include "sam.h" - -#ifdef __cplusplus -#include "SERCOM.h" -#include "Uart.h" -#endif // __cplusplus - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/*---------------------------------------------------------------------------- - * Pins - *----------------------------------------------------------------------------*/ - -// Number of pins defined in PinDescription array -#define NUM_PIN_DESCRIPTION_ENTRIES (50u) - -#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES -#define NUM_DIGITAL_PINS PINS_COUNT -#define NUM_ANALOG_INPUTS (18u) - -#if (SAMD21 || SAMC21) -#define NUM_ANALOG_OUTPUTS (1u) -#elif (SAMD51 || SAML21) -#define NUM_ANALOG_OUTPUTS (2u) -#else -#error "variant.h: Unsupported chip" -#endif - -#define analogInputToDigitalPin(p) (p) - -#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) ) -#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin ) -//#define analogInPinToBit(P) ( ) -#define portOutputRegister(port) ( &(port->OUT.reg) ) -#define portInputRegister(port) ( &(port->IN.reg) ) -#define portModeRegister(port) ( &(port->DIR.reg) ) -#define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) - -/* - * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD - * architecture. If you need to check if a pin supports PWM you must - * use digitalPinHasPWM(..). - * - * https://github.com/arduino/Arduino/issues/1833 - */ -// #define digitalPinToTimer(P) - -/* LEDs - * None of these defines are currently used by the core. - * The Xeno onboard LED is on pin 34. - * The RX and TX LEDs are not present. - * You may optionally add them to any free pins. - */ -#define PIN_LED_13 (34u) -#define PIN_LED_RXL (22u) -#define PIN_LED_TXL (23u) -#define PIN_LED PIN_LED_13 -#define PIN_LED2 PIN_LED_RXL -#define PIN_LED3 PIN_LED_TXL -#define LED_BUILTIN PIN_LED_13 - -/* Buttons - * Note that Button is connected to Reset by default. - * A solder jumper can be changed to route Button B to pin 33 instead. - * There is a debouncing capacitor connected, so delay reading the pin for - * at least 45ms after turning on the pullup to allow the capacitor to charge. - */ -#define BUTTON (33u) -#define BUTTON_BUILTIN BUTTON - - -/* - * Analog pins - */ -#define PIN_A0 (0ul) -#define PIN_A1 (1ul) -#define PIN_A2 (2ul) -#define PIN_A3 (3ul) -#define PIN_A4 (4ul) -#define PIN_A5 (5ul) -#define PIN_A6 (6ul) -#define PIN_A7 (7ul) -#define PIN_A8 (8ul) -#define PIN_A9 (9ul) -#define PIN_A10 (10ul) -#define PIN_A11 (11ul) -#define PIN_A34 (34ul) -#define PIN_A35 (35ul) -#define PIN_A36 (36ul) -#define PIN_A37 (37ul) -#define PIN_A38 (38ul) -#define PIN_A49 (49ul) -#define PIN_DAC0 (2ul) -#if (SAMD51 || SAML21) -#define PIN_DAC1 (5ul) -#endif - -static const uint8_t A0 = PIN_A0; -static const uint8_t A1 = PIN_A1; -static const uint8_t A2 = PIN_A2; -static const uint8_t A3 = PIN_A3; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; -static const uint8_t A6 = PIN_A6; -static const uint8_t A7 = PIN_A7; -static const uint8_t A8 = PIN_A8; -static const uint8_t A9 = PIN_A9; -static const uint8_t A10 = PIN_A10; -static const uint8_t A11 = PIN_A11; -static const uint8_t A34 = PIN_A34; -static const uint8_t A35 = PIN_A35; -static const uint8_t A36 = PIN_A36; -static const uint8_t A37 = PIN_A37; -static const uint8_t A38 = PIN_A38; -static const uint8_t A49 = PIN_A49; -static const uint8_t DAC0 = PIN_DAC0; -#if (SAMD51 || SAML21) -static const uint8_t DAC1 = PIN_DAC1; -#endif - -#define ADC_RESOLUTION 12 - -// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 - -/* Set default analog voltage reference */ -#define VARIANT_AR_DEFAULT AR_DEFAULT - -/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ -#define REFA_PIN (3ul) -#define REFB_PIN (4ul) -#if (SAMD51) -#define REFC_PIN (35ul) -#endif - - -// The ATN pin may be used in the future as the first SPI chip select. -// On boards that do not have the Arduino physical form factor, it can to set to any free pin. -#if (SAMD21 || SAMC21) -#define PIN_ATN (28ul) -#elif (SAMD51 || SAML21) -#define PIN_ATN (21ul) -#endif -static const uint8_t ATN = PIN_ATN; - - -/* - * Serial interfaces - */ -#if (defined(THREE_UART) && SAMD51) - #error "variant.h: Only two UARTs are available with the D51. Please choose a TWO_UART_* option" -#endif - -// Serial1 -#if (SAMD51) - #define PIN_SERIAL1_RX (9ul) - #define PIN_SERIAL1_TX (8ul) - #define PAD_SERIAL1_TX (UART_TX_PAD_0) - #define PAD_SERIAL1_RX (SERCOM_RX_PAD_1) - #define SERCOM_INSTANCE_SERIAL1 &sercom4 -#else - #define PIN_SERIAL1_RX (31ul) - #define PIN_SERIAL1_TX (18ul) - #define PAD_SERIAL1_TX (UART_TX_PAD_2) - #define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) - #define SERCOM_INSTANCE_SERIAL1 &sercom1 -#endif - -// Serial2 -#if (SAMD51) - #define PIN_SERIAL2_RX (5ul) - #define PIN_SERIAL2_TX (4ul) - #define PAD_SERIAL2_TX (UART_TX_PAD_0) - #define PAD_SERIAL2_RX (SERCOM_RX_PAD_1) - #define SERCOM_INSTANCE_SERIAL2 &sercom0 -#else - #define PIN_SERIAL2_RX (36ul) - #define PIN_SERIAL2_TX (35ul) - #define PAD_SERIAL2_TX (UART_TX_PAD_2) - #define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) - #define SERCOM_INSTANCE_SERIAL2 &sercom0 -#endif - -// Serial3 (a third serial is not available with the D51 on this board) -#define PIN_SERIAL3_RX (9ul) -#define PIN_SERIAL3_TX (8ul) -#define PAD_SERIAL3_TX (UART_TX_PAD_0) -#define PAD_SERIAL3_RX (SERCOM_RX_PAD_1) - -#define SERCOM_INSTANCE_SERIAL3 &sercom4 - - -/* - * SPI Interfaces - */ -#if defined(TWO_SPI) -#define SPI_INTERFACES_COUNT 2 -#elif defined(THREE_SPI) -#define SPI_INTERFACES_COUNT 3 -#else -#define SPI_INTERFACES_COUNT 1 -#endif - -#if (SAMD51) -#define PIN_SPI_MISO (21u) -#define PIN_SPI_MOSI (23u) -#define PIN_SPI_SCK (22u) -#define PIN_SPI_SS (20u) -#define PAD_SPI_TX SPI_PAD_0_SCK_1 -#define PAD_SPI_RX SERCOM_RX_PAD_3 -#else -#define PIN_SPI_MISO (43u) -#define PIN_SPI_MOSI (45u) -#define PIN_SPI_SCK (44u) -#define PIN_SPI_SS (46u) -#define PAD_SPI_TX SPI_PAD_2_SCK_3 -#define PAD_SPI_RX SERCOM_RX_PAD_0 -#endif -#define PERIPH_SPI sercom5 - -static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI = PIN_SPI_MOSI ; -static const uint8_t MISO = PIN_SPI_MISO ; -static const uint8_t SCK = PIN_SPI_SCK ; - -#if (SAMD51) -#define PIN_SPI1_MISO (11u) -#define PIN_SPI1_MOSI (38u) -#define PIN_SPI1_SCK (37u) -#define PIN_SPI1_SS (10u) -#define PAD_SPI1_TX SPI_PAD_0_SCK_1 -#define PAD_SPI1_RX SERCOM_RX_PAD_3 -#else -#define PIN_SPI1_MISO (12u) -#define PIN_SPI1_MOSI (10u) -#define PIN_SPI1_SCK (11u) -#define PIN_SPI1_SS (13u) -#define PAD_SPI1_TX SPI_PAD_2_SCK_3 -#define PAD_SPI1_RX SERCOM_RX_PAD_0 -#endif -#define PERIPH_SPI1 sercom2 - -static const uint8_t SS1 = PIN_SPI1_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI1 = PIN_SPI1_MOSI ; -static const uint8_t MISO1 = PIN_SPI1_MISO ; -static const uint8_t SCK1 = PIN_SPI1_SCK ; - - -/* - * Wire Interfaces - */ -#if defined(TWO_WIRE) -#define WIRE_INTERFACES_COUNT 2 -#elif defined(THREE_WIRE) -#define WIRE_INTERFACES_COUNT 3 -#else -#define WIRE_INTERFACES_COUNT 1 -#endif - -#define PIN_WIRE_SDA (16u) -#define PIN_WIRE_SCL (17u) -#if (SAMD51) - #define PERIPH_WIRE sercom1 - #define WIRE_STOP_DETECTED_HANDLER SERCOM1_0_Handler - #define WIRE_ADDRESS_MATCH_HANDLER SERCOM1_1_Handler - #define WIRE_DATA_READY_HANDLER SERCOM1_2_Handler -#else - #define PERIPH_WIRE sercom3 - #define WIRE_IT_HANDLER SERCOM3_Handler -#endif - -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; - -#define PIN_WIRE1_SDA (12u) -#define PIN_WIRE1_SCL (13u) -#define PERIPH_WIRE1 sercom2 -#if (SAMD51) - #define WIRE1_STOP_DETECTED_HANDLER SERCOM2_0_Handler - #define WIRE1_ADDRESS_MATCH_HANDLER SERCOM2_1_Handler - #define WIRE1_DATA_READY_HANDLER SERCOM2_2_Handler -#else - #define WIRE1_IT_HANDLER SERCOM2_Handler -#endif - -static const uint8_t SDA1 = PIN_WIRE1_SDA; -static const uint8_t SCL1 = PIN_WIRE1_SCL; - - -/* - * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to - * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. - */ -#define PIN_USB_DM (24ul) -#define PIN_USB_DP (25ul) -//#define PIN_USB_HOST_ENABLE (14ul) -#define PIN_USB_HOST_ENABLE_VALUE 0 - -/* - * I2S Interfaces - * SAMD51, PDM, and MCLK support will be added hopefully March 2018 - */ - -#if (SAMD51) -// On the SAMD51, device 0 is TX only using SDO (PIN_I2S_SD), and device 1 is RX only using SDI (PIN_I2S1_SD) -#define I2S_INTERFACES_COUNT 2 -#define I2S_DEVICE 0 -#define I2S1_DEVICE 1 -#define I2S_CLOCK_GENERATOR 7 -#define I2S1_CLOCK_GENERATOR 7 -// TX -#define PIN_I2S_MCK (32u) -#define PIN_I2S_SCK (33u) -#define PIN_I2S_FS (20u) -#define PIN_I2S_SD (21u) // SDO (TX) -// RX (must use clock 0) -#define PIN_I2S1_MCK (32u) -#define PIN_I2S1_SCK (33u) -#define PIN_I2S1_FS (20u) -#define PIN_I2S1_SD (22u) // SDI (RX) - -#else -#define I2S_INTERFACES_COUNT 1 -#define I2S_DEVICE 0 -//#define I2S1_DEVICE 1 -#define I2S_CLOCK_GENERATOR 7 -//#define I2S1_CLOCK_GENERATOR 8 -//#define PIN_I2S_MCK (32u) -#define PIN_I2S_SCK (20u) -#define PIN_I2S_FS (21u) -#define PIN_I2S_SD (19u) -//#define PIN_I2S1_MCK (39u) -//#define PIN_I2S1_SCK (40u) -//#define PIN_I2S1_FS (41u) -//#define PIN_I2S1_SD (33u) -#endif - -#ifdef __cplusplus -} -#endif - - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#ifdef __cplusplus - -/* ========================= - * ===== SERCOM DEFINITION - * ========================= -*/ -extern SERCOM sercom0; -extern SERCOM sercom1; -extern SERCOM sercom2; -extern SERCOM sercom3; -extern SERCOM sercom4; -extern SERCOM sercom5; - -extern Uart Serial1; -extern Uart Serial2; -#if (SAMD21 || SAMC21 || SAML21) -extern Uart Serial3; -#endif - -#endif - -// These serial port names are intended to allow libraries and architecture-neutral -// sketches to automatically default to the correct port name for a particular type -// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, -// the first hardware serial port whose RX/TX pins are not dedicated to another use. -// -// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor -// -// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial -// -// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library -// -// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. -// -// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX -// pins are NOT connected to anything by default. -#if (!SAMC21) - #define SERIAL_PORT_USBVIRTUAL SerialUSB -#endif -// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). -// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. -// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. -// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get -// the USB Host debugging output. -#if (SAMC21) - #define SERIAL_PORT_MONITOR Serial2 -#else - #define SERIAL_PORT_MONITOR Serial1 -#endif - -// Serial has no physical pins broken out, so it's not listed as HARDWARE port -#if (SAMC21) - #define SERIAL_PORT_HARDWARE Serial2 - #define SERIAL_PORT_HARDWARE_OPEN Serial2 -#else - #define SERIAL_PORT_HARDWARE Serial1 - #define SERIAL_PORT_HARDWARE_OPEN Serial1 -#endif - -// The Xeno does not have the EDBG support chip, which provides a USB-UART bridge -// accessible using Serial (the Arduino serial monitor is normally connected to this). -// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. -// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. -// Remember to use while(!Serial); to wait for a connection before Serial printing. -#if (SAMC21) - #define Serial Serial1 -#else - // When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. - #if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) - #define Serial SerialUSB - #else - #define Serial Serial1 - #endif -#endif - -#endif /* _VARIANT_MATTAIRTECH_XENO_ */ diff --git a/variants/Xeno_Mini/README.md b/variants/Xeno_Mini/README.md deleted file mode 100644 index bb8d53d0f..000000000 --- a/variants/Xeno_Mini/README.md +++ /dev/null @@ -1,229 +0,0 @@ -# MattairTech Xeno Mini (ATSAMD51G/ATSAMD21G/ATSAML21G/ATSAMC21G) - -``` -======== MattairTech Xeno Mini (Rev B) (ATSAMD51G/ATSAMD21G/ATSAML21G/ATSAMC21G) ======== -Alt COM PWM Analog INT Arduino* Arduino* INT Analog PWM COM Alt -========================================================================================= - ------------------- -HB1+ (MTR) TX1 TC~ O I 0 | B8 RST | BOOT -HB2+ (MTR) RX1 TC~ O I 1 | B9 B3 | 35 O Vcoin -DAC O 2 | A2 B2 | 34 O LED -REFA* O 3 | A3 B23 | 33 I SLP+ (MTR) -REFB O 4 | A4 B22 | 32 I INT+! (IMU) -VI (VIN) / DAC1* O 5 | A5 A31 | 31 TCC~ IO (DGB) -VU! (USB) O 6 | A6 A30 | 30 TCC~ CLK (DGB) -VB (VBAT) O 7 | A7 A27 | 27 -MOSI (MEM) O 8 | A8 A23 | 23 TCC0~ SCL1/SCK1* EN1+ (MTR) -MISO (MEM) O 9 | A9 A22 | 22 TCC0~ SDA1/MOSI1* EN2+ (MTR) -D2 (QSPI) O 10 | A10 A21 | 21 I TCC0~ MISO1 -D3 (QSPI) / SCK (MEM) O I 11 | A11 A20 | 20 I TCC0~ - TX2 TCC~ I 12 | A12 A19 | 19 I TC~ RX3 -CEN (CHG) RX2 TCC~ I 13 | A13 A18 | 18 I TC~ TX3 STA+! (CHG) -SCK (QSPI) TC~ I 14 | B10 A17 | 17 I SCL (I2C) -CS (MEM) TC~ 15 | B11 A16 | 16 I SDA (I2C) - | Vaux VccL | -USB D- / CAN TX | A24 _____ VccH | ! VccL is 3.3V by default. -USB D+ / CAN RX | A25 | | Vin | DO NOT exceed 3.6V on VccL or - | Gnd | USB | Gnd | any IO pin with the D51, D21, - USB: D51/D21/L21 only ------------------- or L21 installed. 5V allowed - CAN: D51/C21 only ONLY with the C21 installed. - -* Most pins can be used for more than one function. The port pin number printed on the - board is also used in Arduino for all 'A' pins. For 'B' pins, see Arduino column. - DAC1 is present only on the D51 and L21. With the D51, REFA is tied to VccL (J20). - For the D51, the COM pins on A22 and A23 are reversed (ie: A22 is instead SCL1/SCK1). - -+ This header pin has limited use because the alternate function, if installed, cannot be - disconnected via solder jumper. EN1, EN2, HB1, and HB2 have pulldowns, but can be used - if SLP is low. Note that Rev A boards differ with regards to the MTR pins (see docs). - -! These pins should not be driven if the associated hardware is installed. This variant - will only allow configuring these pins as inputs. To change this, edit configuration in - variant.h. INT from IMU will be driven low after reset. See IMU docs. - -~ D51: 3 TCC (6,4,3 ch.), 4 TC (2 ch.). D21/L21/C21: 3 TCC (4,2,2 ch.), 3 TC (2 ch.). - The D51 adds timers to pins A4, A5, A6, A7, A16, A17, and B2, however, the timers on - B8, B9, B10, and B11 are not present. The C21 adds timers to pins B2, B3, B22, and B23. - -Silkscreen Legend: - Top: A circle around pin is analog function, '~' is timer, small 'I' is interrupt - Bottom: A box around pin means 'Alt' function enabled by default if installed -``` - - -## Board Configuration Notes - -* **Crystals** - * Either the 32.768KHz crystal or the 24MHz crystal can be used. These pins do not route to headers. - * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. - -* **LED (LED_BUILTIN)** - * Bring the pin HIGH to turn the LED on. - * The LED is enabled (solder jumper) by default. - -* **GPIO** - * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. - * When PER_ATTR_DRIVE_STRONG is set for the pin (enabled by default), each pin can source or sink a maximum of: - * **D51:** 8mA high, 8mA low - * **D21:** 7mA high, 10mA low - * **L21:** 5mA high, 6mA low (8 high drive pins: 10mA high, 12mA low) - * **C21:** 6mA high, 10mA low (2 high drive pins (A10, A11): 12mA high, 20mA low) - * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). - -* **Analog Inputs** - * Up to 14 pins can be configured as ADC analog inputs. - * Each pin measures from ground to 3.3 volts by default. - * Each pin provides 10 bits of resolution (1024 values) by default. - * 12-bit resolution supported by using the analogReadResolution() function. - * The upper end of the measurement range can be changed using the analogReference() function. - * A reference voltage can be connected to REFA. In this case, the capacitors should be enabled via solder jumper J33. - * Due to errata with the D51 DAC, J20 is set to route VccL to the MCU REFA pin (the header pin is disconnected). - -* **DAC** - * D21/C21: One 10-bit 350Ksps analog output is available on pin 2. - * D51/L21: Two 12-bit 1Msps analog outputs are available on pins 2 and 5. - * Due to errata with the D51 DAC, J20 is set to route VccL to the MCU REFA pin (the header pin is disconnected). - -* **PWM** - * Up to 14 pins can be configured as PWM outputs (17 for D51, 18 for C21). - * Each pin provides 8 bits of resolution (256 values) by default. - * 12-bit resolution supported by using the analogWriteResolution() function. - -* **External Interrupts** - * Up to 14 pins can be configured with external interrupts. - -* **SERCOM** - * 6 SERCOM are available. - * Up to 3 UART instances (two for D51). More in a future release. - * Up to 2 SPI instances. - * Up to 2 WIRE (I2C) instances. - * The WIRE pullup resistors are enabled by default. - - - -## PinDescription table format - -### Note that in 1.6.18-beta-b1 a new compact table format was added. -The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE -to use a more compact format that uses only 4 bytes per pin (currently only available -for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used -(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to -pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC -column. Note that external libraries that reference the PinDescription table directly (uncommon) -will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which -is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. - -### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. -MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. -If using board variant files with the old format, the new core will still read the -table the old way, losing any new features introduced by the new column. Additionally, -new definitions have been added for D51, L21, and C21 support. - -### Each pin can have multiple functions. -The PinDescription table describes how each of the pins can be used by the Arduino -core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, -communications, etc.), and the PinDescription table configures which functions can -be used for each pin. This table is mainly accessed by the pinPeripheral function in -wiring_private.c, which is used to attach a pin to a particular peripheral function. -The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), -analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to -verify that the pin can perform the function requested, and to configure the pin for -that function. Most of the contents of pinMode() are now in pinPeripheral(). - -### Pin Mapping -There are different ways that pins can be mapped. Typically, there is no relation -between the arduino pin number used, and the actual port pin designator. Thus, the -pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, -a cross reference table is needed to find the arduino pin number. However, this results -in the least amount of space used by the table. Another method, used by default by the -MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino -pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins -are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added -for pins that are used for other purposes or for pins that do not exist (especially the -D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp -from the MT-D11 variant. The Xeno combines both methods, using the actual port pin -designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then -using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be -used, leaving the other pin for some number above 31. - -**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** - -### Port -This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### Pin -This is the pin (bit) within the port. Valid values are 0-31. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetPortPin() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column -using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, -use SetPortPin(NOT_A_PORT, 0). - -### PinType -This indicates what peripheral function the pin can be attached to. In most cases, -this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute -field. It can also be set to a specific peripheral. In this case, any attempt to -configure the pin (using pinPeripheral or pinMode) as anything else will fail (and -pinPeripheral will return -1). This can be used to prevent accidental re-configuration -of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin -is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See -WVariant.h for valid entries. These entries are also used as a parameter to -pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function -now calls pinPeripheral() with the desired mode. Note that this field is not used to -select between the different peripherals possible with each of the SERCOM and TIMER -functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE -is defined, PinType is not used (the pin is treated as PIO_MULTI). - -### PeripheralAttribute -This is an 8-bit bitfield used for various peripheral configuration. It is primarily -used to select between the different peripherals possible with each of the SERCOM and -TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four -pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on -the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. -Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the -pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, -buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are -two) is also selected here. Note that the D51 adds a third timer attribute and -requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. - -### PinAttribute -This is a 32-bit bitfield used to list all of the valid peripheral functions that a -pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain -attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL -includes all of the GPIO functions, while PIN_ATTR_TIMER includes both -PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). -PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for -limiting a pin to only input related functions or output functions. This allows a pin -to have a more flexible configuration, while restricting the direction (ie: to avoid -contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### TCChannel -This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available -on multiple pins. In general, only one pin should be configured in the pinDescription -table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column -to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on -the D21). See WVariant.h for valid entries. - -### ADCChannelNumber -This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC -instances, which are selected in the PeripheralAttribute column. See WVariant.h for -valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### ExtInt -This is the interrupt (if any) assigned to the pin. Some interrupt numbers are -available on multiple pins. In general, only one pin should be configured in the -pinDescription table per interrupt number. Thus, for example, if an interrupt was -needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid -entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetExtIntADC() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined -into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, -ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). - -### GCLKCCL -This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support -the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, -L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/Xeno_Mini/debug_scripts/SAMC21G15A.gdb b/variants/Xeno_Mini/debug_scripts/SAMC21G15A.gdb deleted file mode 100644 index f818c9bbe..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMC21G15A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g15" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAMC21G16A.gdb b/variants/Xeno_Mini/debug_scripts/SAMC21G16A.gdb deleted file mode 100644 index 5c258d3ac..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMC21G16A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g16" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAMC21G17A.gdb b/variants/Xeno_Mini/debug_scripts/SAMC21G17A.gdb deleted file mode 100644 index 0387ce888..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMC21G17A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g17" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAMC21G18A.gdb b/variants/Xeno_Mini/debug_scripts/SAMC21G18A.gdb deleted file mode 100644 index 1d0b9d1c0..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMC21G18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g18" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAMD21G15A.gdb b/variants/Xeno_Mini/debug_scripts/SAMD21G15A.gdb deleted file mode 100644 index f8b1d04e3..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMD21G15A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g15" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAMD21G16A.gdb b/variants/Xeno_Mini/debug_scripts/SAMD21G16A.gdb deleted file mode 100644 index 2f9de5a98..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMD21G16A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g16" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAMD21G17A.gdb b/variants/Xeno_Mini/debug_scripts/SAMD21G17A.gdb deleted file mode 100644 index be4c3e9ab..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMD21G17A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g17" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAMD21G18A.gdb b/variants/Xeno_Mini/debug_scripts/SAMD21G18A.gdb deleted file mode 100644 index 3c37ffde2..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMD21G18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAMD51G18A.gdb b/variants/Xeno_Mini/debug_scripts/SAMD51G18A.gdb deleted file mode 100644 index 7f89fd5b7..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMD51G18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51g18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAMD51G19A.gdb b/variants/Xeno_Mini/debug_scripts/SAMD51G19A.gdb deleted file mode 100644 index d7a2cd2ae..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAMD51G19A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51g19" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAML21G16B.gdb b/variants/Xeno_Mini/debug_scripts/SAML21G16B.gdb deleted file mode 100644 index d229f8f0c..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAML21G16B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21g16" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAML21G17B.gdb b/variants/Xeno_Mini/debug_scripts/SAML21G17B.gdb deleted file mode 100644 index f67cdcb2f..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAML21G17B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21g17" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/debug_scripts/SAML21G18B.gdb b/variants/Xeno_Mini/debug_scripts/SAML21G18B.gdb deleted file mode 100644 index b5230803b..000000000 --- a/variants/Xeno_Mini/debug_scripts/SAML21G18B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21g18" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld deleted file mode 100644 index c541d8cd0..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00020000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld deleted file mode 100644 index a0b9f951f..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld deleted file mode 100644 index 5d8d047a9..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00008000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld deleted file mode 100644 index 3f7223790..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00010000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld deleted file mode 100644 index b541a7a7c..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld deleted file mode 100644 index e773c4011..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00080000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld deleted file mode 100644 index 07940acbd..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00020000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld deleted file mode 100644 index 825aee666..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld deleted file mode 100644 index 0d3aaf7a9..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00008000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld deleted file mode 100644 index 1c36f57e1..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00010000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld deleted file mode 100644 index 6a1504ce3..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld deleted file mode 100644 index ab041e7dd..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00080000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_128KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_128KB.ld deleted file mode 100644 index 941e0adee..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00020000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_256KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_256KB.ld deleted file mode 100644 index 865514cbb..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_32KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_32KB.ld deleted file mode 100644 index 407777c80..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_64KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_64KB.ld deleted file mode 100644 index 6f3d4d3e8..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld deleted file mode 100644 index 6c42fe70f..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld b/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld deleted file mode 100644 index 11c2ad812..000000000 --- a/variants/Xeno_Mini/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/Xeno_Mini/openocd_scripts/SAMC21G15A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMC21G15A.cfg deleted file mode 100644 index 10c51c4db..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMC21G15A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21g15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAMC21G16A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMC21G16A.cfg deleted file mode 100644 index ffb0146b7..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMC21G16A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21g16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAMC21G17A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMC21G17A.cfg deleted file mode 100644 index 5066d74c6..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMC21G17A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21g17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAMC21G18A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMC21G18A.cfg deleted file mode 100644 index 2946d9391..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMC21G18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21g18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAMD21G15A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMD21G15A.cfg deleted file mode 100644 index e5d7eb8bb..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMD21G15A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21g15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAMD21G16A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMD21G16A.cfg deleted file mode 100644 index 677c80012..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMD21G16A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21g16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAMD21G17A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMD21G17A.cfg deleted file mode 100644 index 68641e118..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMD21G17A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21g17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAMD21G18A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMD21G18A.cfg deleted file mode 100644 index 36c65c32d..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMD21G18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21g18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAMD51G18A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMD51G18A.cfg deleted file mode 100644 index 7e57910f6..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMD51G18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd51g18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAMD51G19A.cfg b/variants/Xeno_Mini/openocd_scripts/SAMD51G19A.cfg deleted file mode 100644 index f23a883c6..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAMD51G19A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd51g19 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAML21G16B.cfg b/variants/Xeno_Mini/openocd_scripts/SAML21G16B.cfg deleted file mode 100644 index c5ef10770..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAML21G16B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21g16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAML21G17B.cfg b/variants/Xeno_Mini/openocd_scripts/SAML21G17B.cfg deleted file mode 100644 index 48ad58a4d..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAML21G17B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21g17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/Xeno_Mini/openocd_scripts/SAML21G18B.cfg b/variants/Xeno_Mini/openocd_scripts/SAML21G18B.cfg deleted file mode 100644 index 0a162e7f5..000000000 --- a/variants/Xeno_Mini/openocd_scripts/SAML21G18B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21g18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/Xeno_Mini/pins_arduino.h b/variants/Xeno_Mini/pins_arduino.h deleted file mode 100644 index db0e40c3d..000000000 --- a/variants/Xeno_Mini/pins_arduino.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// API compatibility -#include "variant.h" - diff --git a/variants/Xeno_Mini/variant.cpp b/variants/Xeno_Mini/variant.cpp deleted file mode 100644 index 81c246086..000000000 --- a/variants/Xeno_Mini/variant.cpp +++ /dev/null @@ -1,365 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 3 February 2018 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - - -#include "variant.h" - -/* - * Pins descriptions - */ -const PinDescription g_APinDescription[]= -{ -#if (SAMD51) - // 0..11 - Analog capable pins - { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_8, GCLK_CCL_NONE }, - { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_9, GCLK_CCL_NONE }, - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH0, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH1, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#if defined (VIN_5V_REGULATOR_INSTALLED) - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_TIMER), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#else - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#endif - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH1, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_11, GCLK_CCL_NONE }, - - // 12..23 - Digital functions - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH2, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH3, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, - { PORTB, 10, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, - { PORTB, 11, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#if defined (BATTERY_CHARGER_INSTALLED) - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, -#else - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, -#endif - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH0, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH1, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH2, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 - Digital functions - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 - Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO - - // 32..35 - Digital functions -#if defined (IMU_INSTALLED) - { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 -#else - { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 -#endif - { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // 33 - { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH2, ADC_Channel14, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 34, LED - { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel15, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 35 - -#elif (SAMD21) - // 0..11 - Analog capable pins - { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, - { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, ADC_Channel3, EXTERNAL_INT_9, GCLK_CCL_NONE }, - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#if defined (VIN_5V_REGULATOR_INSTALLED) - { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#else - { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#endif - { PORTA, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel16, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel17, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, - - // 12..23 - Digital functions - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, - { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, - { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#if defined (BATTERY_CHARGER_INSTALLED) - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, -#else - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, -#endif - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM|PIN_ATTR_EXTINT), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 - Digital functions - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 - Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO - - // 32..35 - Digital functions -#if defined (IMU_INSTALLED) - { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 -#else - { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 -#endif - { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // 33 - { PORTB, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 34, LED - { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 35 - -#elif (SAML21) - // 0..11 - Analog capable pins - { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH0, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, - { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH1, ADC_Channel3, EXTERNAL_INT_9, GCLK_CCL_NONE }, - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#if defined (VIN_5V_REGULATOR_INSTALLED) - { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#else - { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#endif - { PORTA, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel16, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel17, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, - - // 12..23 - Digital functions - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, - { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, - { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#if defined (BATTERY_CHARGER_INSTALLED) - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, -#else - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, -#endif - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 - Digital functions - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 - Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO - - // 32..35 - Digital functions -#if defined (IMU_INSTALLED) - { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 -#else - { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 -#endif - { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // 33 - { PORTB, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 34, LED - { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 35 - -#elif (SAMC21) - // 0..11 - Analog capable pins - { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH0, ADC_Channel4, EXTERNAL_INT_8, GCLK_CCL_NONE }, - { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH1, ADC_Channel5, EXTERNAL_INT_9, GCLK_CCL_NONE }, - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#if defined (VIN_5V_REGULATOR_INSTALLED) - { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#else - { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, -#endif - { PORTA, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_11, GCLK_CCL_NONE }, - - // 12..23 - Digital functions - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, - { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, - { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, -#if defined (BATTERY_CHARGER_INSTALLED) - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, -#else - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, -#endif - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 - Digital functions - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 - Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO - - // 32..35 - Digital functions -#if defined (IMU_INSTALLED) - { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 -#else - { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 -#endif - { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // 33 - { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 34, LED - { PORTB, 3, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 35 - -#else - #error "variant.cpp: Unsupported chip" -#endif -} ; - -#if (SAMD21) -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ; -#elif (SAML21) -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC0, TC1, TC4 } ; -#elif (SAMC21) -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC0, TC1, TC2, TC3, TC4 } ; -#elif (SAMD51) -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC0, TC1, TC2, TC3 } ; -#endif - -// Multi-serial objects instantiation -SERCOM sercom0( SERCOM0 ) ; -SERCOM sercom1( SERCOM1 ) ; -SERCOM sercom2( SERCOM2 ) ; -SERCOM sercom3( SERCOM3 ) ; -SERCOM sercom4( SERCOM4 ) ; -SERCOM sercom5( SERCOM5 ) ; - -#if defined(ONE_UART) || defined(TWO_UART) || defined(THREE_UART) -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - - #if (SAMD51) - void SERCOM4_0_Handler(void) { - Serial1.dataRegisterEmptyHandler(); - } - - void SERCOM4_2_Handler(void) { - Serial1.availableDataHandler(); - } - - void SERCOM4_3_Handler(void) { - Serial1.errorHandler(); - } - #else - void SERCOM4_Handler() { - Serial1.IrqHandler(); - } - #endif -#endif - -#if defined(TWO_UART) || defined(THREE_UART) -Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; - - #if (SAMD51) - void SERCOM2_0_Handler(void) { - Serial2.dataRegisterEmptyHandler(); - } - - void SERCOM2_2_Handler(void) { - Serial2.availableDataHandler(); - } - - void SERCOM2_3_Handler(void) { - Serial2.errorHandler(); - } - #else - void SERCOM2_Handler() { - Serial2.IrqHandler(); - } - #endif -#endif - -#if defined(THREE_UART) -Uart Serial3( SERCOM_INSTANCE_SERIAL3, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX ) ; - - #if (SAMD51) - void SERCOM3_0_Handler(void) { - Serial3.dataRegisterEmptyHandler(); - } - - void SERCOM3_2_Handler(void) { - Serial3.availableDataHandler(); - } - - void SERCOM3_3_Handler(void) { - Serial3.errorHandler(); - } - #else - void SERCOM3_Handler() { - Serial3.IrqHandler(); - } - #endif -#endif diff --git a/variants/Xeno_Mini/variant.h b/variants/Xeno_Mini/variant.h deleted file mode 100644 index dcd71ff06..000000000 --- a/variants/Xeno_Mini/variant.h +++ /dev/null @@ -1,477 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 29 January 2018 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - -#ifndef _VARIANT_MATTAIRTECH_XENO_MINI_ -#define _VARIANT_MATTAIRTECH_XENO_MINI_ - -/* The definitions here need the MattairTech SAMD core >=1.6.8. - * The format is different than the stock Arduino SAMD core, - * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. - */ -#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10608 - -/*---------------------------------------------------------------------------- - * Board/Clock Configuration - *----------------------------------------------------------------------------*/ - -/* Master clock frequency (also Fcpu frequency). With the D51, this can be - * either 120000000ul or 48000000ul (selected in the menu). See README.md. - */ -#define VARIANT_MCK (F_CPU) - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 24000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/* Define CORTEX_M_CACHE_ENABLED to enable the Cortex M cache (D51 only). - */ -#define CORTEX_M_CACHE_ENABLED - -/* When the battery charger (CHG) is installed, the charge status is available on pin 18 (A18, STA), - * which drives low (open-drain) when the battery is charging. Defining BATTERY_CHARGER_INSTALLED - * will prevent pin A18 from being configured as an output, thus avoiding contention. - */ -#define BATTERY_CHARGER_INSTALLED - -/* When the accelerometer/gyroscope/magnetometer (IMU) is installed, all three interrupt outputs - * are tied together and connected to pin 32 (B22, INT), which by default drives low in a push-pull, - * active-high configuration until it is configured otherwise (to open-drain, active-low for example). - * Defining IMU_INSTALLED will prevent pin B22 from being configured as an output, thus avoiding - * contention. - */ -#define IMU_INSTALLED - -/* When the Vin regulator (5V) is installed, an analog comparator (Rev B only) is used to drive the Vbus - * ideal diode enable pin (EN) low, which disconnects Vbus from VccH. The Vbus voltage divider, which is - * available on pin 6 (A6, VU), is also connected to the same enable pin. Defining VIN_5V_REGULATOR_INSTALLED - * will prevent pin A6 from being configured as an output, thus avoiding contention. - */ -#define VIN_5V_REGULATOR_INSTALLED - - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" -#include "sam.h" - -#ifdef __cplusplus -#include "SERCOM.h" -#include "Uart.h" -#endif // __cplusplus - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/*---------------------------------------------------------------------------- - * Pins - *----------------------------------------------------------------------------*/ - -// Number of pins defined in PinDescription array -#define NUM_PIN_DESCRIPTION_ENTRIES (36u) - -#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES -#define NUM_DIGITAL_PINS PINS_COUNT -#define NUM_ANALOG_INPUTS (14u) - -#if (SAMD21 || SAMC21) -#define NUM_ANALOG_OUTPUTS (1u) -#elif (SAMD51 || SAML21) -#define NUM_ANALOG_OUTPUTS (2u) -#else -#error "variant.h: Unsupported chip" -#endif - -#define analogInputToDigitalPin(p) (p) - -#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) ) -#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin ) -//#define analogInPinToBit(P) ( ) -#define portOutputRegister(port) ( &(port->OUT.reg) ) -#define portInputRegister(port) ( &(port->IN.reg) ) -#define portModeRegister(port) ( &(port->DIR.reg) ) -#define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) - -/* - * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD - * architecture. If you need to check if a pin supports PWM you must - * use digitalPinHasPWM(..). - * - * https://github.com/arduino/Arduino/issues/1833 - */ -// #define digitalPinToTimer(P) - -/* LEDs - * None of these defines are currently used by the core. - * The Xeno Mini onboard LED is on pin 34. - * The RX and TX LEDs are not present. - * You may optionally add them to any free pins. - */ -#define PIN_LED_13 (34u) -#define PIN_LED_RXL (20u) -#define PIN_LED_TXL (21u) -#define PIN_LED PIN_LED_13 -#define PIN_LED2 PIN_LED_RXL -#define PIN_LED3 PIN_LED_TXL -#define LED_BUILTIN PIN_LED_13 - - -/* - * Analog pins - */ -#define PIN_A0 (0ul) -#define PIN_A1 (1ul) -#define PIN_A2 (2ul) -#define PIN_A3 (3ul) -#define PIN_A4 (4ul) -#define PIN_A5 (5ul) -#define PIN_A6 (6ul) -#define PIN_A7 (7ul) -#define PIN_A8 (8ul) -#define PIN_A9 (9ul) -#define PIN_A10 (10ul) -#define PIN_A11 (11ul) -#define PIN_A34 (34ul) -#define PIN_A35 (35ul) -#define PIN_DAC0 (2ul) -#if (SAMD51 || SAML21) -#define PIN_DAC1 (5ul) -#endif - -static const uint8_t A0 = PIN_A0; -static const uint8_t A1 = PIN_A1; -static const uint8_t A2 = PIN_A2; -static const uint8_t A3 = PIN_A3; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; -static const uint8_t A6 = PIN_A6; -static const uint8_t A7 = PIN_A7; -static const uint8_t A8 = PIN_A8; -static const uint8_t A9 = PIN_A9; -static const uint8_t A10 = PIN_A10; -static const uint8_t A11 = PIN_A11; -static const uint8_t A34 = PIN_A34; -static const uint8_t A35 = PIN_A35; -static const uint8_t DAC0 = PIN_DAC0; -#if (SAMD51 || SAML21) -static const uint8_t DAC1 = PIN_DAC1; -#endif - -#define ADC_RESOLUTION 12 - -// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 - -/* Set default analog voltage reference */ -#define VARIANT_AR_DEFAULT AR_DEFAULT - -/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ -#define REFA_PIN (3ul) -#define REFB_PIN (4ul) -#if (SAMD51) -#define REFC_PIN (6ul) -#endif - - -// The ATN pin may be used in the future as the first SPI chip select. -// On boards that do not have the Arduino physical form factor, it can to set to any free pin. -#define PIN_ATN (27ul) -static const uint8_t ATN = PIN_ATN; - - -/* - * Serial interfaces - */ -#if (defined(THREE_UART) && SAMD51) - #error "variant.h: Only two UARTs are available with the D51. Please choose a TWO_UART_* option" -#endif - -// Serial1 -#define PIN_SERIAL1_TX (0ul) -#define PIN_SERIAL1_RX (1ul) -#define PAD_SERIAL1_TX (UART_TX_PAD_0) -#define PAD_SERIAL1_RX (SERCOM_RX_PAD_1) - -#define SERCOM_INSTANCE_SERIAL1 &sercom4 - -// Serial2 -#define PIN_SERIAL2_TX (12u) -#define PIN_SERIAL2_RX (13u) -#define PAD_SERIAL2_TX (UART_TX_PAD_0) -#define PAD_SERIAL2_RX (SERCOM_RX_PAD_1) - -#define SERCOM_INSTANCE_SERIAL2 &sercom2 - -// Serial3 (a third serial is not available with the D51 on this board) -#define PIN_SERIAL3_TX (18ul) -#define PIN_SERIAL3_RX (19ul) -#define PAD_SERIAL3_TX (UART_TX_PAD_2) -#define PAD_SERIAL3_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL3 &sercom3 - - -/* - * SPI Interfaces - */ -#if defined(TWO_SPI) -#define SPI_INTERFACES_COUNT 2 -#elif defined(THREE_SPI) -#define SPI_INTERFACES_COUNT 3 -#else -#define SPI_INTERFACES_COUNT 1 -#endif - -#define PIN_SPI_MISO (9u) -#define PIN_SPI_MOSI (8u) -#define PIN_SPI_SCK (11u) -#define PIN_SPI_SS (10u) -#define PERIPH_SPI sercom0 -#define PAD_SPI_TX SPI_PAD_0_SCK_3 -#define PAD_SPI_RX SERCOM_RX_PAD_1 - -static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI = PIN_SPI_MOSI ; -static const uint8_t MISO = PIN_SPI_MISO ; -static const uint8_t SCK = PIN_SPI_SCK ; - -#if (SAMD51) -#define PIN_SPI1_MISO (21u) -#define PIN_SPI1_MOSI (23u) -#define PIN_SPI1_SCK (22u) -#define PIN_SPI1_SS (20u) -#define PAD_SPI1_TX SPI_PAD_0_SCK_1 -#define PAD_SPI1_RX SERCOM_RX_PAD_3 -#else -#define PIN_SPI1_MISO (21u) -#define PIN_SPI1_MOSI (22u) -#define PIN_SPI1_SCK (23u) -#define PIN_SPI1_SS (20u) -#define PAD_SPI1_TX SPI_PAD_0_SCK_1 -#define PAD_SPI1_RX SERCOM_RX_PAD_3 -#endif -#define PERIPH_SPI1 sercom5 - -static const uint8_t SS1 = PIN_SPI1_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI1 = PIN_SPI1_MOSI ; -static const uint8_t MISO1 = PIN_SPI1_MISO ; -static const uint8_t SCK1 = PIN_SPI1_SCK ; - - -/* - * Wire Interfaces - */ -#if defined(TWO_WIRE) -#define WIRE_INTERFACES_COUNT 2 -#elif defined(THREE_WIRE) -#define WIRE_INTERFACES_COUNT 3 -#else -#define WIRE_INTERFACES_COUNT 1 -#endif - -#define PIN_WIRE_SDA (16u) -#define PIN_WIRE_SCL (17u) -#define PERIPH_WIRE sercom1 -#if (SAMD51) - #define WIRE_STOP_DETECTED_HANDLER SERCOM1_0_Handler - #define WIRE_ADDRESS_MATCH_HANDLER SERCOM1_1_Handler - #define WIRE_DATA_READY_HANDLER SERCOM1_2_Handler -#else - #define WIRE_IT_HANDLER SERCOM1_Handler -#endif - -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; - -#define PIN_WIRE1_SDA (22u) -#define PIN_WIRE1_SCL (23u) -#define PERIPH_WIRE1 sercom5 -#if (SAMD51) - #define WIRE1_STOP_DETECTED_HANDLER SERCOM5_0_Handler - #define WIRE1_ADDRESS_MATCH_HANDLER SERCOM5_1_Handler - #define WIRE1_DATA_READY_HANDLER SERCOM5_2_Handler -#else - #define WIRE1_IT_HANDLER SERCOM5_Handler -#endif - -static const uint8_t SDA1 = PIN_WIRE1_SDA; -static const uint8_t SCL1 = PIN_WIRE1_SCL; - - -/* - * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to - * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. - */ -#define PIN_USB_DM (24ul) -#define PIN_USB_DP (25ul) -//#define PIN_USB_HOST_ENABLE (19ul) -#define PIN_USB_HOST_ENABLE_VALUE 0 - -/* - * I2S Interfaces - * SAMD51, PDM, and MCLK support will be added hopefully March 2018 - */ - -#if (SAMD51) -// On the SAMD51, device 0 is TX only using SDO (PIN_I2S_SD), and device 1 is RX only using SDI (PIN_I2S1_SD) -#define I2S_INTERFACES_COUNT 2 -#define I2S_DEVICE 0 -#define I2S1_DEVICE 1 -#define I2S_CLOCK_GENERATOR 7 -#define I2S1_CLOCK_GENERATOR 7 -// TX -#define PIN_I2S_MCK (8u) -#define PIN_I2S_SCK (10u) -#define PIN_I2S_FS (9u) -#define PIN_I2S_SD (11u) // SDO (TX) -// RX (must use clock 0) -#define PIN_I2S1_MCK (8u) -#define PIN_I2S1_SCK (10u) -#define PIN_I2S1_FS (9u) -#define PIN_I2S1_SD (14u) // SDI (RX) - -#else -#define I2S_INTERFACES_COUNT 1 -#define I2S_DEVICE 0 -//#define I2S1_DEVICE 1 -#define I2S_CLOCK_GENERATOR 7 -//#define I2S1_CLOCK_GENERATOR 8 -//#define PIN_I2S_MCK (9u) -#define PIN_I2S_SCK (20u) -#define PIN_I2S_FS (21u) -#define PIN_I2S_SD (19u) -//#define PIN_I2S1_MCK (10u) -//#define PIN_I2S1_SCK (11u) -//#define PIN_I2S1_SD (8u) -#endif - -#ifdef __cplusplus -} -#endif - - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#ifdef __cplusplus - -/* ========================= - * ===== SERCOM DEFINITION - * ========================= -*/ -extern SERCOM sercom0; -extern SERCOM sercom1; -extern SERCOM sercom2; -extern SERCOM sercom3; -extern SERCOM sercom4; -extern SERCOM sercom5; - -extern Uart Serial1; -extern Uart Serial2; -#if (SAMD21 || SAMC21 || SAML21) -extern Uart Serial3; -#endif - -#endif - -// These serial port names are intended to allow libraries and architecture-neutral -// sketches to automatically default to the correct port name for a particular type -// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, -// the first hardware serial port whose RX/TX pins are not dedicated to another use. -// -// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor -// -// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial -// -// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library -// -// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. -// -// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX -// pins are NOT connected to anything by default. -#if (!SAMC21) - #define SERIAL_PORT_USBVIRTUAL SerialUSB -#endif -// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). -// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. -// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. -// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get -// the USB Host debugging output. -#if (SAMC21) - #define SERIAL_PORT_MONITOR Serial2 -#else - #define SERIAL_PORT_MONITOR Serial1 -#endif - -// Serial has no physical pins broken out, so it's not listed as HARDWARE port -#if (SAMC21) - #define SERIAL_PORT_HARDWARE Serial2 - #define SERIAL_PORT_HARDWARE_OPEN Serial2 -#else - #define SERIAL_PORT_HARDWARE Serial1 - #define SERIAL_PORT_HARDWARE_OPEN Serial1 -#endif - -// The Xeno does not have the EDBG support chip, which provides a USB-UART bridge -// accessible using Serial (the Arduino serial monitor is normally connected to this). -// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. -// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. -// Remember to use while(!Serial); to wait for a connection before Serial printing. -#if (SAMC21) - #define Serial Serial1 -#else - // When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. - #if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) - #define Serial SerialUSB - #else - #define Serial Serial1 - #endif -#endif - -#endif /* _VARIANT_MATTAIRTECH_XENO_MINI_ */ diff --git a/variants/arduino_mzero/README.md b/variants/arduino_mzero/README.md deleted file mode 100644 index 776da4eda..000000000 --- a/variants/arduino_mzero/README.md +++ /dev/null @@ -1,214 +0,0 @@ -# Pins descriptions for the Arduino M0 / M0 Pro - -``` -/* - * - * + Pin number + ZERO Board pin | PIN | Label/Name | Comments (* is for default peripheral in use) - * +------------+------------------+--------+-----------------+------------------------------ - * | | Digital Low | | | - * +------------+------------------+--------+-----------------+------------------------------ - * | 0 | 0 -> RX | PA11 | | EIC/EXTINT[11] ADC/AIN[19] PTC/X[3] *SERCOM0/PAD[3] SERCOM2/PAD[3] TCC1/WO[1] TCC0/WO[3] - * | 1 | 1 <- TX | PA10 | | EIC/EXTINT[10] ADC/AIN[18] PTC/X[2] *SERCOM0/PAD[2] TCC1/WO[0] TCC0/WO[2] - * | 2 | ~2 | PA08 | | EIC/NMI ADC/AIN[16] PTC/X[0] SERCOM0/PAD[0] SERCOM2/PAD[0] *TCC0/WO[0] TCC1/WO[2] - * | 3 | ~3 | PA09 | | EIC/EXTINT[9] ADC/AIN[17] PTC/X[1] SERCOM0/PAD[1] SERCOM2/PAD[1] *TCC0/WO[1] TCC1/WO[3] - * | 4 | ~4 | PA14 | | EIC/EXTINT[14] SERCOM2/PAD[2] SERCOM4/PAD[2] TC3/WO[0] *TCC0/WO[4] - * | 5 | ~5 | PA15 | | EIC/EXTINT[15] SERCOM2/PAD[3] SERCOM4/PAD[3] TC3/WO[1] *TCC0/WO[5] - * | 6 | ~6 | PA20 | | EIC/EXTINT[4] PTC/X[8] SERCOM5/PAD[2] SERCOM3/PAD[2] TC7/WO[0] *TCC0/WO[6] - * | 7 | ~7 | PA21 | | EIC/EXTINT[5] PTC/X[9] SERCOM5/PAD[3] SERCOM3/PAD[3] TC7/WO[1] *TCC0/WO[7] - * +------------+------------------+--------+-----------------+------------------------------ - * | | Digital High | | | - * +------------+------------------+--------+-----------------+------------------------------ - * | 8 | ~8 | PA06 | | EIC/EXTINT[6] PTC/Y[4] ADC/AIN[6] AC/AIN[2] SERCOM0/PAD[2] *TCC1/WO[0] - * | 9 | ~9 | PA07 | | EIC/EXTINT[7] PTC/Y[5] DC/AIN[7] AC/AIN[3] SERCOM0/PAD[3] *TCC1/WO[1] - * | 10 | ~10 | PA18 | | EIC/EXTINT[2] PTC/X[6] SERCOM1/PAD[2] SERCOM3/PAD[2] *TC3/WO[0] TCC0/WO[2] - * | 11 | ~11 | PA16 | | EIC/EXTINT[0] PTC/X[4] SERCOM1/PAD[0] SERCOM3/PAD[0] *TCC2/WO[0] TCC0/WO[6] - * | 12 | ~12 | PA19 | | EIC/EXTINT[3] PTC/X[7] SERCOM1/PAD[3] SERCOM3/PAD[3] *TC3/WO[1] TCC0/WO[3] - * | 13 | ~13 | PA17 | LED | EIC/EXTINT[1] PTC/X[5] SERCOM1/PAD[1] SERCOM3/PAD[1] *TCC2/WO[1] TCC0/WO[7] - * | 14 | GND | | | - * | 15 | AREF | PA03 | | *DAC/VREFP PTC/Y[1] - * | 16 | SDA | PA22 | | EIC/EXTINT[6] PTC/X[10] *SERCOM3/PAD[0] SERCOM5/PAD[0] TC4/WO[0] TCC0/WO[4] - * | 17 | SCL | PA23 | | EIC/EXTINT[7] PTC/X[11] *SERCOM3/PAD[1] SERCOM5/PAD[1] TC4/WO[1] TCC0/WO[5] - * +------------+------------------+--------+-----------------+------------------------------ - * | |SPI (Legacy ICSP) | | | - * +------------+------------------+--------+-----------------+------------------------------ - * | 18 | 1 | PA12 | MISO | EIC/EXTINT[12] SERCOM2/PAD[0] *SERCOM4/PAD[0] TCC2/WO[0] TCC0/WO[6] - * | 19 | 2 | | 5V0 | - * | 20 | 3 | PB11 | SCK | EIC/EXTINT[11] *SERCOM4/PAD[3] TC5/WO[1] TCC0/WO[5] - * | 21 | 4 | PB10 | MOSI | EIC/EXTINT[10] *SERCOM4/PAD[2] TC5/WO[0] TCC0/WO[4] - * | 22 | 5 | | RESET | - * | 23 | 6 | | GND | - * +------------+------------------+--------+-----------------+------------------------------ - * | | Analog Connector | | | - * +------------+------------------+--------+-----------------+------------------------------ - * | 24 | A0 | PA02 | | EIC/EXTINT[2] *ADC/AIN[0] PTC/Y[0] DAC/VOUT - * | 25 | A1 | PB08 | | EIC/EXTINT[8] *ADC/AIN[2] PTC/Y[14] SERCOM4/PAD[0] TC4/WO[0] - * | 26 | A2 | PB09 | | EIC/EXTINT[9] *ADC/AIN[3] PTC/Y[15] SERCOM4/PAD[1] TC4/WO[1] - * | 27 | A3 | PA04 | | EIC/EXTINT[4] *ADC/AIN[4] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[0] TCC0/WO[0] - * | 28 | A4 | PA05 | | EIC/EXTINT[5] *ADC/AIN[5] AC/AIN[1] PTC/Y[5] SERCOM0/PAD[1] TCC0/WO[1] - * | 29 | A5 | PB02 | | EIC/EXTINT[2] *ADC/AIN[10] PTC/Y[8] SERCOM5/PAD[0] TC6/WO[0] - * +------------+------------------+--------+-----------------+------------------------------ - * | | LEDs | | | - * +------------+------------------+--------+-----------------+------------------------------ - * | 30 | | PB03 | RX | - * | 31 | | PA27 | TX | - * +------------+------------------+--------+-----------------+------------------------------ - * | | USB | | | - * +------------+------------------+--------+-----------------+------------------------------ - * | 32 | | PA28 | USB HOST ENABLE | - * | 33 | | PA24 | USB_NEGATIVE | USB/DM - * | 34 | | PA25 | USB_POSITIVE | USB/DP - * +------------+------------------+--------+-----------------+------------------------------ - * | | EDBG | | | - * +------------+------------------+--------+-----------------+------------------------------ - * | 35 | | PB22 | EDBG_UART TX | SERCOM5/PAD[2] - * | 36 | | PB23 | EDBG_UART RX | SERCOM5/PAD[3] - * +------------+------------------+--------+-----------------+------------------------------ - * | 37 | | PA22 | EDBG_SDA | SERCOM3/PAD[0] - * | 38 | | PA23 | EDBG_SCL | SERCOM3/PAD[1] - * +------------+------------------+--------+-----------------+------------------------------ - * | 39 | | PA19 | EDBG_MISO | SERCOM1/PAD[3] - * | 40 | | PA16 | EDBG_MOSI | SERCOM1/PAD[0] - * | 41 | | PA18 | EDBG_SS | SERCOM1/PAD[2] - * | 42 | | PA17 | EDBG_SCK | SERCOM1/PAD[1] - * +------------+------------------+--------+-----------------+------------------------------ - * | 43 | | PA13 | EDBG_GPIO0 | EIC/EXTINT[13] *TCC2/WO[1] TCC0/WO[7] - * | 44 | | PA21 | EDBG_GPIO1 | Pin 7 - * | 45 | | PA06 | EDBG_GPIO2 | Pin 8 - * | 46 | | PA07 | EDBG_GPIO3 | Pin 9 - * +------------+------------------+--------+-----------------+------------------------------ - * | |32.768KHz Crystal | | | - * +------------+------------------+--------+-----------------+------------------------------ - * | | | PA00 | XIN32 | EXTINT[0] SERCOM1/PAD[0] TCC2/WO[0] - * | | | PA01 | XOUT32 | EXTINT[1] SERCOM1/PAD[1] TCC2/WO[1] - * +------------+------------------+--------+-----------------+------------------------------ - */ -``` - - - -## PinDescription table format - -### Note that in 1.6.18-beta-b1 a new compact table format was added. -The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE -to use a more compact format that uses only 4 bytes per pin (currently only available -for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used -(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to -pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC -column. Note that external libraries that reference the PinDescription table directly (uncommon) -will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which -is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. - -### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. -MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. -If using board variant files with the old format, the new core will still read the -table the old way, losing any new features introduced by the new column. Additionally, -new definitions have been added for D51, L21, and C21 support. - -### Each pin can have multiple functions. -The PinDescription table describes how each of the pins can be used by the Arduino -core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, -communications, etc.), and the PinDescription table configures which functions can -be used for each pin. This table is mainly accessed by the pinPeripheral function in -wiring_private.c, which is used to attach a pin to a particular peripheral function. -The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), -analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to -verify that the pin can perform the function requested, and to configure the pin for -that function. Most of the contents of pinMode() are now in pinPeripheral(). - -### Pin Mapping -There are different ways that pins can be mapped. Typically, there is no relation -between the arduino pin number used, and the actual port pin designator. Thus, the -pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, -a cross reference table is needed to find the arduino pin number. However, this results -in the least amount of space used by the table. Another method, used by default by the -MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino -pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins -are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added -for pins that are used for other purposes or for pins that do not exist (especially the -D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp -from the MT-D11 variant. The Xeno combines both methods, using the actual port pin -designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then -using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be -used, leaving the other pin for some number above 31. - -**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** - -### Port -This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### Pin -This is the pin (bit) within the port. Valid values are 0-31. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetPortPin() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column -using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, -use SetPortPin(NOT_A_PORT, 0). - -### PinType -This indicates what peripheral function the pin can be attached to. In most cases, -this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute -field. It can also be set to a specific peripheral. In this case, any attempt to -configure the pin (using pinPeripheral or pinMode) as anything else will fail (and -pinPeripheral will return -1). This can be used to prevent accidental re-configuration -of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin -is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See -WVariant.h for valid entries. These entries are also used as a parameter to -pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function -now calls pinPeripheral() with the desired mode. Note that this field is not used to -select between the different peripherals possible with each of the SERCOM and TIMER -functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE -is defined, PinType is not used (the pin is treated as PIO_MULTI). - -### PeripheralAttribute -This is an 8-bit bitfield used for various peripheral configuration. It is primarily -used to select between the different peripherals possible with each of the SERCOM and -TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four -pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on -the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. -Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the -pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, -buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are -two) is also selected here. Note that the D51 adds a third timer attribute and -requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. - -### PinAttribute -This is a 32-bit bitfield used to list all of the valid peripheral functions that a -pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain -attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL -includes all of the GPIO functions, while PIN_ATTR_TIMER includes both -PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). -PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for -limiting a pin to only input related functions or output functions. This allows a pin -to have a more flexible configuration, while restricting the direction (ie: to avoid -contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### TCChannel -This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available -on multiple pins. In general, only one pin should be configured in the pinDescription -table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column -to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on -the D21). See WVariant.h for valid entries. - -### ADCChannelNumber -This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC -instances, which are selected in the PeripheralAttribute column. See WVariant.h for -valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### ExtInt -This is the interrupt (if any) assigned to the pin. Some interrupt numbers are -available on multiple pins. In general, only one pin should be configured in the -pinDescription table per interrupt number. Thus, for example, if an interrupt was -needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid -entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetExtIntADC() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined -into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, -ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). - -### GCLKCCL -This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support -the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, -L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/arduino_mzero/debug_scripts/SAMD21G18A.gdb b/variants/arduino_mzero/debug_scripts/SAMD21G18A.gdb deleted file mode 100644 index 3c37ffde2..000000000 --- a/variants/arduino_mzero/debug_scripts/SAMD21G18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_mzero/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld b/variants/arduino_mzero/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld deleted file mode 100644 index 7d36dfd4c..000000000 --- a/variants/arduino_mzero/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,214 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_mzero/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld b/variants/arduino_mzero/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld deleted file mode 100644 index 39944cffc..000000000 --- a/variants/arduino_mzero/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_mzero/linker_scripts/gcc/No_Bootloader/flash_256KB.ld b/variants/arduino_mzero/linker_scripts/gcc/No_Bootloader/flash_256KB.ld deleted file mode 100644 index 81adfe22d..000000000 --- a/variants/arduino_mzero/linker_scripts/gcc/No_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,215 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_mzero/openocd_scripts/SAMD21G18A.cfg b/variants/arduino_mzero/openocd_scripts/SAMD21G18A.cfg deleted file mode 100644 index 36c65c32d..000000000 --- a/variants/arduino_mzero/openocd_scripts/SAMD21G18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21g18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/arduino_mzero/pins_arduino.h b/variants/arduino_mzero/pins_arduino.h deleted file mode 100755 index db0e40c3d..000000000 --- a/variants/arduino_mzero/pins_arduino.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// API compatibility -#include "variant.h" - diff --git a/variants/arduino_mzero/variant.cpp b/variants/arduino_mzero/variant.cpp deleted file mode 100644 index c641f07af..000000000 --- a/variants/arduino_mzero/variant.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 9 December 2016 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - - -#include "variant.h" - -/* - * Pins descriptions - */ -const PinDescription g_APinDescription[]= -{ - // 0..13 - Digital pins - // ---------------------- - // 0/1 - SERCOM/UART (Serial1) - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, // RX: SERCOM0/PAD[3] - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_10, GCLK_CCL_NONE }, // TX: SERCOM0/PAD[2] - - // 2..12 - // Digital Low - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH0, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // TCC0/WO[0] SDA: SERCOM2/PAD[0] - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH1, ADC_Channel17, EXTERNAL_INT_9, GCLK_CCL_NONE }, // TCC0/WO[1] SCL: SERCOM2/PAD[1] - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, // TC3/WO[1] - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, // TCC0/WO[6] - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, - - // Digital High - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // TCC1/WO[0] ADC/AIN[6] - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TCC1_CH1, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // TCC1/WO[1] ADC/AIN[7] - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, // TC3/WO[0] SS: SERCOM1/PAD[2] - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // TCC2/WO[0] MOSI: SERCOM1/PAD[0] - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // TCC0/WO[3] MISO: SERCOM1/PAD[3] - - // 13 (LED) - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // TCC2/WO[1] SCK: SERCOM1/PAD[1] - - // 14 (GND) - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 15 (AREF) - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // VREF ADC/AIN[1] - - // 16..17 I2C pins (SDA/SCL and also EDBG:SDA/SCL) - // ---------------------- - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SDA: SERCOM3/PAD[0] - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SCL: SERCOM3/PAD[1] - - // 18..23 - SPI pins (ICSP:MISO,SCK,MOSI) - // ---------------------- - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, // MISO: SERCOM4/PAD[0] - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SCK: SERCOM4/PAD[3] - { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // MOSI: SERCOM4/PAD[2] - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 24..29 - Analog pins - // -------------------- - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[0] / DAC - { PORTB, 8, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, // ADC/AIN[2] - { PORTB, 9, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[3] - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[4] - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[5] - { PORTB, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[10] - - // 30..31 - RX/TX LEDS (PB03/PA27) - // -------------------- - { PORTB, 3, PIO_OUTPUT, PER_ATTR_DRIVE_STRONG, PIN_ATTR_OUTPUT, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // used as output only - { PORTA, 27, PIO_OUTPUT, PER_ATTR_DRIVE_STRONG, PIN_ATTR_OUTPUT, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // used as output only - - // 32..34 - USB - // -------------------- - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB Host enable - { PORTA, 24, PIO_COM, PER_ATTR_NONE, PIN_ATTR_COM, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_COM, PER_ATTR_NONE, PIN_ATTR_COM, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - - // 35..46 - EDBG - // ---------------------- - // 35/36 - EDBG/UART - { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TX: SERCOM5/PAD[2] - { PORTB, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // RX: SERCOM5/PAD[3] - - // 37/38 I2C (SDA/SCL and also EDBG:SDA/SCL). These are duplicate entries of pins 16 and 17 - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // SDA: SERCOM3/PAD[0] - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // SCL: SERCOM3/PAD[1] - - // 39..42 - EDBG/SPI. These are duplicate entries of pins 12, 11, 10, and 13. - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // MISO: SERCOM1/PAD[3] - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // MOSI: SERCOM1/PAD[0] - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, // SS: SERCOM1/PAD[2] - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // SCK: SERCOM1/PAD[1] - - // 43..46 - EDBG/Digital - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, // EIC/EXTINT[13] PIN_ATN - - // 44..46 These are duplicate entries of pins 7, 8, and 9 - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TCC1/WO[0] ADC/AIN[6] - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TCC1_CH1, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TCC1/WO[1] ADC/AIN[7] - - // 47 - Alternate use of A0 (DAC output). This is a duplicate entry of pin 24 - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[0] / DAC -} ; - -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ; - -// Multi-serial objects instantiation -SERCOM sercom0( SERCOM0 ) ; -SERCOM sercom1( SERCOM1 ) ; -SERCOM sercom2( SERCOM2 ) ; -SERCOM sercom3( SERCOM3 ) ; -SERCOM sercom4( SERCOM4 ) ; -SERCOM sercom5( SERCOM5 ) ; - -#if defined(ONE_UART) || defined(TWO_UART) -Uart Serial( SERCOM_INSTANCE_SERIAL, PIN_SERIAL_RX, PIN_SERIAL_TX, PAD_SERIAL_RX, PAD_SERIAL_TX ) ; - -void SERCOM5_Handler() -{ - Serial.IrqHandler(); -} -#endif - -#if defined(TWO_UART) -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - -void SERCOM0_Handler() -{ - Serial1.IrqHandler(); -} -#endif - diff --git a/variants/arduino_mzero/variant.h b/variants/arduino_mzero/variant.h deleted file mode 100644 index b85c2525f..000000000 --- a/variants/arduino_mzero/variant.h +++ /dev/null @@ -1,288 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _VARIANT_ARDUINO_MZERO_ -#define _VARIANT_ARDUINO_MZERO_ - -/* The definitions here need the MattairTech SAMD core >=1.6.8. - * The format is different than the stock Arduino SAMD core, - * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. - */ -#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10608 - -/*---------------------------------------------------------------------------- - * Clock Configuration - *----------------------------------------------------------------------------*/ - -/** Master clock frequency (also Fcpu frequency) */ -#define VARIANT_MCK (48000000ul) - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" -#include "sam.h" - -#ifdef __cplusplus -#include "SERCOM.h" -#include "Uart.h" -#endif // __cplusplus - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/*---------------------------------------------------------------------------- - * Pins - *----------------------------------------------------------------------------*/ - -// Number of pins defined in PinDescription array -#define NUM_PIN_DESCRIPTION_ENTRIES (48u) - -#define PINS_COUNT (34u) -#define NUM_DIGITAL_PINS (19u) -#define NUM_ANALOG_INPUTS (6u) -#define NUM_ANALOG_OUTPUTS (1u) -#define analogInputToDigitalPin(p) ((p < 6u) ? (p) + 24u : -1) - -#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) ) -#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin ) -//#define analogInPinToBit(P) ( ) -#define portOutputRegister(port) ( &(port->OUT.reg) ) -#define portInputRegister(port) ( &(port->IN.reg) ) -#define portModeRegister(port) ( &(port->DIR.reg) ) -#define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) - -/* - * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD - * architecture. If you need to check if a pin supports PWM you must - * use digitalPinHasPWM(..). - * - * https://github.com/arduino/Arduino/issues/1833 - */ -// #define digitalPinToTimer(P) - -// LEDs -#define PIN_LED_13 (13u) -#define PIN_LED_RXL (30u) -#define PIN_LED_TXL (31u) -#define PIN_LED PIN_LED_13 -#define PIN_LED2 PIN_LED_RXL -#define PIN_LED3 PIN_LED_TXL -#define LED_BUILTIN PIN_LED_13 - -/* - * Analog pins - */ -#define PIN_A0 (24ul) -#define PIN_A1 (25ul) -#define PIN_A2 (26ul) -#define PIN_A3 (27ul) -#define PIN_A4 (28ul) -#define PIN_A5 (29ul) -#define PIN_DAC0 (24ul) - -static const uint8_t A0 = PIN_A0; -static const uint8_t A1 = PIN_A1; -static const uint8_t A2 = PIN_A2; -static const uint8_t A3 = PIN_A3; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; -static const uint8_t DAC0 = PIN_DAC0; -#define ADC_RESOLUTION 12 - -#define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 - -/* Set default analog voltage reference */ -#define VARIANT_AR_DEFAULT AR_DEFAULT - -/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ -#define REFA_PIN (15ul) -#define REFB_PIN (27ul) - -/* - * Serial interfaces - */ -// Serial (EDBG) -#define PIN_SERIAL_RX (36ul) -#define PIN_SERIAL_TX (35ul) -#define PAD_SERIAL_TX (UART_TX_PAD_2) -#define PAD_SERIAL_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL &sercom5 - -// Serial1 -#define PIN_SERIAL1_RX (0ul) -#define PIN_SERIAL1_TX (1ul) -#define PAD_SERIAL1_TX (UART_TX_PAD_2) -#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL1 &sercom0 - -/* - * SPI Interfaces - */ -#if defined(TWO_SPI) -#define SPI_INTERFACES_COUNT 2 -#elif defined(THREE_SPI) -#define SPI_INTERFACES_COUNT 3 -#else -#define SPI_INTERFACES_COUNT 1 -#endif - -#define PIN_SPI_MOSI (21u) -#define PIN_SPI_MISO (18u) -#define PIN_SPI_SCK (20u) -#define PERIPH_SPI sercom4 -#define PAD_SPI_TX SPI_PAD_2_SCK_3 -#define PAD_SPI_RX SERCOM_RX_PAD_0 - -static const uint8_t SS = 14 ; // Gnd -static const uint8_t MOSI = PIN_SPI_MOSI ; -static const uint8_t MISO = PIN_SPI_MISO ; -static const uint8_t SCK = PIN_SPI_SCK ; - -#define PIN_SPI1_MISO (29u) -#define PIN_SPI1_MOSI (26u) -#define PIN_SPI1_SCK (27u) -#define PERIPH_SPI1 sercom1 -#define PAD_SPI1_TX SPI_PAD_2_SCK_3 -#define PAD_SPI1_RX SERCOM_RX_PAD_0 - -/* - * Wire Interfaces - */ -#if defined(TWO_WIRE) -#define WIRE_INTERFACES_COUNT 2 -#elif defined(THREE_WIRE) -#define WIRE_INTERFACES_COUNT 3 -#else -#define WIRE_INTERFACES_COUNT 1 -#endif - -#define PIN_WIRE_SDA (16u) -#define PIN_WIRE_SCL (17u) -#define PERIPH_WIRE sercom3 -#define WIRE_IT_HANDLER SERCOM3_Handler - -#define PIN_WIRE1_SDA (2u) -#define PIN_WIRE1_SCL (3u) -#define PERIPH_WIRE1 sercom2 -#define WIRE1_IT_HANDLER SERCOM2_Handler - -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; - -/* - * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to - * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. - */ -#define PIN_USB_DM (33ul) -#define PIN_USB_DP (34ul) -#define PIN_USB_HOST_ENABLE (32ul) -#define PIN_USB_HOST_ENABLE_VALUE 1 - -/* - * I2S Interfaces - */ -#define I2S_INTERFACES_COUNT 1 - -#define I2S_DEVICE 0 -#define I2S_CLOCK_GENERATOR 3 -#define PIN_I2S_SD (9u) -#define PIN_I2S_SCK (1u) -#define PIN_I2S_FS (0u) - -#ifdef __cplusplus -} -#endif - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#ifdef __cplusplus - -/* ========================= - * ===== SERCOM DEFINITION - * ========================= -*/ -extern SERCOM sercom0; -extern SERCOM sercom1; -extern SERCOM sercom2; -extern SERCOM sercom3; -extern SERCOM sercom4; -extern SERCOM sercom5; - -extern Uart Serial; -extern Uart Serial1; - -#endif - -// These serial port names are intended to allow libraries and architecture-neutral -// sketches to automatically default to the correct port name for a particular type -// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, -// the first hardware serial port whose RX/TX pins are not dedicated to another use. -// -// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor -// -// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial -// -// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library -// -// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. -// -// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX -// pins are NOT connected to anything by default. -#define SERIAL_PORT_USBVIRTUAL SerialUSB -#define SERIAL_PORT_MONITOR Serial -// Serial has no physical pins broken out, so it's not listed as HARDWARE port -#define SERIAL_PORT_HARDWARE Serial1 -#define SERIAL_PORT_HARDWARE_OPEN Serial1 - -// Legacy way to describe serial port on pins 0-1 -#define Serial5 Serial1 - -#endif /* _VARIANT_ARDUINO_MZERO_ */ diff --git a/variants/arduino_zero/README.md b/variants/arduino_zero/README.md deleted file mode 100644 index e555a5310..000000000 --- a/variants/arduino_zero/README.md +++ /dev/null @@ -1,220 +0,0 @@ -# Pins descriptions for the Arduino/Genuino Zero - -``` -/* - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * + Pin number + ZERO Board pin | PIN | Label/Name | Comments (* is for available peripherals with this configuration) - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | Digital Low | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 0 | 0 -> RX | PA11 | | *EIC/EXTINT[11] *ADC/AIN[19] PTC/X[3] *SERCOM0/PAD[3] SERCOM2/PAD[3] TCC0/WO[3] TCC1/WO[1] - * | 1 | 1 <- TX | PA10 | | *EIC/EXTINT[10] *ADC/AIN[18] PTC/X[2] *SERCOM0/PAD[2] TCC0/WO[2] TCC1/WO[0] - * | 2 | 2 | PA14 | | *EIC/EXTINT[14] SERCOM2/PAD[2] SERCOM4/PAD[2] TC3/WO[0] TCC0/WO[4] - * | 3 | ~3 | PA09 | | *EIC/EXTINT[9] *ADC/AIN[17] PTC/X[1] SERCOM0/PAD[1] *SERCOM2/PAD[1] *TCC0/WO[1] TCC1/WO[3] - * | 4 | ~4 | PA08 | | *EIC/NMI *ADC/AIN[16] PTC/X[0] SERCOM0/PAD[0] *SERCOM2/PAD[0] *TCC0/WO[0] TCC1/WO[2] - * | 5 | ~5 | PA15 | | *EIC/EXTINT[15] SERCOM2/PAD[3] SERCOM4/PAD[3] *TC3/WO[1] TCC0/WO[5] - * | 6 | ~6 | PA20 | | *EIC/EXTINT[4] PTC/X[8] SERCOM5/PAD[2] SERCOM3/PAD[2] *TCC0/WO[6] - * | 7 | 7 | PA21 | | *EIC/EXTINT[5] PTC/X[9] SERCOM5/PAD[3] SERCOM3/PAD[3] TCC0/WO[7] - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | Digital High | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 8 | ~8 | PA06 | | EIC/EXTINT[6] *ADC/AIN[6] AC/AIN[2] PTC/Y[4] SERCOM0/PAD[2] *TCC1/WO[0] - * | 9 | ~9 | PA07 | | EIC/EXTINT[7] *ADC/AIN[7] AC/AIN[3] PTC/Y[5] SERCOM0/PAD[3] *TCC1/WO[1] - * | 10 | ~10 | PA18 | | *EIC/EXTINT[2] PTC/X[6] *SERCOM1/PAD[2] SERCOM3/PAD[2] *TC3/WO[0] TCC0/WO[2] - * | 11 | ~11 | PA16 | | *EIC/EXTINT[0] PTC/X[4] *SERCOM1/PAD[0] SERCOM3/PAD[0] *TCC2/WO[0] TCC0/WO[6] - * | 12 | ~12 | PA19 | | *EIC/EXTINT[3] PTC/X[7] *SERCOM1/PAD[3] SERCOM3/PAD[3] TC3/WO[1] *TCC0/WO[3] - * | 13 | ~13 | PA17 | LED | *EIC/EXTINT[1] PTC/X[5] *SERCOM1/PAD[1] SERCOM3/PAD[1] *TCC2/WO[1] TCC0/WO[7] - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | Analog Connector | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 14 | A0 | PA02 | A0 | EIC/EXTINT[2] *ADC/AIN[0] *DAC/VOUT PTC/Y[0] - * | 15 | A1 | PB08 | A1 | *EIC/EXTINT[8] *ADC/AIN[2] PTC/Y[14] SERCOM4/PAD[0] TC4/WO[0] - * | 16 | A2 | PB09 | A2 | EIC/EXTINT[9] *ADC/AIN[3] PTC/Y[15] SERCOM4/PAD[1] TC4/WO[1] - * | 17 | A3 | PA04 | A3 | EIC/EXTINT[4] *ADC/AIN[4] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[0] TCC0/WO[0] - * | 18 | A4 | PA05 | A4 | EIC/EXTINT[5] *ADC/AIN[5] AC/AIN[1] PTC/Y[5] SERCOM0/PAD[1] TCC0/WO[1] - * | 19 | A5 | PB02 | A5 | EIC/EXTINT[2] *ADC/AIN[10] PTC/Y[8] SERCOM5/PAD[0] - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | Wire | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 20 | SDA | PA22 | SDA | *EIC/EXTINT[6] PTC/X[10] *SERCOM3/PAD[0] SERCOM5/PAD[0] *TC4/WO[0] TCC0/WO[4] - * | 21 | SCL | PA23 | SCL | *EIC/EXTINT[7] PTC/X[11] *SERCOM3/PAD[1] SERCOM5/PAD[1] *TC4/WO[1] TCC0/WO[5] - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | |SPI (Legacy ICSP) | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 22 | 1 | PA12 | MISO | *EIC/EXTINT[12] SERCOM2/PAD[0] *SERCOM4/PAD[0] TCC2/WO[0] TCC0/WO[6] - * | | 2 | | 5V0 | - * | 23 | 4 | PB10 | MOSI | EIC/EXTINT[10] *SERCOM4/PAD[2] *TC5/WO[0] TCC0/WO[4] - * | 24 | 3 | PB11 | SCK | EIC/EXTINT[11] *SERCOM4/PAD[3] *TC5/WO[1] TCC0/WO[5] - * | | 5 | | RESET | - * | | 6 | | GND | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | LEDs | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 25 | | PB03 | RX | - * | 26 | | PA27 | TX | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | USB | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 27 | | PA28 | USB_HOST_ENABLE | EIC/EXTINT[8] - * | 28 | | PA24 | USB_NEGATIVE | *USB/DM - * | 29 | | PA25 | USB_POSITIVE | *USB/DP - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | EDBG | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 30 | | PB22 | EDBG_UART TX | *SERCOM5/PAD[2] - * | 31 | | PB23 | EDBG_UART RX | *SERCOM5/PAD[3] - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 32 | | PA22 | EDBG_SDA | Pin 20 (SDA) - * | 33 | | PA23 | EDBG_SCL | Pin 21 (SCL) - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 34 | | PA19 | EDBG_MISO | EIC/EXTINT[3] *SERCOM1/PAD[3] SERCOM3/PAD[3] TC3/WO[1] TCC0/WO[3] - * | 35 | | PA16 | EDBG_MOSI | EIC/EXTINT[0] *SERCOM1/PAD[0] SERCOM3/PAD[0] TCC2/WO[0] TCC0/WO[6] - * | 36 | | PA18 | EDBG_SS | EIC/EXTINT[2] *SERCOM1/PAD[2] SERCOM3/PAD[2] TC3/WO[0] TCC0/WO[2] - * | 37 | | PA17 | EDBG_SCK | EIC/EXTINT[1] *SERCOM1/PAD[1] SERCOM3/PAD[1] TCC2/WO[1] TCC0/WO[7] - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | 38 | ATN | PA13 | EDBG_GPIO0 | *EIC/EXTINT[13] SERCOM2/PAD[1] SERCOM4/PAD[1] TCC2/WO[1] TCC0/WO[7] - * | 39 | | PA21 | EDBG_GPIO1 | Pin 7 - * | 40 | | PA06 | EDBG_GPIO2 | Pin 8 - * | 41 | | PA07 | EDBG_GPIO3 | Pin 9 - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | GND | | | - * | 42 | AREF | PA03 | | EIC/EXTINT[3] *[ADC|DAC]/VREFA *ADC/AIN[1] PTC/Y[1] - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | |32.768KHz Crystal | | | - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - * | | | PA00 | XIN32 | EIC/EXTINT[0] SERCOM1/PAD[0] TCC2/WO[0] - * | | | PA01 | XOUT32 | EIC/EXTINT[1] SERCOM1/PAD[1] TCC2/WO[1] - * +------------+------------------+--------+-----------------+-------------------------------------------------------------------------------------------------------- - */ -``` - - - -## PinDescription table format - -### Note that in 1.6.18-beta-b1 a new compact table format was added. -The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE -to use a more compact format that uses only 4 bytes per pin (currently only available -for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used -(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to -pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC -column. Note that external libraries that reference the PinDescription table directly (uncommon) -will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which -is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. - -### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. -MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. -If using board variant files with the old format, the new core will still read the -table the old way, losing any new features introduced by the new column. Additionally, -new definitions have been added for D51, L21, and C21 support. - -### Each pin can have multiple functions. -The PinDescription table describes how each of the pins can be used by the Arduino -core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, -communications, etc.), and the PinDescription table configures which functions can -be used for each pin. This table is mainly accessed by the pinPeripheral function in -wiring_private.c, which is used to attach a pin to a particular peripheral function. -The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), -analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to -verify that the pin can perform the function requested, and to configure the pin for -that function. Most of the contents of pinMode() are now in pinPeripheral(). - -### Pin Mapping -There are different ways that pins can be mapped. Typically, there is no relation -between the arduino pin number used, and the actual port pin designator. Thus, the -pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, -a cross reference table is needed to find the arduino pin number. However, this results -in the least amount of space used by the table. Another method, used by default by the -MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino -pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins -are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added -for pins that are used for other purposes or for pins that do not exist (especially the -D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp -from the MT-D11 variant. The Xeno combines both methods, using the actual port pin -designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then -using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be -used, leaving the other pin for some number above 31. - -**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** - -### Port -This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### Pin -This is the pin (bit) within the port. Valid values are 0-31. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetPortPin() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column -using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, -use SetPortPin(NOT_A_PORT, 0). - -### PinType -This indicates what peripheral function the pin can be attached to. In most cases, -this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute -field. It can also be set to a specific peripheral. In this case, any attempt to -configure the pin (using pinPeripheral or pinMode) as anything else will fail (and -pinPeripheral will return -1). This can be used to prevent accidental re-configuration -of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin -is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See -WVariant.h for valid entries. These entries are also used as a parameter to -pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function -now calls pinPeripheral() with the desired mode. Note that this field is not used to -select between the different peripherals possible with each of the SERCOM and TIMER -functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE -is defined, PinType is not used (the pin is treated as PIO_MULTI). - -### PeripheralAttribute -This is an 8-bit bitfield used for various peripheral configuration. It is primarily -used to select between the different peripherals possible with each of the SERCOM and -TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four -pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on -the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. -Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the -pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, -buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are -two) is also selected here. Note that the D51 adds a third timer attribute and -requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. - -### PinAttribute -This is a 32-bit bitfield used to list all of the valid peripheral functions that a -pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain -attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL -includes all of the GPIO functions, while PIN_ATTR_TIMER includes both -PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). -PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for -limiting a pin to only input related functions or output functions. This allows a pin -to have a more flexible configuration, while restricting the direction (ie: to avoid -contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### TCChannel -This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available -on multiple pins. In general, only one pin should be configured in the pinDescription -table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column -to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on -the D21). See WVariant.h for valid entries. - -### ADCChannelNumber -This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC -instances, which are selected in the PeripheralAttribute column. See WVariant.h for -valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### ExtInt -This is the interrupt (if any) assigned to the pin. Some interrupt numbers are -available on multiple pins. In general, only one pin should be configured in the -pinDescription table per interrupt number. Thus, for example, if an interrupt was -needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid -entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetExtIntADC() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined -into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, -ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). - -### GCLKCCL -This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support -the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, -L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/arduino_zero/debug_scripts/SAMC21G15A.gdb b/variants/arduino_zero/debug_scripts/SAMC21G15A.gdb deleted file mode 100644 index f818c9bbe..000000000 --- a/variants/arduino_zero/debug_scripts/SAMC21G15A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g15" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAMC21G16A.gdb b/variants/arduino_zero/debug_scripts/SAMC21G16A.gdb deleted file mode 100644 index 5c258d3ac..000000000 --- a/variants/arduino_zero/debug_scripts/SAMC21G16A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g16" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAMC21G17A.gdb b/variants/arduino_zero/debug_scripts/SAMC21G17A.gdb deleted file mode 100644 index 0387ce888..000000000 --- a/variants/arduino_zero/debug_scripts/SAMC21G17A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g17" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAMC21G18A.gdb b/variants/arduino_zero/debug_scripts/SAMC21G18A.gdb deleted file mode 100644 index 1d0b9d1c0..000000000 --- a/variants/arduino_zero/debug_scripts/SAMC21G18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g18" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAMD21G15A.gdb b/variants/arduino_zero/debug_scripts/SAMD21G15A.gdb deleted file mode 100644 index f8b1d04e3..000000000 --- a/variants/arduino_zero/debug_scripts/SAMD21G15A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g15" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAMD21G16A.gdb b/variants/arduino_zero/debug_scripts/SAMD21G16A.gdb deleted file mode 100644 index 2f9de5a98..000000000 --- a/variants/arduino_zero/debug_scripts/SAMD21G16A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g16" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAMD21G17A.gdb b/variants/arduino_zero/debug_scripts/SAMD21G17A.gdb deleted file mode 100644 index be4c3e9ab..000000000 --- a/variants/arduino_zero/debug_scripts/SAMD21G17A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g17" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAMD21G18A.gdb b/variants/arduino_zero/debug_scripts/SAMD21G18A.gdb deleted file mode 100644 index 3c37ffde2..000000000 --- a/variants/arduino_zero/debug_scripts/SAMD21G18A.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAML21G16B.gdb b/variants/arduino_zero/debug_scripts/SAML21G16B.gdb deleted file mode 100644 index d229f8f0c..000000000 --- a/variants/arduino_zero/debug_scripts/SAML21G16B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21g16" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAML21G17B.gdb b/variants/arduino_zero/debug_scripts/SAML21G17B.gdb deleted file mode 100644 index f67cdcb2f..000000000 --- a/variants/arduino_zero/debug_scripts/SAML21G17B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21g17" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/debug_scripts/SAML21G18B.gdb b/variants/arduino_zero/debug_scripts/SAML21G18B.gdb deleted file mode 100644 index b5230803b..000000000 --- a/variants/arduino_zero/debug_scripts/SAML21G18B.gdb +++ /dev/null @@ -1,31 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21g18" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld b/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld deleted file mode 100644 index c541d8cd0..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00020000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld b/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld deleted file mode 100644 index a0b9f951f..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld b/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld deleted file mode 100644 index 5d8d047a9..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00008000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld b/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld deleted file mode 100644 index 3f7223790..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00010000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld b/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld deleted file mode 100644 index 07940acbd..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00020000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld b/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld deleted file mode 100644 index 39944cffc..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld b/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld deleted file mode 100644 index 0d3aaf7a9..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00008000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld b/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld deleted file mode 100644 index 1c36f57e1..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,217 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00010000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_128KB.ld b/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_128KB.ld deleted file mode 100644 index 74945d7da..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_128KB.ld +++ /dev/null @@ -1,215 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00020000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_256KB.ld b/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_256KB.ld deleted file mode 100644 index 81adfe22d..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_256KB.ld +++ /dev/null @@ -1,215 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_32KB.ld b/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_32KB.ld deleted file mode 100644 index eb557284d..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_32KB.ld +++ /dev/null @@ -1,215 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_64KB.ld b/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_64KB.ld deleted file mode 100644 index c053d998b..000000000 --- a/variants/arduino_zero/linker_scripts/gcc/No_Bootloader/flash_64KB.ld +++ /dev/null @@ -1,215 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} diff --git a/variants/arduino_zero/openocd_scripts/SAMC21G15A.cfg b/variants/arduino_zero/openocd_scripts/SAMC21G15A.cfg deleted file mode 100644 index 10c51c4db..000000000 --- a/variants/arduino_zero/openocd_scripts/SAMC21G15A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21g15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAMC21G16A.cfg b/variants/arduino_zero/openocd_scripts/SAMC21G16A.cfg deleted file mode 100644 index ffb0146b7..000000000 --- a/variants/arduino_zero/openocd_scripts/SAMC21G16A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21g16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAMC21G17A.cfg b/variants/arduino_zero/openocd_scripts/SAMC21G17A.cfg deleted file mode 100644 index 5066d74c6..000000000 --- a/variants/arduino_zero/openocd_scripts/SAMC21G17A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21g17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAMC21G18A.cfg b/variants/arduino_zero/openocd_scripts/SAMC21G18A.cfg deleted file mode 100644 index 2946d9391..000000000 --- a/variants/arduino_zero/openocd_scripts/SAMC21G18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21g18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAMD21G15A.cfg b/variants/arduino_zero/openocd_scripts/SAMD21G15A.cfg deleted file mode 100644 index e5d7eb8bb..000000000 --- a/variants/arduino_zero/openocd_scripts/SAMD21G15A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21g15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAMD21G16A.cfg b/variants/arduino_zero/openocd_scripts/SAMD21G16A.cfg deleted file mode 100644 index 677c80012..000000000 --- a/variants/arduino_zero/openocd_scripts/SAMD21G16A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21g16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAMD21G17A.cfg b/variants/arduino_zero/openocd_scripts/SAMD21G17A.cfg deleted file mode 100644 index 68641e118..000000000 --- a/variants/arduino_zero/openocd_scripts/SAMD21G17A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21g17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAMD21G18A.cfg b/variants/arduino_zero/openocd_scripts/SAMD21G18A.cfg deleted file mode 100644 index 36c65c32d..000000000 --- a/variants/arduino_zero/openocd_scripts/SAMD21G18A.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21g18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAML21G16B.cfg b/variants/arduino_zero/openocd_scripts/SAML21G16B.cfg deleted file mode 100644 index c5ef10770..000000000 --- a/variants/arduino_zero/openocd_scripts/SAML21G16B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21g16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAML21G17B.cfg b/variants/arduino_zero/openocd_scripts/SAML21G17B.cfg deleted file mode 100644 index 48ad58a4d..000000000 --- a/variants/arduino_zero/openocd_scripts/SAML21G17B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21g17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/arduino_zero/openocd_scripts/SAML21G18B.cfg b/variants/arduino_zero/openocd_scripts/SAML21G18B.cfg deleted file mode 100644 index 0a162e7f5..000000000 --- a/variants/arduino_zero/openocd_scripts/SAML21G18B.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21g18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] diff --git a/variants/arduino_zero/pins_arduino.h b/variants/arduino_zero/pins_arduino.h deleted file mode 100644 index db0e40c3d..000000000 --- a/variants/arduino_zero/pins_arduino.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// API compatibility -#include "variant.h" - diff --git a/variants/arduino_zero/variant.cpp b/variants/arduino_zero/variant.cpp deleted file mode 100644 index 712882ec7..000000000 --- a/variants/arduino_zero/variant.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 9 December 2016 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - - -#include "variant.h" - -/* - * Pins descriptions - */ -const PinDescription g_APinDescription[]= -{ - // 0..13 - Digital pins - // ---------------------- - // 0/1 - SERCOM/UART (Serial1) - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, // RX: SERCOM0/PAD[3] - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_10, GCLK_CCL_NONE }, // TX: SERCOM0/PAD[2] - - // 2..12 - // Digital Low - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH1, ADC_Channel17, EXTERNAL_INT_9, GCLK_CCL_NONE }, // TCC0/WO[1] SCL: SERCOM2/PAD[1] - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH0, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // TCC0/WO[0] SDA: SERCOM2/PAD[0] - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, // TC3/WO[1] - { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, // TCC0/WO[6] - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, - - // Digital High - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // TCC1/WO[0] ADC/AIN[6] - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TCC1_CH1, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // TCC1/WO[1] ADC/AIN[7] - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, // TC3/WO[0] SS: SERCOM1/PAD[2] - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // TCC2/WO[0] MOSI: SERCOM1/PAD[0] - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // TCC0/WO[3] MISO: SERCOM1/PAD[3] - - // 13 (LED) - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // TCC2/WO[1] SCK: SERCOM1/PAD[1] - - // 14..19 - Analog pins - // -------------------- - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[0] / DAC - { PORTB, 8, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, // ADC/AIN[2] - { PORTB, 9, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[3] - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[4] - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[5] - { PORTB, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[10] - - // 20..21 I2C pins (SDA/SCL and also EDBG:SDA/SCL) - // ---------------------- - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SDA: SERCOM3/PAD[0] - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SCL: SERCOM3/PAD[1] - - // 22..24 - SPI pins (ICSP:MISO,SCK,MOSI) - // ---------------------- - { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, // MISO: SERCOM4/PAD[0] - { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // MOSI: SERCOM4/PAD[2] - { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SCK: SERCOM4/PAD[3] - - // 25..26 - RX/TX LEDS (PB03/PA27) - // -------------------- - { PORTB, 3, PIO_OUTPUT, PER_ATTR_DRIVE_STRONG, PIN_ATTR_OUTPUT, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // used as output only - { PORTA, 27, PIO_OUTPUT, PER_ATTR_DRIVE_STRONG, PIN_ATTR_OUTPUT, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // used as output only - - // 27..29 - USB - // -------------------- - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB Host enable - { PORTA, 24, PIO_COM, PER_ATTR_NONE, PIN_ATTR_COM, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_COM, PER_ATTR_NONE, PIN_ATTR_COM, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - - // 30..41 - EDBG - // ---------------------- - // 30/31 - EDBG/UART - { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TX: SERCOM5/PAD[2] - { PORTB, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // RX: SERCOM5/PAD[3] - - // 32/33 I2C (SDA/SCL and also EDBG:SDA/SCL). These are duplicate entries of pins 20 and 21 - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // SDA: SERCOM3/PAD[0] - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // SCL: SERCOM3/PAD[1] - - // 34..37 - EDBG/SPI. These are duplicate entries of pins 12, 11, 10, and 13. - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // MISO: SERCOM1/PAD[3] - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // MOSI: SERCOM1/PAD[0] - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, // SS: SERCOM1/PAD[2] - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // SCK: SERCOM1/PAD[1] - - // 38..41 - EDBG/Digital - { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, // EIC/EXTINT[13] PIN_ATN - - // 39..41 These are duplicate entries of pins 7, 8, and 9 so that AREF and DAC are still available on pins 42 and 43 - { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TCC1/WO[0] ADC/AIN[6] - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TCC1_CH1, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TCC1/WO[1] ADC/AIN[7] - - // 42 (AREF) - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // VREF ADC/AIN[1] - - // 43 - Alternate use of A0 (DAC output). This is a duplicate entry of pin 14 - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[0] / DAC -} ; - -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ; - -// Multi-serial objects instantiation -SERCOM sercom0( SERCOM0 ) ; -SERCOM sercom1( SERCOM1 ) ; -SERCOM sercom2( SERCOM2 ) ; -SERCOM sercom3( SERCOM3 ) ; -SERCOM sercom4( SERCOM4 ) ; -SERCOM sercom5( SERCOM5 ) ; - -#if defined(ONE_UART) || defined(TWO_UART) -Uart Serial( SERCOM_INSTANCE_SERIAL, PIN_SERIAL_RX, PIN_SERIAL_TX, PAD_SERIAL_RX, PAD_SERIAL_TX ) ; - -void SERCOM5_Handler() -{ - Serial.IrqHandler(); -} -#endif - -#if defined(TWO_UART) -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - -void SERCOM0_Handler() -{ - Serial1.IrqHandler(); -} -#endif - diff --git a/variants/arduino_zero/variant.h b/variants/arduino_zero/variant.h deleted file mode 100644 index 41a003c77..000000000 --- a/variants/arduino_zero/variant.h +++ /dev/null @@ -1,289 +0,0 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -#ifndef _VARIANT_ARDUINO_ZERO_ -#define _VARIANT_ARDUINO_ZERO_ - -/* The definitions here need the MattairTech SAMD core >=1.6.8. - * The format is different than the stock Arduino SAMD core, - * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. - */ -#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10608 - -/*---------------------------------------------------------------------------- - * Clock Configuration - *----------------------------------------------------------------------------*/ - -/** Master clock frequency (also Fcpu frequency) */ -#define VARIANT_MCK (48000000ul) - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -//#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" -#include "sam.h" - -#ifdef __cplusplus -#include "SERCOM.h" -#include "Uart.h" -#endif // __cplusplus - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/*---------------------------------------------------------------------------- - * Pins - *----------------------------------------------------------------------------*/ - -// Number of pins defined in PinDescription array -#define NUM_PIN_DESCRIPTION_ENTRIES (44u) - -#define PINS_COUNT (26u) -#define NUM_DIGITAL_PINS (20u) -#define NUM_ANALOG_INPUTS (6u) -#define NUM_ANALOG_OUTPUTS (1u) -#define analogInputToDigitalPin(p) ((p < 6u) ? (p) + 14u : -1) - -#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) ) -#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin ) -//#define analogInPinToBit(P) ( ) -#define portOutputRegister(port) ( &(port->OUT.reg) ) -#define portInputRegister(port) ( &(port->IN.reg) ) -#define portModeRegister(port) ( &(port->DIR.reg) ) -#define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) - -/* - * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD - * architecture. If you need to check if a pin supports PWM you must - * use digitalPinHasPWM(..). - * - * https://github.com/arduino/Arduino/issues/1833 - */ -// #define digitalPinToTimer(P) - -// LEDs -#define PIN_LED_13 (13u) -#define PIN_LED_RXL (25u) -#define PIN_LED_TXL (26u) -#define PIN_LED PIN_LED_13 -#define PIN_LED2 PIN_LED_RXL -#define PIN_LED3 PIN_LED_TXL -#define LED_BUILTIN PIN_LED_13 - -/* - * Analog pins - */ -#define PIN_A0 (14ul) -#define PIN_A1 (15ul) -#define PIN_A2 (16ul) -#define PIN_A3 (17ul) -#define PIN_A4 (18ul) -#define PIN_A5 (19ul) -#define PIN_DAC0 (14ul) - -static const uint8_t A0 = PIN_A0; -static const uint8_t A1 = PIN_A1; -static const uint8_t A2 = PIN_A2; -static const uint8_t A3 = PIN_A3; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; -static const uint8_t DAC0 = PIN_DAC0; -#define ADC_RESOLUTION 12 - -#define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 - -/* Set default analog voltage reference */ -#define VARIANT_AR_DEFAULT AR_DEFAULT - -/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ -#define REFA_PIN (42ul) -#define REFB_PIN (17ul) - -// Other pins -#define PIN_ATN (38ul) -static const uint8_t ATN = PIN_ATN; - -/* - * Serial interfaces - */ -// Serial (EDBG) -#define PIN_SERIAL_RX (31ul) -#define PIN_SERIAL_TX (30ul) -#define PAD_SERIAL_TX (UART_TX_PAD_2) -#define PAD_SERIAL_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL &sercom5 - -// Serial1 -#define PIN_SERIAL1_RX (0ul) -#define PIN_SERIAL1_TX (1ul) -#define PAD_SERIAL1_TX (UART_TX_PAD_2) -#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL1 &sercom0 - -/* - * SPI Interfaces - */ -#if defined(TWO_SPI) -#define SPI_INTERFACES_COUNT 2 -#elif defined(THREE_SPI) -#define SPI_INTERFACES_COUNT 3 -#else -#define SPI_INTERFACES_COUNT 1 -#endif - -#define PIN_SPI_MISO (22u) -#define PIN_SPI_MOSI (23u) -#define PIN_SPI_SCK (24u) -#define PERIPH_SPI sercom4 -#define PAD_SPI_TX SPI_PAD_2_SCK_3 -#define PAD_SPI_RX SERCOM_RX_PAD_0 - -static const uint8_t SS = PIN_A2 ; // SERCOM4 last PAD is present on A2 but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI = PIN_SPI_MOSI ; -static const uint8_t MISO = PIN_SPI_MISO ; -static const uint8_t SCK = PIN_SPI_SCK ; - -#define PIN_SPI1_MISO (19u) -#define PIN_SPI1_MOSI (16u) -#define PIN_SPI1_SCK (17u) -#define PERIPH_SPI1 sercom1 -#define PAD_SPI1_TX SPI_PAD_2_SCK_3 -#define PAD_SPI1_RX SERCOM_RX_PAD_0 - -/* - * Wire Interfaces - */ -#if defined(TWO_WIRE) -#define WIRE_INTERFACES_COUNT 2 -#elif defined(THREE_WIRE) -#define WIRE_INTERFACES_COUNT 3 -#else -#define WIRE_INTERFACES_COUNT 1 -#endif - -#define PIN_WIRE_SDA (20u) -#define PIN_WIRE_SCL (21u) -#define PERIPH_WIRE sercom3 -#define WIRE_IT_HANDLER SERCOM3_Handler - -#define PIN_WIRE1_SDA (4u) -#define PIN_WIRE1_SCL (3u) -#define PERIPH_WIRE1 sercom2 -#define WIRE1_IT_HANDLER SERCOM2_Handler - -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; - -/* - * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to - * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. - */ -#define PIN_USB_DM (28ul) -#define PIN_USB_DP (29ul) -#define PIN_USB_HOST_ENABLE (27ul) -#define PIN_USB_HOST_ENABLE_VALUE 1 - -/* - * I2S Interfaces - */ -#define I2S_INTERFACES_COUNT 1 - -#define I2S_DEVICE 0 -#define I2S_CLOCK_GENERATOR 3 -#define PIN_I2S_SD (9u) -#define PIN_I2S_SCK (1u) -#define PIN_I2S_FS (0u) - -#ifdef __cplusplus -} -#endif - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#ifdef __cplusplus - -/* ========================= - * ===== SERCOM DEFINITION - * ========================= -*/ -extern SERCOM sercom0; -extern SERCOM sercom1; -extern SERCOM sercom2; -extern SERCOM sercom3; -extern SERCOM sercom4; -extern SERCOM sercom5; - -extern Uart Serial; -extern Uart Serial1; - -#endif - -// These serial port names are intended to allow libraries and architecture-neutral -// sketches to automatically default to the correct port name for a particular type -// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, -// the first hardware serial port whose RX/TX pins are not dedicated to another use. -// -// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor -// -// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial -// -// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library -// -// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. -// -// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX -// pins are NOT connected to anything by default. -#define SERIAL_PORT_USBVIRTUAL SerialUSB -#define SERIAL_PORT_MONITOR Serial -// Serial has no physical pins broken out, so it's not listed as HARDWARE port -#define SERIAL_PORT_HARDWARE Serial1 -#define SERIAL_PORT_HARDWARE_OPEN Serial1 - -#endif /* _VARIANT_ARDUINO_ZERO_ */ From 568a1b8998efc874c31b05c1dc452ecf6deecaa5 Mon Sep 17 00:00:00 2001 From: "Q.B" Date: Thu, 26 Aug 2021 16:39:16 +0200 Subject: [PATCH 03/62] Modify release bash scripts --- CHANGELOG | 5 +- extras/pack.betabuild.bash | 51 -------- extras/pack.pullrequest.bash | 50 -------- extras/pack.release.bash | 4 +- extras/package_index.json.Beta.template | 141 --------------------- extras/package_index.json.PR.template | 141 --------------------- extras/package_index.json.Release.template | 12 +- 7 files changed, 9 insertions(+), 395 deletions(-) delete mode 100755 extras/pack.betabuild.bash delete mode 100755 extras/pack.pullrequest.bash delete mode 100644 extras/package_index.json.Beta.template delete mode 100644 extras/package_index.json.PR.template diff --git a/CHANGELOG b/CHANGELOG index 6b08e544b..07e752f0b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +1.6.18 (August 26, 2021): +* Fix a critical bug with the USB CDC where a packet of exactly 64 bytes gets stuck in a buffer. + Up next: * **Add MicroPython support.** Add Demo sketch with Arduino shell and Python interpreter. * Add QSPI driver with XIP (DDR support only when the MCU runs at 48MHz) for the D51. @@ -187,7 +190,7 @@ Up next: * Bootloader: 32Khz external oscillator is now used, improves USB clock. Thanks @aethaniel * Bootloader: Clean up of makefiles and file organization. Thanks @aethaniel * Small fix to USBHost example "USB_desc.ino". Thanks @bbx10 - * USBHost: USB-Keyboard right shift key was ignored. Thanks @bbx10 + * USBHost: USB-Keyboard right shift key was ignored. Thanks @bbx10 * Wire library now support multiple instances in variant. Thanks @spiderkeys * Ported some SerialUSB API (readBreak(), baud(), stopbits(), paritytype(), numbits(), dtr(), rts()) * Merged in changes from upstream SAMD CORE 1.6.4 2016.02.19: diff --git a/extras/pack.betabuild.bash b/extras/pack.betabuild.bash deleted file mode 100755 index b828f774b..000000000 --- a/extras/pack.betabuild.bash +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/bash -ex - -# pack.*.bash - Bash script to help packaging samd core releases. -# Copyright (c) 2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -BUILD_NUMBER=$1 -CURR_TIME=`date "+%Y-%m-%d %H:%M"` -CURR_TIME_SED=`date "+%Y\\-%m\\-%d %H:%M"` -VERSION=`grep version= platform.txt | sed 's/version=//g'` - -PWD=`pwd` -FOLDERNAME=`basename $PWD` -THIS_SCRIPT_NAME=`basename $0` -FILENAME=MattairTech_SAM_DLC_Core_for_Arduino-${VERSION}-beta-b${BUILD_NUMBER}.tar.bz2 - -rm -f $FILENAME - -# Change name in platform.txt -sed -i "s/name=.*/name=MattairTech SAM D|L|C Core for Arduino - Beta Build ${BUILD_NUMBER} (${CURR_TIME})/" platform.txt - -cd .. -tar --transform "s|$FOLDERNAME|MattairTech_SAM_DLC_Core_for_Arduino-${VERSION}-beta-b${BUILD_NUMBER}|g" --exclude=extras/** --exclude=.git* --exclude=.idea -cjf $FILENAME $FOLDERNAME -cd - - -mv ../$FILENAME . - -CHKSUM=`sha256sum $FILENAME | awk '{ print $1 }'` -SIZE=`wc -c $FILENAME | awk '{ print $1 }'` - -cat extras/package_index.json.Beta.template | -sed "s/%%BUILD_NUMBER%%/${BUILD_NUMBER}/" | -sed "s/%%CURR_TIME%%/${CURR_TIME_SED}/" | -sed "s/%%VERSION%%/${VERSION}-beta-b${BUILD_NUMBER}/" | -sed "s/%%FILENAME%%/${FILENAME}/" | -sed "s/%%CHECKSUM%%/${CHKSUM}/" | -sed "s/%%SIZE%%/${SIZE}/" > package_MattairTech_SAM_DLC_Core_for_Arduino-${VERSION}-beta-b${BUILD_NUMBER}_index.json - diff --git a/extras/pack.pullrequest.bash b/extras/pack.pullrequest.bash deleted file mode 100755 index 8feb107ee..000000000 --- a/extras/pack.pullrequest.bash +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -ex - -# pack.*.bash - Bash script to help packaging samd core releases. -# Copyright (c) 2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -PR_NUMBER=$1 -BUILD_NUMBER=$2 -VERSION=`grep version= platform.txt | sed 's/version=//g'` - -PWD=`pwd` -FOLDERNAME=`basename $PWD` -THIS_SCRIPT_NAME=`basename $0` -FILENAME=MattairTech_SAM_DLC_Core_for_Arduino-pr${PR_NUMBER}-b${BUILD_NUMBER}.tar.bz2 - -rm -f $FILENAME - -# Change name in platform.txt -sed -i "s/name=.*/name=MattairTech SAM D|L|C core for Arduino - Pull request #${PR_NUMBER} (Build ${BUILD_NUMBER})/" platform.txt - -cd .. -tar --transform "s|$FOLDERNAME|MattairTech_SAM_DLC_Core_for_Arduino-PR${PR_NUMBER}-b${BUILD_NUMBER}|g" --exclude=extras/** --exclude=.git* --exclude=.idea -cjf $FILENAME $FOLDERNAME -cd - - -mv ../$FILENAME . - -CHKSUM=`sha256sum $FILENAME | awk '{ print $1 }'` -SIZE=`wc -c $FILENAME | awk '{ print $1 }'` - -cat extras/package_index.json.PR.template | -sed s/%%PR_NUMBER%%/${PR_NUMBER}/ | -sed s/%%BUILD_NUMBER%%/${BUILD_NUMBER}/ | -sed s/%%VERSION%%/${VERSION}-build-${BUILD_NUMBER}/ | -sed s/%%FILENAME%%/${FILENAME}/ | -sed s/%%CHECKSUM%%/${CHKSUM}/ | -sed s/%%SIZE%%/${SIZE}/ > package_MattairTech_SAM_DLC_Core_for_Arduino-pr${PR_NUMBER}-b${BUILD_NUMBER}_index.json - diff --git a/extras/pack.release.bash b/extras/pack.release.bash index 9a1ac35a1..002d34c3b 100755 --- a/extras/pack.release.bash +++ b/extras/pack.release.bash @@ -22,7 +22,7 @@ VERSION=`grep version= platform.txt | sed 's/version=//g'` PWD=`pwd` FOLDERNAME=`basename $PWD` THIS_SCRIPT_NAME=`basename $0` -FILENAME=MattairTech_SAM_DLC_Core_for_Arduino-$VERSION.tar.bz2 +FILENAME=Fab_SAM_DLC_Core_for_Arduino-$VERSION.tar.bz2 rm -f $FILENAME @@ -39,4 +39,4 @@ cat extras/package_index.json.Release.template | sed "s/%%VERSION%%/${VERSION}/" | sed "s/%%FILENAME%%/${FILENAME}/" | sed "s/%%CHECKSUM%%/${CHKSUM}/" | -sed "s/%%SIZE%%/${SIZE}/" > package_MattairTech_SAM_DLC_Core_for_Arduino-${VERSION}_index.json +sed "s/%%SIZE%%/${SIZE}/" > package_Fab_SAM_DLC_Core_for_Arduino-${VERSION}_index.json diff --git a/extras/package_index.json.Beta.template b/extras/package_index.json.Beta.template deleted file mode 100644 index dde61a017..000000000 --- a/extras/package_index.json.Beta.template +++ /dev/null @@ -1,141 +0,0 @@ -{ - "packages": [ - { - "name": "MattairTech_Arduino_Beta", - "maintainer": "MattairTech LLC", - "websiteURL": "https://www.mattairtech.com/", - "email": "support@mattairtech.com", - "help": { - "online": "https://www.mattairtech.com/support/" - }, - "platforms": [ - { - "name": "MattairTech SAM D|L|C core for Arduino - Beta build", - "architecture": "samd", - "version": "%%VERSION%%", - "category": "Contributed", - "help": { - "online": "https://www.mattairtech.com/support/" - }, - "url": "https://www.mattairtech.com/software/arduino/beta/%%FILENAME%%", - "archiveFileName": "%%FILENAME%%", - "checksum": "SHA-256:%%CHECKSUM%%", - "size": "%%SIZE%%", - "boards": [ - {"name": "Xeno_Mini"}, - {"name": "Xeno"}, - {"name": "MT-D21E"}, - {"name": "MT-D21E_revB"}, - {"name": "MT-D11"}, - {"name": "Generic_D11C14A"}, - {"name": "Generic_D11D14AS"}, - {"name": "arduino_zero"}, - {"name": "arduino_mzero"} - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" - }, - { - "packager": "MattairTech_Arduino", - "name": "bossac", - "version": "1.7.0-mattairtech-3" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "MattairTech_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.0" - } - ] - } - ], - "tools": [ - { - "name": "bossac", - "version": "1.7.0-mattairtech-3", - "systems": [ - { - "host": "i686-mingw32", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "checksum": "SHA-256:ce6ce590c612dc8b18ba52df3903ba3d43416c92ef54538881cc07fdd2ef1f04", - "size": "325719" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:e0801cd435a0aa08a4ccc1781cdcc1bf9ae92e248888163a1bb4dce20c00bcf9", - "size": "34622" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:edd3bc6fd80641563dc6ca337d695fca25c2d43242172ea0418b678d4dbe0628", - "size": "34628" - }, - { - "host": "x86_64-apple-darwin", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "checksum": "SHA-256:da4d4b04582f92d09e3d48a1ec4d2473b6cd01bba992c0f1f2cd7ee1008f08f8", - "size": "88845" - } - ] - }, - { - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2", - "systems": [ - { - "host": "i686-mingw32", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" - }, - { - "host": "x86_64-apple-darwin", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" - } - ] - } - ] - } - ] -} diff --git a/extras/package_index.json.PR.template b/extras/package_index.json.PR.template deleted file mode 100644 index 260717718..000000000 --- a/extras/package_index.json.PR.template +++ /dev/null @@ -1,141 +0,0 @@ -{ - "packages": [ - { - "name": "MattairTech_Arduino_Beta", - "maintainer": "MattairTech LLC", - "websiteURL": "https://www.mattairtech.com/", - "email": "support@mattairtech.com", - "help": { - "online": "https://www.mattairtech.com/support/" - }, - "platforms": [ - { - "name": "MattairTech SAM D|L|C core for Arduino - Pull request #%%PR_NUMBER%% (build %%BUILD_NUMBER%%)", - "architecture": "samd", - "version": "%%VERSION%%", - "category": "Contributed", - "help": { - "online": "https://www.mattairtech.com/support/" - }, - "url": "https://www.mattairtech.com/software/arduino/beta/%%FILENAME%%", - "archiveFileName": "%%FILENAME%%", - "checksum": "SHA-256:%%CHECKSUM%%", - "size": "%%SIZE%%", - "boards": [ - {"name": "Xeno_Mini"}, - {"name": "Xeno"}, - {"name": "MT-D21E"}, - {"name": "MT-D21E_revB"}, - {"name": "MT-D11"}, - {"name": "Generic_D11C14A"}, - {"name": "Generic_D11D14AS"}, - {"name": "arduino_zero"}, - {"name": "arduino_mzero"} - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" - }, - { - "packager": "MattairTech_Arduino", - "name": "bossac", - "version": "1.7.0-mattairtech-3" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "MattairTech_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.0" - } - ] - } - ], - "tools": [ - { - "name": "bossac", - "version": "1.7.0-mattairtech-3", - "systems": [ - { - "host": "i686-mingw32", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "checksum": "SHA-256:ce6ce590c612dc8b18ba52df3903ba3d43416c92ef54538881cc07fdd2ef1f04", - "size": "325719" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:e0801cd435a0aa08a4ccc1781cdcc1bf9ae92e248888163a1bb4dce20c00bcf9", - "size": "34622" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:edd3bc6fd80641563dc6ca337d695fca25c2d43242172ea0418b678d4dbe0628", - "size": "34628" - }, - { - "host": "x86_64-apple-darwin", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "checksum": "SHA-256:da4d4b04582f92d09e3d48a1ec4d2473b6cd01bba992c0f1f2cd7ee1008f08f8", - "size": "88845" - } - ] - }, - { - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2", - "systems": [ - { - "host": "i686-mingw32", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" - }, - { - "host": "x86_64-apple-darwin", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" - } - ] - } - ] - } - ] -} diff --git a/extras/package_index.json.Release.template b/extras/package_index.json.Release.template index 9dd5045c2..6a65466ed 100644 --- a/extras/package_index.json.Release.template +++ b/extras/package_index.json.Release.template @@ -1,22 +1,16 @@ { - "name": "MattairTech SAM D|L|C core for Arduino", + "name": "Fab SAM D|L|C core for Arduino", "architecture": "samd", "version": "%%VERSION%%", "category": "Contributed", - "url": "https://www.mattairtech.com/software/arduino/%%FILENAME%%", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/archive/refs/tags/%%VERSION%%/%%FILENAME%%" "archiveFileName": "%%FILENAME%%", "checksum": "SHA-256:%%CHECKSUM%%", "size": "%%SIZE%%", "boards": [ - {"name": "Xeno_Mini"}, - {"name": "Xeno"}, - {"name": "MT-D21E"}, - {"name": "MT-D21E_revB"}, - {"name": "MT-D11"}, + {"name": "Generic_D21E"}, {"name": "Generic_D11C14A"}, {"name": "Generic_D11D14AS"}, - {"name": "arduino_zero"}, - {"name": "arduino_mzero"} ], "toolsDependencies": [ { From 5f96a97df8d0db8745499fc19ae190ddf79c3169 Mon Sep 17 00:00:00 2001 From: "Q.B" Date: Mon, 30 Aug 2021 13:56:20 +0200 Subject: [PATCH 04/62] fix board.txt --- boards.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards.txt b/boards.txt index 4c3f5924b..13a3273da 100644 --- a/boards.txt +++ b/boards.txt @@ -44,7 +44,7 @@ d21e17.build.usb_product="MT-D21E Rev A" d21e17.build.usb_manufacturer="Fab Foundation" d21e17.build.board=SAMD_ZERO d21e17.build.core=arduino -d21e17.build.variant=MT_D21E +d21e17.build.variant=Generic_D21E d21e17.build.variant_system_lib= d21e17.build.vid=0x16D0 d21e17.upload.protocol=sam-ba From cd69d4506b67d898ea6a1ff5f70ce9256bf7ff56 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 30 Aug 2021 15:39:33 +0200 Subject: [PATCH 05/62] update release URL --- extras/package_index.json.Release.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/package_index.json.Release.template b/extras/package_index.json.Release.template index 6a65466ed..620de193c 100644 --- a/extras/package_index.json.Release.template +++ b/extras/package_index.json.Release.template @@ -3,7 +3,7 @@ "architecture": "samd", "version": "%%VERSION%%", "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/archive/refs/tags/%%VERSION%%/%%FILENAME%%" + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/%%VERSION%%/%%FILENAME%%" "archiveFileName": "%%FILENAME%%", "checksum": "SHA-256:%%CHECKSUM%%", "size": "%%SIZE%%", From 84797adca68beabf918d2a3dfcfb114c697e150c Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 30 Aug 2021 15:59:00 +0200 Subject: [PATCH 06/62] json release --- extras/pack.release.bash | 2 +- json/package_Fab_SAM_index.json | 132 ++++++++++++++++++++++++++++++++ 2 files changed, 133 insertions(+), 1 deletion(-) create mode 100644 json/package_Fab_SAM_index.json diff --git a/extras/pack.release.bash b/extras/pack.release.bash index 002d34c3b..6ff11ea55 100755 --- a/extras/pack.release.bash +++ b/extras/pack.release.bash @@ -39,4 +39,4 @@ cat extras/package_index.json.Release.template | sed "s/%%VERSION%%/${VERSION}/" | sed "s/%%FILENAME%%/${FILENAME}/" | sed "s/%%CHECKSUM%%/${CHKSUM}/" | -sed "s/%%SIZE%%/${SIZE}/" > package_Fab_SAM_DLC_Core_for_Arduino-${VERSION}_index.json +sed "s/%%SIZE%%/${SIZE}/" > json/package_Fab_SAM_DLC_Core_for_Arduino-${VERSION}_index.json diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json new file mode 100644 index 000000000..b14ecc0d3 --- /dev/null +++ b/json/package_Fab_SAM_index.json @@ -0,0 +1,132 @@ +{ + "packages":[ + { + "name":"Fab_SAM_Arduino", + "maintainer":"Fab Foundation", + "websiteURL":"https://github.com/qbolsee/ArduinoCore-fab-sam", + "email":"", + "help":{ + "online":"" + }, + "platforms":[ + { + "name": "Fab SAM D|L|C core for Arduino", + "architecture": "samd", + "version": "1.6.18", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18/Fab_SAM_DLC_Core_for_Arduino-1.6.18.tar.bz2", + "archiveFileName": "Fab_SAM_DLC_Core_for_Arduino-1.6.18.tar.bz2", + "checksum": "SHA-256:238f9c94419453dc9643cb1aa0ac432dce45de73fcc0f185a74c3b0240d6a607", + "size": "308255", + "boards": [ + {"name": "Generic_D21E"}, + {"name": "Generic_D11C14A"}, + {"name": "Generic_D11D14AS"}, + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "MattairTech_Arduino", + "name": "bossac", + "version": "1.7.0-mattairtech-3" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "MattairTech_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.0" + } + ] + } + ], + "tools":[ + { + "name":"bossac", + "version":"1.7.0-mattairtech-3", + "systems":[ + { + "host":"i686-mingw32", + "url":"https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", + "archiveFileName":"bossac-1.7.0-mattairtech-3-mingw32.tar.gz", + "checksum":"SHA-256:ce6ce590c612dc8b18ba52df3903ba3d43416c92ef54538881cc07fdd2ef1f04", + "size":"325719" + }, + { + "host":"x86_64-pc-linux-gnu", + "url":"https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", + "archiveFileName":"bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", + "checksum":"SHA-256:e0801cd435a0aa08a4ccc1781cdcc1bf9ae92e248888163a1bb4dce20c00bcf9", + "size":"34622" + }, + { + "host":"i686-pc-linux-gnu", + "url":"https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", + "archiveFileName":"bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", + "checksum":"SHA-256:edd3bc6fd80641563dc6ca337d695fca25c2d43242172ea0418b678d4dbe0628", + "size":"34628" + }, + { + "host":"x86_64-apple-darwin", + "url":"https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", + "archiveFileName":"bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", + "checksum":"SHA-256:da4d4b04582f92d09e3d48a1ec4d2473b6cd01bba992c0f1f2cd7ee1008f08f8", + "size":"88845" + } + ] + }, + { + "name":"CMSIS-Atmel", + "version":"1.0.0-mattairtech-2", + "systems":[ + { + "host":"i686-mingw32", + "url":"https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName":"CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum":"SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", + "size":"2008479" + }, + { + "host":"x86_64-pc-linux-gnu", + "url":"https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName":"CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum":"SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", + "size":"2008479" + }, + { + "host":"i686-pc-linux-gnu", + "url":"https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName":"CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum":"SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", + "size":"2008479" + }, + { + "host":"x86_64-apple-darwin", + "url":"https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName":"CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum":"SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", + "size":"2008479" + } + ] + } + ] + } + ] +} From fb1c070e7d1096dc9851d47b6ab62e60f3d33828 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 30 Aug 2021 16:02:07 +0200 Subject: [PATCH 07/62] .json typo --- json/package_Fab_SAM_index.json | 100 +++++++++++++++++--------------- 1 file changed, 53 insertions(+), 47 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index b14ecc0d3..279683704 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -9,53 +9,59 @@ "online":"" }, "platforms":[ - { - "name": "Fab SAM D|L|C core for Arduino", - "architecture": "samd", - "version": "1.6.18", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18/Fab_SAM_DLC_Core_for_Arduino-1.6.18.tar.bz2", - "archiveFileName": "Fab_SAM_DLC_Core_for_Arduino-1.6.18.tar.bz2", - "checksum": "SHA-256:238f9c94419453dc9643cb1aa0ac432dce45de73fcc0f185a74c3b0240d6a607", - "size": "308255", - "boards": [ - {"name": "Generic_D21E"}, - {"name": "Generic_D11C14A"}, - {"name": "Generic_D11D14AS"}, - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" - }, - { - "packager": "MattairTech_Arduino", - "name": "bossac", - "version": "1.7.0-mattairtech-3" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "MattairTech_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.0" - } - ] - } + { + "name":"Fab SAM D|L|C core for Arduino", + "architecture":"samd", + "version":"1.6.18", + "category":"Contributed", + "url":"https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18/Fab_SAM_DLC_Core_for_Arduino-1.6.18.tar.bz2", + "archiveFileName":"Fab_SAM_DLC_Core_for_Arduino-1.6.18.tar.bz2", + "checksum":"SHA-256:238f9c94419453dc9643cb1aa0ac432dce45de73fcc0f185a74c3b0240d6a607", + "size":"308255", + "boards":[ + { + "name":"Generic_D21E" + }, + { + "name":"Generic_D11C14A" + }, + { + "name":"Generic_D11D14AS" + } + ], + "toolsDependencies":[ + { + "packager":"arduino", + "name":"arm-none-eabi-gcc", + "version":"4.8.3-2014q1" + }, + { + "packager":"MattairTech_Arduino", + "name":"bossac", + "version":"1.7.0-mattairtech-3" + }, + { + "packager":"arduino", + "name":"openocd", + "version":"0.9.0-arduino" + }, + { + "packager":"arduino", + "name":"CMSIS", + "version":"4.5.0" + }, + { + "packager":"MattairTech_Arduino", + "name":"CMSIS-Atmel", + "version":"1.0.0-mattairtech-2" + }, + { + "packager":"arduino", + "name":"arduinoOTA", + "version":"1.2.0" + } + ] + } ], "tools":[ { From 172244a2f15935f303005cf69d7ccd9c29d69a4a Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 30 Aug 2021 16:29:16 +0200 Subject: [PATCH 08/62] details in first release --- extras/pack.release.bash | 6 +- extras/package_index.json.Release.template | 96 ++++---- json/package_Fab_SAM_index.json | 270 ++++++++++----------- platform.txt | 2 +- 4 files changed, 190 insertions(+), 184 deletions(-) diff --git a/extras/pack.release.bash b/extras/pack.release.bash index 6ff11ea55..9e0e98dc1 100755 --- a/extras/pack.release.bash +++ b/extras/pack.release.bash @@ -22,12 +22,12 @@ VERSION=`grep version= platform.txt | sed 's/version=//g'` PWD=`pwd` FOLDERNAME=`basename $PWD` THIS_SCRIPT_NAME=`basename $0` -FILENAME=Fab_SAM_DLC_Core_for_Arduino-$VERSION.tar.bz2 +FILENAME=Fab_SAM_Core_for_Arduino-$VERSION.tar.bz2 rm -f $FILENAME cd .. -tar --transform "s|$FOLDERNAME|$FOLDERNAME-$VERSION|g" --exclude=extras/** --exclude=.git* --exclude=.idea -cjf $FILENAME $FOLDERNAME +tar --transform "s|$FOLDERNAME|$FOLDERNAME-$VERSION|g" --exclude=extras* --exclude=.git* --exclude=.idea --exclude=json* -cjf $FILENAME $FOLDERNAME cd - mv ../$FILENAME . @@ -39,4 +39,4 @@ cat extras/package_index.json.Release.template | sed "s/%%VERSION%%/${VERSION}/" | sed "s/%%FILENAME%%/${FILENAME}/" | sed "s/%%CHECKSUM%%/${CHKSUM}/" | -sed "s/%%SIZE%%/${SIZE}/" > json/package_Fab_SAM_DLC_Core_for_Arduino-${VERSION}_index.json +sed "s/%%SIZE%%/${SIZE}/" > json/package_Fab_SAM_Core_for_Arduino-${VERSION}_index.json diff --git a/extras/package_index.json.Release.template b/extras/package_index.json.Release.template index 620de193c..9eb81bf2a 100644 --- a/extras/package_index.json.Release.template +++ b/extras/package_index.json.Release.template @@ -1,47 +1,53 @@ { - "name": "Fab SAM D|L|C core for Arduino", - "architecture": "samd", - "version": "%%VERSION%%", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/%%VERSION%%/%%FILENAME%%" - "archiveFileName": "%%FILENAME%%", - "checksum": "SHA-256:%%CHECKSUM%%", - "size": "%%SIZE%%", - "boards": [ - {"name": "Generic_D21E"}, - {"name": "Generic_D11C14A"}, - {"name": "Generic_D11D14AS"}, - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" - }, - { - "packager": "MattairTech_Arduino", - "name": "bossac", - "version": "1.7.0-mattairtech-3" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "MattairTech_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.0" - } - ] + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "%%VERSION%%", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/%%VERSION%%/%%FILENAME%%", + "archiveFileName": "%%FILENAME%%", + "checksum": "SHA-256:%%CHECKSUM%%", + "size": "%%SIZE%%", + "boards": [ + { + "name": "Generic_D21E" + }, + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "MattairTech_Arduino", + "name": "bossac", + "version": "1.7.0-mattairtech-3" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "MattairTech_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.0" + } + ] } diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 279683704..161620fea 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -1,138 +1,138 @@ { - "packages":[ - { - "name":"Fab_SAM_Arduino", - "maintainer":"Fab Foundation", - "websiteURL":"https://github.com/qbolsee/ArduinoCore-fab-sam", - "email":"", - "help":{ - "online":"" - }, - "platforms":[ - { - "name":"Fab SAM D|L|C core for Arduino", - "architecture":"samd", - "version":"1.6.18", - "category":"Contributed", - "url":"https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18/Fab_SAM_DLC_Core_for_Arduino-1.6.18.tar.bz2", - "archiveFileName":"Fab_SAM_DLC_Core_for_Arduino-1.6.18.tar.bz2", - "checksum":"SHA-256:238f9c94419453dc9643cb1aa0ac432dce45de73fcc0f185a74c3b0240d6a607", - "size":"308255", - "boards":[ - { - "name":"Generic_D21E" - }, - { - "name":"Generic_D11C14A" - }, - { - "name":"Generic_D11D14AS" - } - ], - "toolsDependencies":[ - { - "packager":"arduino", - "name":"arm-none-eabi-gcc", - "version":"4.8.3-2014q1" - }, - { - "packager":"MattairTech_Arduino", - "name":"bossac", - "version":"1.7.0-mattairtech-3" - }, - { - "packager":"arduino", - "name":"openocd", - "version":"0.9.0-arduino" - }, - { - "packager":"arduino", - "name":"CMSIS", - "version":"4.5.0" - }, - { - "packager":"MattairTech_Arduino", - "name":"CMSIS-Atmel", - "version":"1.0.0-mattairtech-2" - }, - { - "packager":"arduino", - "name":"arduinoOTA", - "version":"1.2.0" - } - ] - } - ], - "tools":[ - { - "name":"bossac", - "version":"1.7.0-mattairtech-3", - "systems":[ - { - "host":"i686-mingw32", - "url":"https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "archiveFileName":"bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "checksum":"SHA-256:ce6ce590c612dc8b18ba52df3903ba3d43416c92ef54538881cc07fdd2ef1f04", - "size":"325719" - }, - { - "host":"x86_64-pc-linux-gnu", - "url":"https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "archiveFileName":"bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "checksum":"SHA-256:e0801cd435a0aa08a4ccc1781cdcc1bf9ae92e248888163a1bb4dce20c00bcf9", - "size":"34622" - }, - { - "host":"i686-pc-linux-gnu", - "url":"https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "archiveFileName":"bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "checksum":"SHA-256:edd3bc6fd80641563dc6ca337d695fca25c2d43242172ea0418b678d4dbe0628", - "size":"34628" - }, - { - "host":"x86_64-apple-darwin", - "url":"https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "archiveFileName":"bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "checksum":"SHA-256:da4d4b04582f92d09e3d48a1ec4d2473b6cd01bba992c0f1f2cd7ee1008f08f8", - "size":"88845" - } - ] + "packages": [ + { + "name": "Fab_SAM_Arduino", + "maintainer": "Fab Foundation", + "websiteURL": "https://github.com/qbolsee/ArduinoCore-fab-sam", + "email": "", + "help": { + "online": "" }, - { - "name":"CMSIS-Atmel", - "version":"1.0.0-mattairtech-2", - "systems":[ - { - "host":"i686-mingw32", - "url":"https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName":"CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum":"SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size":"2008479" - }, - { - "host":"x86_64-pc-linux-gnu", - "url":"https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName":"CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum":"SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size":"2008479" - }, - { - "host":"i686-pc-linux-gnu", - "url":"https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName":"CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum":"SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size":"2008479" - }, - { - "host":"x86_64-apple-darwin", - "url":"https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName":"CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum":"SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size":"2008479" - } - ] - } - ] - } - ] + "platforms": [ + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.6.18", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18/Fab_SAM_Core_for_Arduino-1.6.18.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18.tar.bz2", + "checksum": "SHA-256:3ccf87ab650a722248c4847fd6ceb4c22049bf3a37d5a9688af58064c848cfe3", + "size": "630541", + "boards": [ + { + "name": "Generic_D21E" + }, + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "MattairTech_Arduino", + "name": "bossac", + "version": "1.7.0-mattairtech-3" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "MattairTech_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.0" + } + ] + } + ], + "tools": [ + { + "name": "bossac", + "version": "1.7.0-mattairtech-3", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-mingw32.tar.gz", + "checksum": "SHA-256:ce6ce590c612dc8b18ba52df3903ba3d43416c92ef54538881cc07fdd2ef1f04", + "size": "325719" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:e0801cd435a0aa08a4ccc1781cdcc1bf9ae92e248888163a1bb4dce20c00bcf9", + "size": "34622" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", + "checksum": "SHA-256:edd3bc6fd80641563dc6ca337d695fca25c2d43242172ea0418b678d4dbe0628", + "size": "34628" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", + "checksum": "SHA-256:da4d4b04582f92d09e3d48a1ec4d2473b6cd01bba992c0f1f2cd7ee1008f08f8", + "size": "88845" + } + ] + }, + { + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", + "size": "2008479" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", + "size": "2008479" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", + "size": "2008479" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", + "size": "2008479" + } + ] + } + ] + } + ] } diff --git a/platform.txt b/platform.txt index 6b330549f..4ec2a819e 100644 --- a/platform.txt +++ b/platform.txt @@ -17,7 +17,7 @@ # For more info: # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification -name=Fab SAM D|L|C core for Arduino +name=Fab SAM core for Arduino version=1.6.18 # Compile variables From 380977728eac642d2f3ff872cdd716fe0a434816 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 30 Aug 2021 16:31:53 +0200 Subject: [PATCH 09/62] fix packager in .json --- json/package_Fab_SAM_index.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 161620fea..d21037f3b 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -36,7 +36,7 @@ "version": "4.8.3-2014q1" }, { - "packager": "MattairTech_Arduino", + "packager": "Fab_SAM_Arduino", "name": "bossac", "version": "1.7.0-mattairtech-3" }, @@ -51,7 +51,7 @@ "version": "4.5.0" }, { - "packager": "MattairTech_Arduino", + "packager": "Fab_SAM_Arduino", "name": "CMSIS-Atmel", "version": "1.0.0-mattairtech-2" }, From 15cccd7764fe178d249cd564386b378733f1f4f0 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Wed, 1 Sep 2021 01:04:31 +0200 Subject: [PATCH 10/62] Refactor, OpenOCD chip-erase --- boards.txt | 1608 ++++++++++++++--- bootloaders/zero/Makefile | 10 +- ...G_SAMC21G15A.bin => sam_ba_SAMC21E15A.bin} | Bin 3720 -> 3700 bytes ...E_SAMC21E16A.bin => sam_ba_SAMC21E16A.bin} | Bin 3720 -> 3700 bytes ...G_SAMC21G17A.bin => sam_ba_SAMC21E17A.bin} | Bin 3720 -> 3700 bytes ...G_SAMC21G18A.bin => sam_ba_SAMC21E18A.bin} | Bin 3720 -> 3700 bytes ...J_SAMC21J15A.bin => sam_ba_SAMC21G15A.bin} | Bin 3720 -> 3700 bytes ...G_SAMC21G16A.bin => sam_ba_SAMC21G16A.bin} | Bin 3720 -> 3700 bytes ...E_SAMC21E17A.bin => sam_ba_SAMC21G17A.bin} | Bin 3720 -> 3700 bytes ...J_SAMC21J18A.bin => sam_ba_SAMC21G18A.bin} | Bin 3720 -> 3700 bytes ...E_SAMC21E15A.bin => sam_ba_SAMC21J15A.bin} | Bin 3720 -> 3700 bytes ...J_SAMC21J16A.bin => sam_ba_SAMC21J16A.bin} | Bin 3720 -> 3700 bytes ...J_SAMC21J17A.bin => sam_ba_SAMC21J17A.bin} | Bin 3720 -> 3700 bytes ...E_SAMC21E18A.bin => sam_ba_SAMC21J18A.bin} | Bin 3720 -> 3700 bytes ...A_SAMD11C14A.bin => sam_ba_SAMD11C14A.bin} | Bin 3904 -> 3864 bytes ...SAMD11D14AM.bin => sam_ba_SAMD11D14AM.bin} | Bin 3904 -> 3864 bytes ...SAMD11D14AS.bin => sam_ba_SAMD11D14AS.bin} | Bin 3904 -> 3864 bytes ...E_SAMD21E15A.bin => sam_ba_SAMD21E15A.bin} | Bin 5028 -> 4988 bytes ...E_SAMD21E16A.bin => sam_ba_SAMD21E16A.bin} | Bin 5028 -> 4988 bytes ...E_SAMD21E17A.bin => sam_ba_SAMD21E17A.bin} | Bin 5028 -> 4988 bytes ...E_SAMD21E18A.bin => sam_ba_SAMD21E18A.bin} | Bin 5028 -> 4988 bytes ...G_SAMD21G15A.bin => sam_ba_SAMD21G15A.bin} | Bin 5028 -> 4988 bytes ...G_SAMD21G16A.bin => sam_ba_SAMD21G16A.bin} | Bin 5028 -> 4988 bytes ...G_SAMD21G17A.bin => sam_ba_SAMD21G17A.bin} | Bin 5028 -> 4988 bytes ...G_SAMD21G18A.bin => sam_ba_SAMD21G18A.bin} | Bin 5028 -> 4988 bytes ...J_SAMD21J15A.bin => sam_ba_SAMD21J15A.bin} | Bin 5028 -> 4988 bytes ...J_SAMD21J16A.bin => sam_ba_SAMD21J16A.bin} | Bin 5028 -> 4988 bytes ...J_SAMD21J17A.bin => sam_ba_SAMD21J17A.bin} | Bin 5028 -> 4988 bytes ...J_SAMD21J18A.bin => sam_ba_SAMD21J18A.bin} | Bin 5028 -> 4988 bytes .../zero/binaries/sam_ba_SAMD51G18A.bin | Bin 0 -> 5044 bytes .../zero/binaries/sam_ba_SAMD51G19A.bin | Bin 0 -> 5044 bytes .../zero/binaries/sam_ba_SAMD51J18A.bin | Bin 0 -> 5044 bytes .../zero/binaries/sam_ba_SAMD51J19A.bin | Bin 0 -> 5044 bytes .../zero/binaries/sam_ba_SAMD51J20A.bin | Bin 0 -> 5044 bytes .../zero/binaries/sam_ba_SAMD51N19A.bin | Bin 0 -> 5044 bytes .../zero/binaries/sam_ba_SAMD51N20A.bin | Bin 0 -> 5044 bytes .../zero/binaries/sam_ba_SAMD51P19A.bin | Bin 0 -> 5044 bytes .../zero/binaries/sam_ba_SAMD51P20A.bin | Bin 0 -> 5044 bytes ...E_SAML21E15B.bin => sam_ba_SAML21E15B.bin} | Bin 4964 -> 4968 bytes ...G_SAML21G16B.bin => sam_ba_SAML21E16B.bin} | Bin 4964 -> 4968 bytes ...G_SAML21G17B.bin => sam_ba_SAML21E17B.bin} | Bin 4964 -> 4968 bytes ...G_SAML21G18B.bin => sam_ba_SAML21E18B.bin} | Bin 4964 -> 4968 bytes ...E_SAML21E16B.bin => sam_ba_SAML21G16B.bin} | Bin 4964 -> 4968 bytes ...E_SAML21E17B.bin => sam_ba_SAML21G17B.bin} | Bin 4964 -> 4968 bytes ...E_SAML21E18B.bin => sam_ba_SAML21G18B.bin} | Bin 4964 -> 4968 bytes ...J_SAML21J16B.bin => sam_ba_SAML21J16B.bin} | Bin 4964 -> 4968 bytes ...J_SAML21J17B.bin => sam_ba_SAML21J17B.bin} | Bin 4964 -> 4968 bytes ...J_SAML21J18B.bin => sam_ba_SAML21J18B.bin} | Bin 4964 -> 4968 bytes ...1G15A.bin => sam_ba_sdcard_SAMC21E15A.bin} | Bin 6820 -> 6804 bytes ...1E16A.bin => sam_ba_sdcard_SAMC21E16A.bin} | Bin 6820 -> 6804 bytes ...1G17A.bin => sam_ba_sdcard_SAMC21E17A.bin} | Bin 6820 -> 6804 bytes ...1G18A.bin => sam_ba_sdcard_SAMC21E18A.bin} | Bin 6820 -> 6804 bytes ...1J15A.bin => sam_ba_sdcard_SAMC21G15A.bin} | Bin 6820 -> 6804 bytes ...1G16A.bin => sam_ba_sdcard_SAMC21G16A.bin} | Bin 6820 -> 6804 bytes ...1E17A.bin => sam_ba_sdcard_SAMC21G17A.bin} | Bin 6820 -> 6804 bytes ...1J18A.bin => sam_ba_sdcard_SAMC21G18A.bin} | Bin 6820 -> 6804 bytes ...1E15A.bin => sam_ba_sdcard_SAMC21J15A.bin} | Bin 6820 -> 6804 bytes ...1J16A.bin => sam_ba_sdcard_SAMC21J16A.bin} | Bin 6820 -> 6804 bytes ...1J17A.bin => sam_ba_sdcard_SAMC21J17A.bin} | Bin 6820 -> 6804 bytes ...1E18A.bin => sam_ba_sdcard_SAMC21J18A.bin} | Bin 6820 -> 6804 bytes ...1C14A.bin => sam_ba_sdcard_SAMD11C14A.bin} | Bin 4076 -> 4036 bytes ...14AM.bin => sam_ba_sdcard_SAMD11D14AM.bin} | Bin 4076 -> 4036 bytes ...14AS.bin => sam_ba_sdcard_SAMD11D14AS.bin} | Bin 4076 -> 4036 bytes ...1E15A.bin => sam_ba_sdcard_SAMD21E15A.bin} | Bin 8116 -> 8076 bytes ...1E16A.bin => sam_ba_sdcard_SAMD21E16A.bin} | Bin 8116 -> 8076 bytes ...1E17A.bin => sam_ba_sdcard_SAMD21E17A.bin} | Bin 8116 -> 8076 bytes ...1E18A.bin => sam_ba_sdcard_SAMD21E18A.bin} | Bin 8116 -> 8076 bytes ...1G15A.bin => sam_ba_sdcard_SAMD21G15A.bin} | Bin 8116 -> 8076 bytes ...1G16A.bin => sam_ba_sdcard_SAMD21G16A.bin} | Bin 8116 -> 8076 bytes ...1G17A.bin => sam_ba_sdcard_SAMD21G17A.bin} | Bin 8116 -> 8076 bytes ...1G18A.bin => sam_ba_sdcard_SAMD21G18A.bin} | Bin 8116 -> 8076 bytes ...1J15A.bin => sam_ba_sdcard_SAMD21J15A.bin} | Bin 8116 -> 8076 bytes ...1J16A.bin => sam_ba_sdcard_SAMD21J16A.bin} | Bin 8116 -> 8076 bytes ...1J17A.bin => sam_ba_sdcard_SAMD21J17A.bin} | Bin 8116 -> 8076 bytes ...1J18A.bin => sam_ba_sdcard_SAMD21J18A.bin} | Bin 8116 -> 8076 bytes .../binaries/sam_ba_sdcard_SAMD51G18A.bin | Bin 0 -> 8004 bytes .../binaries/sam_ba_sdcard_SAMD51G19A.bin | Bin 0 -> 8004 bytes .../binaries/sam_ba_sdcard_SAMD51J18A.bin | Bin 0 -> 8004 bytes .../binaries/sam_ba_sdcard_SAMD51J19A.bin | Bin 0 -> 8004 bytes .../binaries/sam_ba_sdcard_SAMD51J20A.bin | Bin 0 -> 8004 bytes .../binaries/sam_ba_sdcard_SAMD51N19A.bin | Bin 0 -> 8012 bytes .../binaries/sam_ba_sdcard_SAMD51N20A.bin | Bin 0 -> 8012 bytes .../binaries/sam_ba_sdcard_SAMD51P19A.bin | Bin 0 -> 8012 bytes .../binaries/sam_ba_sdcard_SAMD51P20A.bin | Bin 0 -> 8012 bytes ...1E15B.bin => sam_ba_sdcard_SAML21E15B.bin} | Bin 8056 -> 8064 bytes ...1G16B.bin => sam_ba_sdcard_SAML21E16B.bin} | Bin 8056 -> 8064 bytes ...1G17B.bin => sam_ba_sdcard_SAML21E17B.bin} | Bin 8056 -> 8064 bytes ...1G18B.bin => sam_ba_sdcard_SAML21E18B.bin} | Bin 8056 -> 8064 bytes ...1E16B.bin => sam_ba_sdcard_SAML21G16B.bin} | Bin 8056 -> 8064 bytes ...1E17B.bin => sam_ba_sdcard_SAML21G17B.bin} | Bin 8056 -> 8064 bytes ...1E18B.bin => sam_ba_sdcard_SAML21G18B.bin} | Bin 8056 -> 8064 bytes ...1J16B.bin => sam_ba_sdcard_SAML21J16B.bin} | Bin 8056 -> 8064 bytes ...1J17B.bin => sam_ba_sdcard_SAML21J17B.bin} | Bin 8056 -> 8064 bytes ...1J18B.bin => sam_ba_sdcard_SAML21J18B.bin} | Bin 8056 -> 8064 bytes bootloaders/zero/board_definitions.h | 8 + .../board_definitions_Generic_D11C14A.h | 4 +- .../board_definitions_Generic_D11D14AM.h | 4 +- .../board_definitions_Generic_D11D14AS.h | 4 +- .../board_definitions_Generic_D51G.h | 279 +++ .../board_definitions_Generic_D51J.h | 278 +++ .../board_definitions_Generic_D51N.h | 16 +- .../board_definitions_Generic_D51P.h | 16 +- .../board_definitions_Generic_x21E.h | 4 +- ...x1G.h => board_definitions_Generic_x21G.h} | 14 +- ...x1J.h => board_definitions_Generic_x21J.h} | 14 +- bootloaders/zero/build_all_bootloaders.sh | 116 +- extras/package_index.json.Release.template | 4 +- ..._Core_for_Arduino-1.6.18-alpha1_index.json | 53 + json/package_Fab_SAM_index.json | 10 +- platform.txt | 12 +- variants/Generic_D11C14A/README.md | 542 +++--- .../debug_scripts/SAMD11C14A.gdb | 62 +- .../gcc/4KB_Bootloader/flash_16KB.ld | 434 ++--- .../gcc/No_Bootloader/flash_16KB.ld | 428 ++--- .../openocd_scripts/SAMD11C14A.cfg | 60 +- variants/Generic_D11C14A/pins_arduino.h | 42 +- variants/Generic_D11C14A/variant.cpp | 328 ++-- variants/Generic_D11C14A/variant.h | 762 ++++---- variants/Generic_D11D14AM/README.md | 286 +++ .../debug_scripts/SAMD11D14AM.gdb | 31 + .../gcc/4KB_Bootloader/flash_16KB.ld | 217 +++ .../gcc/No_Bootloader/flash_16KB.ld | 214 +++ .../openocd_scripts/SAMD11D14AM.cfg | 30 + .../pins_arduino.h | 42 +- variants/Generic_D11D14AM/variant.cpp | 243 +++ variants/Generic_D11D14AM/variant.h | 397 ++++ variants/Generic_D11D14AS/README.md | 550 +++--- .../debug_scripts/SAMD11D14AS.gdb | 62 +- .../gcc/4KB_Bootloader/flash_16KB.ld | 434 ++--- .../gcc/No_Bootloader/flash_16KB.ld | 428 ++--- .../openocd_scripts/SAMD11D14AS.cfg | 60 +- variants/Generic_D11D14AS/pins_arduino.h | 42 +- variants/Generic_D11D14AS/variant.cpp | 354 ++-- variants/Generic_D11D14AS/variant.h | 748 ++++---- .../{Generic_D21E => Generic_x21E}/README.md | 530 +++--- .../debug_scripts/SAMC21E15A.gdb | 62 +- .../debug_scripts/SAMC21E16A.gdb | 62 +- .../debug_scripts/SAMC21E17A.gdb | 62 +- .../debug_scripts/SAMC21E18A.gdb | 62 +- .../debug_scripts/SAMD21E15A.gdb | 62 +- .../debug_scripts/SAMD21E16A.gdb | 62 +- .../debug_scripts/SAMD21E17A.gdb | 62 +- .../debug_scripts/SAMD21E18A.gdb | 62 +- .../debug_scripts/SAML21E15B.gdb | 62 +- .../debug_scripts/SAML21E16B.gdb | 62 +- .../debug_scripts/SAML21E17B.gdb | 62 +- .../debug_scripts/SAML21E18B.gdb | 62 +- .../gcc/16KB_Bootloader/flash_128KB.ld | 434 ++--- .../gcc/16KB_Bootloader/flash_256KB.ld | 434 ++--- .../gcc/16KB_Bootloader/flash_32KB.ld | 434 ++--- .../gcc/16KB_Bootloader/flash_64KB.ld | 434 ++--- .../gcc/8KB_Bootloader/flash_128KB.ld | 434 ++--- .../gcc/8KB_Bootloader/flash_256KB.ld | 434 ++--- .../gcc/8KB_Bootloader/flash_32KB.ld | 434 ++--- .../gcc/8KB_Bootloader/flash_64KB.ld | 434 ++--- .../gcc/No_Bootloader/flash_128KB.ld | 215 +++ .../gcc/No_Bootloader/flash_256KB.ld | 215 +++ .../gcc/No_Bootloader/flash_32KB.ld | 215 +++ .../gcc/No_Bootloader/flash_64KB.ld | 215 +++ .../openocd_scripts/SAMC21E15A.cfg | 60 +- .../openocd_scripts/SAMC21E16A.cfg | 60 +- .../openocd_scripts/SAMC21E17A.cfg | 60 +- .../openocd_scripts/SAMC21E18A.cfg | 60 +- .../openocd_scripts/SAMD21E15A.cfg | 60 +- .../openocd_scripts/SAMD21E16A.cfg | 60 +- .../openocd_scripts/SAMD21E17A.cfg | 60 +- .../openocd_scripts/SAMD21E18A.cfg | 60 +- .../openocd_scripts/SAML21E15B.cfg | 60 +- .../openocd_scripts/SAML21E16B.cfg | 60 +- .../openocd_scripts/SAML21E17B.cfg | 60 +- .../openocd_scripts/SAML21E18B.cfg | 60 +- variants/Generic_x21E/pins_arduino.h | 21 + .../variant.cpp | 268 +-- .../{Generic_D21E => Generic_x21E}/variant.h | 746 ++++---- variants/Generic_xx1G/README.md | 229 +++ .../Generic_xx1G/debug_scripts/SAMC21G15A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAMC21G16A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAMC21G17A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAMC21G18A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAMD21G15A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAMD21G16A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAMD21G17A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAMD21G18A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAMD51G18A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAMD51G19A.gdb | 31 + .../Generic_xx1G/debug_scripts/SAML21G16B.gdb | 31 + .../Generic_xx1G/debug_scripts/SAML21G17B.gdb | 31 + .../Generic_xx1G/debug_scripts/SAML21G18B.gdb | 31 + .../gcc/16KB_Bootloader/flash_128KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_256KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_32KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_64KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_m4f_256KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_m4f_512KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_128KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_256KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_32KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_64KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_m4f_256KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_m4f_512KB.ld | 217 +++ .../gcc/No_Bootloader/flash_128KB.ld | 429 +++-- .../gcc/No_Bootloader/flash_256KB.ld | 429 +++-- .../gcc/No_Bootloader/flash_32KB.ld | 429 +++-- .../gcc/No_Bootloader/flash_64KB.ld | 429 +++-- .../gcc/No_Bootloader/flash_m4f_256KB.ld | 214 +++ .../gcc/No_Bootloader/flash_m4f_512KB.ld | 214 +++ .../openocd_scripts/SAMC21G15A.cfg | 30 + .../openocd_scripts/SAMC21G16A.cfg | 30 + .../openocd_scripts/SAMC21G17A.cfg | 30 + .../openocd_scripts/SAMC21G18A.cfg | 30 + .../openocd_scripts/SAMD21G15A.cfg | 30 + .../openocd_scripts/SAMD21G16A.cfg | 30 + .../openocd_scripts/SAMD21G17A.cfg | 30 + .../openocd_scripts/SAMD21G18A.cfg | 30 + .../openocd_scripts/SAMD51G18A.cfg | 30 + .../openocd_scripts/SAMD51G19A.cfg | 30 + .../openocd_scripts/SAML21G16B.cfg | 30 + .../openocd_scripts/SAML21G17B.cfg | 30 + .../openocd_scripts/SAML21G18B.cfg | 30 + variants/Generic_xx1G/pins_arduino.h | 21 + variants/Generic_xx1G/variant.cpp | 365 ++++ variants/Generic_xx1G/variant.h | 477 +++++ variants/Generic_xx1J/README.md | 263 +++ .../Generic_xx1J/debug_scripts/SAMC21J15A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMC21J16A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMC21J17A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMC21J18A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMD21J15A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMD21J16A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMD21J17A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMD21J18A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMD51J18A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMD51J19A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAMD51J20A.gdb | 31 + .../Generic_xx1J/debug_scripts/SAML21J16B.gdb | 31 + .../Generic_xx1J/debug_scripts/SAML21J17B.gdb | 31 + .../Generic_xx1J/debug_scripts/SAML21J18B.gdb | 31 + .../gcc/16KB_Bootloader/flash_128KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_256KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_32KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_64KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_m4f_1MB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_m4f_256KB.ld | 217 +++ .../gcc/16KB_Bootloader/flash_m4f_512KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_128KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_256KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_32KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_64KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_m4f_1MB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_m4f_256KB.ld | 217 +++ .../gcc/8KB_Bootloader/flash_m4f_512KB.ld | 217 +++ .../gcc/No_Bootloader/flash_128KB.ld | 214 +++ .../gcc/No_Bootloader/flash_256KB.ld | 214 +++ .../gcc/No_Bootloader/flash_32KB.ld | 214 +++ .../gcc/No_Bootloader/flash_64KB.ld | 214 +++ .../gcc/No_Bootloader/flash_m4f_1MB.ld | 214 +++ .../gcc/No_Bootloader/flash_m4f_256KB.ld | 214 +++ .../gcc/No_Bootloader/flash_m4f_512KB.ld | 214 +++ .../openocd_scripts/SAMC21J15A.cfg | 30 + .../openocd_scripts/SAMC21J16A.cfg | 30 + .../openocd_scripts/SAMC21J17A.cfg | 30 + .../openocd_scripts/SAMC21J18A.cfg | 30 + .../openocd_scripts/SAMD21J15A.cfg | 30 + .../openocd_scripts/SAMD21J16A.cfg | 30 + .../openocd_scripts/SAMD21J17A.cfg | 30 + .../openocd_scripts/SAMD21J18A.cfg | 30 + .../openocd_scripts/SAMD51J18A.cfg | 30 + .../openocd_scripts/SAMD51J19A.cfg | 30 + .../openocd_scripts/SAMD51J20A.cfg | 30 + .../openocd_scripts/SAML21J16B.cfg | 30 + .../openocd_scripts/SAML21J17B.cfg | 30 + .../openocd_scripts/SAML21J18B.cfg | 30 + variants/Generic_xx1J/pins_arduino.h | 21 + variants/Generic_xx1J/variant.cpp | 403 +++++ variants/Generic_xx1J/variant.h | 501 +++++ 275 files changed, 22690 insertions(+), 7132 deletions(-) rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAMC21G15A.bin => sam_ba_SAMC21E15A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAMC21E16A.bin => sam_ba_SAMC21E16A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAMC21G17A.bin => sam_ba_SAMC21E17A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAMC21G18A.bin => sam_ba_SAMC21E18A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAMC21J15A.bin => sam_ba_SAMC21G15A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAMC21G16A.bin => sam_ba_SAMC21G16A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAMC21E17A.bin => sam_ba_SAMC21G17A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAMC21J18A.bin => sam_ba_SAMC21G18A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAMC21E15A.bin => sam_ba_SAMC21J15A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAMC21J16A.bin => sam_ba_SAMC21J16A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAMC21J17A.bin => sam_ba_SAMC21J17A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAMC21E18A.bin => sam_ba_SAMC21J18A.bin} (69%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_D11C14A_SAMD11C14A.bin => sam_ba_SAMD11C14A.bin} (58%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_D11D14AM_SAMD11D14AM.bin => sam_ba_SAMD11D14AM.bin} (58%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_D11D14AS_SAMD11D14AS.bin => sam_ba_SAMD11D14AS.bin} (58%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAMD21E15A.bin => sam_ba_SAMD21E15A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAMD21E16A.bin => sam_ba_SAMD21E16A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAMD21E17A.bin => sam_ba_SAMD21E17A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAMD21E18A.bin => sam_ba_SAMD21E18A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAMD21G15A.bin => sam_ba_SAMD21G15A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAMD21G16A.bin => sam_ba_SAMD21G16A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAMD21G17A.bin => sam_ba_SAMD21G17A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAMD21G18A.bin => sam_ba_SAMD21G18A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAMD21J15A.bin => sam_ba_SAMD21J15A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAMD21J16A.bin => sam_ba_SAMD21J16A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAMD21J17A.bin => sam_ba_SAMD21J17A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAMD21J18A.bin => sam_ba_SAMD21J18A.bin} (64%) mode change 100755 => 100644 create mode 100644 bootloaders/zero/binaries/sam_ba_SAMD51G18A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_SAMD51G19A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_SAMD51J18A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_SAMD51J19A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_SAMD51J20A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_SAMD51N19A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_SAMD51N20A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_SAMD51P19A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_SAMD51P20A.bin rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAML21E15B.bin => sam_ba_SAML21E15B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAML21G16B.bin => sam_ba_SAML21E16B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAML21G17B.bin => sam_ba_SAML21E17B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21G_SAML21G18B.bin => sam_ba_SAML21E18B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAML21E16B.bin => sam_ba_SAML21G16B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAML21E17B.bin => sam_ba_SAML21G17B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21E_SAML21E18B.bin => sam_ba_SAML21G18B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAML21J16B.bin => sam_ba_SAML21J16B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAML21J17B.bin => sam_ba_SAML21J17B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_Generic_x21J_SAML21J18B.bin => sam_ba_SAML21J18B.bin} (76%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAMC21G15A.bin => sam_ba_sdcard_SAMC21E15A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAMC21E16A.bin => sam_ba_sdcard_SAMC21E16A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAMC21G17A.bin => sam_ba_sdcard_SAMC21E17A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAMC21G18A.bin => sam_ba_sdcard_SAMC21E18A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAMC21J15A.bin => sam_ba_sdcard_SAMC21G15A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAMC21G16A.bin => sam_ba_sdcard_SAMC21G16A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAMC21E17A.bin => sam_ba_sdcard_SAMC21G17A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAMC21J18A.bin => sam_ba_sdcard_SAMC21G18A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAMC21E15A.bin => sam_ba_sdcard_SAMC21J15A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAMC21J16A.bin => sam_ba_sdcard_SAMC21J16A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAMC21J17A.bin => sam_ba_sdcard_SAMC21J17A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAMC21E18A.bin => sam_ba_sdcard_SAMC21J18A.bin} (64%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_D11C14A_SAMD11C14A.bin => sam_ba_sdcard_SAMD11C14A.bin} (79%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_D11D14AM_SAMD11D14AM.bin => sam_ba_sdcard_SAMD11D14AM.bin} (79%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_D11D14AS_SAMD11D14AS.bin => sam_ba_sdcard_SAMD11D14AS.bin} (79%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAMD21E15A.bin => sam_ba_sdcard_SAMD21E15A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAMD21E16A.bin => sam_ba_sdcard_SAMD21E16A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAMD21E17A.bin => sam_ba_sdcard_SAMD21E17A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAMD21E18A.bin => sam_ba_sdcard_SAMD21E18A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAMD21G15A.bin => sam_ba_sdcard_SAMD21G15A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAMD21G16A.bin => sam_ba_sdcard_SAMD21G16A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAMD21G17A.bin => sam_ba_sdcard_SAMD21G17A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAMD21G18A.bin => sam_ba_sdcard_SAMD21G18A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAMD21J15A.bin => sam_ba_sdcard_SAMD21J15A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAMD21J16A.bin => sam_ba_sdcard_SAMD21J16A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAMD21J17A.bin => sam_ba_sdcard_SAMD21J17A.bin} (77%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAMD21J18A.bin => sam_ba_sdcard_SAMD21J18A.bin} (77%) mode change 100755 => 100644 create mode 100644 bootloaders/zero/binaries/sam_ba_sdcard_SAMD51G18A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_sdcard_SAMD51G19A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_sdcard_SAMD51J18A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_sdcard_SAMD51J19A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_sdcard_SAMD51J20A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_sdcard_SAMD51N19A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_sdcard_SAMD51N20A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_sdcard_SAMD51P19A.bin create mode 100644 bootloaders/zero/binaries/sam_ba_sdcard_SAMD51P20A.bin rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAML21E15B.bin => sam_ba_sdcard_SAML21E15B.bin} (63%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAML21G16B.bin => sam_ba_sdcard_SAML21E16B.bin} (63%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAML21G17B.bin => sam_ba_sdcard_SAML21E17B.bin} (63%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21G_SAML21G18B.bin => sam_ba_sdcard_SAML21E18B.bin} (63%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAML21E16B.bin => sam_ba_sdcard_SAML21G16B.bin} (63%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAML21E17B.bin => sam_ba_sdcard_SAML21G17B.bin} (63%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21E_SAML21E18B.bin => sam_ba_sdcard_SAML21G18B.bin} (63%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAML21J16B.bin => sam_ba_sdcard_SAML21J16B.bin} (63%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAML21J17B.bin => sam_ba_sdcard_SAML21J17B.bin} (63%) mode change 100755 => 100644 rename bootloaders/zero/binaries/{sam_ba_sdcard_Generic_x21J_SAML21J18B.bin => sam_ba_sdcard_SAML21J18B.bin} (63%) mode change 100755 => 100644 create mode 100644 bootloaders/zero/board_definitions/board_definitions_Generic_D51G.h create mode 100644 bootloaders/zero/board_definitions/board_definitions_Generic_D51J.h rename bootloaders/zero/board_definitions/{board_definitions_Generic_xx1G.h => board_definitions_Generic_x21G.h} (97%) rename bootloaders/zero/board_definitions/{board_definitions_Generic_xx1J.h => board_definitions_Generic_x21J.h} (97%) create mode 100644 json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha1_index.json create mode 100644 variants/Generic_D11D14AM/README.md create mode 100644 variants/Generic_D11D14AM/debug_scripts/SAMD11D14AM.gdb create mode 100644 variants/Generic_D11D14AM/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld create mode 100644 variants/Generic_D11D14AM/linker_scripts/gcc/No_Bootloader/flash_16KB.ld create mode 100644 variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg rename variants/{Generic_D21E => Generic_D11D14AM}/pins_arduino.h (97%) create mode 100644 variants/Generic_D11D14AM/variant.cpp create mode 100644 variants/Generic_D11D14AM/variant.h rename variants/{Generic_D21E => Generic_x21E}/README.md (98%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAMC21E15A.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAMC21E16A.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAMC21E17A.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAMC21E18A.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAMD21E15A.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAMD21E16A.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAMD21E17A.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAMD21E18A.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAML21E15B.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAML21E16B.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAML21E17B.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/debug_scripts/SAML21E18B.gdb (97%) rename variants/{Generic_D21E => Generic_x21E}/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld (95%) rename variants/{Generic_D21E => Generic_x21E}/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld (95%) rename variants/{Generic_D21E => Generic_x21E}/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld (95%) rename variants/{Generic_D21E => Generic_x21E}/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld (95%) rename variants/{Generic_D21E => Generic_x21E}/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld (95%) rename variants/{Generic_D21E => Generic_x21E}/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld (95%) rename variants/{Generic_D21E => Generic_x21E}/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld (95%) rename variants/{Generic_D21E => Generic_x21E}/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld (95%) create mode 100644 variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld create mode 100644 variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld create mode 100644 variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld create mode 100644 variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAMC21E15A.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAMC21E16A.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAMC21E17A.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAMC21E18A.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAMD21E15A.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAMD21E16A.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAMD21E17A.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAMD21E18A.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAML21E15B.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAML21E16B.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAML21E17B.cfg (97%) rename variants/{Generic_D21E => Generic_x21E}/openocd_scripts/SAML21E18B.cfg (97%) create mode 100644 variants/Generic_x21E/pins_arduino.h rename variants/{Generic_D21E => Generic_x21E}/variant.cpp (98%) rename variants/{Generic_D21E => Generic_x21E}/variant.h (96%) create mode 100644 variants/Generic_xx1G/README.md create mode 100644 variants/Generic_xx1G/debug_scripts/SAMC21G15A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAMC21G16A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAMC21G17A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAMC21G18A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAMD21G15A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAMD21G16A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAMD21G17A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAMD21G18A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAMD51G18A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAMD51G19A.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAML21G16B.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAML21G17B.gdb create mode 100644 variants/Generic_xx1G/debug_scripts/SAML21G18B.gdb create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld rename variants/{Generic_D21E => Generic_xx1G}/linker_scripts/gcc/No_Bootloader/flash_128KB.ld (95%) rename variants/{Generic_D21E => Generic_xx1G}/linker_scripts/gcc/No_Bootloader/flash_256KB.ld (95%) rename variants/{Generic_D21E => Generic_xx1G}/linker_scripts/gcc/No_Bootloader/flash_32KB.ld (95%) rename variants/{Generic_D21E => Generic_xx1G}/linker_scripts/gcc/No_Bootloader/flash_64KB.ld (95%) create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld create mode 100644 variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg create mode 100644 variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg create mode 100644 variants/Generic_xx1G/pins_arduino.h create mode 100644 variants/Generic_xx1G/variant.cpp create mode 100644 variants/Generic_xx1G/variant.h create mode 100644 variants/Generic_xx1J/README.md create mode 100644 variants/Generic_xx1J/debug_scripts/SAMC21J15A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMC21J16A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMC21J17A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMC21J18A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMD21J15A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMD21J16A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMD21J17A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMD21J18A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMD51J18A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMD51J19A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAMD51J20A.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAML21J16B.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAML21J17B.gdb create mode 100644 variants/Generic_xx1J/debug_scripts/SAML21J18B.gdb create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_1MB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_1MB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_128KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_256KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_32KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_64KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_1MB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld create mode 100644 variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg create mode 100644 variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg create mode 100644 variants/Generic_xx1J/pins_arduino.h create mode 100644 variants/Generic_xx1J/variant.cpp create mode 100644 variants/Generic_xx1J/variant.h diff --git a/boards.txt b/boards.txt index 13a3273da..e5964517b 100644 --- a/boards.txt +++ b/boards.txt @@ -23,202 +23,20 @@ menu.timer=Timer PWM Frequency menu.float=Floating Point menu.config=Build Options -# Generic D21E -d21e17.name=Generic D21E -d21e17.vid.0=0x16D0 -d21e17.pid.0=0x0557 -d21e17.vid.1=0x16D0 -d21e17.pid.1=0x0856 -d21e17.vid.2=0x16D0 -d21e17.pid.2=0x0B41 -d21e17.vid.3=0x16D0 -d21e17.pid.3=0x0B40 -d21e17.vid.4=0x16D0 -d21e17.pid.4=0x0A0C -d21e17.vid.5=0x16D0 -d21e17.pid.5=0x0856 -d21e17.build.mcu=cortex-m0plus -d21e17.build.mathlib=arm_cortexM0l_math -d21e17.build.f_cpu=48000000L -d21e17.build.usb_product="MT-D21E Rev A" -d21e17.build.usb_manufacturer="Fab Foundation" -d21e17.build.board=SAMD_ZERO -d21e17.build.core=arduino -d21e17.build.variant=Generic_D21E -d21e17.build.variant_system_lib= -d21e17.build.vid=0x16D0 -d21e17.upload.protocol=sam-ba -d21e17.bootloader.tool=arduino:openocd -d21e17.menu.float.default=Print & String use auto-promoted doubles only -d21e17.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY -d21e17.menu.float.print=Print uses separate singles and doubles -d21e17.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES -d21e17.menu.float.string=String uses separate singles and doubles -d21e17.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES -d21e17.menu.float.both=Print & String use separate singles and doubles -d21e17.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES -d21e17.menu.config.disabled=config.h disabled -d21e17.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED -d21e17.menu.config.enabled=config.h enabled (mostly code size reductions) -d21e17.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED -d21e17.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR -d21e17.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB -d21e17.menu.clock.internal=INTERNAL_OSCILLATOR -d21e17.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL -d21e17.menu.clock.crystal_32k=32KHZ_CRYSTAL -d21e17.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL -d21e17.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL -d21e17.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL -d21e17.menu.timer.timer_732Hz=732.4Hz (16-bit) -d21e17.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz -d21e17.menu.timer.timer_366Hz=366.2Hz (16-bit) -d21e17.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz -d21e17.menu.timer.timer_244Hz=244.1Hz (16-bit) -d21e17.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz -d21e17.menu.timer.timer_183Hz=183.1Hz (16-bit) -d21e17.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz -d21e17.menu.timer.timer_146Hz=146.5Hz (16-bit) -d21e17.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz -d21e17.menu.timer.timer_122Hz=122.1Hz (16-bit) -d21e17.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz -d21e17.menu.timer.timer_105Hz=104.6Hz (16-bit) -d21e17.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz -d21e17.menu.timer.timer_81Hz=81.38Hz (16-bit) -d21e17.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz -d21e17.menu.timer.timer_61Hz=61.04Hz (16-bit) -d21e17.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz -d21e17.menu.timer.timer_31Hz=30.52Hz (16-bit) -d21e17.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz -d21e17.menu.timer.timer_187500Hz=187500Hz (8-bit) -d21e17.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz -d21e17.menu.timer.timer_93750Hz=93750Hz (8-bit) -d21e17.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz -d21e17.menu.timer.timer_62500Hz=62500Hz (8-bit) -d21e17.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz -d21e17.menu.timer.timer_37500Hz=37500Hz (8-bit) -d21e17.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz -d21e17.menu.timer.timer_20833Hz=20833Hz (8-bit) -d21e17.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz -d21e17.menu.timer.timer_12500Hz=12500Hz (8-bit) -d21e17.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz -d21e17.menu.timer.timer_7500Hz=7500Hz (8-bit) -d21e17.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz -d21e17.menu.timer.timer_4166Hz=4166Hz (8-bit) -d21e17.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz -d21e17.menu.timer.timer_2930Hz=2930Hz (8-bit) -d21e17.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -d21e17.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) -d21e17.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz -d21e17.menu.cpu.samd21e17a=SAMD21E17A -d21e17.menu.cpu.samd21e17a.upload.maximum_size=122880 -d21e17.menu.cpu.samd21e17a.build.extra_flags=-D__SAMD21E17A__ {build.usb_flags} -DARM_MATH_CM0PLUS -d21e17.menu.cpu.samd21e17a.build.ldscript=flash_128KB.ld -d21e17.menu.cpu.samd21e17a.build.openocdscript=openocd_scripts/SAMD21E17A.cfg -d21e17.menu.cpu.samd21e17a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E17A.bin -d21e17.menu.cpu.samd21e18a=SAMD21E18A -d21e17.menu.cpu.samd21e18a.upload.maximum_size=253952 -d21e17.menu.cpu.samd21e18a.build.extra_flags=-D__SAMD21E18A__ {build.usb_flags} -DARM_MATH_CM0PLUS -d21e17.menu.cpu.samd21e18a.build.ldscript=flash_256KB.ld -d21e17.menu.cpu.samd21e18a.build.openocdscript=openocd_scripts/SAMD21E18A.cfg -d21e17.menu.cpu.samd21e18a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E18A.bin -d21e17.menu.cpu.samd21e15a=SAMD21E15A -d21e17.menu.cpu.samd21e15a.upload.maximum_size=24576 -d21e17.menu.cpu.samd21e15a.build.extra_flags=-D__SAMD21E15A__ {build.usb_flags} -DARM_MATH_CM0PLUS -d21e17.menu.cpu.samd21e15a.build.ldscript=flash_32KB.ld -d21e17.menu.cpu.samd21e15a.build.openocdscript=openocd_scripts/SAMD21E15A.cfg -d21e17.menu.cpu.samd21e15a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E15A.bin -d21e17.menu.cpu.samd21e16a=SAMD21E16A -d21e17.menu.cpu.samd21e16a.upload.maximum_size=57344 -d21e17.menu.cpu.samd21e16a.build.extra_flags=-D__SAMD21E16A__ {build.usb_flags} -DARM_MATH_CM0PLUS -d21e17.menu.cpu.samd21e16a.build.ldscript=flash_64KB.ld -d21e17.menu.cpu.samd21e16a.build.openocdscript=openocd_scripts/SAMD21E16A.cfg -d21e17.menu.cpu.samd21e16a.bootloader.file=zero/binaries/sam_ba_MT_D21E_rev_A_SAMD21E16A.bin -d21e17.menu.bootloader.8kb=8KB_BOOTLOADER -d21e17.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ -d21e17.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader -d21e17.menu.bootloader.8kb.upload.tool=MattairTech_Arduino:bossac -d21e17.menu.bootloader.8kb.upload.use_1200bps_touch=true -d21e17.menu.bootloader.8kb.upload.wait_for_upload_port=true -d21e17.menu.bootloader.8kb.upload.native_usb=true -d21e17.menu.bootloader.16kb=16KB_BOOTLOADER -d21e17.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ -d21e17.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader -d21e17.menu.bootloader.16kb.upload.tool=MattairTech_Arduino:bossac -d21e17.menu.bootloader.16kb.upload.use_1200bps_touch=true -d21e17.menu.bootloader.16kb.upload.wait_for_upload_port=true -d21e17.menu.bootloader.16kb.upload.native_usb=true -d21e17.menu.bootloader.0kb=NO_BOOTLOADER -d21e17.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ -d21e17.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d21e17.menu.bootloader.0kb.upload.tool=arduino:openocd -d21e17.menu.bootloader.0kb.upload.use_1200bps_touch=false -d21e17.menu.bootloader.0kb.upload.wait_for_upload_port=false -d21e17.menu.bootloader.0kb.upload.native_usb=false -d21e17.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI -d21e17.menu.serial.one_uart.build.serialcom_uart=ONE_UART -d21e17.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE -d21e17.menu.serial.one_uart.build.serialcom_spi=ONE_SPI -d21e17.menu.serial.one_uart_one_wire_two_spi=ONE_UART_ONE_WIRE_TWO_SPI -d21e17.menu.serial.one_uart_one_wire_two_spi.build.serialcom_uart=ONE_UART -d21e17.menu.serial.one_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE -d21e17.menu.serial.one_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI -d21e17.menu.serial.one_uart_two_wire_one_spi=ONE_UART_TWO_WIRE_ONE_SPI -d21e17.menu.serial.one_uart_two_wire_one_spi.build.serialcom_uart=ONE_UART -d21e17.menu.serial.one_uart_two_wire_one_spi.build.serialcom_wire=TWO_WIRE -d21e17.menu.serial.one_uart_two_wire_one_spi.build.serialcom_spi=ONE_SPI -d21e17.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI -d21e17.menu.serial.two_uart.build.serialcom_uart=TWO_UART -d21e17.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE -d21e17.menu.serial.two_uart.build.serialcom_spi=ONE_SPI -d21e17.menu.serial.three_uart_one_wire_no_spi=THREE_UART_ONE_WIRE_NO_SPI -d21e17.menu.serial.three_uart_one_wire_no_spi.build.serialcom_uart=THREE_UART -d21e17.menu.serial.three_uart_one_wire_no_spi.build.serialcom_wire=ONE_WIRE -d21e17.menu.serial.three_uart_one_wire_no_spi.build.serialcom_spi=NO_SPI -d21e17.menu.serial.three_uart_no_wire_one_spi=THREE_UART_NO_WIRE_ONE_SPI -d21e17.menu.serial.three_uart_no_wire_one_spi.build.serialcom_uart=THREE_UART -d21e17.menu.serial.three_uart_no_wire_one_spi.build.serialcom_wire=NO_WIRE -d21e17.menu.serial.three_uart_no_wire_one_spi.build.serialcom_spi=ONE_SPI -d21e17.menu.serial.four_uart=FOUR_UART_NO_WIRE_NO_SPI -d21e17.menu.serial.four_uart.build.serialcom_uart=FOUR_UART -d21e17.menu.serial.four_uart.build.serialcom_wire=NO_WIRE -d21e17.menu.serial.four_uart.build.serialcom_spi=NO_SPI -d21e17.menu.serial.no_uart_one_wire_two_spi=NO_UART_ONE_WIRE_TWO_SPI -d21e17.menu.serial.no_uart_one_wire_two_spi.build.serialcom_uart=NO_UART -d21e17.menu.serial.no_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE -d21e17.menu.serial.no_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI -d21e17.menu.usb.cdc=CDC_ONLY -d21e17.menu.usb.cdc.build.usbcom=CDC_ONLY -d21e17.menu.usb.cdc.build.pid=0x0557 -d21e17.menu.usb.cdc_hid=CDC_HID -d21e17.menu.usb.cdc_hid.build.usbcom=CDC_HID -d21e17.menu.usb.cdc_hid.build.pid=0x0856 -d21e17.menu.usb.withcdc=WITH_CDC -d21e17.menu.usb.withcdc.build.usbcom=WITH_CDC -d21e17.menu.usb.withcdc.build.pid=0x0B41 -d21e17.menu.usb.hid=HID_ONLY -d21e17.menu.usb.hid.build.usbcom=HID_ONLY -d21e17.menu.usb.hid.build.pid=0x0B40 -d21e17.menu.usb.nocdc=WITHOUT_CDC -d21e17.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -d21e17.menu.usb.nocdc.build.pid=0x0A0C -d21e17.menu.usb.none=USB_DISABLED -d21e17.menu.usb.none.build.usbcom=USB_DISABLED -d21e17.menu.usb.none.build.pid=0x0856 - -# Generic D11C14A (SOIC-14) +# Generic D11C14A d11c14a.name=Generic D11C14A d11c14a.vid.0=0x16D0 -d11c14a.pid.0=0x0557 +d11c14a.pid.0=0x1557 d11c14a.vid.1=0x16D0 -d11c14a.pid.1=0x0856 +d11c14a.pid.1=0x1856 d11c14a.vid.2=0x16D0 -d11c14a.pid.2=0x0B41 +d11c14a.pid.2=0x1B41 d11c14a.vid.3=0x16D0 -d11c14a.pid.3=0x0B40 +d11c14a.pid.3=0x1B40 d11c14a.vid.4=0x16D0 -d11c14a.pid.4=0x0A0C +d11c14a.pid.4=0x1A0C d11c14a.vid.5=0x16D0 -d11c14a.pid.5=0x0856 +d11c14a.pid.5=0x1856 d11c14a.build.mcu=cortex-m0plus d11c14a.build.mathlib=arm_cortexM0l_math d11c14a.build.f_cpu=48000000L @@ -289,16 +107,16 @@ d11c14a.menu.timer.timer_4166Hz=4166Hz (8-bit) d11c14a.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz d11c14a.menu.timer.timer_2930Hz=2930Hz (8-bit) d11c14a.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -d11c14a.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) +d11c14a.menu.timer.timer_1465Hz=1465Hz (8-bit) d11c14a.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz d11c14a.build.extra_flags=-D__SAMD11C14A__ {build.usb_flags} -DARM_MATH_CM0PLUS d11c14a.build.ldscript=flash_16KB.ld d11c14a.build.openocdscript=openocd_scripts/SAMD11C14A.cfg -d11c14a.bootloader.file=zero/binaries/sam_ba_Generic_D11C14A_SAMD11C14A.bin +d11c14a.bootloader.file=zero/binaries/sam_ba_SAMD11C14A.bin d11c14a.menu.bootloader.4kb=4KB_BOOTLOADER d11c14a.menu.bootloader.4kb.build.bootloader_size=__4KB_BOOTLOADER__ d11c14a.menu.bootloader.4kb.build.ldscript_path=linker_scripts/gcc/4KB_Bootloader -d11c14a.menu.bootloader.4kb.upload.tool=MattairTech_Arduino:bossac +d11c14a.menu.bootloader.4kb.upload.tool=Fab_SAM_Arduino:bossac d11c14a.menu.bootloader.4kb.upload.use_1200bps_touch=true d11c14a.menu.bootloader.4kb.upload.wait_for_upload_port=true d11c14a.menu.bootloader.4kb.upload.native_usb=true @@ -329,38 +147,37 @@ d11c14a.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE d11c14a.menu.serial.no_uart.build.serialcom_spi=ONE_SPI d11c14a.menu.usb.cdc=CDC_ONLY d11c14a.menu.usb.cdc.build.usbcom=CDC_ONLY -d11c14a.menu.usb.cdc.build.pid=0x0557 +d11c14a.menu.usb.cdc.build.pid=0x1557 d11c14a.menu.usb.cdc_hid=CDC_HID d11c14a.menu.usb.cdc_hid.build.usbcom=CDC_HID -d11c14a.menu.usb.cdc_hid.build.pid=0x0856 +d11c14a.menu.usb.cdc_hid.build.pid=0x1856 d11c14a.menu.usb.withcdc=WITH_CDC d11c14a.menu.usb.withcdc.build.usbcom=WITH_CDC -d11c14a.menu.usb.withcdc.build.pid=0x0B41 +d11c14a.menu.usb.withcdc.build.pid=0x1B41 d11c14a.menu.usb.hid=HID_ONLY d11c14a.menu.usb.hid.build.usbcom=HID_ONLY -d11c14a.menu.usb.hid.build.pid=0x0B40 +d11c14a.menu.usb.hid.build.pid=0x1B40 d11c14a.menu.usb.nocdc=WITHOUT_CDC d11c14a.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -d11c14a.menu.usb.nocdc.build.pid=0x0A0C +d11c14a.menu.usb.nocdc.build.pid=0x1A0C d11c14a.menu.usb.none=USB_DISABLED d11c14a.menu.usb.none.build.usbcom=USB_DISABLED -d11c14a.menu.usb.none.build.pid=0x0856 - +d11c14a.menu.usb.none.build.pid=0x1856 -# Generic D11D14AS (SOIC-20) +# Generic D11D14AS d11d14as.name=Generic D11D14AS d11d14as.vid.0=0x16D0 -d11d14as.pid.0=0x0557 +d11d14as.pid.0=0x2557 d11d14as.vid.1=0x16D0 -d11d14as.pid.1=0x0856 +d11d14as.pid.1=0x2856 d11d14as.vid.2=0x16D0 -d11d14as.pid.2=0x0B41 +d11d14as.pid.2=0x2B41 d11d14as.vid.3=0x16D0 -d11d14as.pid.3=0x0B40 +d11d14as.pid.3=0x2B40 d11d14as.vid.4=0x16D0 -d11d14as.pid.4=0x0A0C +d11d14as.pid.4=0x2A0C d11d14as.vid.5=0x16D0 -d11d14as.pid.5=0x0856 +d11d14as.pid.5=0x2856 d11d14as.build.mcu=cortex-m0plus d11d14as.build.mathlib=arm_cortexM0l_math d11d14as.build.f_cpu=48000000L @@ -431,16 +248,16 @@ d11d14as.menu.timer.timer_4166Hz=4166Hz (8-bit) d11d14as.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz d11d14as.menu.timer.timer_2930Hz=2930Hz (8-bit) d11d14as.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz -d11d14as.menu.timer.timer_1465Hz=1465Hz (8-bit, 16-bit for D51) +d11d14as.menu.timer.timer_1465Hz=1465Hz (8-bit) d11d14as.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz d11d14as.build.extra_flags=-D__SAMD11D14AS__ {build.usb_flags} -DARM_MATH_CM0PLUS d11d14as.build.ldscript=flash_16KB.ld d11d14as.build.openocdscript=openocd_scripts/SAMD11D14AS.cfg -d11d14as.bootloader.file=zero/binaries/sam_ba_Generic_D11D14AS_SAMD11D14AS.bin +d11d14as.bootloader.file=zero/binaries/sam_ba_SAMD11D14AS.bin d11d14as.menu.bootloader.4kb=4KB_BOOTLOADER d11d14as.menu.bootloader.4kb.build.bootloader_size=__4KB_BOOTLOADER__ d11d14as.menu.bootloader.4kb.build.ldscript_path=linker_scripts/gcc/4KB_Bootloader -d11d14as.menu.bootloader.4kb.upload.tool=MattairTech_Arduino:bossac +d11d14as.menu.bootloader.4kb.upload.tool=Fab_SAM_Arduino:bossac d11d14as.menu.bootloader.4kb.upload.use_1200bps_touch=true d11d14as.menu.bootloader.4kb.upload.wait_for_upload_port=true d11d14as.menu.bootloader.4kb.upload.native_usb=true @@ -467,19 +284,1380 @@ d11d14as.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE d11d14as.menu.serial.two_uart.build.serialcom_spi=NO_SPI d11d14as.menu.usb.cdc=CDC_ONLY d11d14as.menu.usb.cdc.build.usbcom=CDC_ONLY -d11d14as.menu.usb.cdc.build.pid=0x0557 +d11d14as.menu.usb.cdc.build.pid=0x2557 d11d14as.menu.usb.cdc_hid=CDC_HID d11d14as.menu.usb.cdc_hid.build.usbcom=CDC_HID -d11d14as.menu.usb.cdc_hid.build.pid=0x0856 +d11d14as.menu.usb.cdc_hid.build.pid=0x2856 d11d14as.menu.usb.withcdc=WITH_CDC d11d14as.menu.usb.withcdc.build.usbcom=WITH_CDC -d11d14as.menu.usb.withcdc.build.pid=0x0B41 +d11d14as.menu.usb.withcdc.build.pid=0x2B41 d11d14as.menu.usb.hid=HID_ONLY d11d14as.menu.usb.hid.build.usbcom=HID_ONLY -d11d14as.menu.usb.hid.build.pid=0x0B40 +d11d14as.menu.usb.hid.build.pid=0x2B40 d11d14as.menu.usb.nocdc=WITHOUT_CDC d11d14as.menu.usb.nocdc.build.usbcom=WITHOUT_CDC -d11d14as.menu.usb.nocdc.build.pid=0x0A0C +d11d14as.menu.usb.nocdc.build.pid=0x2A0C d11d14as.menu.usb.none=USB_DISABLED d11d14as.menu.usb.none.build.usbcom=USB_DISABLED -d11d14as.menu.usb.none.build.pid=0x0856 +d11d14as.menu.usb.none.build.pid=0x2856 + +# Generic D11D14AM +d11d14am.name=Generic D11D14AM +d11d14am.vid.0=0x16D0 +d11d14am.pid.0=0x3557 +d11d14am.vid.1=0x16D0 +d11d14am.pid.1=0x3856 +d11d14am.vid.2=0x16D0 +d11d14am.pid.2=0x3B41 +d11d14am.vid.3=0x16D0 +d11d14am.pid.3=0x3B40 +d11d14am.vid.4=0x16D0 +d11d14am.pid.4=0x3A0C +d11d14am.vid.5=0x16D0 +d11d14am.pid.5=0x3856 +d11d14am.build.mcu=cortex-m0plus +d11d14am.build.mathlib=arm_cortexM0l_math +d11d14am.build.f_cpu=48000000L +d11d14am.build.usb_product="MT-D11" +d11d14am.build.usb_manufacturer="Fab Foundation" +d11d14am.build.board=SAMD_ZERO +d11d14am.build.core=arduino +d11d14am.build.variant=Generic_D11D14AM +d11d14am.build.variant_system_lib= +d11d14am.build.vid=0x16D0 +d11d14am.upload.protocol=sam-ba +d11d14am.bootloader.tool=arduino:openocd +d11d14am.menu.float.default=Print & String use auto-promoted doubles only +d11d14am.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY +d11d14am.menu.float.print=Print uses separate singles and doubles +d11d14am.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES +d11d14am.menu.float.string=String uses separate singles and doubles +d11d14am.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES +d11d14am.menu.float.both=Print & String use separate singles and doubles +d11d14am.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES +d11d14am.menu.config.disabled=config.h disabled +d11d14am.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED +d11d14am.menu.config.enabled=config.h enabled (mostly code size reductions) +d11d14am.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED +d11d14am.menu.clock.crystal_32k=32KHZ_CRYSTAL +d11d14am.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL +d11d14am.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL +d11d14am.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL +d11d14am.menu.clock.internal=INTERNAL_OSCILLATOR +d11d14am.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL +d11d14am.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR +d11d14am.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB +d11d14am.menu.timer.timer_732Hz=732.4Hz (16-bit) +d11d14am.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz +d11d14am.menu.timer.timer_366Hz=366.2Hz (16-bit) +d11d14am.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz +d11d14am.menu.timer.timer_244Hz=244.1Hz (16-bit) +d11d14am.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz +d11d14am.menu.timer.timer_183Hz=183.1Hz (16-bit) +d11d14am.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz +d11d14am.menu.timer.timer_146Hz=146.5Hz (16-bit) +d11d14am.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz +d11d14am.menu.timer.timer_122Hz=122.1Hz (16-bit) +d11d14am.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz +d11d14am.menu.timer.timer_105Hz=104.6Hz (16-bit) +d11d14am.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz +d11d14am.menu.timer.timer_81Hz=81.38Hz (16-bit) +d11d14am.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz +d11d14am.menu.timer.timer_61Hz=61.04Hz (16-bit) +d11d14am.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz +d11d14am.menu.timer.timer_31Hz=30.52Hz (16-bit) +d11d14am.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz +d11d14am.menu.timer.timer_187500Hz=187500Hz (8-bit) +d11d14am.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz +d11d14am.menu.timer.timer_93750Hz=93750Hz (8-bit) +d11d14am.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz +d11d14am.menu.timer.timer_62500Hz=62500Hz (8-bit) +d11d14am.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz +d11d14am.menu.timer.timer_37500Hz=37500Hz (8-bit) +d11d14am.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz +d11d14am.menu.timer.timer_20833Hz=20833Hz (8-bit) +d11d14am.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz +d11d14am.menu.timer.timer_12500Hz=12500Hz (8-bit) +d11d14am.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz +d11d14am.menu.timer.timer_7500Hz=7500Hz (8-bit) +d11d14am.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz +d11d14am.menu.timer.timer_4166Hz=4166Hz (8-bit) +d11d14am.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz +d11d14am.menu.timer.timer_2930Hz=2930Hz (8-bit) +d11d14am.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz +d11d14am.menu.timer.timer_1465Hz=1465Hz (8-bit) +d11d14am.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz +d11d14am.build.extra_flags=-D__SAMD11D14AM__ {build.usb_flags} -DARM_MATH_CM0PLUS +d11d14am.build.ldscript=flash_16KB.ld +d11d14am.build.openocdscript=openocd_scripts/SAMD11D14AM.cfg +d11d14am.bootloader.file=zero/binaries/sam_ba_SAMD11D14AM.bin +d11d14am.menu.bootloader.4kb=4KB_BOOTLOADER +d11d14am.menu.bootloader.4kb.build.bootloader_size=__4KB_BOOTLOADER__ +d11d14am.menu.bootloader.4kb.build.ldscript_path=linker_scripts/gcc/4KB_Bootloader +d11d14am.menu.bootloader.4kb.upload.tool=Fab_SAM_Arduino:bossac +d11d14am.menu.bootloader.4kb.upload.use_1200bps_touch=true +d11d14am.menu.bootloader.4kb.upload.wait_for_upload_port=true +d11d14am.menu.bootloader.4kb.upload.native_usb=true +d11d14am.menu.bootloader.4kb.upload.maximum_size=12288 +d11d14am.menu.bootloader.0kb=NO_BOOTLOADER +d11d14am.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ +d11d14am.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader +d11d14am.menu.bootloader.0kb.upload.tool=arduino:openocd +d11d14am.menu.bootloader.0kb.upload.use_1200bps_touch=false +d11d14am.menu.bootloader.0kb.upload.wait_for_upload_port=false +d11d14am.menu.bootloader.0kb.upload.native_usb=false +d11d14am.menu.bootloader.0kb.upload.maximum_size=16384 +d11d14am.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI +d11d14am.menu.serial.one_uart.build.serialcom_uart=ONE_UART +d11d14am.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE +d11d14am.menu.serial.one_uart.build.serialcom_spi=ONE_SPI +d11d14am.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI +d11d14am.menu.serial.no_uart.build.serialcom_uart=NO_UART +d11d14am.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE +d11d14am.menu.serial.no_uart.build.serialcom_spi=ONE_SPI +d11d14am.menu.serial.two_uart=TWO_UART_ONE_WIRE_NO_SPI +d11d14am.menu.serial.two_uart.build.serialcom_uart=TWO_UART +d11d14am.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE +d11d14am.menu.serial.two_uart.build.serialcom_spi=NO_SPI +d11d14am.menu.usb.cdc=CDC_ONLY +d11d14am.menu.usb.cdc.build.usbcom=CDC_ONLY +d11d14am.menu.usb.cdc.build.pid=0x3557 +d11d14am.menu.usb.cdc_hid=CDC_HID +d11d14am.menu.usb.cdc_hid.build.usbcom=CDC_HID +d11d14am.menu.usb.cdc_hid.build.pid=0x3856 +d11d14am.menu.usb.withcdc=WITH_CDC +d11d14am.menu.usb.withcdc.build.usbcom=WITH_CDC +d11d14am.menu.usb.withcdc.build.pid=0x3B41 +d11d14am.menu.usb.hid=HID_ONLY +d11d14am.menu.usb.hid.build.usbcom=HID_ONLY +d11d14am.menu.usb.hid.build.pid=0x3B40 +d11d14am.menu.usb.nocdc=WITHOUT_CDC +d11d14am.menu.usb.nocdc.build.usbcom=WITHOUT_CDC +d11d14am.menu.usb.nocdc.build.pid=0x3A0C +d11d14am.menu.usb.none=USB_DISABLED +d11d14am.menu.usb.none.build.usbcom=USB_DISABLED +d11d14am.menu.usb.none.build.pid=0x3856 + +# Generic x21E +x21e.name=Generic x21E +x21e.vid.0=0x16D0 +x21e.pid.0=0x4557 +x21e.vid.1=0x16D0 +x21e.pid.1=0x4856 +x21e.vid.2=0x16D0 +x21e.pid.2=0x4B41 +x21e.vid.3=0x16D0 +x21e.pid.3=0x4B40 +x21e.vid.4=0x16D0 +x21e.pid.4=0x4A0C +x21e.vid.5=0x16D0 +x21e.pid.5=0x4856 +x21e.build.mcu=cortex-m0plus +x21e.build.mathlib=arm_cortexM0l_math +x21e.build.f_cpu=48000000L +x21e.build.usb_product="x21E" +x21e.build.usb_manufacturer="Fab Foundation" +x21e.build.board=SAMD_ZERO +x21e.build.core=arduino +x21e.build.variant=Generic_x21E +x21e.build.variant_system_lib= +x21e.build.vid=0x16D0 +x21e.upload.protocol=sam-ba +x21e.bootloader.tool=arduino:openocd +x21e.menu.float.default=Print & String use auto-promoted doubles only +x21e.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY +x21e.menu.float.print=Print uses separate singles and doubles +x21e.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES +x21e.menu.float.string=String uses separate singles and doubles +x21e.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES +x21e.menu.float.both=Print & String use separate singles and doubles +x21e.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES +x21e.menu.config.disabled=config.h disabled +x21e.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED +x21e.menu.config.enabled=config.h enabled (mostly code size reductions) +x21e.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED +x21e.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR +x21e.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB +x21e.menu.clock.internal=INTERNAL_OSCILLATOR +x21e.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL +x21e.menu.clock.crystal_32k=32KHZ_CRYSTAL +x21e.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL +x21e.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL +x21e.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL +x21e.menu.timer.timer_732Hz=732.4Hz (16-bit) +x21e.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz +x21e.menu.timer.timer_366Hz=366.2Hz (16-bit) +x21e.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz +x21e.menu.timer.timer_244Hz=244.1Hz (16-bit) +x21e.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz +x21e.menu.timer.timer_183Hz=183.1Hz (16-bit) +x21e.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz +x21e.menu.timer.timer_146Hz=146.5Hz (16-bit) +x21e.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz +x21e.menu.timer.timer_122Hz=122.1Hz (16-bit) +x21e.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz +x21e.menu.timer.timer_105Hz=104.6Hz (16-bit) +x21e.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz +x21e.menu.timer.timer_81Hz=81.38Hz (16-bit) +x21e.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz +x21e.menu.timer.timer_61Hz=61.04Hz (16-bit) +x21e.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz +x21e.menu.timer.timer_31Hz=30.52Hz (16-bit) +x21e.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz +x21e.menu.timer.timer_187500Hz=187500Hz (8-bit) +x21e.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz +x21e.menu.timer.timer_93750Hz=93750Hz (8-bit) +x21e.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz +x21e.menu.timer.timer_62500Hz=62500Hz (8-bit) +x21e.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz +x21e.menu.timer.timer_37500Hz=37500Hz (8-bit) +x21e.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz +x21e.menu.timer.timer_20833Hz=20833Hz (8-bit) +x21e.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz +x21e.menu.timer.timer_12500Hz=12500Hz (8-bit) +x21e.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz +x21e.menu.timer.timer_7500Hz=7500Hz (8-bit) +x21e.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz +x21e.menu.timer.timer_4166Hz=4166Hz (8-bit) +x21e.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz +x21e.menu.timer.timer_2930Hz=2930Hz (8-bit) +x21e.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz +x21e.menu.timer.timer_1465Hz=1465Hz (8-bit) +x21e.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz +x21e.menu.cpu.samd21e15a=SAMD21E15A +x21e.menu.cpu.samd21e15a.upload.maximum_size=24576 +x21e.menu.cpu.samd21e15a.build.extra_flags=-D__SAMD21E15A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.samd21e15a.build.ldscript=flash_32KB.ld +x21e.menu.cpu.samd21e15a.build.openocdscript=openocd_scripts/SAMD21E15A.cfg +x21e.menu.cpu.samd21e15a.bootloader.file=zero/binaries/sam_ba_SAMD21E15A.bin +x21e.menu.cpu.samd21e16a=SAMD21E16A +x21e.menu.cpu.samd21e16a.upload.maximum_size=57344 +x21e.menu.cpu.samd21e16a.build.extra_flags=-D__SAMD21E16A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.samd21e16a.build.ldscript=flash_64KB.ld +x21e.menu.cpu.samd21e16a.build.openocdscript=openocd_scripts/SAMD21E16A.cfg +x21e.menu.cpu.samd21e16a.bootloader.file=zero/binaries/sam_ba_SAMD21E16A.bin +x21e.menu.cpu.samd21e17a=SAMD21E17A +x21e.menu.cpu.samd21e17a.upload.maximum_size=122880 +x21e.menu.cpu.samd21e17a.build.extra_flags=-D__SAMD21E17A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.samd21e17a.build.ldscript=flash_128KB.ld +x21e.menu.cpu.samd21e17a.build.openocdscript=openocd_scripts/SAMD21E17A.cfg +x21e.menu.cpu.samd21e17a.bootloader.file=zero/binaries/sam_ba_SAMD21E17A.bin +x21e.menu.cpu.samd21e18a=SAMD21E18A +x21e.menu.cpu.samd21e18a.upload.maximum_size=253952 +x21e.menu.cpu.samd21e18a.build.extra_flags=-D__SAMD21E18A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.samd21e18a.build.ldscript=flash_256KB.ld +x21e.menu.cpu.samd21e18a.build.openocdscript=openocd_scripts/SAMD21E18A.cfg +x21e.menu.cpu.samd21e18a.bootloader.file=zero/binaries/sam_ba_SAMD21E18A.bin +x21e.menu.cpu.saml21e15b=SAML21E15B +x21e.menu.cpu.saml21e15b.upload.maximum_size=24576 +x21e.menu.cpu.saml21e15b.build.extra_flags=-D__SAML21E15B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.saml21e15b.build.ldscript=flash_32KB.ld +x21e.menu.cpu.saml21e15b.build.openocdscript=openocd_scripts/SAML21E15B.cfg +x21e.menu.cpu.saml21e15b.bootloader.file=zero/binaries/sam_ba_SAML21E15B.bin +x21e.menu.cpu.saml21e16b=SAML21E16B +x21e.menu.cpu.saml21e16b.upload.maximum_size=57344 +x21e.menu.cpu.saml21e16b.build.extra_flags=-D__SAML21E16B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.saml21e16b.build.ldscript=flash_64KB.ld +x21e.menu.cpu.saml21e16b.build.openocdscript=openocd_scripts/SAML21E16B.cfg +x21e.menu.cpu.saml21e16b.bootloader.file=zero/binaries/sam_ba_SAML21E16B.bin +x21e.menu.cpu.saml21e17b=SAML21E17B +x21e.menu.cpu.saml21e17b.upload.maximum_size=122880 +x21e.menu.cpu.saml21e17b.build.extra_flags=-D__SAML21E17B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.saml21e17b.build.ldscript=flash_128KB.ld +x21e.menu.cpu.saml21e17b.build.openocdscript=openocd_scripts/SAML21E17B.cfg +x21e.menu.cpu.saml21e17b.bootloader.file=zero/binaries/sam_ba_SAML21E17B.bin +x21e.menu.cpu.saml21e18b=SAML21E18B +x21e.menu.cpu.saml21e18b.upload.maximum_size=253952 +x21e.menu.cpu.saml21e18b.build.extra_flags=-D__SAML21E18B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.saml21e18b.build.ldscript=flash_256KB.ld +x21e.menu.cpu.saml21e18b.build.openocdscript=openocd_scripts/SAML21E18B.cfg +x21e.menu.cpu.saml21e18b.bootloader.file=zero/binaries/sam_ba_SAML21E18B.bin +x21e.menu.cpu.samc21e15a=SAMC21E15A +x21e.menu.cpu.samc21e15a.upload.maximum_size=24576 +x21e.menu.cpu.samc21e15a.build.extra_flags=-D__SAMC21E15A__ -DARM_MATH_CM0PLUS +x21e.menu.cpu.samc21e15a.build.ldscript=flash_32KB.ld +x21e.menu.cpu.samc21e15a.build.openocdscript=openocd_scripts/SAMC21E15A.cfg +x21e.menu.cpu.samc21e15a.bootloader.file=zero/binaries/sam_ba_SAMC21E15A.bin +x21e.menu.cpu.samc21e16a=SAMC21E16A +x21e.menu.cpu.samc21e16a.upload.maximum_size=57344 +x21e.menu.cpu.samc21e16a.build.extra_flags=-D__SAMC21E16A__ -DARM_MATH_CM0PLUS +x21e.menu.cpu.samc21e16a.build.ldscript=flash_64KB.ld +x21e.menu.cpu.samc21e16a.build.openocdscript=openocd_scripts/SAMC21E16A.cfg +x21e.menu.cpu.samc21e16a.bootloader.file=zero/binaries/sam_ba_SAMC21E16A.bin +x21e.menu.cpu.samc21e17a=SAMC21E17A +x21e.menu.cpu.samc21e17a.upload.maximum_size=122880 +x21e.menu.cpu.samc21e17a.build.extra_flags=-D__SAMC21E17A__ -DARM_MATH_CM0PLUS +x21e.menu.cpu.samc21e17a.build.ldscript=flash_128KB.ld +x21e.menu.cpu.samc21e17a.build.openocdscript=openocd_scripts/SAMC21E17A.cfg +x21e.menu.cpu.samc21e17a.bootloader.file=zero/binaries/sam_ba_SAMC21E17A.bin +x21e.menu.cpu.samc21e18a=SAMC21E18A +x21e.menu.cpu.samc21e18a.upload.maximum_size=253952 +x21e.menu.cpu.samc21e18a.build.extra_flags=-D__SAMC21E18A__ -DARM_MATH_CM0PLUS +x21e.menu.cpu.samc21e18a.build.ldscript=flash_256KB.ld +x21e.menu.cpu.samc21e18a.build.openocdscript=openocd_scripts/SAMC21E18A.cfg +x21e.menu.cpu.samc21e18a.bootloader.file=zero/binaries/sam_ba_SAMC21E18A.bin +x21e.menu.bootloader.8kb=8KB_BOOTLOADER +x21e.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ +x21e.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader +x21e.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac +x21e.menu.bootloader.8kb.upload.use_1200bps_touch=true +x21e.menu.bootloader.8kb.upload.wait_for_upload_port=true +x21e.menu.bootloader.8kb.upload.native_usb=true +x21e.menu.bootloader.16kb=16KB_BOOTLOADER +x21e.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ +x21e.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader +x21e.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac +x21e.menu.bootloader.16kb.upload.use_1200bps_touch=true +x21e.menu.bootloader.16kb.upload.wait_for_upload_port=true +x21e.menu.bootloader.16kb.upload.native_usb=true +x21e.menu.bootloader.0kb=NO_BOOTLOADER +x21e.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ +x21e.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader +x21e.menu.bootloader.0kb.upload.tool=arduino:openocd +x21e.menu.bootloader.0kb.upload.use_1200bps_touch=false +x21e.menu.bootloader.0kb.upload.wait_for_upload_port=false +x21e.menu.bootloader.0kb.upload.native_usb=false +x21e.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI +x21e.menu.serial.one_uart.build.serialcom_uart=ONE_UART +x21e.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE +x21e.menu.serial.one_uart.build.serialcom_spi=ONE_SPI +x21e.menu.serial.one_uart_one_wire_two_spi=ONE_UART_ONE_WIRE_TWO_SPI +x21e.menu.serial.one_uart_one_wire_two_spi.build.serialcom_uart=ONE_UART +x21e.menu.serial.one_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE +x21e.menu.serial.one_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI +x21e.menu.serial.one_uart_two_wire_one_spi=ONE_UART_TWO_WIRE_ONE_SPI +x21e.menu.serial.one_uart_two_wire_one_spi.build.serialcom_uart=ONE_UART +x21e.menu.serial.one_uart_two_wire_one_spi.build.serialcom_wire=TWO_WIRE +x21e.menu.serial.one_uart_two_wire_one_spi.build.serialcom_spi=ONE_SPI +x21e.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI +x21e.menu.serial.two_uart.build.serialcom_uart=TWO_UART +x21e.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE +x21e.menu.serial.two_uart.build.serialcom_spi=ONE_SPI +x21e.menu.serial.three_uart_one_wire_no_spi=THREE_UART_ONE_WIRE_NO_SPI +x21e.menu.serial.three_uart_one_wire_no_spi.build.serialcom_uart=THREE_UART +x21e.menu.serial.three_uart_one_wire_no_spi.build.serialcom_wire=ONE_WIRE +x21e.menu.serial.three_uart_one_wire_no_spi.build.serialcom_spi=NO_SPI +x21e.menu.serial.three_uart_no_wire_one_spi=THREE_UART_NO_WIRE_ONE_SPI +x21e.menu.serial.three_uart_no_wire_one_spi.build.serialcom_uart=THREE_UART +x21e.menu.serial.three_uart_no_wire_one_spi.build.serialcom_wire=NO_WIRE +x21e.menu.serial.three_uart_no_wire_one_spi.build.serialcom_spi=ONE_SPI +x21e.menu.serial.four_uart=FOUR_UART_NO_WIRE_NO_SPI +x21e.menu.serial.four_uart.build.serialcom_uart=FOUR_UART +x21e.menu.serial.four_uart.build.serialcom_wire=NO_WIRE +x21e.menu.serial.four_uart.build.serialcom_spi=NO_SPI +x21e.menu.serial.no_uart_one_wire_two_spi=NO_UART_ONE_WIRE_TWO_SPI +x21e.menu.serial.no_uart_one_wire_two_spi.build.serialcom_uart=NO_UART +x21e.menu.serial.no_uart_one_wire_two_spi.build.serialcom_wire=ONE_WIRE +x21e.menu.serial.no_uart_one_wire_two_spi.build.serialcom_spi=TWO_SPI +x21e.menu.serial.four_uart_one_wire_one_spi=FOUR_UART_ONE_WIRE_ONE_SPI (L21 only) +x21e.menu.serial.four_uart_one_wire_one_spi.build.serialcom_uart=FOUR_UART +x21e.menu.serial.four_uart_one_wire_one_spi.build.serialcom_wire=ONE_WIRE +x21e.menu.serial.four_uart_one_wire_one_spi.build.serialcom_spi=ONE_SPI +x21e.menu.serial.five_uart_no_wire_one_spi=FIVE_UART_NO_WIRE_ONE_SPI (L21 only) +x21e.menu.serial.five_uart_no_wire_one_spi.build.serialcom_uart=FIVE_UART +x21e.menu.serial.five_uart_no_wire_one_spi.build.serialcom_wire=NO_WIRE +x21e.menu.serial.five_uart_no_wire_one_spi.build.serialcom_spi=ONE_SPI +x21e.menu.serial.five_uart_one_wire_no_spi=FIVE_UART_ONE_WIRE_NO_SPI (L21 only) +x21e.menu.serial.five_uart_one_wire_no_spi.build.serialcom_uart=FIVE_UART +x21e.menu.serial.five_uart_one_wire_no_spi.build.serialcom_wire=ONE_WIRE +x21e.menu.serial.five_uart_one_wire_no_spi.build.serialcom_spi=NO_SPI +x21e.menu.serial.six_uart=SIX_UART_NO_WIRE_NO_SPI (L21 only) +x21e.menu.serial.six_uart.build.serialcom_uart=SIX_UART +x21e.menu.serial.six_uart.build.serialcom_wire=NO_WIRE +x21e.menu.serial.six_uart.build.serialcom_spi=NO_SPI +x21e.menu.usb.cdc=CDC_ONLY +x21e.menu.usb.cdc.build.usbcom=CDC_ONLY +x21e.menu.usb.cdc.build.pid=0x4557 +x21e.menu.usb.cdc_hid=CDC_HID +x21e.menu.usb.cdc_hid.build.usbcom=CDC_HID +x21e.menu.usb.cdc_hid.build.pid=0x4856 +x21e.menu.usb.withcdc=WITH_CDC +x21e.menu.usb.withcdc.build.usbcom=WITH_CDC +x21e.menu.usb.withcdc.build.pid=0x4B41 +x21e.menu.usb.hid=HID_ONLY +x21e.menu.usb.hid.build.usbcom=HID_ONLY +x21e.menu.usb.hid.build.pid=0x4B40 +x21e.menu.usb.nocdc=WITHOUT_CDC +x21e.menu.usb.nocdc.build.usbcom=WITHOUT_CDC +x21e.menu.usb.nocdc.build.pid=0x4A0C +x21e.menu.usb.none=USB_DISABLED +x21e.menu.usb.none.build.usbcom=USB_DISABLED +x21e.menu.usb.none.build.pid=0x4856 + +# Generic x21G +x21g.name=Generic x21G +x21g.vid.0=0x16D0 +x21g.pid.0=0x5557 +x21g.vid.1=0x16D0 +x21g.pid.1=0x5856 +x21g.vid.2=0x16D0 +x21g.pid.2=0x5B41 +x21g.vid.3=0x16D0 +x21g.pid.3=0x5B40 +x21g.vid.4=0x16D0 +x21g.pid.4=0x5A0C +x21g.vid.5=0x16D0 +x21g.pid.5=0x5856 +x21g.build.usb_manufacturer="Fab Foundation" +x21g.build.board=SAMD_ZERO +x21g.build.core=arduino +x21g.build.variant=Generic_xx1G +x21g.build.variant_system_lib= +x21g.build.vid=0x16D0 +x21g.upload.protocol=sam-ba +x21g.bootloader.tool=arduino:openocd +x21g.menu.float.default=Print & String use auto-promoted doubles only +x21g.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY +x21g.menu.float.print=Print uses separate singles and doubles +x21g.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES +x21g.menu.float.string=String uses separate singles and doubles +x21g.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES +x21g.menu.float.both=Print & String use separate singles and doubles +x21g.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES +x21g.menu.config.disabled=config.h disabled +x21g.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED +x21g.menu.config.enabled=config.h enabled (mostly code size reductions) +x21g.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED +x21g.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR +x21g.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB +x21g.menu.clock.internal=INTERNAL_OSCILLATOR +x21g.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL +x21g.menu.clock.crystal_32k=32KHZ_CRYSTAL +x21g.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL +x21g.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL +x21g.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL +x21g.menu.timer.timer_732Hz=732.4Hz (16-bit) +x21g.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz +x21g.menu.timer.timer_366Hz=366.2Hz (16-bit) +x21g.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz +x21g.menu.timer.timer_244Hz=244.1Hz (16-bit) +x21g.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz +x21g.menu.timer.timer_183Hz=183.1Hz (16-bit) +x21g.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz +x21g.menu.timer.timer_146Hz=146.5Hz (16-bit) +x21g.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz +x21g.menu.timer.timer_122Hz=122.1Hz (16-bit) +x21g.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz +x21g.menu.timer.timer_105Hz=104.6Hz (16-bit) +x21g.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz +x21g.menu.timer.timer_81Hz=81.38Hz (16-bit) +x21g.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz +x21g.menu.timer.timer_61Hz=61.04Hz (16-bit) +x21g.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz +x21g.menu.timer.timer_31Hz=30.52Hz (16-bit) +x21g.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz +x21g.menu.timer.timer_187500Hz=187500Hz (8-bit) +x21g.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz +x21g.menu.timer.timer_93750Hz=93750Hz (8-bit) +x21g.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz +x21g.menu.timer.timer_62500Hz=62500Hz (8-bit) +x21g.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz +x21g.menu.timer.timer_37500Hz=37500Hz (8-bit) +x21g.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz +x21g.menu.timer.timer_20833Hz=20833Hz (8-bit) +x21g.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz +x21g.menu.timer.timer_12500Hz=12500Hz (8-bit) +x21g.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz +x21g.menu.timer.timer_7500Hz=7500Hz (8-bit) +x21g.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz +x21g.menu.timer.timer_4166Hz=4166Hz (8-bit) +x21g.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz +x21g.menu.timer.timer_2930Hz=2930Hz (8-bit) +x21g.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz +x21g.menu.timer.timer_1465Hz=1465Hz (8-bit) +x21g.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz +x21g.menu.cpu.samd21g17a=SAMD21G17A +x21g.menu.cpu.samd21g17a.upload.maximum_size=122880 +x21g.menu.cpu.samd21g17a.build.mcu=cortex-m0plus +x21g.menu.cpu.samd21g17a.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.samd21g17a.build.f_cpu=48000000L +x21g.menu.cpu.samd21g17a.build.usb_product="D21" +x21g.menu.cpu.samd21g17a.build.extra_flags=-D__SAMD21G17A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21g.menu.cpu.samd21g17a.build.ldscript=flash_128KB.ld +x21g.menu.cpu.samd21g17a.build.openocdscript=openocd_scripts/SAMD21G17A.cfg +x21g.menu.cpu.samd21g17a.bootloader.file=zero/binaries/sam_ba_SAMD21G17A.bin +x21g.menu.cpu.samd21g18a=SAMD21G18A +x21g.menu.cpu.samd21g18a.upload.maximum_size=253952 +x21g.menu.cpu.samd21g18a.build.mcu=cortex-m0plus +x21g.menu.cpu.samd21g18a.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.samd21g18a.build.f_cpu=48000000L +x21g.menu.cpu.samd21g18a.build.usb_product="D21" +x21g.menu.cpu.samd21g18a.build.extra_flags=-D__SAMD21G18A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21g.menu.cpu.samd21g18a.build.ldscript=flash_256KB.ld +x21g.menu.cpu.samd21g18a.build.openocdscript=openocd_scripts/SAMD21G18A.cfg +x21g.menu.cpu.samd21g18a.bootloader.file=zero/binaries/sam_ba_SAMD21G18A.bin +x21g.menu.cpu.samd21g15a=SAMD21G15A +x21g.menu.cpu.samd21g15a.upload.maximum_size=24576 +x21g.menu.cpu.samd21g15a.build.mcu=cortex-m0plus +x21g.menu.cpu.samd21g15a.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.samd21g15a.build.f_cpu=48000000L +x21g.menu.cpu.samd21g15a.build.usb_product="D21" +x21g.menu.cpu.samd21g15a.build.extra_flags=-D__SAMD21G15A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21g.menu.cpu.samd21g15a.build.ldscript=flash_32KB.ld +x21g.menu.cpu.samd21g15a.build.openocdscript=openocd_scripts/SAMD21G15A.cfg +x21g.menu.cpu.samd21g15a.bootloader.file=zero/binaries/sam_ba_SAMD21G15A.bin +x21g.menu.cpu.samd21g16a=SAMD21G16A +x21g.menu.cpu.samd21g16a.upload.maximum_size=57344 +x21g.menu.cpu.samd21g16a.build.mcu=cortex-m0plus +x21g.menu.cpu.samd21g16a.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.samd21g16a.build.f_cpu=48000000L +x21g.menu.cpu.samd21g16a.build.usb_product="D21" +x21g.menu.cpu.samd21g16a.build.extra_flags=-D__SAMD21G16A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21g.menu.cpu.samd21g16a.build.ldscript=flash_64KB.ld +x21g.menu.cpu.samd21g16a.build.openocdscript=openocd_scripts/SAMD21G16A.cfg +x21g.menu.cpu.samd21g16a.bootloader.file=zero/binaries/sam_ba_SAMD21G16A.bin +x21g.menu.cpu.saml21g17b=SAML21G17B +x21g.menu.cpu.saml21g17b.upload.maximum_size=122880 +x21g.menu.cpu.saml21g17b.build.mcu=cortex-m0plus +x21g.menu.cpu.saml21g17b.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.saml21g17b.build.f_cpu=48000000L +x21g.menu.cpu.saml21g17b.build.usb_product="L21" +x21g.menu.cpu.saml21g17b.build.extra_flags=-D__SAML21G17B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21g.menu.cpu.saml21g17b.build.ldscript=flash_128KB.ld +x21g.menu.cpu.saml21g17b.build.openocdscript=openocd_scripts/SAML21G17B.cfg +x21g.menu.cpu.saml21g17b.bootloader.file=zero/binaries/sam_ba_SAML21G17B.bin +x21g.menu.cpu.saml21g18b=SAML21G18B +x21g.menu.cpu.saml21g18b.upload.maximum_size=253952 +x21g.menu.cpu.saml21g18b.build.mcu=cortex-m0plus +x21g.menu.cpu.saml21g18b.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.saml21g18b.build.f_cpu=48000000L +x21g.menu.cpu.saml21g18b.build.usb_product="L21" +x21g.menu.cpu.saml21g18b.build.extra_flags=-D__SAML21G18B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21g.menu.cpu.saml21g18b.build.ldscript=flash_256KB.ld +x21g.menu.cpu.saml21g18b.build.openocdscript=openocd_scripts/SAML21G18B.cfg +x21g.menu.cpu.saml21g18b.bootloader.file=zero/binaries/sam_ba_SAML21G18B.bin +x21g.menu.cpu.saml21g15b=SAML21G15B +x21g.menu.cpu.saml21g15b.upload.maximum_size=24576 +x21g.menu.cpu.saml21g15b.build.mcu=cortex-m0plus +x21g.menu.cpu.saml21g15b.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.saml21g15b.build.f_cpu=48000000L +x21g.menu.cpu.saml21g15b.build.usb_product="L21" +x21g.menu.cpu.saml21g15b.build.extra_flags=-D__SAML21G15B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21g.menu.cpu.saml21g15b.build.ldscript=flash_32KB.ld +x21g.menu.cpu.saml21g15b.build.openocdscript=openocd_scripts/SAML21G15B.cfg +x21g.menu.cpu.saml21g15b.bootloader.file=zero/binaries/sam_ba_SAML21G15B.bin +x21g.menu.cpu.saml21g16b=SAML21G16B +x21g.menu.cpu.saml21g16b.upload.maximum_size=57344 +x21g.menu.cpu.saml21g16b.build.mcu=cortex-m0plus +x21g.menu.cpu.saml21g16b.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.saml21g16b.build.f_cpu=48000000L +x21g.menu.cpu.saml21g16b.build.usb_product="L21" +x21g.menu.cpu.saml21g16b.build.extra_flags=-D__SAML21G16B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21g.menu.cpu.saml21g16b.build.ldscript=flash_64KB.ld +x21g.menu.cpu.saml21g16b.build.openocdscript=openocd_scripts/SAML21G16B.cfg +x21g.menu.cpu.saml21g16b.bootloader.file=zero/binaries/sam_ba_SAML21G16B.bin +x21g.menu.cpu.samc21g17a=SAMC21G17A +x21g.menu.cpu.samc21g17a.upload.maximum_size=122880 +x21g.menu.cpu.samc21g17a.build.mcu=cortex-m0plus +x21g.menu.cpu.samc21g17a.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.samc21g17a.build.f_cpu=48000000L +x21g.menu.cpu.samc21g17a.build.usb_product="C21" +x21g.menu.cpu.samc21g17a.build.extra_flags=-D__SAMC21G17A__ -DARM_MATH_CM0PLUS +x21g.menu.cpu.samc21g17a.build.ldscript=flash_128KB.ld +x21g.menu.cpu.samc21g17a.build.openocdscript=openocd_scripts/SAMC21G17A.cfg +x21g.menu.cpu.samc21g17a.bootloader.file=zero/binaries/sam_ba_SAMC21G17A.bin +x21g.menu.cpu.samc21g18a=SAMC21G18A +x21g.menu.cpu.samc21g18a.upload.maximum_size=253952 +x21g.menu.cpu.samc21g18a.build.mcu=cortex-m0plus +x21g.menu.cpu.samc21g18a.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.samc21g18a.build.f_cpu=48000000L +x21g.menu.cpu.samc21g18a.build.usb_product="C21" +x21g.menu.cpu.samc21g18a.build.extra_flags=-D__SAMC21G18A__ -DARM_MATH_CM0PLUS +x21g.menu.cpu.samc21g18a.build.ldscript=flash_256KB.ld +x21g.menu.cpu.samc21g18a.build.openocdscript=openocd_scripts/SAMC21G18A.cfg +x21g.menu.cpu.samc21g18a.bootloader.file=zero/binaries/sam_ba_SAMC21G18A.bin +x21g.menu.cpu.samc21g15a=SAMC21G15A +x21g.menu.cpu.samc21g15a.upload.maximum_size=24576 +x21g.menu.cpu.samc21g15a.build.mcu=cortex-m0plus +x21g.menu.cpu.samc21g15a.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.samc21g15a.build.f_cpu=48000000L +x21g.menu.cpu.samc21g15a.build.usb_product="C21" +x21g.menu.cpu.samc21g15a.build.extra_flags=-D__SAMC21G15A__ -DARM_MATH_CM0PLUS +x21g.menu.cpu.samc21g15a.build.ldscript=flash_32KB.ld +x21g.menu.cpu.samc21g15a.build.openocdscript=openocd_scripts/SAMC21G15A.cfg +x21g.menu.cpu.samc21g15a.bootloader.file=zero/binaries/sam_ba_SAMC21G15A.bin +x21g.menu.cpu.samc21g16a=SAMC21G16A +x21g.menu.cpu.samc21g16a.upload.maximum_size=57344 +x21g.menu.cpu.samc21g16a.build.mcu=cortex-m0plus +x21g.menu.cpu.samc21g16a.build.mathlib=arm_cortexM0l_math +x21g.menu.cpu.samc21g16a.build.f_cpu=48000000L +x21g.menu.cpu.samc21g16a.build.usb_product="C21" +x21g.menu.cpu.samc21g16a.build.extra_flags=-D__SAMC21G16A__ -DARM_MATH_CM0PLUS +x21g.menu.cpu.samc21g16a.build.ldscript=flash_64KB.ld +x21g.menu.cpu.samc21g16a.build.openocdscript=openocd_scripts/SAMC21G16A.cfg +x21g.menu.cpu.samc21g16a.bootloader.file=zero/binaries/sam_ba_SAMC21G16A.bin +x21g.menu.bootloader.8kb=8KB_BOOTLOADER +x21g.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ +x21g.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader +x21g.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac +x21g.menu.bootloader.8kb.upload.use_1200bps_touch=true +x21g.menu.bootloader.8kb.upload.wait_for_upload_port=true +x21g.menu.bootloader.8kb.upload.native_usb=true +x21g.menu.bootloader.16kb=16KB_BOOTLOADER +x21g.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ +x21g.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader +x21g.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac +x21g.menu.bootloader.16kb.upload.use_1200bps_touch=true +x21g.menu.bootloader.16kb.upload.wait_for_upload_port=true +x21g.menu.bootloader.16kb.upload.native_usb=true +x21g.menu.bootloader.0kb=NO_BOOTLOADER +x21g.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ +x21g.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader +x21g.menu.bootloader.0kb.upload.tool=arduino:openocd +x21g.menu.bootloader.0kb.upload.use_1200bps_touch=false +x21g.menu.bootloader.0kb.upload.wait_for_upload_port=false +x21g.menu.bootloader.0kb.upload.native_usb=false +x21g.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI +x21g.menu.serial.one_uart.build.serialcom_uart=ONE_UART +x21g.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE +x21g.menu.serial.one_uart.build.serialcom_spi=ONE_SPI +x21g.menu.serial.one_uart_two_spi=ONE_UART_ONE_WIRE_TWO_SPI +x21g.menu.serial.one_uart_two_spi.build.serialcom_uart=ONE_UART +x21g.menu.serial.one_uart_two_spi.build.serialcom_wire=ONE_WIRE +x21g.menu.serial.one_uart_two_spi.build.serialcom_spi=TWO_SPI +x21g.menu.serial.one_uart_two_wire=ONE_UART_TWO_WIRE_ONE_SPI +x21g.menu.serial.one_uart_two_wire.build.serialcom_uart=ONE_UART +x21g.menu.serial.one_uart_two_wire.build.serialcom_wire=TWO_WIRE +x21g.menu.serial.one_uart_two_wire.build.serialcom_spi=ONE_SPI +x21g.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI +x21g.menu.serial.two_uart.build.serialcom_uart=TWO_UART +x21g.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE +x21g.menu.serial.two_uart.build.serialcom_spi=ONE_SPI +x21g.menu.serial.two_uart_two_spi=TWO_UART_ONE_WIRE_TWO_SPI +x21g.menu.serial.two_uart_two_spi.build.serialcom_uart=TWO_UART +x21g.menu.serial.two_uart_two_spi.build.serialcom_wire=ONE_WIRE +x21g.menu.serial.two_uart_two_spi.build.serialcom_spi=TWO_SPI +x21g.menu.serial.two_uart_two_wire=TWO_UART_TWO_WIRE_ONE_SPI +x21g.menu.serial.two_uart_two_wire.build.serialcom_uart=TWO_UART +x21g.menu.serial.two_uart_two_wire.build.serialcom_wire=TWO_WIRE +x21g.menu.serial.two_uart_two_wire.build.serialcom_spi=ONE_SPI +x21g.menu.serial.three_uart=THREE_UART_ONE_WIRE_ONE_SPI +x21g.menu.serial.three_uart.build.serialcom_uart=THREE_UART +x21g.menu.serial.three_uart.build.serialcom_wire=ONE_WIRE +x21g.menu.serial.three_uart.build.serialcom_spi=ONE_SPI +x21g.menu.serial.three_uart_two_spi=THREE_UART_ONE_WIRE_TWO_SPI +x21g.menu.serial.three_uart_two_spi.build.serialcom_uart=THREE_UART +x21g.menu.serial.three_uart_two_spi.build.serialcom_wire=ONE_WIRE +x21g.menu.serial.three_uart_two_spi.build.serialcom_spi=TWO_SPI +x21g.menu.serial.three_uart_two_wire=THREE_UART_TWO_WIRE_ONE_SPI +x21g.menu.serial.three_uart_two_wire.build.serialcom_uart=THREE_UART +x21g.menu.serial.three_uart_two_wire.build.serialcom_wire=TWO_WIRE +x21g.menu.serial.three_uart_two_wire.build.serialcom_spi=ONE_SPI +x21g.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI +x21g.menu.serial.no_uart.build.serialcom_uart=NO_UART +x21g.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE +x21g.menu.serial.no_uart.build.serialcom_spi=ONE_SPI +x21g.menu.usb.cdc=CDC_ONLY +x21g.menu.usb.cdc.build.usbcom=CDC_ONLY +x21g.menu.usb.cdc.build.pid=0x5557 +x21g.menu.usb.cdc_hid=CDC_HID +x21g.menu.usb.cdc_hid.build.usbcom=CDC_HID +x21g.menu.usb.cdc_hid.build.pid=0x5856 +x21g.menu.usb.withcdc=WITH_CDC +x21g.menu.usb.withcdc.build.usbcom=WITH_CDC +x21g.menu.usb.withcdc.build.pid=0x5B41 +x21g.menu.usb.hid=HID_ONLY +x21g.menu.usb.hid.build.usbcom=HID_ONLY +x21g.menu.usb.hid.build.pid=0x5B40 +x21g.menu.usb.nocdc=WITHOUT_CDC +x21g.menu.usb.nocdc.build.usbcom=WITHOUT_CDC +x21g.menu.usb.nocdc.build.pid=0x5A0C +x21g.menu.usb.none=USB_DISABLED +x21g.menu.usb.none.build.usbcom=USB_DISABLED +x21g.menu.usb.none.build.pid=0x5856 + +# Generic x21J +x21j.name=Generic x21J +x21j.vid.0=0x16D0 +x21j.pid.0=0x6557 +x21j.vid.1=0x16D0 +x21j.pid.1=0x6856 +x21j.vid.2=0x16D0 +x21j.pid.2=0x6B41 +x21j.vid.3=0x16D0 +x21j.pid.3=0x6B40 +x21j.vid.4=0x16D0 +x21j.pid.4=0x6A0C +x21j.vid.5=0x16D0 +x21j.pid.5=0x6856 +x21j.build.usb_manufacturer="Fab Foundation" +x21j.build.board=SAMD_ZERO +x21j.build.core=arduino +x21j.build.variant=Generic_xx1J +x21j.build.variant_system_lib= +x21j.build.vid=0x16D0 +x21j.upload.protocol=sam-ba +x21j.bootloader.tool=arduino:openocd +x21j.menu.float.default=Print & String use auto-promoted doubles only +x21j.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY +x21j.menu.float.print=Print uses separate singles and doubles +x21j.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES +x21j.menu.float.string=String uses separate singles and doubles +x21j.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES +x21j.menu.float.both=Print & String use separate singles and doubles +x21j.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES +x21j.menu.config.disabled=config.h disabled +x21j.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED +x21j.menu.config.enabled=config.h enabled (mostly code size reductions) +x21j.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED +x21j.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR +x21j.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB +x21j.menu.clock.internal=INTERNAL_OSCILLATOR +x21j.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL +x21j.menu.clock.crystal_32k=32KHZ_CRYSTAL +x21j.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL +x21j.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL +x21j.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL +x21j.menu.timer.timer_732Hz=732.4Hz (16-bit) +x21j.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz +x21j.menu.timer.timer_366Hz=366.2Hz (16-bit) +x21j.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz +x21j.menu.timer.timer_244Hz=244.1Hz (16-bit) +x21j.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz +x21j.menu.timer.timer_183Hz=183.1Hz (16-bit) +x21j.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz +x21j.menu.timer.timer_146Hz=146.5Hz (16-bit) +x21j.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz +x21j.menu.timer.timer_122Hz=122.1Hz (16-bit) +x21j.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz +x21j.menu.timer.timer_105Hz=104.6Hz (16-bit) +x21j.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz +x21j.menu.timer.timer_81Hz=81.38Hz (16-bit) +x21j.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz +x21j.menu.timer.timer_61Hz=61.04Hz (16-bit) +x21j.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz +x21j.menu.timer.timer_31Hz=30.52Hz (16-bit) +x21j.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz +x21j.menu.timer.timer_187500Hz=187500Hz (8-bit) +x21j.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz +x21j.menu.timer.timer_93750Hz=93750Hz (8-bit) +x21j.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz +x21j.menu.timer.timer_62500Hz=62500Hz (8-bit) +x21j.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz +x21j.menu.timer.timer_37500Hz=37500Hz (8-bit) +x21j.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz +x21j.menu.timer.timer_20833Hz=20833Hz (8-bit) +x21j.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz +x21j.menu.timer.timer_12500Hz=12500Hz (8-bit) +x21j.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz +x21j.menu.timer.timer_7500Hz=7500Hz (8-bit) +x21j.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz +x21j.menu.timer.timer_4166Hz=4166Hz (8-bit) +x21j.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz +x21j.menu.timer.timer_2930Hz=2930Hz (8-bit) +x21j.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz +x21j.menu.timer.timer_1465Hz=1465Hz (8-bit) +x21j.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz +x21j.menu.cpu.samd21j17a=SAMD21J17A +x21j.menu.cpu.samd21j17a.upload.maximum_size=122880 +x21j.menu.cpu.samd21j17a.build.mcu=cortex-m0plus +x21j.menu.cpu.samd21j17a.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.samd21j17a.build.f_cpu=48000000L +x21j.menu.cpu.samd21j17a.build.usb_product="Xeno D21" +x21j.menu.cpu.samd21j17a.build.extra_flags=-D__SAMD21J17A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21j.menu.cpu.samd21j17a.build.ldscript=flash_128KB.ld +x21j.menu.cpu.samd21j17a.build.openocdscript=openocd_scripts/SAMD21J17A.cfg +x21j.menu.cpu.samd21j17a.bootloader.file=zero/binaries/sam_ba_SAMD21J17A.bin +x21j.menu.cpu.samd21j18a=SAMD21J18A +x21j.menu.cpu.samd21j18a.upload.maximum_size=253952 +x21j.menu.cpu.samd21j18a.build.mcu=cortex-m0plus +x21j.menu.cpu.samd21j18a.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.samd21j18a.build.f_cpu=48000000L +x21j.menu.cpu.samd21j18a.build.usb_product="Xeno D21" +x21j.menu.cpu.samd21j18a.build.extra_flags=-D__SAMD21J18A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21j.menu.cpu.samd21j18a.build.ldscript=flash_256KB.ld +x21j.menu.cpu.samd21j18a.build.openocdscript=openocd_scripts/SAMD21J18A.cfg +x21j.menu.cpu.samd21j18a.bootloader.file=zero/binaries/sam_ba_SAMD21J18A.bin +x21j.menu.cpu.samd21j15a=SAMD21J15A +x21j.menu.cpu.samd21j15a.upload.maximum_size=24576 +x21j.menu.cpu.samd21j15a.build.mcu=cortex-m0plus +x21j.menu.cpu.samd21j15a.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.samd21j15a.build.f_cpu=48000000L +x21j.menu.cpu.samd21j15a.build.usb_product="Xeno D21" +x21j.menu.cpu.samd21j15a.build.extra_flags=-D__SAMD21J15A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21j.menu.cpu.samd21j15a.build.ldscript=flash_32KB.ld +x21j.menu.cpu.samd21j15a.build.openocdscript=openocd_scripts/SAMD21J15A.cfg +x21j.menu.cpu.samd21j15a.bootloader.file=zero/binaries/sam_ba_SAMD21J15A.bin +x21j.menu.cpu.samd21j16a=SAMD21J16A +x21j.menu.cpu.samd21j16a.upload.maximum_size=57344 +x21j.menu.cpu.samd21j16a.build.mcu=cortex-m0plus +x21j.menu.cpu.samd21j16a.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.samd21j16a.build.f_cpu=48000000L +x21j.menu.cpu.samd21j16a.build.usb_product="Xeno D21" +x21j.menu.cpu.samd21j16a.build.extra_flags=-D__SAMD21J16A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21j.menu.cpu.samd21j16a.build.ldscript=flash_64KB.ld +x21j.menu.cpu.samd21j16a.build.openocdscript=openocd_scripts/SAMD21J16A.cfg +x21j.menu.cpu.samd21j16a.bootloader.file=zero/binaries/sam_ba_SAMD21J16A.bin +x21j.menu.cpu.saml21j17b=SAML21J17B +x21j.menu.cpu.saml21j17b.upload.maximum_size=122880 +x21j.menu.cpu.saml21j17b.build.mcu=cortex-m0plus +x21j.menu.cpu.saml21j17b.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.saml21j17b.build.f_cpu=48000000L +x21j.menu.cpu.saml21j17b.build.usb_product="Xeno L21" +x21j.menu.cpu.saml21j17b.build.extra_flags=-D__SAML21J17B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21j.menu.cpu.saml21j17b.build.ldscript=flash_128KB.ld +x21j.menu.cpu.saml21j17b.build.openocdscript=openocd_scripts/SAML21J17B.cfg +x21j.menu.cpu.saml21j17b.bootloader.file=zero/binaries/sam_ba_SAML21J17B.bin +x21j.menu.cpu.saml21j18b=SAML21J18B +x21j.menu.cpu.saml21j18b.upload.maximum_size=253952 +x21j.menu.cpu.saml21j18b.build.mcu=cortex-m0plus +x21j.menu.cpu.saml21j18b.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.saml21j18b.build.f_cpu=48000000L +x21j.menu.cpu.saml21j18b.build.usb_product="Xeno L21" +x21j.menu.cpu.saml21j18b.build.extra_flags=-D__SAML21J18B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21j.menu.cpu.saml21j18b.build.ldscript=flash_256KB.ld +x21j.menu.cpu.saml21j18b.build.openocdscript=openocd_scripts/SAML21J18B.cfg +x21j.menu.cpu.saml21j18b.bootloader.file=zero/binaries/sam_ba_SAML21J18B.bin +x21j.menu.cpu.saml21j16b=SAML21J16B +x21j.menu.cpu.saml21j16b.upload.maximum_size=57344 +x21j.menu.cpu.saml21j16b.build.mcu=cortex-m0plus +x21j.menu.cpu.saml21j16b.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.saml21j16b.build.f_cpu=48000000L +x21j.menu.cpu.saml21j16b.build.usb_product="Xeno L21" +x21j.menu.cpu.saml21j16b.build.extra_flags=-D__SAML21J16B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21j.menu.cpu.saml21j16b.build.ldscript=flash_64KB.ld +x21j.menu.cpu.saml21j16b.build.openocdscript=openocd_scripts/SAML21J16B.cfg +x21j.menu.cpu.saml21j16b.bootloader.file=zero/binaries/sam_ba_SAML21J16B.bin +x21j.menu.cpu.samc21j17a=SAMC21J17A +x21j.menu.cpu.samc21j17a.upload.maximum_size=122880 +x21j.menu.cpu.samc21j17a.build.mcu=cortex-m0plus +x21j.menu.cpu.samc21j17a.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.samc21j17a.build.f_cpu=48000000L +x21j.menu.cpu.samc21j17a.build.usb_product="Xeno C21" +x21j.menu.cpu.samc21j17a.build.extra_flags=-D__SAMC21J17A__ -DARM_MATH_CM0PLUS +x21j.menu.cpu.samc21j17a.build.ldscript=flash_128KB.ld +x21j.menu.cpu.samc21j17a.build.openocdscript=openocd_scripts/SAMC21J17A.cfg +x21j.menu.cpu.samc21j17a.bootloader.file=zero/binaries/sam_ba_SAMC21J17A.bin +x21j.menu.cpu.samc21j18a=SAMC21J18A +x21j.menu.cpu.samc21j18a.upload.maximum_size=253952 +x21j.menu.cpu.samc21j18a.build.mcu=cortex-m0plus +x21j.menu.cpu.samc21j18a.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.samc21j18a.build.f_cpu=48000000L +x21j.menu.cpu.samc21j18a.build.usb_product="Xeno C21" +x21j.menu.cpu.samc21j18a.build.extra_flags=-D__SAMC21J18A__ -DARM_MATH_CM0PLUS +x21j.menu.cpu.samc21j18a.build.ldscript=flash_256KB.ld +x21j.menu.cpu.samc21j18a.build.openocdscript=openocd_scripts/SAMC21J18A.cfg +x21j.menu.cpu.samc21j18a.bootloader.file=zero/binaries/sam_ba_SAMC21J18A.bin +x21j.menu.cpu.samc21j15a=SAMC21J15A +x21j.menu.cpu.samc21j15a.upload.maximum_size=24576 +x21j.menu.cpu.samc21j15a.build.mcu=cortex-m0plus +x21j.menu.cpu.samc21j15a.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.samc21j15a.build.f_cpu=48000000L +x21j.menu.cpu.samc21j15a.build.usb_product="Xeno C21" +x21j.menu.cpu.samc21j15a.build.extra_flags=-D__SAMC21J15A__ -DARM_MATH_CM0PLUS +x21j.menu.cpu.samc21j15a.build.ldscript=flash_32KB.ld +x21j.menu.cpu.samc21j15a.build.openocdscript=openocd_scripts/SAMC21J15A.cfg +x21j.menu.cpu.samc21j15a.bootloader.file=zero/binaries/sam_ba_SAMC21J15A.bin +x21j.menu.cpu.samc21j16a=SAMC21J16A +x21j.menu.cpu.samc21j16a.upload.maximum_size=57344 +x21j.menu.cpu.samc21j16a.build.mcu=cortex-m0plus +x21j.menu.cpu.samc21j16a.build.mathlib=arm_cortexM0l_math +x21j.menu.cpu.samc21j16a.build.f_cpu=48000000L +x21j.menu.cpu.samc21j16a.build.usb_product="Xeno C21" +x21j.menu.cpu.samc21j16a.build.extra_flags=-D__SAMC21J16A__ -DARM_MATH_CM0PLUS +x21j.menu.cpu.samc21j16a.build.ldscript=flash_64KB.ld +x21j.menu.cpu.samc21j16a.build.openocdscript=openocd_scripts/SAMC21J16A.cfg +x21j.menu.cpu.samc21j16a.bootloader.file=zero/binaries/sam_ba_SAMC21J16A.bin +x21j.menu.bootloader.8kb=8KB_BOOTLOADER +x21j.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ +x21j.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader +x21j.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac +x21j.menu.bootloader.8kb.upload.use_1200bps_touch=true +x21j.menu.bootloader.8kb.upload.wait_for_upload_port=true +x21j.menu.bootloader.8kb.upload.native_usb=true +x21j.menu.bootloader.16kb=16KB_BOOTLOADER +x21j.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ +x21j.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader +x21j.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac +x21j.menu.bootloader.16kb.upload.use_1200bps_touch=true +x21j.menu.bootloader.16kb.upload.wait_for_upload_port=true +x21j.menu.bootloader.16kb.upload.native_usb=true +x21j.menu.bootloader.0kb=NO_BOOTLOADER +x21j.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ +x21j.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader +x21j.menu.bootloader.0kb.upload.tool=arduino:openocd +x21j.menu.bootloader.0kb.upload.use_1200bps_touch=false +x21j.menu.bootloader.0kb.upload.wait_for_upload_port=false +x21j.menu.bootloader.0kb.upload.native_usb=false +x21j.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI +x21j.menu.serial.one_uart.build.serialcom_uart=ONE_UART +x21j.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE +x21j.menu.serial.one_uart.build.serialcom_spi=ONE_SPI +x21j.menu.serial.one_uart_two_spi=ONE_UART_ONE_WIRE_TWO_SPI +x21j.menu.serial.one_uart_two_spi.build.serialcom_uart=ONE_UART +x21j.menu.serial.one_uart_two_spi.build.serialcom_wire=ONE_WIRE +x21j.menu.serial.one_uart_two_spi.build.serialcom_spi=TWO_SPI +x21j.menu.serial.one_uart_two_wire=ONE_UART_TWO_WIRE_ONE_SPI +x21j.menu.serial.one_uart_two_wire.build.serialcom_uart=ONE_UART +x21j.menu.serial.one_uart_two_wire.build.serialcom_wire=TWO_WIRE +x21j.menu.serial.one_uart_two_wire.build.serialcom_spi=ONE_SPI +x21j.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI +x21j.menu.serial.two_uart.build.serialcom_uart=TWO_UART +x21j.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE +x21j.menu.serial.two_uart.build.serialcom_spi=ONE_SPI +x21j.menu.serial.two_uart_two_spi=TWO_UART_ONE_WIRE_TWO_SPI +x21j.menu.serial.two_uart_two_spi.build.serialcom_uart=TWO_UART +x21j.menu.serial.two_uart_two_spi.build.serialcom_wire=ONE_WIRE +x21j.menu.serial.two_uart_two_spi.build.serialcom_spi=TWO_SPI +x21j.menu.serial.two_uart_two_wire=TWO_UART_TWO_WIRE_ONE_SPI +x21j.menu.serial.two_uart_two_wire.build.serialcom_uart=TWO_UART +x21j.menu.serial.two_uart_two_wire.build.serialcom_wire=TWO_WIRE +x21j.menu.serial.two_uart_two_wire.build.serialcom_spi=ONE_SPI +x21j.menu.serial.three_uart=THREE_UART_ONE_WIRE_ONE_SPI +x21j.menu.serial.three_uart.build.serialcom_uart=THREE_UART +x21j.menu.serial.three_uart.build.serialcom_wire=ONE_WIRE +x21j.menu.serial.three_uart.build.serialcom_spi=ONE_SPI +x21j.menu.serial.three_uart_two_spi=THREE_UART_ONE_WIRE_TWO_SPI +x21j.menu.serial.three_uart_two_spi.build.serialcom_uart=THREE_UART +x21j.menu.serial.three_uart_two_spi.build.serialcom_wire=ONE_WIRE +x21j.menu.serial.three_uart_two_spi.build.serialcom_spi=TWO_SPI +x21j.menu.serial.three_uart_two_wire=THREE_UART_TWO_WIRE_ONE_SPI +x21j.menu.serial.three_uart_two_wire.build.serialcom_uart=THREE_UART +x21j.menu.serial.three_uart_two_wire.build.serialcom_wire=TWO_WIRE +x21j.menu.serial.three_uart_two_wire.build.serialcom_spi=ONE_SPI +x21j.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI +x21j.menu.serial.no_uart.build.serialcom_uart=NO_UART +x21j.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE +x21j.menu.serial.no_uart.build.serialcom_spi=ONE_SPI +x21j.menu.usb.cdc=CDC_ONLY +x21j.menu.usb.cdc.build.usbcom=CDC_ONLY +x21j.menu.usb.cdc.build.pid=0x6557 +x21j.menu.usb.cdc_hid=CDC_HID +x21j.menu.usb.cdc_hid.build.usbcom=CDC_HID +x21j.menu.usb.cdc_hid.build.pid=0x6856 +x21j.menu.usb.withcdc=WITH_CDC +x21j.menu.usb.withcdc.build.usbcom=WITH_CDC +x21j.menu.usb.withcdc.build.pid=0x6B41 +x21j.menu.usb.hid=HID_ONLY +x21j.menu.usb.hid.build.usbcom=HID_ONLY +x21j.menu.usb.hid.build.pid=0x6B40 +x21j.menu.usb.nocdc=WITHOUT_CDC +x21j.menu.usb.nocdc.build.usbcom=WITHOUT_CDC +x21j.menu.usb.nocdc.build.pid=0x6A0C +x21j.menu.usb.none=USB_DISABLED +x21j.menu.usb.none.build.usbcom=USB_DISABLED +x21j.menu.usb.none.build.pid=0x6856 + +# Generic D51G +d51g.name=Generic D51G +d51g.vid.0=0x16D0 +d51g.pid.0=0x7557 +d51g.vid.1=0x16D0 +d51g.pid.1=0x7856 +d51g.vid.2=0x16D0 +d51g.pid.2=0x7B41 +d51g.vid.3=0x16D0 +d51g.pid.3=0x7B40 +d51g.vid.4=0x16D0 +d51g.pid.4=0x7A0C +d51g.vid.5=0x16D0 +d51g.pid.5=0x7856 +d51g.build.usb_manufacturer="Fab Foundation" +d51g.build.board=SAMD_ZERO +d51g.build.core=arduino +d51g.build.variant=Generic_D51G +d51g.build.variant_system_lib= +d51g.build.vid=0x16D0 +d51g.upload.protocol=sam-ba +d51g.bootloader.tool=arduino:openocd +d51g.menu.float.default=Print & String use auto-promoted doubles only +d51g.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY +d51g.menu.float.print=Print uses separate singles and doubles +d51g.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES +d51g.menu.float.string=String uses separate singles and doubles +d51g.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES +d51g.menu.float.both=Print & String use separate singles and doubles +d51g.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES +d51g.menu.config.disabled=config.h disabled +d51g.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED +d51g.menu.config.enabled=config.h enabled (mostly code size reductions) +d51g.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED +d51g.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR +d51g.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB +d51g.menu.clock.internal=INTERNAL_OSCILLATOR +d51g.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL +d51g.menu.clock.crystal_32k=32KHZ_CRYSTAL +d51g.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL +d51g.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL +d51g.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL +d51g.menu.timer.timer_732Hz=732.4Hz (16-bit) +d51g.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz +d51g.menu.timer.timer_366Hz=366.2Hz (16-bit) +d51g.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz +d51g.menu.timer.timer_244Hz=244.1Hz (16-bit) +d51g.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz +d51g.menu.timer.timer_183Hz=183.1Hz (16-bit) +d51g.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz +d51g.menu.timer.timer_146Hz=146.5Hz (16-bit) +d51g.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz +d51g.menu.timer.timer_122Hz=122.1Hz (16-bit) +d51g.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz +d51g.menu.timer.timer_105Hz=104.6Hz (16-bit) +d51g.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz +d51g.menu.timer.timer_81Hz=81.38Hz (16-bit) +d51g.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz +d51g.menu.timer.timer_61Hz=61.04Hz (16-bit) +d51g.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz +d51g.menu.timer.timer_31Hz=30.52Hz (16-bit) +d51g.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz +d51g.menu.timer.timer_187500Hz=187500Hz (8-bit) +d51g.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz +d51g.menu.timer.timer_93750Hz=93750Hz (8-bit) +d51g.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz +d51g.menu.timer.timer_62500Hz=62500Hz (8-bit) +d51g.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz +d51g.menu.timer.timer_37500Hz=37500Hz (8-bit) +d51g.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz +d51g.menu.timer.timer_20833Hz=20833Hz (8-bit) +d51g.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz +d51g.menu.timer.timer_12500Hz=12500Hz (8-bit) +d51g.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz +d51g.menu.timer.timer_7500Hz=7500Hz (8-bit) +d51g.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz +d51g.menu.timer.timer_4166Hz=4166Hz (8-bit) +d51g.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz +d51g.menu.timer.timer_2930Hz=2930Hz (8-bit) +d51g.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz +d51g.menu.timer.timer_1465Hz=1465Hz (16-bit) +d51g.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz +d51g.menu.cpu.samd51g18a_120=SAMD51G18A_120MHz +d51g.menu.cpu.samd51g18a_120.upload.maximum_size=253952 +d51g.menu.cpu.samd51g18a_120.build.mcu=cortex-m4 +d51g.menu.cpu.samd51g18a_120.build.mathlib=arm_cortexM4lf_math +d51g.menu.cpu.samd51g18a_120.build.f_cpu=120000000L +d51g.menu.cpu.samd51g18a_120.build.usb_product="Xeno Mini D51" +d51g.menu.cpu.samd51g18a_120.build.extra_flags=-D__SAMD51G18A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51g.menu.cpu.samd51g18a_120.build.ldscript=flash_m4f_256KB.ld +d51g.menu.cpu.samd51g18a_120.build.openocdscript=openocd_scripts/SAMD51G18A.cfg +d51g.menu.cpu.samd51g18a_120.bootloader.file=zero/binaries/sam_ba_SAMD51G18A.bin +d51g.menu.cpu.samd51g18a_48=SAMD51G18A_48MHz +d51g.menu.cpu.samd51g18a_48.upload.maximum_size=253952 +d51g.menu.cpu.samd51g18a_48.build.mcu=cortex-m4 +d51g.menu.cpu.samd51g18a_48.build.mathlib=arm_cortexM4lf_math +d51g.menu.cpu.samd51g18a_48.build.f_cpu=48000000L +d51g.menu.cpu.samd51g18a_48.build.usb_product="Xeno Mini D51" +d51g.menu.cpu.samd51g18a_48.build.extra_flags=-D__SAMD51G18A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51g.menu.cpu.samd51g18a_48.build.ldscript=flash_m4f_256KB.ld +d51g.menu.cpu.samd51g18a_48.build.openocdscript=openocd_scripts/SAMD51G18A.cfg +d51g.menu.cpu.samd51g18a_48.bootloader.file=zero/binaries/sam_ba_SAMD51G18A.bin +d51g.menu.cpu.samd51g19a_120=SAMD51G19A_120MHz +d51g.menu.cpu.samd51g19a_120.upload.maximum_size=516096 +d51g.menu.cpu.samd51g19a_120.build.mcu=cortex-m4 +d51g.menu.cpu.samd51g19a_120.build.mathlib=arm_cortexM4lf_math +d51g.menu.cpu.samd51g19a_120.build.f_cpu=120000000L +d51g.menu.cpu.samd51g19a_120.build.usb_product="Xeno Mini D51" +d51g.menu.cpu.samd51g19a_120.build.extra_flags=-D__SAMD51G19A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51g.menu.cpu.samd51g19a_120.build.ldscript=flash_m4f_512KB.ld +d51g.menu.cpu.samd51g19a_120.build.openocdscript=openocd_scripts/SAMD51G19A.cfg +d51g.menu.cpu.samd51g19a_120.bootloader.file=zero/binaries/sam_ba_SAMD51G19A.bin +d51g.menu.cpu.samd51g19a_48=SAMD51G19A_48MHz +d51g.menu.cpu.samd51g19a_48.upload.maximum_size=516096 +d51g.menu.cpu.samd51g19a_48.build.mcu=cortex-m4 +d51g.menu.cpu.samd51g19a_48.build.mathlib=arm_cortexM4lf_math +d51g.menu.cpu.samd51g19a_48.build.f_cpu=48000000L +d51g.menu.cpu.samd51g19a_48.build.usb_product="Xeno Mini D51" +d51g.menu.cpu.samd51g19a_48.build.extra_flags=-D__SAMD51G19A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51g.menu.cpu.samd51g19a_48.build.ldscript=flash_m4f_512KB.ld +d51g.menu.cpu.samd51g19a_48.build.openocdscript=openocd_scripts/SAMD51G19A.cfg +d51g.menu.cpu.samd51g19a_48.bootloader.file=zero/binaries/sam_ba_SAMD51G19A.bin +d51g.menu.bootloader.8kb=8KB_BOOTLOADER +d51g.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ +d51g.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader +d51g.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac +d51g.menu.bootloader.8kb.upload.use_1200bps_touch=true +d51g.menu.bootloader.8kb.upload.wait_for_upload_port=true +d51g.menu.bootloader.8kb.upload.native_usb=true +d51g.menu.bootloader.16kb=16KB_BOOTLOADER +d51g.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ +d51g.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader +d51g.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac +d51g.menu.bootloader.16kb.upload.use_1200bps_touch=true +d51g.menu.bootloader.16kb.upload.wait_for_upload_port=true +d51g.menu.bootloader.16kb.upload.native_usb=true +d51g.menu.bootloader.0kb=NO_BOOTLOADER +d51g.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ +d51g.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader +d51g.menu.bootloader.0kb.upload.tool=arduino:openocd +d51g.menu.bootloader.0kb.upload.use_1200bps_touch=false +d51g.menu.bootloader.0kb.upload.wait_for_upload_port=false +d51g.menu.bootloader.0kb.upload.native_usb=false +d51g.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI +d51g.menu.serial.one_uart.build.serialcom_uart=ONE_UART +d51g.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE +d51g.menu.serial.one_uart.build.serialcom_spi=ONE_SPI +d51g.menu.serial.one_uart_two_spi=ONE_UART_ONE_WIRE_TWO_SPI +d51g.menu.serial.one_uart_two_spi.build.serialcom_uart=ONE_UART +d51g.menu.serial.one_uart_two_spi.build.serialcom_wire=ONE_WIRE +d51g.menu.serial.one_uart_two_spi.build.serialcom_spi=TWO_SPI +d51g.menu.serial.one_uart_two_wire=ONE_UART_TWO_WIRE_ONE_SPI +d51g.menu.serial.one_uart_two_wire.build.serialcom_uart=ONE_UART +d51g.menu.serial.one_uart_two_wire.build.serialcom_wire=TWO_WIRE +d51g.menu.serial.one_uart_two_wire.build.serialcom_spi=ONE_SPI +d51g.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI +d51g.menu.serial.two_uart.build.serialcom_uart=TWO_UART +d51g.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE +d51g.menu.serial.two_uart.build.serialcom_spi=ONE_SPI +d51g.menu.serial.two_uart_two_spi=TWO_UART_ONE_WIRE_TWO_SPI +d51g.menu.serial.two_uart_two_spi.build.serialcom_uart=TWO_UART +d51g.menu.serial.two_uart_two_spi.build.serialcom_wire=ONE_WIRE +d51g.menu.serial.two_uart_two_spi.build.serialcom_spi=TWO_SPI +d51g.menu.serial.two_uart_two_wire=TWO_UART_TWO_WIRE_ONE_SPI +d51g.menu.serial.two_uart_two_wire.build.serialcom_uart=TWO_UART +d51g.menu.serial.two_uart_two_wire.build.serialcom_wire=TWO_WIRE +d51g.menu.serial.two_uart_two_wire.build.serialcom_spi=ONE_SPI +d51g.menu.serial.three_uart=THREE_UART_ONE_WIRE_ONE_SPI +d51g.menu.serial.three_uart.build.serialcom_uart=THREE_UART +d51g.menu.serial.three_uart.build.serialcom_wire=ONE_WIRE +d51g.menu.serial.three_uart.build.serialcom_spi=ONE_SPI +d51g.menu.serial.three_uart_two_spi=THREE_UART_ONE_WIRE_TWO_SPI +d51g.menu.serial.three_uart_two_spi.build.serialcom_uart=THREE_UART +d51g.menu.serial.three_uart_two_spi.build.serialcom_wire=ONE_WIRE +d51g.menu.serial.three_uart_two_spi.build.serialcom_spi=TWO_SPI +d51g.menu.serial.three_uart_two_wire=THREE_UART_TWO_WIRE_ONE_SPI +d51g.menu.serial.three_uart_two_wire.build.serialcom_uart=THREE_UART +d51g.menu.serial.three_uart_two_wire.build.serialcom_wire=TWO_WIRE +d51g.menu.serial.three_uart_two_wire.build.serialcom_spi=ONE_SPI +d51g.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI +d51g.menu.serial.no_uart.build.serialcom_uart=NO_UART +d51g.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE +d51g.menu.serial.no_uart.build.serialcom_spi=ONE_SPI +d51g.menu.usb.cdc=CDC_ONLY +d51g.menu.usb.cdc.build.usbcom=CDC_ONLY +d51g.menu.usb.cdc.build.pid=0x7557 +d51g.menu.usb.cdc_hid=CDC_HID +d51g.menu.usb.cdc_hid.build.usbcom=CDC_HID +d51g.menu.usb.cdc_hid.build.pid=0x7856 +d51g.menu.usb.withcdc=WITH_CDC +d51g.menu.usb.withcdc.build.usbcom=WITH_CDC +d51g.menu.usb.withcdc.build.pid=0x7B41 +d51g.menu.usb.hid=HID_ONLY +d51g.menu.usb.hid.build.usbcom=HID_ONLY +d51g.menu.usb.hid.build.pid=0x7B40 +d51g.menu.usb.nocdc=WITHOUT_CDC +d51g.menu.usb.nocdc.build.usbcom=WITHOUT_CDC +d51g.menu.usb.nocdc.build.pid=0x7A0C +d51g.menu.usb.none=USB_DISABLED +d51g.menu.usb.none.build.usbcom=USB_DISABLED +d51g.menu.usb.none.build.pid=0x7856 + +# Generic D51J +d51j.name=Generic D51J +d51j.vid.0=0x16D0 +d51j.pid.0=0x8557 +d51j.vid.1=0x16D0 +d51j.pid.1=0x8856 +d51j.vid.2=0x16D0 +d51j.pid.2=0x8B41 +d51j.vid.3=0x16D0 +d51j.pid.3=0x8B40 +d51j.vid.4=0x16D0 +d51j.pid.4=0x8A0C +d51j.vid.5=0x16D0 +d51j.pid.5=0x8856 +d51j.build.usb_manufacturer="Fab Foundation" +d51j.build.board=SAMD_ZERO +d51j.build.core=arduino +d51j.build.variant=Generic_xx1J +d51j.build.variant_system_lib= +d51j.build.vid=0x16D0 +d51j.upload.protocol=sam-ba +d51j.bootloader.tool=arduino:openocd +d51j.menu.float.default=Print & String use auto-promoted doubles only +d51j.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY +d51j.menu.float.print=Print uses separate singles and doubles +d51j.menu.float.print.build.floatconfig=FLOAT_PRINT_SINGLES_DOUBLES +d51j.menu.float.string=String uses separate singles and doubles +d51j.menu.float.string.build.floatconfig=FLOAT_STRING_SINGLES_DOUBLES +d51j.menu.float.both=Print & String use separate singles and doubles +d51j.menu.float.both.build.floatconfig=FLOAT_BOTH_SINGLES_DOUBLES +d51j.menu.config.disabled=config.h disabled +d51j.menu.config.disabled.build.buildconfig=CONFIG_H_DISABLED +d51j.menu.config.enabled=config.h enabled (mostly code size reductions) +d51j.menu.config.enabled.build.buildconfig=CONFIG_H_ENABLED +d51j.menu.clock.internal_usb=INTERNAL_USB_CALIBRATED_OSCILLATOR +d51j.menu.clock.internal_usb.build.clockconfig=CLOCKCONFIG_INTERNAL_USB +d51j.menu.clock.internal=INTERNAL_OSCILLATOR +d51j.menu.clock.internal.build.clockconfig=CLOCKCONFIG_INTERNAL +d51j.menu.clock.crystal_32k=32KHZ_CRYSTAL +d51j.menu.clock.crystal_32k.build.clockconfig=CLOCKCONFIG_32768HZ_CRYSTAL +d51j.menu.clock.crystal_hs=HIGH_SPEED_CRYSTAL +d51j.menu.clock.crystal_hs.build.clockconfig=CLOCKCONFIG_HS_CRYSTAL +d51j.menu.timer.timer_732Hz=732.4Hz (16-bit) +d51j.menu.timer.timer_732Hz.build.timerconfig=TIMER_732Hz +d51j.menu.timer.timer_366Hz=366.2Hz (16-bit) +d51j.menu.timer.timer_366Hz.build.timerconfig=TIMER_366Hz +d51j.menu.timer.timer_244Hz=244.1Hz (16-bit) +d51j.menu.timer.timer_244Hz.build.timerconfig=TIMER_244Hz +d51j.menu.timer.timer_183Hz=183.1Hz (16-bit) +d51j.menu.timer.timer_183Hz.build.timerconfig=TIMER_183Hz +d51j.menu.timer.timer_146Hz=146.5Hz (16-bit) +d51j.menu.timer.timer_146Hz.build.timerconfig=TIMER_146Hz +d51j.menu.timer.timer_122Hz=122.1Hz (16-bit) +d51j.menu.timer.timer_122Hz.build.timerconfig=TIMER_122Hz +d51j.menu.timer.timer_105Hz=104.6Hz (16-bit) +d51j.menu.timer.timer_105Hz.build.timerconfig=TIMER_105Hz +d51j.menu.timer.timer_81Hz=81.38Hz (16-bit) +d51j.menu.timer.timer_81Hz.build.timerconfig=TIMER_81Hz +d51j.menu.timer.timer_61Hz=61.04Hz (16-bit) +d51j.menu.timer.timer_61Hz.build.timerconfig=TIMER_61Hz +d51j.menu.timer.timer_31Hz=30.52Hz (16-bit) +d51j.menu.timer.timer_31Hz.build.timerconfig=TIMER_31Hz +d51j.menu.timer.timer_187500Hz=187500Hz (8-bit) +d51j.menu.timer.timer_187500Hz.build.timerconfig=TIMER_187500Hz +d51j.menu.timer.timer_93750Hz=93750Hz (8-bit) +d51j.menu.timer.timer_93750Hz.build.timerconfig=TIMER_93750Hz +d51j.menu.timer.timer_62500Hz=62500Hz (8-bit) +d51j.menu.timer.timer_62500Hz.build.timerconfig=TIMER_62500Hz +d51j.menu.timer.timer_37500Hz=37500Hz (8-bit) +d51j.menu.timer.timer_37500Hz.build.timerconfig=TIMER_37500Hz +d51j.menu.timer.timer_20833Hz=20833Hz (8-bit) +d51j.menu.timer.timer_20833Hz.build.timerconfig=TIMER_20833Hz +d51j.menu.timer.timer_12500Hz=12500Hz (8-bit) +d51j.menu.timer.timer_12500Hz.build.timerconfig=TIMER_12500Hz +d51j.menu.timer.timer_7500Hz=7500Hz (8-bit) +d51j.menu.timer.timer_7500Hz.build.timerconfig=TIMER_7500Hz +d51j.menu.timer.timer_4166Hz=4166Hz (8-bit) +d51j.menu.timer.timer_4166Hz.build.timerconfig=TIMER_4166Hz +d51j.menu.timer.timer_2930Hz=2930Hz (8-bit) +d51j.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz +d51j.menu.timer.timer_1465Hz=1465Hz (16-bit) +d51j.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz +d51j.menu.cpu.samd51j18a_120=SAMD51J18A_120MHz +d51j.menu.cpu.samd51j18a_120.upload.maximum_size=253952 +d51j.menu.cpu.samd51j18a_120.build.mcu=cortex-m4 +d51j.menu.cpu.samd51j18a_120.build.mathlib=arm_cortexM4lf_math +d51j.menu.cpu.samd51j18a_120.build.f_cpu=120000000L +d51j.menu.cpu.samd51j18a_120.build.usb_product="Xeno D51" +d51j.menu.cpu.samd51j18a_120.build.extra_flags=-D__SAMD51J18A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51j.menu.cpu.samd51j18a_120.build.ldscript=flash_m4f_256KB.ld +d51j.menu.cpu.samd51j18a_120.build.openocdscript=openocd_scripts/SAMD51J18A.cfg +d51j.menu.cpu.samd51j18a_120.bootloader.file=zero/binaries/sam_ba_SAMD51J18A.bin +d51j.menu.cpu.samd51j18a_48=SAMD51J18A_48MHz +d51j.menu.cpu.samd51j18a_48.upload.maximum_size=253952 +d51j.menu.cpu.samd51j18a_48.build.mcu=cortex-m4 +d51j.menu.cpu.samd51j18a_48.build.mathlib=arm_cortexM4lf_math +d51j.menu.cpu.samd51j18a_48.build.f_cpu=48000000L +d51j.menu.cpu.samd51j18a_48.build.usb_product="Xeno D51" +d51j.menu.cpu.samd51j18a_48.build.extra_flags=-D__SAMD51J18A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51j.menu.cpu.samd51j18a_48.build.ldscript=flash_m4f_256KB.ld +d51j.menu.cpu.samd51j18a_48.build.openocdscript=openocd_scripts/SAMD51J18A.cfg +d51j.menu.cpu.samd51j18a_48.bootloader.file=zero/binaries/sam_ba_SAMD51J18A.bin +d51j.menu.cpu.samd51j19a_120=SAMD51J19A_120MHz +d51j.menu.cpu.samd51j19a_120.upload.maximum_size=516096 +d51j.menu.cpu.samd51j19a_120.build.mcu=cortex-m4 +d51j.menu.cpu.samd51j19a_120.build.mathlib=arm_cortexM4lf_math +d51j.menu.cpu.samd51j19a_120.build.f_cpu=120000000L +d51j.menu.cpu.samd51j19a_120.build.usb_product="Xeno D51" +d51j.menu.cpu.samd51j19a_120.build.extra_flags=-D__SAMD51J19A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51j.menu.cpu.samd51j19a_120.build.ldscript=flash_m4f_512KB.ld +d51j.menu.cpu.samd51j19a_120.build.openocdscript=openocd_scripts/SAMD51J19A.cfg +d51j.menu.cpu.samd51j19a_120.bootloader.file=zero/binaries/sam_ba_SAMD51J19A.bin +d51j.menu.cpu.samd51j19a_48=SAMD51J19A_48MHz +d51j.menu.cpu.samd51j19a_48.upload.maximum_size=516096 +d51j.menu.cpu.samd51j19a_48.build.mcu=cortex-m4 +d51j.menu.cpu.samd51j19a_48.build.mathlib=arm_cortexM4lf_math +d51j.menu.cpu.samd51j19a_48.build.f_cpu=48000000L +d51j.menu.cpu.samd51j19a_48.build.usb_product="Xeno D51" +d51j.menu.cpu.samd51j19a_48.build.extra_flags=-D__SAMD51J19A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51j.menu.cpu.samd51j19a_48.build.ldscript=flash_m4f_512KB.ld +d51j.menu.cpu.samd51j19a_48.build.openocdscript=openocd_scripts/SAMD51J19A.cfg +d51j.menu.cpu.samd51j19a_48.bootloader.file=zero/binaries/sam_ba_SAMD51J19A.bin +d51j.menu.cpu.samd51j20a_120=SAMD51J20A_120MHz +d51j.menu.cpu.samd51j20a_120.upload.maximum_size=1040384 +d51j.menu.cpu.samd51j20a_120.build.mcu=cortex-m4 +d51j.menu.cpu.samd51j20a_120.build.mathlib=arm_cortexM4lf_math +d51j.menu.cpu.samd51j20a_120.build.f_cpu=120000000L +d51j.menu.cpu.samd51j20a_120.build.usb_product="Xeno D51" +d51j.menu.cpu.samd51j20a_120.build.extra_flags=-D__SAMD51J20A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51j.menu.cpu.samd51j20a_120.build.ldscript=flash_m4f_1MB.ld +d51j.menu.cpu.samd51j20a_120.build.openocdscript=openocd_scripts/SAMD51J20A.cfg +d51j.menu.cpu.samd51j20a_120.bootloader.file=zero/binaries/sam_ba_SAMD51J20A.bin +d51j.menu.cpu.samd51j20a_48=SAMD51J20A_48MHz +d51j.menu.cpu.samd51j20a_48.upload.maximum_size=1040384 +d51j.menu.cpu.samd51j20a_48.build.mcu=cortex-m4 +d51j.menu.cpu.samd51j20a_48.build.mathlib=arm_cortexM4lf_math +d51j.menu.cpu.samd51j20a_48.build.f_cpu=48000000L +d51j.menu.cpu.samd51j20a_48.build.usb_product="Xeno D51" +d51j.menu.cpu.samd51j20a_48.build.extra_flags=-D__SAMD51J20A__ {build.usb_flags} -mfloat-abi=softfp -mfpu=fpv4-sp-d16 -DARM_MATH_CM4 +d51j.menu.cpu.samd51j20a_48.build.ldscript=flash_m4f_1MB.ld +d51j.menu.cpu.samd51j20a_48.build.openocdscript=openocd_scripts/SAMD51J20A.cfg +d51j.menu.cpu.samd51j20a_48.bootloader.file=zero/binaries/sam_ba_SAMD51J20A.bin +d51j.menu.bootloader.8kb=8KB_BOOTLOADER +d51j.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ +d51j.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader +d51j.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac +d51j.menu.bootloader.8kb.upload.use_1200bps_touch=true +d51j.menu.bootloader.8kb.upload.wait_for_upload_port=true +d51j.menu.bootloader.8kb.upload.native_usb=true +d51j.menu.bootloader.16kb=16KB_BOOTLOADER +d51j.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ +d51j.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader +d51j.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac +d51j.menu.bootloader.16kb.upload.use_1200bps_touch=true +d51j.menu.bootloader.16kb.upload.wait_for_upload_port=true +d51j.menu.bootloader.16kb.upload.native_usb=true +d51j.menu.bootloader.0kb=NO_BOOTLOADER +d51j.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ +d51j.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader +d51j.menu.bootloader.0kb.upload.tool=arduino:openocd +d51j.menu.bootloader.0kb.upload.use_1200bps_touch=false +d51j.menu.bootloader.0kb.upload.wait_for_upload_port=false +d51j.menu.bootloader.0kb.upload.native_usb=false +d51j.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI +d51j.menu.serial.one_uart.build.serialcom_uart=ONE_UART +d51j.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE +d51j.menu.serial.one_uart.build.serialcom_spi=ONE_SPI +d51j.menu.serial.one_uart_two_spi=ONE_UART_ONE_WIRE_TWO_SPI +d51j.menu.serial.one_uart_two_spi.build.serialcom_uart=ONE_UART +d51j.menu.serial.one_uart_two_spi.build.serialcom_wire=ONE_WIRE +d51j.menu.serial.one_uart_two_spi.build.serialcom_spi=TWO_SPI +d51j.menu.serial.one_uart_two_wire=ONE_UART_TWO_WIRE_ONE_SPI +d51j.menu.serial.one_uart_two_wire.build.serialcom_uart=ONE_UART +d51j.menu.serial.one_uart_two_wire.build.serialcom_wire=TWO_WIRE +d51j.menu.serial.one_uart_two_wire.build.serialcom_spi=ONE_SPI +d51j.menu.serial.two_uart=TWO_UART_ONE_WIRE_ONE_SPI +d51j.menu.serial.two_uart.build.serialcom_uart=TWO_UART +d51j.menu.serial.two_uart.build.serialcom_wire=ONE_WIRE +d51j.menu.serial.two_uart.build.serialcom_spi=ONE_SPI +d51j.menu.serial.two_uart_two_spi=TWO_UART_ONE_WIRE_TWO_SPI +d51j.menu.serial.two_uart_two_spi.build.serialcom_uart=TWO_UART +d51j.menu.serial.two_uart_two_spi.build.serialcom_wire=ONE_WIRE +d51j.menu.serial.two_uart_two_spi.build.serialcom_spi=TWO_SPI +d51j.menu.serial.two_uart_two_wire=TWO_UART_TWO_WIRE_ONE_SPI +d51j.menu.serial.two_uart_two_wire.build.serialcom_uart=TWO_UART +d51j.menu.serial.two_uart_two_wire.build.serialcom_wire=TWO_WIRE +d51j.menu.serial.two_uart_two_wire.build.serialcom_spi=ONE_SPI +d51j.menu.serial.three_uart=THREE_UART_ONE_WIRE_ONE_SPI +d51j.menu.serial.three_uart.build.serialcom_uart=THREE_UART +d51j.menu.serial.three_uart.build.serialcom_wire=ONE_WIRE +d51j.menu.serial.three_uart.build.serialcom_spi=ONE_SPI +d51j.menu.serial.three_uart_two_spi=THREE_UART_ONE_WIRE_TWO_SPI +d51j.menu.serial.three_uart_two_spi.build.serialcom_uart=THREE_UART +d51j.menu.serial.three_uart_two_spi.build.serialcom_wire=ONE_WIRE +d51j.menu.serial.three_uart_two_spi.build.serialcom_spi=TWO_SPI +d51j.menu.serial.three_uart_two_wire=THREE_UART_TWO_WIRE_ONE_SPI +d51j.menu.serial.three_uart_two_wire.build.serialcom_uart=THREE_UART +d51j.menu.serial.three_uart_two_wire.build.serialcom_wire=TWO_WIRE +d51j.menu.serial.three_uart_two_wire.build.serialcom_spi=ONE_SPI +d51j.menu.serial.no_uart=NO_UART_ONE_WIRE_ONE_SPI +d51j.menu.serial.no_uart.build.serialcom_uart=NO_UART +d51j.menu.serial.no_uart.build.serialcom_wire=ONE_WIRE +d51j.menu.serial.no_uart.build.serialcom_spi=ONE_SPI +d51j.menu.usb.cdc=CDC_ONLY +d51j.menu.usb.cdc.build.usbcom=CDC_ONLY +d51j.menu.usb.cdc.build.pid=0x8557 +d51j.menu.usb.cdc_hid=CDC_HID +d51j.menu.usb.cdc_hid.build.usbcom=CDC_HID +d51j.menu.usb.cdc_hid.build.pid=0x8856 +d51j.menu.usb.withcdc=WITH_CDC +d51j.menu.usb.withcdc.build.usbcom=WITH_CDC +d51j.menu.usb.withcdc.build.pid=0x8B41 +d51j.menu.usb.hid=HID_ONLY +d51j.menu.usb.hid.build.usbcom=HID_ONLY +d51j.menu.usb.hid.build.pid=0x8B40 +d51j.menu.usb.nocdc=WITHOUT_CDC +d51j.menu.usb.nocdc.build.usbcom=WITHOUT_CDC +d51j.menu.usb.nocdc.build.pid=0x8A0C +d51j.menu.usb.none=USB_DISABLED +d51j.menu.usb.none.build.usbcom=USB_DISABLED +d51j.menu.usb.none.build.pid=0x8856 diff --git a/bootloaders/zero/Makefile b/bootloaders/zero/Makefile index b3f7e014f..5ae277028 100644 --- a/bootloaders/zero/Makefile +++ b/bootloaders/zero/Makefile @@ -28,7 +28,7 @@ SDCARD?=SDCARD_DISABLED # Xeno, Xeno_Mini, MT_D21E_rev_A, MT_D21E_rev_B, MT_D11 # arduino_zero, arduino_mkrzero, arduino_mkr1000, arduino_mkrfox1200, genuino_mkr1000, genuino_zero, arduino_m0, arduino_m0_pro # Generic_x21E, Generic_x21G, Generic_x21J, Generic_D11D14AM, Generic_D11D14AS, Generic_D11C14A -BOARD_ID?=Xeno_Mini +BOARD_ID?=Generic_x21E # ----------------------------------------------------------------------------- # MCU definitions: @@ -46,7 +46,7 @@ BOARD_ID?=Xeno_Mini # SAMD51J: SAMD51J18A, SAMD51J19A, SAMD51J20A # SAMD51N: SAMD51N19A, SAMD51N20A # SAMD51P: SAMD51P19A, SAMD51P20A -MCU?=SAMD51G19A +MCU?=SAMD21E17A # Note that the makefile can be invoked with values that override the above settings. # For example: BOARD_ID=Generic_D11C14A MCU=SAMD11C14A SDCARD=SDCARD_DISABLED make @@ -54,9 +54,9 @@ MCU?=SAMD51G19A # End Config ############################### ifeq ($(findstring ENABLED,$(SDCARD)),ENABLED) -NAME=sam_ba_sdcard_$(BOARD_ID)_$(MCU) +NAME=sam_ba_sdcard_$(MCU) else -NAME=sam_ba_$(BOARD_ID)_$(MCU) +NAME=sam_ba_$(MCU) endif ifeq ($(findstring 20,$(MCU)),20) @@ -90,7 +90,7 @@ MCPU=cortex-m0plus endif # CORE_VENDOR?=arduino -CORE_VENDOR?=MattairTech_Arduino +CORE_VENDOR?=Fab_SAM_Arduino # ----------------------------------------------------------------------------- # Paths diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMC21G15A.bin b/bootloaders/zero/binaries/sam_ba_SAMC21E15A.bin old mode 100755 new mode 100644 similarity index 69% rename from bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMC21G15A.bin rename to bootloaders/zero/binaries/sam_ba_SAMC21E15A.bin index 05d4c1f91df4fa527b5b238544e5f888bd6f15fd..2708da5b79315cdfd8f4cba8c8b71d3b942fbb43 GIT binary patch delta 301 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 delta 340 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 delta 621 zcmXYuUr19?9LIm>x_RfFvrX~O=sM5cLM<(JZ`vOzaQBvt-C2aeOo%pZum$CCA`6L0 zFHPzpIX#SE(942?0+aa=Spy#;D%gU+%F$j#dJrZOoBvuz>EUy}=l45beth|zxFv0Q zbOzm>IopPoXZ#)Xn7M-rM32s!HZ}z(6bhTzC8$GFP_Pjn3L=qwLVomzh|F{JbnYkP zLBgAoNez3UFkiCXG^%yIw&4of9IaoK4Ey~TWI)p&ZFX6lq0~KDlWlf2t3>Y1a(UkU zST1J3mTij38{bz3HOCF!(rS~+Sciri)e2!LQhg|<7?q_^E~3LpMXTgOwW_@}F_}_u zYqydJCnl3hyAlt_Cu0huJPAX=Q_|##y!;geW^rrv?t^BQjwkyWk1Jkd|#S}@hv#gVP%Ejw**K|>2dRPOXqZ1=k zZ%_hct*WIix6S7FOu?NBsz@johe!)&Mjyy&?qEII!I6fAbYC?MU`(;@Jts?o+|jo9 zHs*~Bd;L&K=dR>2Z=i20TVRXJ+6)ee{1IAzAq!liIZL~3d>0>=xeRo&nZvx5KSiUb z$Qsu{zrw6vWa{72NK2G=lr-ftaiZu`B+O0Cu|-xZuC-9}AA)0Z0Ei zQB=e(2S66o2vet%ieD<2^5Yp(tSumsK% diff --git a/bootloaders/zero/binaries/sam_ba_Generic_D11D14AM_SAMD11D14AM.bin b/bootloaders/zero/binaries/sam_ba_SAMD11D14AM.bin old mode 100755 new mode 100644 similarity index 58% rename from bootloaders/zero/binaries/sam_ba_Generic_D11D14AM_SAMD11D14AM.bin rename to bootloaders/zero/binaries/sam_ba_SAMD11D14AM.bin index c0d4c4b5f9016682758624a6c0fab607cae7d0ca..039cddb4a2455f8dee6aa66eae75561e1367775d GIT binary patch delta 584 zcmXYtUr19?9LIm>?w{Sc>0DPAF1y>yP9cGf4 zURHEcJOHKV74yw@N$<3TWR?`}*DIRi`Wl^(`+|DU$+3&+2ckT$_vj@mcIDYZhj&#h z=fILTEQ`Ol_ow6zO`uZLN{rbb(nzfN+pI?FHLu5^G*yuosCe)dOw86{@lP@11^_;Q zEHeM{1GOr?lV4P&e0btkoi~~yjk2FUQM$-ex~=@F{#X~5&qW@+Ym~F}i|VcF8aj<~ zJhjxaKy=eufEIjg9CH|PQjR^-e{iHKG^P7B8746`%CTB`GvoH6sY)v(VkRqO!w}J< zvqOVyH^+B z=~l18$Q!j--=}r9i)1OM?j!RlmwJogRKEvzT{*2iM#U j-XZXIn_U25V90i1$T0}42JGi;IQ-**fm3XwMeWtUpCG+| delta 621 zcmXYuT}V@57{{OYxb4iNvrX}f&gOfzP)m!QrF}?&JI72sTM-5`A@ZZa7L>z@EF_d} zn$$((?P3IjZWa_2*f?E8*1(I13br6vEieP-{*P%Jp6gys3mE6 zcm~~xoNYrZ5pM@QBDYb2RH1XGjZI+y3WZHPC@3TIP_U6PH8t+Qutv30l7_8TR|n$&ki9XCAZ+1k}5dCT$)xD@5u{b2;Ai zNGhhlmTn458{b!lHOCF3rF@gZSVzVil?ovfsy-B!jdCWC4e4=Q*2>vHtzvJD&8jkP z?UrM~*lb*Gm!rYxY*=RG$3ZA~N}3#zR=$G3EN|ui<^ceY0&sYq*}vc%LE0?(L4IlP zRSxfBUhtKR{bW+-MEA*}?swJGT`}D5TXFl`VDIZ8o=O^6ykoMMAkaLRz?H^nsk_4%VX`9BNof_E*yYMwNB#Ia%W8jhSj>jzZ5OUGm0K;Krkz!sIXDeM#ZBeecPmbk{|H0`$WU3^sHQqak!4)a$26pgNu zHLinxMRV0MQ~#Dm%23`>l9bPsZ)DwYan3z9Jw4{1y6m0sVV6sW^WIzDDgOi>a=QCO zu}|!Bx}g>U!vOTA8a!HH5CaI{5(jXTvOsx3`S@Sgsm=g~3zIY0;lK{NcoIZMPxpx) XM;CAga2&JK&F?P@dZh#8ea)4B&3?{c diff --git a/bootloaders/zero/binaries/sam_ba_Generic_D11D14AS_SAMD11D14AS.bin b/bootloaders/zero/binaries/sam_ba_SAMD11D14AS.bin old mode 100755 new mode 100644 similarity index 58% rename from bootloaders/zero/binaries/sam_ba_Generic_D11D14AS_SAMD11D14AS.bin rename to bootloaders/zero/binaries/sam_ba_SAMD11D14AS.bin index f7984a8e69806be56a19ed49a62710a9c84959d1..2dde66dcf91be12fe060979bce9dbeec86dda595 GIT binary patch delta 584 zcmXYtUuaTM9LIm>`fpvQn=?0Kw(eD;+*o*>MT`Y{*=%?ndyv?Y9@Hjjgd5pnJ;X*Z zTF}Gfj3s-CB7#9dWkLiaVNVi)_O`ajJq+n396hL;Wvvoo0Jb|0+pgxV$A-KMqY3;jvqF&csI=Wj}qQbdjfYOZij%u`Vo~jXZkSC}-&x)mzmybQQg1Sb6>RGbvWg^;7szXRLOVY14u&}Q^lWS@cqcj? zgUjJq_;&O<=W~q>3&ODAaQOf_2rvx(E7v)38W_R=0kE zrb%5i-Y!NUbYoCZV6rZv)xe903br6v?Y<{&~rHkMDf1l_5^YG_+1&~NSAs_lfMCKWKvhF)#Sb#eOnT*^BOz#me8+Pj|&=hkx!>xtJge>>@irJ>}xHrK`FKGCrsU(9wxu zs@ExgvR2hrpW9~hd#1on1yv-Ji(b;kna~GvnmgElc5t{cnd+~h0SpP&wdZ6>fIDi9 zZ)4t&-0KGuI#(r+c|Cnw-2zKo(x$OrBGF4KSiS_ z$Qsv4zrs|#%rv~Ek+PI`loaJNE>rx^YMg3}OHQT;c$3QsyWxC?EgpI@M{waA9H^+wItH6HkI@@993# YV|M_j2m3J_-TeNtz$qOd?`yC81JA_HW&i*H diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21E_SAMD21E15A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21E15A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21E_SAMD21E15A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21E15A.bin index e4bd732330657ed2194581ba95d9c6eb57b46e7d..0632f0ff68c41cbdb8392e7da45590829dbcad1d GIT binary patch delta 613 zcmXAmUuaTM9LIm>s=InGmd>>)yVOx3+g7lvMQaqy8`|(XB1SA0fx0B^!AWbeAlir^ zg9($fhfxm^)We{c6d!t!gdRuW_7GUHBnSz5Fd{Ua+0XXyIUjz1`0<7F!nJpF?JRkp zIp-qQOmqaF%w1w-BJr6AoAyblS(`LqS7%qCrm`@Jlk;qgL14%oSO&FbH3(GLJLgrvBA zOSvK4WkRxSx#y8#v`r;@tW!VC4)R_y$1d^T#rthJbu9Kc+o`9SPyd>yxYMbh&b9T+ z#Qe$xpvP-Z(J5q=rG+Dwe2cGim%Mu#G_iN;ZuVBNk!P$d3?3@C=u&^7=raT|) zZhm0~@q{bcqLQi5?I-j4V2?y4BhCs!-vJ8V#T(QkQ}?J_2H7)y>dd%X&PnDJ_YW{|zKZ|= delta 663 zcmXYrT}YE*6vxkbx4HGcnwy^k-`VrJ@*`cj#SkQ8+uMiuZh2ub(;z<>Y+lrIA`>r+ zZd%lZ<0+6}L68^TWows0&Gdd&D{3sS8Y8ujr-bG#SPj2z?WYE z`>HkJ`}Jw7Uw^7>sF1a4Lc_pFt)^4f;-yCus##r&uE$MmUNxxe(F(1-F*Ti0S)*G` z#ZuGrYO^{Qo10Fkg8C>1IbP6jaNn2rpa`$FvwyPyz=i-smJkjO>}(nhmk}THV9A|B z@*b0wa4|3PY>5|pd5iJ8G`8nVG>7j#FXpGX&9rDNC8wCTr$3rz(DK0yV4{()DW4H9 zct||rc(P;M*q0o;I!aWE`TE`b(#!LHGL0F7h7CB23)XNYIrsRYSXcdKhsA5isG_aR z8KZyy_cGrU9e9DIce|axquCvjd#2PPe<$-2we#8C)R-z)tlHxK6agpf@d9ZVLYZwC&3- diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21E_SAMD21E16A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21E16A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21E_SAMD21E16A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21E16A.bin index a285e70165687fda77f53bcf2b063e716d441d79..555afe25f117d12085bca7f3f25cc70f9978eb8d GIT binary patch delta 613 zcmXAmUuaTM9LIm>s=InGmd>>)yVOx3+g7lvMQaqy8`|(XB1SA0fx0B^!AWbeAlir^ zg9($fhfxm^)We{c6d!t!gdRuW_7GUHBnSz5Fd{Ua+0XXyIUjz1`0<7F!nJpF?JRkp zIp-qQOmqaF%w1w-BJr6AoAyblS(`LqS7%qCrm`@Jlk;qgL14%oSO&FbH3(GLJLgrvBA zOSvK4WkRxSx#y8#v`r;@tW!VC4)R_y$1d^T#rthJbu9Kc+o`9SPyd>yxYMbh&b9T+ z#Qe$xpvP-Z(J5q=rG+Dwe2cGim%Mu#G_iN;ZuVBNk!P$d3?3@C=u&^7=raT|) zZhm0~@q{bcqLQi5?I-j4V2?y4BhCs!-vJ8V#T(QkQ}?J_2H7)y>dd&uos-Nd?jJCHzKs9? delta 663 zcmXYrT}YE*6vxkbx4HGcnwy^k-`VrJ@*`cj#V90W+uMiu&b+XgX^Z zH!bSI@f1j~Ajk{vvb9Sg=mWwVjRK$oyMn4v#0TQ zqO%D-iC`<0#1yu13C~%M7nCl@wiQ^nq7B@F>@_}&VGQtP3}PL33Jdr)^;rm@@+WW6 zqC=4VnQs^~Yn2}Rh|Zp(`;UCte*Y`))A!8Sy6d|l>Dxa2s;%3mabMf2xFP!=_;M>? zU$w@4zdmjC>ra#ol-xNW z?=o2l6>}oblz6e1w-~=mW4q3HbLj5#Vs47tOpC@+a*8>7>Z54}Eg#GPCK~yg@)_}h z2gO5u2J;|}7qeP{ctKZ2jy*%$H)0j4B*nqRRU=3B0bB`~Ib=7aSS*(VPD%#4N zHv0E|FY`^&fmeCCRNb;r0Q;QJu);!4`6#_5wso>qjx6o@`E;q@AT#+O^&j#csTQYr zP-?|*se~lyv6&~!YaMzEfP*L@oP>#}B5cHcT1%lkLNpPre6xHIJ-pN0JJT~fF)k; rcw>^eT+G$(JPA%$huhuZJ_Y?^8C)R-z)tlHxQ?~Mpf@F1ZVLYZwF=8G diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21E_SAMD21E17A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21E17A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21E_SAMD21E17A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21E17A.bin index 255f91e11b16c9843e89bdc3ea8da6f18918efcf..4d0e7006dd1410c6f4d6e46258180dae0fd035e1 GIT binary patch delta 613 zcmXAmUuaTM9LIm>s=InGmd>>)yVOx3+g7lvi`FQZH?-k(M2uK00(D8+gOk=`L9`J; z1`{S{52GF;sE0u>DL(Wd4SI|~_YhdIBnSz5Fd{Ua+0XXyIUjz1`0<7F+_iUf{S0}Z zIqM?UOmqaF%pGE7BJr6AoAxQFS(`LqSLartrm`@JlXL7Hi4va4+!o2^K5?_e{qm zrQDG25+PZ(((}+T+NP2{)~O$62YD}v$-09R$<=Xlc zVt#1?(Briy=oGTX(!vo-zQtF%OWr*Vn%FyaH+v)4$WvAp1`m~6bh*El+zL0?P(M0rSe4fsDr!-v$carR&rqQ}?J_2H7)l^7O=*CnuRx+&?gizK;L^ delta 663 zcmXYrT}YE*6vxkbx4HGcnwy^k-`VrJ@*`cj#fT(h+uMiu&b+XgX^Z zH!bSI@f1j~Ajk{vvb9Sg=mWwVjRK$oyMn4v#0TQ zqO%D-iC`<0#1yu13C~%M7nCl@wiQ^nq7B@F>@_}&VGQtP3}PL33Jdr)^;rm@@+WW6 zqC=4VnQs^~Yn2}Rh|Zp(`;UCte*Y`))A!8Sy6d|l>Dxa2s;%3mabMf2xFP!=_;M>? zU$w@4zdmjC>ra#ol-xNW z?=o2l6>}oblz6e1w-~=mW4q3HbLj5#Vs47tOpC@+a*8>7>Z54}Eg#GPCK~yg@)_}h z2gO5u2J;|}7qeP{ctKZ2jy*%$H)0j4B*nqRRU=3B0bB`~Ib=7aSS*(VPD%#4N zHv0E|FY`^&fmeCCRNb;r0Q;QJu);!4`6#_5wso>qjx6o@`E;q@AT#+O^&j#csTQYr zP-?|*se~lyv6&~!YaMzEfP*L@oP>#}B5cHcT1%lkLNpPre6xHIJ-pN0JJT~fF)k; rcw>^eT+G$(JPA%$huhuZJ_Y?^8C)R-z)tlHxQ?~Mpf@F1ZVLYZwI|Ck diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21E_SAMD21E18A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21E18A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21E_SAMD21E18A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21E18A.bin index 122d5caf79f6445e33fb6b0a42f4b10da1404c90..5d6d5b50452d2c598cfe21df1dc49192b47e3af2 GIT binary patch delta 613 zcmXAmUuaTM9LIm>s=InGmd>>)yVOx3+g7lvjn*ibH?-k(M2uK00(D8+gOk=`L9`J; z1`{S{52GF;sE0u>DL(Wd4SI|~_YhdIBnSz5Fd{Ua+0XXyIUjz1`0<7F+_iUf{S0}Z zIqM?UOmqaF%pGE7BJr6AoAxQFS(`LqSLartrm`@JlXL7Hi4va4+!o2^K5?_e{qm zrQDG25+PZ(((}+T+NP2{)~O$62YD}v$-09R$<=Xlc zVt#1?(Briy=oGTX(!vo-zQtF%OWr*Vn%FyaH+v)4$WvAp1`m~6bh*E9hX+JLU0e;~h+HJtxJw~-E_ zVFuF`{M)GMLd+kIQ2)YG;#&Atd?5knqlxIv_&lBQPA|JZ zH!bSI@f1j~Ajk{vvb9Sg=mWwVjRK$oyMn4v#0TQ zqO%D-iC`<0#1yu13C~%M7nCl@wiQ^nq7B@F>@_}&VGQtP3}PL33Jdr)^;rm@@+WW6 zqC=4VnQs^~Yn2}Rh|Zp(`;UCte*Y`))A!8Sy6d|l>Dxa2s;%3mabMf2xFP!=_;M>? zU$w@4zdmjC>ra#ol-xNW z?=o2l6>}oblz6e1w-~=mW4q3HbLj5#Vs47tOpC@+a*8>7>Z54}Eg#GPCK~yg@)_}h z2gO5u2J;|}7qeP{ctKZ2jy*%$H)0j4B*nqRRU=3B0bB`~Ib=7aSS*(VPD%#4N zHv0E|FY`^&fmeCCRNb;r0Q;QJu);!4`6#_5wso>qjx6o@`E;q@AT#+O^&j#csTQYr zP-?|*se~lyv6&~!YaMzEfP*L@oP>#}B5cHcT1%lkLNpPre6xHIJ-pN0JJT~fF)k; rcw>^eT+G$(JPA%$huhuZJ_Y?^8C)R-z)tlHxQ?~Mpf@F1ZVLYZwI|Ck diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMD21G15A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21G15A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMD21G15A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21G15A.bin index 49706aefe9d0f46ecfc2aa37038c925dfefdaf2c..80dc15f5758fc37cc8342721bb07ae1c088d6ca1 GIT binary patch delta 613 zcmXAmUuaTM9LIm>s=InGmd>>)yVOx3+g9LpgT^SBH|B=dF=C9xB2bs4JveDC7DO8n zWH2E)dl>Z)K|Kt5N%5fvN$4>G-9uo-k{~4L!HCdwW|YyZ zbu|dJ{f6VZNwrKm!y0E6>kkd%|Nb7E*UpA4{=S*<+&x8GviL13QwB;xr8lsx)QjLO zS(D1I^0!OcQDd-CJ)&}srLa*I93K-#b=dKE6>8fJZG|a6_rT7*ZC3wQ3qAm#K_tl? zTFMUT76{3(jh+VvcbiJ~Xs3Rh9p$}bnO)?+i+9^{@>KL;rc+O`Dg7&+;!dZ2Hrv*3 z5c5kDfF7?sK_`(dmJ&`_axK2nUGg4i(8S)Ud)OPnMxL^=FnFxoqU-(ng0Bw~m~woe zyZMC~#51l$i%O<^x1Y%A13eOzj5y0T!MUU8iZm)q!&tvySHuC^E_Pkgn6#q^ML5kD zha`tIj?q&rC616n_O&Q#r@#!biRbPk6uE<>G45xKs>9hn+JLU0e;~h+Eu8;Bw~-E_ zVFuG>{M(3WF6s+~sc&U1el>J6wi1WwNIY^QwoK=}v+Evt8laZ|#{oZgcBi&CS09@9bPxo2IMXg$9zb?N*9+%Lj{@2Kk2zn-8^|$ixSu zmlpNlI0X_c2=c+VZ0%79`UByMMuAa+KG>?KQPjrN)=%l-^ZTCjJD>C8x9fQ7oI68) zC%c@)o77sdB&SIm6UceX$)eN)xwazhmDIsokh{i4NQ8vg3eiXdletCmHvO3k5$R9C zqQ-_H_p{J6ZdR+k_EDWZjrSjgii7@F)~^rF+Iky%qM6%%{hF=UrZRuq8owz99{BUC zU|+K){J%bJ59m)-3>UIim1`Ottygu@dc6E-LNP1r(T%u?E+__NBU+`p9jTd&LLKc& zDwdjAP@0wb*!)aF;gm-)$gzTclli~A2Z?)C%>K;+038P4X@WaA&~s^GxJ<}n7Am`Q zNZg~M6fWg?mM!y-|1_Vh>7EU|nr1DJ5+Ys_cJ z3#Rc$Tu*k4oBNV$SBFWYQoeCFzx?t-08L}YppqssM;5K&YIN?gCBC8d%?^#%p;3cd znKQ<~{_hpG#klBEEd5&?>DT{uq+)Gd78L5q zG}DAu@-3Yd1U+eHsmgkn-U8r4$`BbbAvK5%xsPi}n8y$&(#p0fhlrPTnfqpgBa@RO zk%>#%SeOO^3Uq7NwTZ|W?e_)a9=RK;2yh&LceO5L0FH1#0N(Kc+XxYGCgS^_5zHx| raPh_z^?0bqEuRM2)7jq9>F$65z5=cwgJ8#c7Ca~1Fyu=MmYdu^wI<6e diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMD21G16A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21G16A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMD21G16A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21G16A.bin index d59f6a7e59e6618ca662053f6f15b788dec4f88f..6625899cdbc7ceee4866c37d06cafa1866089206 GIT binary patch delta 613 zcmXAmUuaTM9LIm>>UQ;Btm|BxvP+$-kZmjQ>YyCAp>51;el_lF-}IM3btCm)?7 z?=$D!#GZ)_;*+^e>`Wv9YhObdhpN3nLyA7P234I!$O5^*-jNvLnaXXE?d&IRmMCBA zR(&Z9)xEm&x}@7iT~UK8i}i=P<$r&dO&cd8wov!@aPFRFEZRagooT&Aq1-jGq16iD zD%w-puhO?mMxP~IuN=`i=UmjH3(k*8i$36dyad&ay0Of(pSz%NZyS}rm7O2}&@htX z4lQT||eyqA>tgfHgdKAEC${B!h83W7H0u?V-)+GWrMd8(GKsA9M?8 zBL-%cF5}Mv+CRDCRmT9j2yh(0XrX6z1~|e2 q0eB_=&y$s{DefONY`&5J delta 663 zcmXYrUr19?9LIm>ZgcBi&CS09@9bPxo2IMXg$a_e?N*9+%Lj{@2Kk2zn-8^|$ixSu zmlpNlI0X_c2=c+VZ0%79`UByMMuAa+KG>?KQPjrN)=%l-^ZTCjJD>C8x9fQ7oI68) zC%c@)o77sdB&SIm6UceX$)eN)xwazhmDIsokh{i4NQ8vg3eiXdletCmHvO3k5$R9C zqQ-_H_p{J6ZdR+k_EDWZjrSjgii7@F)~^rF+Iky%qM6%%{hF=UrZRuq8owz99{BUC zU|+K){J%bJ59m)-3>UIim1`Ottygu@dc6E-LNP1r(T%u?E+__NBU+`p9jTd&LLKc& zDwdjAP@0wb*!)aF;gm-)$gzTclli~A2Z?)C%>K;+038P4X@WaA&~s^GxJ<}n7Am`Q zNZg~M6fWg?mM!y-|1_Vh>7EU|nr1DJ5+Ys_cJ z3#Rc$Tu*k4oBNV$SBFWYQoeCFzx?t-08L}YppqssM;5K&YIN?gCBC8d%?^#%p;3cd znKQ<~{_hpG#klBEEd5&?>DT{uq+)Gd78L5q zG}DAu@-3Yd1U+eHsmgkn-U8r4$`BbbAvK5%xsPi}n8y$&(#p0fhlrPTnfqpgBa@RO zk%>#%SeOO^3Uq7NwTZ|W?e_)a9=RK;2yh&LceO5L0FH1#0N(Kc+XxYGCgS^_5zHx| raPh_z^?0bqEq8$I>1;pU>F$65z5=cwgJ8#c7Ca~1Fyu=MmYdu^wL{A+ diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMD21G17A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21G17A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMD21G17A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21G17A.bin index 1ba4cbc2e8d7b592c172bc41202c8a35221f3e2b..067a1d2bb3bb0f077ba10b7a6fc2ea96ecb2c72b GIT binary patch delta 613 zcmXAmUr19?9LIm>ZhE(SS=~9)iI+NegO*z0or6RQ+>K4yok)lnMzGCBvj>&TFo={0 zTHv5@e2{vGpdN%?^0J2>MuQ$B*n9|9VIznU^stE7ny&R*K77uH-yeQ_;XL;ooP2bS zyicF^5NA3*fKU21aWatv?7ekm94gK_4JrEUI#hHPCG+G0dq?7gXDYW%c8pKl3{k$; z?D}#9Dtk58bxC)Ox??7{f%S))?SFrlO_?X6j!@_LaOR$7E;vFCooU?#q0|xH)T()K z7o17$SMl2=^N=l4D<9E0*KEwD3$Bk#Hof2Vco{02HFJq+KX*al-qy>1%ef!`&OlYDst6ug-=pj#8QRqEZ+^4Hu*<7#_6G$08 z+}ixYtl}BZ(ms`?Y^%SNv4q=YD%)_Dt%G|@Ys=GwD)(dkf?W~2d$zIbk$v)(CgkBX zpYM}h@-RkEv6MJKa>i>>GzY*Au#V^MBNVxVq%rPijM|2?J+u{FLjOR1BO5sXgKi*A z#Kf%9W&GQ?G?@rSV>Gz9vT!webAE9F#^MX{8}oB?%0IE{RmT822yh(0XufM^8aToM q0eB_=WRW7$KzhVO`_Z?6f`8>29a5=x(5ryQqbe5xValiWWwdA^hY delta 663 zcmXYrT}V@57{{OYY;)@z&CSn&XZ9Xfex$3Ng%y&q?NrLnmKPQ?4f2Bnn-{g5$ixey zn-+E9cnc(05afk-+1jNL^a0_GMuAa+Uf8OuQPjqqtw-tN_x#`Yd4KQ2Q*3_PGIxgj zPIR{rcS38&l9(nPOd#hi#|u&~WIGDfC#i$CAbX9CkT40d6{3*_CUcAAZR#@@B+{R} zMU4(a_Gi9n+^kl+?V~z-3hzJi75n|KtY06PwfP!*Bk9{-{hG~ZQ<=A8jo%dg54^cm zu&-I;-d~@#2lOW@hVvP#$~6s+)~h;cJyw1=u9%he$VSXW7ZiiC5vfw0&B>XxLYq64 zWHdRmptLIU(fOIU!YPlUkY#!OCi8xI4-)sPkolVd06Gl7(>S+(pyyJ=aG8+DELe8u zfVfLVDOAewEK}woeXPy+T^Qe$TYh=LkEStgP)QS+Ba7BhH9Gg$65mk!W{1Y=(5S(! z%xR;4@AnGZ;vM8Fs}yS677JjX_Zn7dNEVOcTVh8iTE)ono}W*b`wb!$4`Tlz3kdaO znrT8i`Ibruf}XUpWM#cWZvk*1Wr&QJkQ&5>+{d*f%p*t(($2OjhlrbXoBL)1Ba@RO z;fYJyScv-l3iN2#wTbW;?e_#?F1ZJ)2yh&Ld$lfT0FH1#0N(Kc+XxYGCgS;@VazF@ saPh_zb-Ad^DW3w_)zx{j%Xu0G_zJj!41yi&S#TY5!jLB=SZ;Fv0JUJtEdT%j diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21G18A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21G_SAMD21G18A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21G18A.bin index 460450df5e498c457af5ebe30d565632bb5eceb5..8e38dee2cd698ccae31d95316621bc16d513206f GIT binary patch delta 613 zcmXAmUuaTM9LIm>s=InGmd>>)yVOx3+g9Lpi^eFJH*~|h5i!PM5vWVj9-Oom3!;q( zGMJE@J&byYpdJRjr1;Q-B=i`8?jf*ZNe~kBU_@v-v!CtZb3Xk3@Z$^TxoiLUqqF3F z`kaec(~%K;(zl6~iNt3fY}%)xW^K}dU0vLOn#w{XM$WT$Btm#5b2}uH{lqO0``3n9 zT?s;Mui?0EQZ19tu*R9i`a{F`zrV}ow6h^gpl^CScTdrlECGwkl!1~^>7Ch9>P2vt ztV!ip`P(J!s4>{69#T2SV%Vq(j*khWI_!A70=2D%w!)O3yI|+uHmiTD1wR1LAd=(` zEMsegGjel>J6wj774NIY^QwnXQ=vuhrC3ZRz&#{oXxLYq64 zWHdRmptLIU(fOIU!YPlUkY#!OCi8xI4-)sPkolVd06Gl7(>S+(pyyJ=aG8+DELe8u zfVfLVDOAewEK}woeXPy+T^Qe$TYh=LkEStgP)QS+Ba7BhH9Gg$65mk!W{1Y=(5S(! z%xR;4@AnGZ;vM8Fs}yS677JjX_Zn7dNEVOcTVh8iTE)ono}W*b`wb!$4`Tlz3kdaO znrT8i`Ibruf}XUpWM#cWZvk*1Wr&QJkQ&5>+{d*f%p*t(($2OjhlrbXoBL)1Ba@RO z;fYJyScv-l3iN2#wTbW;?e_#?F1ZJ)2yh&Ld$lfT0FH1#0N(Kc+XxYGCgS;@VazF@ saPh_zb-Ad^DW3w_)zx{j%Xu0G_zJj!41yi&S#TY5!jLB=SZ;Fv0JVL~E&u=k diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21J_SAMD21J15A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21J15A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21J_SAMD21J15A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21J15A.bin index 026b7e1ec3be4e449c4e36774393ad3f3620806d..919a60bcdde53db41f4cca092f6efca795198d4f GIT binary patch delta 613 zcmXAmUuaTM9LIm>s=InG)^)B;*`|xYH1obfJCB=sxB%#L$bPs_QOM;M~2O~n$nf+`JpY!4OhaX=!&)xgSADtoZ z(`VhpmX3|!lfF%COe6uzVAC-PHCvO09NOFl)HD_)3386TBQe4=h1(&S>?dxPIKDP4 z+DZg!dkyDxNwZG4=5?+t)*l+?|NUJyqo0aeLw%EDxqGUKV#5?t)>@e>q3+w{_UA)^?k|*L1Go5;h1&ptFiaVY9>1^A$ zPAo4a03%*|f=(ivEF~PX=30EEyX4>3p^2kY_p&#Fojhe_Vem+~Mc4ZCg}yff2fzZbf#>cc6uE<>G45xKYQWhZ+Jvs4e;~h+O`QKhw~-E_ zV290xE_?4OMRM>rq= p&jf%xQbyW{T|BTKeG4e~SFcf@LcJcZ0?O#P$2aa7%gUA{_YXR$zN`QM delta 663 zcmXYrT}V@57{{OYY;)@zZJVD1&+I*0`H`+X3kxJ;+v!7gw!E;I%^*KGuz69-iA=mO zx@l1tj<-O91wmeTm#tk2K_3v_XcQPF=!LDi8bxhPZ9PgCzvutH&-;5Ho}K2WEwiV| z?^I6<@uakNEU78d!31*7db}j{LcXI!{gN8K1^H`im_$j4EfbA2GMQT-Z!@2{5Rv{A zt!jJ-@;{4?F^gK`agOMm8NB}}R_*t{vVMJV#_n(Gjb(59^s9EiU1h$GRenPZJn$7( zz`1Hm`hI=d8qlAp8Y<>&D(47~G^jdhEm3(msaTY?*m}Z5=M{sp9;;S6o72--g*JC7 z>3Dj2UTIb4;&anUg;O5IAZWz9>o4b78DxD z6w`!u@-34R1U+eGX>)^1Zv}866^M+OkXpo!+{d*f%p*t((#|%`gT%vnEPXS<;faai z==ddVG(rOb1ukgUwejdE?e_)~ZrKmj1UL@Bvr->207p0=0PlE!ErbX-6Y>7fDCQ(k rxOiidy4}>>DW3w_-Q9JvTke7Zz6!1&VQ^wS1MXv;FzC$))|=cvwpq(A diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21J_SAMD21J16A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21J16A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21J_SAMD21J16A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21J16A.bin index 289b4c25a4693b84cccac8ec526ae11107de8ade..f82feaa8619b0f1b21c6b43581a1869d9fbbf538 GIT binary patch delta 613 zcmXAmUuaTM9LIm>>UQ;Btm|BxvP&HmvTX&sI!H#ryfGWzjS(Xji$GnMv49e;F& zyw9HX5ocB(#3y^3IGISs?0pUQI8>bt8gXm0t5DTgj3mi9_KxU;X9~ATwv12Q3~_(0 z+qK0gRCns0>yqXe^~OzJ1M3fU+yDMHn>J6z9FgwvVD6r3E;%9&jj6pQq0%+6uGWg+ zEjiQbukyD`=723)-#w&pp4qrf6FeUmY}$b5@gh{$>*fkme{O@Dd)wIkyITkY0F5GP z?!dCq-*J(UEwywA&4OJ+@ zNxs-Gd*mQS&#;U*ND9VlQ8bT%9bgsD-A5>L2gzdG<4>XFF&sx`O_J{6^Mr{s-Mc z+K7o+rOWuYx-^vt$Ko_Rzm&QfyP2F%!FfHU-$>5U>Coh|Ux@&85#Tt0(PGbx4jkct q06Y@_@<ZgcBi&CS09@9bPxbEYfrLIcUzcFSaU%Lj{@2Kk2zn-8^|$ixSu zmlpNlI0X_c2=c+VZ0%79`UByMMuAa+KG>?KQPjrN)=%l-^ZTCjJD>C8x9fP?Ja>lt zPIfmFPf}~elAI=OOd#hiCyP=q}6$kyVtY06TwfP%+qnX=2{hG~hQ<<-Ajo%al4}AGm zu&-GYzF(iV2lS^Zh6`D%$~6s+)~h;cJzjn^p_rBR=tkT`7ZiiC5v@|&9jTd&LLD7S zDwdjAP@KwqYaRx!G~?-w%V0fR`z!`Oewf|R5b>~XbKh)mWO8yO zGI2>83)4VAfeYGoZ6Y#8`@O-qTlPa00geOktk#7Lz!44zz&jpb8zBPDM7;kqf;j~g rF5Z};ZZ~ze%cnthcXf1j$(=C3SHKly5bRjbg8M`}40+Rn>UQ;Btm|BxvP&HmvTX&sI%tf7d1E%b8zV+67J+VE(jMGsEfz!@ z5o9nSIeQrO5J5c*dTAFQdXR)3BhWnrRxAlZf*y4AAfX) zyicF?5ocN-#3y~5IGISs?R|Ck1XP@L8g^@Q>rl~Hl*Gw7_KxU;X9~AXc8pKlEOCFW z*|p^eRQ76~>yqXe^Uj;R2G$>Hw*UQIHe;TOI>Ox(Bbj@ux!?#pG^X|zgi_b!rdrK| zx8O{wzlz^3nFF>+t$ax1Jah9lP4IkNvS|aJ$IDRJteHzp{kaQn?rpvNx10+B0F59? z?!dCq-*J(U9k$l_z&g~VvOCtQ9%YC5AX#7+`0wJ~rjk4nd$`l8rr5aU6;E-eRXuGq zEo;R7QUb8xwI}E#vcXcqF-NAsm)c9geG{6vTU9@MBe=*@RuuY<6dQE4Cz}g(V*)9| zPqsI|FspdVx747rlx_EyGM33snaVbtW$WPGQakcArpN;lJk353WQ!FJ8lAQ5c6wTvc2Uy2*_YsQRLDCraGe+&e*&f=8E}?%QzmW}`|3NpA z7Gh#n=`#MUE=|Wm(RmtLTuEGw-i$9M;JlvDZ^ReqOmJ$|uY>`*2yh(0SiWag2aa$+ q0GZ zH!bSI@f1j~Ajk{vvb9Sg=mWwVjRK$oyMn4v#0TQ zqN@qriC`<0#1yu13C~%M7nE+uwiQ^9q7B@F>@_}&VGQtP3}PL33Jdr)^;rm@@+WW6 zqC=4VnQs^~Yn5*Mh|Zp(^N)Pl{{2_pr}xj;dg{9)>DylYs;$SSac|qIxFP!ra#oy z(d6{J+N{n+=cePTpgxL1mgn^w-23G{D8j2k=5Gc7*bsoo;=+Ez&Zf|C8Sya>l-xNW z?=o2l6>}oblz6b0w-~=mW4q3HbLj5#Vs47tOpC@+a*8>7>Z54}Eg#GPCK~yg@)_}h z2gO5u2J;|}7qeP{ctKZ2jy*%$D)0j4B*nqRRU=3B0bB`~Ib=7aSS*(VPD%#4N zHv0B{FY`^&fmeCCRNb;r0Q;QRu);!4`6#_5wso>qjx6o@`E;qzAT#+O-9O}hsTQYr zP-?|*se~lyv6&~!YaMzEfP*L@oP>#}B5cHcT1%lkLNpPre6xHI-Mq`(JL4aom>3R^ zUkZ+fn9rxeh2ZtzczBfcdHgY#vj-{=1OdRkQWG$MfC3=EI}u=uK#67&p8px9oCF3J pZ%i_mi@DmJr@-mz>^Rv;O}|(MSBL?yQ#}K&W9=~LNlBKQ!auf?%P;@{ diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21J_SAMD21J18A.bin b/bootloaders/zero/binaries/sam_ba_SAMD21J18A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_Generic_x21J_SAMD21J18A.bin rename to bootloaders/zero/binaries/sam_ba_SAMD21J18A.bin index 633884c95f87074410389c10781a381f243fb9f1..146ad985168565b56aa0f42785bb97191f628d26 GIT binary patch delta 612 zcmXAmUr19?9LIm>Zu4&UvbuAo6EAh{1}(L~y9tRDxEoutJCTqujKIx?+Jj1F7(_}0 zO>odSK1e-8P!B>c?Xrg+MuQ$B*n9|9VIznU^stE7ny&R*K77uH-yeQ_;XL;qoP2bS zyic9?5?3nTk5B3jaWRnu9X)kr6e_Md4J-Q8I#hHPCG+G0dq?7gXDYWt(#9ulk|L2co`~NHFJq+KX*al-qy>1%efE$&}k&W z9a=VeEtd&Nv$eK|wt)tfmAPj1I6KM*$PBy0e;4mH)WoT|jdZh`WI^jIp5jikde&%I z*NEe#1YpH$PtXZulO=@{&dfevYApp0OlYDst3LKd=q68DQRq2V+^4IZ*<7dt6G$08 z(%SsOY~mU3(ms`?Y^%SNu}0ctD%)|Et%GM(mrKqzt-Nnza27}bKaJ+uv7LjOR1Bbzw?gKi*A z#KdgURs7qyG(H=O#%O49W#M}C*8JiET#PToZ_dxqiNM&ZPYnaK6W}<2k$mT595})O q0eB_=WRW7$K)S_42hg{HLSSW<`c>*1@Ts5<4iET;{YH;tgZl@2Z zH!bSI@fJw1Ajk{vvbjqk=mWwVjRK{9e zPIftnC#kh!NlubBCXn-%<3*_(a&1NGm(>2-kh{)?NQ8vgGSNr_leu~FHvO3k5$R9C zqQ(Xx_p{J6YF4W~_F*+wefkp>gN3YB<(m43>s6h!7B4@XP|V6&bUkjObBaM(k5;Me&8ex3LYq63 zR4g?$r#O|_*z8n7;grWQ$gzTcgZaL^2Z?)C%>K;+038J2X@c87&~s^GxI)Mi7Am`Y zK-{IG6fWg?mM!y=9@b*~E{yKV31|4;i&B1)*-Q(@a&$_0d-|hknpi%V0ZcgZHRf|< zk!k!P*VAp|#-8Nb(P0v)lyBV0FTK1FK+~8psHBO^ka=sk8lC%Wfp4gNvrXf5Xw=|V z=8Q40_j{Rb@-A|XRSLB&^F^@F`V1>HEQ?3+ExD}|tzvX(&o5-k0|t?b2eJQ%1%-Mt z$uyyrd`l+FyKuKmRsCEwy?`F diff --git a/bootloaders/zero/binaries/sam_ba_SAMD51G18A.bin b/bootloaders/zero/binaries/sam_ba_SAMD51G18A.bin new file mode 100644 index 0000000000000000000000000000000000000000..0e97b0063f49a1596929b22e8023f18906c1d6b8 GIT binary patch literal 5044 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 qOqPxzOd)F`lqecQ0!e|BNFnp$4oTpWK`_$! literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_SAMD51G19A.bin b/bootloaders/zero/binaries/sam_ba_SAMD51G19A.bin new file mode 100644 index 0000000000000000000000000000000000000000..f1be3da8773463ff2b6a9df0272042667b269bc8 GIT binary patch literal 5044 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_SAMD51J18A.bin b/bootloaders/zero/binaries/sam_ba_SAMD51J18A.bin new file mode 100644 index 0000000000000000000000000000000000000000..6ef7a949ccb35e4d7bc2f6f0a51d930997f2862f GIT binary patch literal 5044 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_SAMD51J19A.bin b/bootloaders/zero/binaries/sam_ba_SAMD51J19A.bin new file mode 100644 index 0000000000000000000000000000000000000000..e576065b1b52659710247921c96ee24237eb8016 GIT binary patch literal 5044 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_SAMD51J20A.bin b/bootloaders/zero/binaries/sam_ba_SAMD51J20A.bin new file mode 100644 index 0000000000000000000000000000000000000000..eb8c6f533db23022fd738110402ade07f4e7b027 GIT binary patch literal 5044 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 qm@E@Rm_pV literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_SAMD51N19A.bin b/bootloaders/zero/binaries/sam_ba_SAMD51N19A.bin new file mode 100644 index 0000000000000000000000000000000000000000..a8f306d4745da7d053ec640e9f12f32b224021cc GIT binary patch literal 5044 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_SAMD51N20A.bin b/bootloaders/zero/binaries/sam_ba_SAMD51N20A.bin new file mode 100644 index 0000000000000000000000000000000000000000..692018b3637f1d716afc607b7d2ed95b0a574adc GIT binary patch literal 5044 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_SAMD51P19A.bin b/bootloaders/zero/binaries/sam_ba_SAMD51P19A.bin new file mode 100644 index 0000000000000000000000000000000000000000..eccccfbc17b50559a1b51350a5579098babf3ce9 GIT binary patch literal 5044 zcmZ8l3w#r0w*TglM_)9LifK~YBvY{@fN29#T4d9tOdnHd1=LcjP9Nx0k*0_mxGYRs zSOdrktt_R*RpfGA*6Wpq8(kK=sUR1*>NP2L1<^~o>Q>ujoi>&ZEp6_ZQeE%%_xsQJ zzVn@PzQ_5`nJ>K=!;RmN2%Q650Q3Pa1HJ_O^WVpy>z~nwLEexfqzcH&D3ARV$!NRC z;Shr#O8ymEgp>g}W9X6>%S)tjc`?ChyJQT})n26R{?Vo$?5k&d+yR_x z+mosw={bEorMy#ZI?&R#u~|fFhpAbVshdSITg_B*#GJ>X>F!FlvSC`*Bo*seKusmL zF4}1WJ=YjbLX|9{z(Y+n$s(qEk#3FBsWHwx~MwE83~UDkrFu+ zNQV?C6`?fb*nxN??QQ;dLVJh(yYJuo_pxx@Z#N0@)btw7Y5)L$nq*f8JEJ z*(vaNRg=`evbj?+-j_vpe=B%zov(DZV!*J{?vc?cG$F(kZKrfhYN@`yYW?HUB)n=` zcIH&o?-L8NU4nz)L1L8MeLyVA)(RM*4J9&F>(7AgYtE&?>hI1BlkzXcsS&ng7yRChlAkJ|X4GYbnHL?Vwd-r6=}l|v9VT8}u1>4BW%8o2 zp!!MBZmO>1&B`)f%rvFd@gl2U+t?`CKF*8vCe;l0r1e!me4H^fT#?{&6LPqcTR3YoD;#}7!pVm5% zbu?@%yL$z-y)k-TOFb7G`zSV_Ia-@a?GTN&*x0!kwOwMlG!l$uG1fXHB-|*Z&WSs0 zeSk{fb3Rp97aRLSto#R5ceD-%PaAlii0K)_`pa-Ww=;#ne;@GQH_iW)vb(9H^|7&6 zraiu@mplr=<6x}rsVj<`eF_}80!VTPj*M%duALY~cgOe2nbHw#Rb@>FU$wgzc8Eq%#qfZ{8)*-=0I$sLN(P(T z)*R-mcYiHeL~PxNx=*AWP5@@-tyrkVc|9yED;**3KgO@yeGRM*BXgmtut$G&K#Jo^ zvjygadZLcic;ahAF7*|R7;bhEqsUdQBZlrHUJ@M@%LPof10)Xhp-r?oT2ZoTzaw)H z!&*d}3N)%7KN`nJ;$6Ld&=_GANWthi1=Hb_2NS7E7aHn8h-z_SAcJoNt`!$faM{`jlhp1;fwK`kgMrTB_hX7__i(bKCLhwQ6O{; zMN|(mpv9ZaUMp}9|RghzMKt}hRP|~yMM5u#- zn+`-!xNWb90T6mtiBW&iX+$io3T2K?zBQEyJ=Q+>Pq z1%rvERDO3!t0?a|BBGuyK=0;^@fU8E4dUi_-eKM$lBQpHaF1gIw>bwD=4Pijr+oDLBc`48J-UvR5zOA@1Qz9*aP{dV8ksDi?*@!XMg&t$vL;V`d!x zY1}nEUN$}MGAGZB6IO?yfrwZ9n00nYei4U$yf+>qI!n|MC!^yMeAvEDKMCIXOcwW> zpx#HCTm9Jazegmi{E}W+cXBKmvHPq|(r#`*-eY5$$-zh#H}?+A{CUJ)lEon^fyd2# z5nCxTsd=66Zus6*Af;R9Lqamrfrj@JS!m=VKF(u+>?!T!kSpcrW_8!us6&fI&PI_| z%V%-M65QMsN%duv?(&+Iy{1i*|PqA9%X+Mi){C~0F&2LJI z++vV&nj!Ji3{je;cW~!~A|hoo`6dApGsVWHCWsS4x3quhjLHBCxRc_?F>`@PCh0gW zSU)iVcb*dui{ym#?n~oI!wO8tVdmJ_s}nDa3Uq7qR&9{(z0w@V$BkVS*CrNWNWhS) zTk?gm(nOk|Q)v~4QD(4OIw4h+TQx;dCWkvp5@`2~+q#TgHf@2slG_m*d+M}%#zsaf zi)VqwmhsB2g>)g@mgmB4M+f!kp@~ertZ;O|M&Ghk1_)Y7tDzz)yH%%f28VB`^zGRM z>kuLD8G(2@y(G><(B6}z1q&mNh~SpQAoA%vs}OlyU3g?Tk@(b=uq3hYs53qUyvE|@ zz7#AFY}n%LwQdxL<&O;5sJ$X-^T1PPBj3;##+wK+J}n8JacN4%z+uNPabyk=k(I=8 zA8@I#@{=+0gj7d&!&ysf+4%PNQDrm9=viXA`n#a!OY8K&7)Uh#yIAp|azy2`hnOu; z*W2m#vi21e*S^xwkVQL8?L`NfMeM;9Iu@BN>>=91T^5n8!#UJz=k%T!RJOOh6jZkT z-m9YfwGJ4wLS9}dxy0d+zxAR@Tm8 z`F8d&==V6uUNe`=wKiPP?}J?~>R)A*hbiuf(uW#yIW^Z_G_SwhN`@aR&F3_n-hF3( zG4yJ0_4xGu2ch@qtsZ-Of1?!-!%9r@2xnD<^SR1mgO6Zw;I%5I?0?QG1KsLk14po= z>4$+Lt0r6l6)-loJXQ|5k-oLHZ?9maFC`L&d5V)84X}ct$QmmV#;Dz}-iISAt%>33 zQ#(a*%Vth3JcXu5{~US1dLOL*UeHT#!?`I6D(EGSfOZhtOJ?+^puHH{NuWOoZTpP= z%_%!$hhJgR300-#ux%nbae5df;~^{D9-;#jX9Y_OthgP#=FE7tPNgz)O3#6 zF?2~DR`xphWX$+%10M~vaWfyOw5m(wVI@S$o}jqfLHkT(tu+rcw=tg6d7PfLLEUr% z=du72FKvKKfDteckgJAT334ky;^rRUZwlz{1;q!NobY9PMz-UOs3r#IF&0DULjTiBp2@%}I(gfuEF->yuk3 zALKNhL2z@Da_TxsafX?w1Cyr6Yr{6|Lw}t0Hio#Q=L!aKwE}bnm~5`>(&D^S&N+yw zQ`scY)qoDW^kCi(1M@8Mpq|TPAu{|<)&uLMJOJbEb~g8~D3}dru?VmjAe~)4NPbXl zBpAD>vb79iM&2*I?-ig|1rXKdBtjomzrO~v-xyGJ=EOsUh#AJ=-bv6}5wjx8 zL|CWCa;5qp22fCZSNZO5X?M}j+awW3(lxb4y78F}^);Is8aJS#bsN@gY^XD?E?7~x zD7yk74Tf+WAxCKTgU1k#;Ru8OUBn}lnt;#}!2N)x8F>KYv#`a2XC61&vyE`#*(iHq zp6#Bz>>N}XpM=%|st^UwWhiHX4Lww_vHqEc4UKt~YpWiH+a)rooW?ra4#%;I|6&K+ zO7GnLrAMCZdf~k{!~fI&{cyHMg+HCM${bkrl5=e1pKF)2>018fWYy8`i-*s~qW}9< zZKi9Xk;GE|T7Q1izZULX^TaVGkhL@Jz~8_5Wc1(9?d@BA&&E0G**5uS&t8A*zytqD zKlIL)*HaJXK7Vy=YT)J1-aY?*@i&#f;$HVSlr=g$i^~1z!nMo4{_d?C#k(2~#UHnx z8m;=Y^qnogd7?>Q5pU1aSSGK0@nLY{w?msdEBEA|*1z#@>!08Hb=kRU^E_fHn^=(c zAJ<--{M*MLe`$F$p_|)V^76rLZ*S;(A++6Oic20lFYy92v+ZWt~9W?o;?xxXwtoB3*rmwaqfQGMnbS>ct} z$KN^h{2vZJI|`1jp=-u(9E3w!5mRjjYCUS9Uv(w2FVwD%G-zF!u5_>-+yJKy?a@bZh| zE4OdBXWRWNH$Bp}z`ra!OGuX(0Cz8h)_;M=;Vz&X;&bBQR}>~uP?iZ_3KHs#EK`m! pStf=sg{*~8qF5XWBn3_)h0KdPB!No;p)){Mh`0`(1yUdW{trJZP-g%D literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_SAMD51P20A.bin b/bootloaders/zero/binaries/sam_ba_SAMD51P20A.bin new file mode 100644 index 0000000000000000000000000000000000000000..ad04d17d48257dcdb7f63c69f55548f680aeddb7 GIT binary patch literal 5044 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21E_SAML21E15B.bin b/bootloaders/zero/binaries/sam_ba_SAML21E15B.bin old mode 100755 new mode 100644 similarity index 76% rename from bootloaders/zero/binaries/sam_ba_Generic_x21E_SAML21E15B.bin rename to bootloaders/zero/binaries/sam_ba_SAML21E15B.bin index 4ebf8235b6e0d323e64b2bc0b94d10c3ff8f686f..7dcdab5d05ea3c235bff0c4b4058a1dff83a111c GIT binary patch delta 380 zcmaE&_Ck&C4?ly#N)`r&nLs?3Wul<82m=GdLLdhQmIB#3C)%nrvP?|X1`-o18Tlr2 zGn(piY*qDURGgKm;=$!SE0N&?|1V_^h7UZyl)N33q!Oeu0@?mtZBo9?DpkR#$mJ|G zIh!$+kz?~kMtNo+^^xT|Bd6tG1sTPR|KHU&Uu4T>7Mvl#z`()4pwJGaOMtjyvM*OP zxttk~Pv+%TXWTs5l-rqc&E`sOZWh-!KqU=K3<@nktN_F{Ks*ts{RB|_BM_eg z;;%q_28eF}@k1c)0m?rG(l3GdH4wj_e3Cz!k!7-~fPaQtVv>SeeraAxVo7Fx9)o*o zUTRThvO=(1`-o18F?mi zGn#4(Y*q1QRGF2j?4jg5E0N&??=K|}h7Vl76uljkq!JiD*#2r#zRfCCA>u4EIiE3= zQDE~`MtNpNmd#&Tt}}94|5cDt%=rIZbMsZUY-YhJ0t^fs3=9e_K)L{kOC|?$RWrVx ze3r|Z@#JJdZgs}3lP$TO8CPts<>qE_eF0R`zywqd#0o%M1H==7+K&Lm-vaS5ApQu% zCxG}05Z?vj9-#a~ApI1Gp93+_aQt_(tq3`|T63=S8>!dV%Z7?~It85lab7#NlU@j)Pd3dD@u5Ly#RmoX?X e_~n-=7#S%T85o)~7#dlbnpqhbY7Mvl#z`()4pwJGaOMtjyvM*OP zxttk~Pv+%TXWTs5l-rqc&E`sOZWh-!KqU=K3<@nktN_F{Ks*ts{RB|_BM_eg z;;%q_28eF}@k1c)0m?rG(l3GdH4wj_e3Cz!k!7-~fPaQtVv>SeeraAxVo7Fx9)o*o zUTRThvO=(1`-o18F?mi zGn#4(Y*q1QRGF2j?4jg5E0N&??=K|}h7Vl76uljkq!JiD*#2r#zRfCCA>u4EIiE3= zQDE~`MtNpNmd#&Tt}}94|5cDt%=rIZbMsZUY-YhJ0t^fs3=9e_K)L{kOC|?$RWrVx ze3r|Z@#JJdZgs}3lP$TO8CPts<>qE_eF0R`zywqd#0o%M1H==7+K&Lm-vaS5ApQu% zCxG}05Z?vj9-#a~ApI1Gp93+_aQ?hHbV3`|T63=S8>!dV%Z7?~It85lab7#NlU@j)Pd3dD@u5Ly#RmoX?X e_~n-=7#S%T85o)~7#dlbnpqhdY7Mvl#z`()4pwJGaOMtjyvM*OP zxttk~Pv+%TXWTs5l-rqc&E`sOZWh-!KqU=K3<@nktN_F{Ks*ts{RB|_BM_eg z;;%q_28eF}@k1c)0m?rG(l3GdH4wj_e3Cz!k!7-~fPaQtVv>SeeraAxVo7Fx9)o*o zUTRThvO=(1`-o18F?mi zGn#4(Y*q1QRGF2j?4jg5E0N&??=K|}h7Vl76uljkq!JiD*#2r#zRfCCA>u4EIiE3= zQDE~`MtNpNmd#&Tt}}94|5cDt%=rIZbMsZUY-YhJ0t^fs3=9e_K)L{kOC|?$RWrVx ze3r|Z@#JJdZgs}3lP$TO8CPts<>qE_eF0R`zywqd#0o%M1H==7+K&Lm-vaS5ApQu% zCxG}05Z?vj9-#a~ApI1Gp93+_aQ?hHbV3`|T63=S8>!dV%Z7?~It85lab7#NlU@j)Pd3dD@u5Ly#RmoX?X e_~n-=7#S%T85o)~7#dlbnpqhdZhj!p!2|#uNL(cV diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21G_SAML21G18B.bin b/bootloaders/zero/binaries/sam_ba_SAML21E18B.bin old mode 100755 new mode 100644 similarity index 76% rename from bootloaders/zero/binaries/sam_ba_Generic_x21G_SAML21G18B.bin rename to bootloaders/zero/binaries/sam_ba_SAML21E18B.bin index 250925e3fb9bc7d8e05b2b248f0c7bdf595de8ad..9a98db4ce1826c5120a1cdfa87e41964391f3236 GIT binary patch delta 380 zcmaE&_Ck&CPd$UeN)`r&nLs?3Wul<82m=GdLLdhQmIB#3C)%nrvP?|X1`-o18Tlr2 zGn(piY*qDURGgKm;=$!SE0N&?|1V_^h7UZyl)N33q!Oeu0@?mtZBo9?DpkR#$mJ|G zIh!$+kz?~kMtNo+^^xT|Bd6tG1sTPR|KHU&Uu4T>7Mvl#z`()4pwJGaOMtjyvM*OP zxttk~Pv+%TXWTs5l-rqc&E`sOZWh-!KqU=K3<@nktN_F{Ks*ts{RB|_BM_eg z;;%q_28eF}@k1c)0m?rG(l3GdH4wj_e3Cz!k!7-~fPaQtVv>SeeraAxVo7Fx9)o*o zUTRThvO=(1`-o18F?mi zGn#4(Y*q1QRGF2j?4jg5E0N&??=K|}h7Vl76uljkq!JiD*#2r#zRfCCA>u4EIiE3= zQDE~`MtNpNmd#&Tt}}94|5cDt%=rIZbMsZUY-YhJ0t^fs3=9e_K)L{kOC|?$RWrVx ze3r|Z@#JJdZgs}3lP$TO8CPts<>qE_eF0R`zywqd#0o%M1H==7+K&Lm-vaS5ApQu% zCxG}05Z?vj9-#a~ApI1Gp93+_aQ?hHbV3`|T63=S8>!dV%Z7?~It85lab7#NlU@j)Pd3dD@u5Ly#RmoX?X e_~n-=7#S%T85o)~7#dlbnpqhdZhj!p!2|$#$XsOr diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21E_SAML21E16B.bin b/bootloaders/zero/binaries/sam_ba_SAML21G16B.bin old mode 100755 new mode 100644 similarity index 76% rename from bootloaders/zero/binaries/sam_ba_Generic_x21E_SAML21E16B.bin rename to bootloaders/zero/binaries/sam_ba_SAML21G16B.bin index bee695d671efe6b93a8e829e6a5e9a3c7844a2e8..a67096a7254744d54ddd7477130e9aa108a484d4 GIT binary patch delta 380 zcmaE&_Ck&Ck356IN)`r&nLs?3Wul<82m=GdLLdhQmIB#3C)%nrvP?|X1`-o18Tlr2 zGn(piY*qDURGgKm;=$!SE0N&?|1V_^h7UZyl)N33q!Oeu0@?mtZBo9?DpkR#$mJ|G zIh!$+kz?~kMtNo+^^xT|Bd6tG1sTPR|KHU&Uu4T>7Mvl#z`()4pwJGaOMtjyvM*OP zxttk~Pv+%TXWTs5l-rqc&E`sOZWh-!KqU=K3<@nktN_F{Ks*ts{RB|_BM_eg z;;%q_28eF}@k1c)0m?rG(l3GdH4wj_e3Cz!k!7-~fPaQtVv>SeeraAxVo7Fx9)o*o zUTRThvO=(1`-o18F?mi zGn#4(Y*q1QRGF2j?4jg5E0N&??=K|}h7Vl76uljkq!JiD*#2r#zRfCCA>u4EIiE3= zQDE~`MtNpNmd#&Tt}}94|5cDt%=rIZbMsZUY-YhJ0t^fs3=9e_K)L{kOC|?$RWrVx ze3r|Z@#JJdZgs}3lP$TO8CPts<>qE_eF0R`zywqd#0o%M1H==7+K&Lm-vaS5ApQu% zCxG}05Z?vj9-#a~ApI1Gp93+_aQt_(tq3`|T63=S8>!dV%Z7?~It85lab7#NlU@j)Pd3dD@u5Ly#RmoX?X e_~n-=7#S%T85o)~7#dlbnpqhbZhj!p!2|&AR9pf8 diff --git a/bootloaders/zero/binaries/sam_ba_Generic_x21E_SAML21E17B.bin b/bootloaders/zero/binaries/sam_ba_SAML21G17B.bin old mode 100755 new mode 100644 similarity index 76% rename from bootloaders/zero/binaries/sam_ba_Generic_x21E_SAML21E17B.bin rename to bootloaders/zero/binaries/sam_ba_SAML21G17B.bin index c1bc533aa7ca26fb5a5df6562ce67a7741e0eb52..d938686c95d96934e80ea08f0f65b265c67d5bdb GIT binary patch delta 379 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 d_~n-=7#S%T85o)~7#dlbnpqibzAwy)vu|U% zDQ?ifP}C1fz8w}RiFB^riDZXqUa$&`_q7)QrVS})OXHDxlKB?e`-#I++ zod5Gb&vVYq;AexMj=*Xu)dl&|>$@R;t+WO(&)#$GghKgi*J)_mJ4Yy~e!f|Z&44!x zmo-IKNp%miJgMnVYD61zs6wj48${C`$?r;{xhplQ6Uko`^^;SZMOp;O-LkHrWTmP{ zH3h2Y*Xv4fnN%Naz?}3;F=r{X5q90&6rn zm={3V`(h_1?hrLv#FAkaZrBU!EZ5NOB9fhHFyUABeZ%DROQz%>381~^C%{i=kH9hE!^O8zm5J#rRTR<}-1$n-AI;Jz!ix+|LP zRfsD27`CLdo}H5XZ9#h0oLejJqSijFG{2=9lf9EL;7L4o`rkR+NEW=Ykfj`#{Ao!N zu1WwK@=(}@oxVAHYQCr*4AKwLR78#%FQ;|GqyM#X^Lh4Gli`0Phz1pi$CtNd>u#6W z4^5r%9|es3y;6^FiyL8j90o37v*eba>*!}4$9A>c+I$IMPr3X=$@9z~wJuxD1Pf=^ znm>@8UyXKHbM}!!`vJ*+X0Q2@Prg~Bid(IZ{u_3|_Z-|~cYH}$WdHcOz*~;Dwz?tB z1_PZi#$E~h0xz&+u&qaHCnSeFi%cR3WC%$khX|o#xQ`635J{v_?|?Mss6z;N%-a9??% HebV(W9{h7I delta 919 zcmX|=e`p*<6vyA&yX)21-t}^q=113b_kJ`Rd%+}aObj`)+0bUM>(z)xv}yH%30w(k zpdr+sJ&=MTf^n)8tc8*)SX(eXf=CRMV*e49+drx{3PurPg~(x~lU(bJ@1pp}=M8U| z`ObIVn>p2SzT>SPT%S%g;pFt#Zk(K*UPZjdPAWU`c;N%(Mcl18hjNP3V3pm80Z_sG z+Yit=2O5-4-O0z#xJn|BZiF{~~%d$(w{{sacJx zl9$*|-rC?dVkgapMOn*}evtWmoyb|r*R0$UEa$V)WwXAa6OY-F=LKq}CHYI@5z3z5 zh*P3g_eOyv-VuY&EBfNms{X~1gAVEqxvKt#Y<&)+&VwPk{?A847I)K*8Ewc)z9OK&44u?X=4 zOV@QE2krxv_gt_U%FgzgOZncSSR; zD(I5$rwYd^t5cFcE1+f7y}JAYX?4>{3md8l**b)Ky~#Cq&+$W>;QE$$#8D?C4@pQW z#cC?YA0lgI`>tG`TFC2zA?kN26D*Zggnjry(7Ujhs)Vj{6rlc{+9k$viq zCB78cb8EShUla57+63;Mp+d{x z2u>Ehj`Vu=q$2>&5J!k}#5}RD1|YK?V2b|1!RMy5_I9nkwXGA{+PgdM@9rq{)(t8D E03&U4TL1t6 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMC21E16A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21E16A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMC21E16A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21E16A.bin index a718a1d03eff07d530e41792b0edee4225581e43..6c857054ce4c77f83fa8dad2a3b8f51f4c336b17 GIT binary patch delta 923 zcmX|=e`s4(6vyvL(jV5Cnjc%6_}1N*ChMz9XS1fRD-C;jrS3J)&_!C*&EgwG%>EnG zO>u(;hNAwVW>;i5hkva4#|DEn_8+A%HpQQRcIU&%GQt z_j|tgoO@>nKOFpE1lG#w9w?Mw+6#pn<#m7s_NHq$6f2*(&O*n5c|u9;qpebG7Q8vQ zswuikYWtYwNzc4rC)$`p6;d1CB%1C>{*xq{yIQ9@k^C9aI61vlq9u^rEgK3-PO5rT zQ=oQnqoD*>N$u_?TqK&Wy3_i^Xj%F%`>r@dB~J?XO0N=CB(Dp&q^HQ<-?7HWSfkm& zya3AH5xX&Qm#EVcmJG9S(*f9E`KDeMk?dTP3BR&$nxZ9+e4=f1`S^qdYNXgU8nMGgi2999#~T0sgx}y!Hmj?C+g~)Bw-(K; zX-4c)^n&ZCE%`B7h}9{Kl*pfRlHU>}!JW1^q$RyKClmaXBz+GYo%Z5o&Ph)fB%n%S z*_B1rq~qxPlmtz2BpR7!x0}_O7bJA;suoaC^7l~ezO%Htwtad+X7+#vcU-ZxJ<(jh zLR87euqEA%?6l;s3DURj+**ADwGLvXg>BWC?4N>^C-J};c>QQIS@gz2mU2?^M6~=^3z9%{W&i*H delta 920 zcmX|=e`p*<6vyA&yX)21-t}^q=113b_kJ`Rd%+|oCJi~V+0bUM>(z*jXw&Ki6Sxx8 zKtrg%=z$az5sXtsXcZ(?u&rQv1d$jh#r`8Iw|`V^6pSLo3X#J|C%M)c-$n6{&l}z_ z^PTU!H*==*eCHdzxG|Gz!l{|@y*M>Dvxaz$omO_^$-)Q93%FNtj^q@l!796xgP?-> zw;!Nu9yBPOxs#8d$88zBV5p`Jr6lX}rY2r5gR$S$R48@d2E%kE|4M@4DV8-8B)3In z=g6JBmPg4qL`6Z(NZpJYDwf{fs3_qDDE)pL-vJ{~-07UN{5Sqx{fp?+BySR)+9e09$NEjnYyP&v#{5?3F98M?F_BoV$yB`l$UgPQ z5?>1Jy|q%wuZe|vZ4x_XsZes$&FAE1gWkX=1?itfY%R>*HRIj&L%Aud9}MSSUfcSL zjJ-S1=*(wFa&?1}Uu6#k+U}kxYpO@D^!PpYTHrqXmMsL@sFACICR7VG!Jr5Cu|#zY zQ!HKm9Uf(RxVELc4q%k%A;yVb!X_Rj4g+YzG(Jv@5Kpr4@L=DLd5n))nkx7uS&1LX zYFqFRWr*Ue4E_Hag8%ire*KH+b~})M(yI?!IW`d) z#i_#Akv>mHIs))Cag2DMSRnS-0AzLoOw&I&^z5|O-mbN`wsk>Udr#*BJstZBX5C@s EA9mw%)Bpeg diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMC21G17A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21E17A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMC21G17A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21E17A.bin index dfee15a75f575499f32787b1b0de96342a969ae8..33c527d033f98923379644734e74a1263a345a27 GIT binary patch delta 923 zcmX|=e`s4(6vyvL(jV5Cnjc%6_}1N*ChMz9XR{@&D-C;jrS3J)&_!C*&EgwG%>EnG zO>u(;hNAwVW>;i5#Xna4V}rpO`;Sr>o8r$u^1$L+Q3?vRut8YCyQcMCPb&Dw=Uxt+ z`#s-#&b_ng57O_Cz*;5K2gS;Zd!cxvvJSAo-f-=PQuQ;}Ip{h#PbjH>xK)nLf;SIW zHAPoReIK(tnVI(*L>qIcLh8etMAIF~f09IV*BVqOl0Pk)C#Sc{v<#BFWm7@POI43* z3e+!cG?m~gso&j%OGNY4c3K}BZA<@U-xY_crsVGkpt>RXn_?293)^d1 zbg7;wL5WXA!Rk?$Pj-whpO~;fjg&e@BX+n1QNOY2SmWQH^c&pC<#g3=`%7l))}om+ z&4^u&UUVI^B|k2Uu?B^aGWl~(@>_x=xYH4bjHLJGWP+cTWZ;3L(|)|ndFkna1k^|@ zx3Z|3bR3>kkIjw`mdCz>Br zh${IQwxqY2oss-iK?c^HTdS|5)*-C4u&o-CgHw?5Bpx^iUOU!G7QL~MrJR!dQArZ6 zS^yhzPuPZ?y*YPwp{yPa(znr6M2;HIW_81(|FwGaN%l&c;lD441~rJsS9au^ZkO4& zZN2gD1dRN>+Kg|Dufp^cq^@AICuQCDHU+;Uq>&xz2+n1f`1{rY%>^kwJ)&l&=6EvA=D4E z>|E#s6sy054!cu_LWE2sd8C3|L()44$?PQLEPjvdnV0B+B;7x_KS`3Q;lZKdRJwY! Hd(!nUl0kE3 delta 920 zcmX|=e`p*<6vyA&yX)21-t}^q=113b_kJ`Rd%+|oCWai@Y-qFB^=iaMv}yH%30w(k zpdr+sJ&=MTf^n)8tb(KpZ52$9AQA(m*ndRj_K&KKf>DH6A#xb$B-c9QyD0wgdBYoK zzVn^;W=?mW>wKdZH)c{zI5jiA7pLZC))23x|5L7V# z_5*ayg9fG3xAXCHxGjSh4As=3lw@7r)Wqv$F!s5c3Z?E_V3@AtUr8`L#j<9C@+kR+s3@ozshd$l#nRgw6(zg?rQdJi888CHoz7XyfBoOpzlc6f@+RR~ZdRkJ zJ2V*iExxQP%RLA7nmX7jl;JH7hp-%lT|{*_?0q4TYG7&fpo4ltu4>cGv%8$sgcv-{VJp6h|^3Mb$xm%UMl+;!!KYq7_mUY+En#uQz(%XnhEJFOi z@-^Mo(&YQNL_>8Y*?64IZP8C2mDqS!af}2dKSg4Hy4P23Z0;VC{d>^B@0IwCJ<&|7 z3cBR`slu_!>XhV93usw$udF;rT0L~q;-+dswhm*5H@WWKd*bjGxV9}Ganwo4LlTlo zv6{;9hsavl{>zu97xVg1NPCq`?UDo5qy47kHGf-SV}2|2mjDBcm`E(wWGY^NWS{zD zi7y5A-dw5VSH(iTHi;dxR4BRW=5unhL2uxbg7nWKwiagZnDOrVq1=?!4}^0suWfxr z#@-!hbmp@oxw=8gudoLLZFf$THPxe6di)-HEpQKh%N7D{)X3F96RL%pV9yI?!SvCmHIs)(%ag=zUSRnS*0AzLoOw&I&_{_A{-mbN`wsk>Udr#+mJ)PYJv+j`c E50>+DlmGw# diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMC21G18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21E18A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMC21G18A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21E18A.bin index 69f457e72531ab389e21af5799aeaeae3908c7b1..14314109281e9fcca3544f96e3a47d43334f5132 GIT binary patch delta 923 zcmX|=e`s4(6vyvL(jV5CE~=prrZX7LRoX8(=p zrno@^Ls9=wvnw*3;vcL2vB6-C{l`%lo1$*}BM(+wD@sA37B&bgc-OSv>q!Ow_}t5Z zbHC?%&$)Ld`DyZ#VOTAvdZ18#Z4VT#mDd2~*}INiP^^6II0GH~=LjXW&o)bu8F1&| zvZm-NsqJN^D>eObooJ&rRY+}UgJ`-f`CUmgXSGgsBKZrVadK+2L`xvKQ#KTooK*F& zradb%*(d(X#ko_5*Q{N*))^ZQOUK4dP(#JGk&qQELfC6;*yh;J$Grx(vsqpBTHa!&d2=C? z&16DWDSX~>#FG4|EJW%QhD+qnS;=n-661DT6jG8toRu+tQj)&MwoZHTGH0c$3t~_u zk?itOGd4^%u{r zwZ1RAzZ~f@=d7c}&O?&lX0LkUPrgy7ic@Wj{u_4D^DNwBcRX=eWdC@2z+H*9w>u%t zlD=*jWiR`Ff#+G=-_fUa5|T%rK_-zHGKi#+2}0;7?qi6FjI&ezLusI`bGjk;oNT-e z!LLbQM)0fBi|ZBX{r^R@n|e58g^GEc`}g7VPIu<1F~PqTZnohMI$GyhXJ8O2EFb8F z8FnUc3<{Os0tcOm0|7#&kQ`D*t{}(z*jXw&Ki6Sxx8 zKtrfMdmsfx1mjc@tb(K#S`|!>AQA(m*ndRj_K&KKf>DH6A#xb$B-c9QyD0wgdBYoK zzVn^;X3lh;>wLWzH)c{zI5jiA7pLZC))23<)5>lx|5L7V# z_5*ayg9fEDxAXCHxGjSh4b{}4lw@7r)WmCLF!sBe3Z?E_V3@AtUr8`L#j<9C@+kR+s3@ozshd$l#nM|F6(zg~rQdJi+h7EWJDszZ|N6hHe-V9}1Jy}44!uZo3wZ4x_XsZes$&FAE1gWkX=1?itfY%R>*G2`9!L%Aud9}MSSTHE@v zjJ-S1=*(wFa&?1}Uttdf+U}evYpO@D^!PpYYTzFHmMsL@sFACICR7VG!Jr5Cu|#zY zQ!HKm9Uf(RxVELc4q%k%A;yVb!X_Rh4g+YzG(Jj<5RbF*@L=DLd5n))nkx85vJx-I zYFqI0GDLA!hW>vI!T)+*zy3vZyB$cs;Su~}v7N1k>%BV`FCSoABi;BR>yI?!SvCmHIs)({ag2DMSRnS-0AzLoOw&I&^z^jW-mbN`wsk>Udr#+mJ)QdsX5C@s EAC~!Zl>h($ diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMC21J15A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21G15A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMC21J15A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21G15A.bin index c6797f965c3635626b9e711a5fc49b2d619f5e49..cd2d41479cc2c08f89ef91cc81e472a543a2aa50 GIT binary patch delta 923 zcmX|=e`s4(6vyvL(jV5Cnjc%6_}1N*ChMz9XWy2vtu*ZAmAcnFLlEnG zO>x5phNAwVW>;i5hkva4#|DEn_8+A%HpQQRcIU&%GQt z_j|tgoO@?dAErJShSf^C4~mr+cSG?;Wes4Sz3JKsrRry{v(UAFj!;tnXtNxf0dEej zYKozf`W|L`($nuZh&Jj_h17>Oh-NsF|0Id#t~IDZB!5~oPfl%?X&EGU%cg>old2Kb z6sTWZZz{o6Qop+a7m4PpZMQ!$+ZO-JzAFw<$#vmg?pLCU?>mHd_<3GQ^nAuZ{>S()IcBpG<%7_=WRb544CAOSTJ z%Pudd79B(9rzB{KBhkndyWOfzKQEzYN3Dp0lD~&y_npO+)veRxGP4UbxZ{eg?uzCH z6{1Q$iY@7FW~U{8Rgi%-=hn*WsC5u4&2Op3is!LE8hr&d8!Vk) zYkynzULNVO=L*M4-G?RrfxY0(o@wV I-4m{V0keH{8~^|S delta 920 zcmX|=ZD?Cn7{||ZlPp`^lBG%4mtDJa^RnK$6w}(8S{izL%hsD+Gb^s5>o!wtA)}~; zl`>x!kbxqC^-LK!1?d#FDcFS~QVV0aFQStBVd|=2H-v73N?6BEo6U24QpFFy=kOfP z`JexJo^wuioauP48`h>$O)xPvx(g;|rd9whvlGe=I9B*fc@=gk_JN#YH<)E-yq~DV z_}fcJa+Xk1I(a`IJp-FFa86eZjg;an=}wKkTPFH$hpMF1d5`FZBl!=K=&oX!8boqS zRCW&C&(l0ez9uRPYDQ{CSXZI+;aWur&XLlsdvJ>AzT!6fwCTP2@9OKKhf3ZgT#Ll&4v_D_G8Bfx~7zgU6q?B+m<=hAH`L;wj8t zUXPQaR&$35N_-#&>^HQ9BUOD1!~1N|8gf;A4cYn}gzd)zc>QZf0w#CTwh?Z~O1>ca zZOe*e^O28~=P^GhN1|m4-Ffoo107EPn?qY`x0k!a&Eo7tcpKO~{?!Qu!CN`3;xZaY_(Zm#bhki9!WhhLTG&7I*) zLM58yd$7Wh%IcKlFACDK;#^vK1+}{Hr1^E#m`n^pyF0$>JaX*726AO{G-Rvek_RM- zE5&Lo$6q3AW_vGQn4HgR0|ELrn%XY=%x8KH({0>XVk2HNa7PdwiV%w})?_MPe`jBN zBeCxVbl+X7iX$ zAjQ(vzraDJ1#4S6>j)V}x{y(%8?lflk^O|wK^&h&hLGpjXt2L$>nub^OsWe0g{;K0 zvf2{-a~Z%mEd&3*2LFFOuV4Kxyv6dR-**ZArP#ujgZ1vM^B4E9jiF9B&w4}6aGH&U zhGC-cW2nc~o(>W60&)oX6q!SI*ASA~M#v=ogMBYe(zZ6*mS|0q*0!#WWLM(Rf>F0$ F`3IKGbB+K2 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMC21G16A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21G16A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMC21G16A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21G16A.bin index 32207320ad68ce472c31962f4fbc58a1638c5d69..dabb15f0fdbdff862ce545f5d1b42489e09002f9 GIT binary patch delta 923 zcmX|=e`s4(6vyvL(jV5Cnjc%6_}1N*ChMz9XVax@D-C;jrS3J)&_!C*&EgwG%>EnG zO>x5phNAwVW>;i5hkva4#|DEn>pzpi*c5;Mkp~vnic(Ohg$=?A-ZicFdQ!nZKKF9q z-0%6`bMBoP{CM!AVOTAvd!SH$c{dcUm)8L1+1sw2P^^66Is+a1<_IOVPc}=j8Sv)d zil*o)sqJBwCq4aPooJ&DRY+}UgJ`-V`A?E)?rNRtMDk}vuOaDiyP>UQfhqh;~G?0e!Ml{_ij%e_iek-RS8qMjnVf5#f1VvS}8 z^8zS)SM0>Z9imQ4STfAQP5WS-<(qn4M6$C@Cj832X_}mV&XoLp0aQ06e@9GUbZ%=c zi4N5hB`EQ^$XjozOUK(rmX3{Ephk*qBN01Xgs9)xaICTKkNXYoWV5>JxBW%4d2_+c znr6faMu-E-4)IC zD@2ui6kF2W$WBZCx*&aP&h3>qQR@I!n%`25$^J=5c@htuy>A?8CJWwJ$Wl&7{Tc10h1DkQ`D*t|Eim2uW`zDH6A#xb$B-c9QyD0wgdBYoK zzVn^;W=?mW>wKdZH)c{zI5jiA7pLZC))23x|5L7V# z_5*ayg9fG3xAXCHxGjSh4As=3lw@7r)Wqv$F!s5c3Z?E_V3@AtUr8`L#j<9C@+kR+s3@ozshd$l#nRgw6(zg?rQdJi888CHoz7XyfBoOpzlc6f@+RR~ZdRkJ zJ2V*iExxQP%RLA7nmX7jl;JH7hp-%lT|{*_?0q4TYG7&fpo4ltu4>cGv%8$sgcv-{VJp6h|^3Mb$xm%UMl+;!!KYq7_mUY+En#uQz(%XnhEJFOi z@-^Mo(&YQNL_>8Y*?64IZP8C2mDqS!af}2dKSg4Hy4P23Z0;VC{d>^B@0IwCJ<&|7 z3cBR`slu_!>XhV93usw$udF;rT0L~q;-+dswhm*5H@WWKd*bjGxV9}Ganwo4LlTlo zv6{;9hsavl{>zu97xVg1NPCq`?UDo5qy47kHGf-SV}2|2mjDBcm`E(wWGY^NWS{zD zi7y5A-dw5VSH(iTHi;dxR4BRW=5unhL2uxbg7nWKwiagZnDOrVq1=?!4}^0suWfxr z#@-!hbmp@oxw=8gudoLLZFf$THPxe6di)-HEpQKh%N7D{)X3F96RL%pV9yI?!SvCmHIs)(%ag=zUSRnS*0AzLoOw&I&_{_A{-mbN`wsk>Udr#+mJ)PYJv+j`c E50>+DlmGw# diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMC21E17A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21G17A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMC21E17A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21G17A.bin index bd8bf2d1adaed0cf55f5b23103aafa0d7fb48cc2..8b59c03b2aceab4da61094fc1a4c2aabd4b9f946 GIT binary patch delta 923 zcmX|=e`s4(6vyvL(jV5Cnjc%6_}1N*ChMz9XS1ekD-C;jrS3J)&_!C*&EgwG%>EnG zO>x5phNAwVW>;i5hkva4#|DEn>pzpi*c5;Mkp~vnic(Ohg$=?A-ZicFdQ!nZKKF9q z-0%6`bMBoP{CM!AVOTAvd!SH$c{dcUm)8L1+1sw2P^^66Is+a1<_IOVPc}=j8Sv)d zil*o)sqJBwCq4aPooJ&DRY+}UgJ`-V`A?E)?rNRtMDk}vuOaDiyP>UQfhqh;~G?0e!Ml{_ij%e_iek-RS8qMjnVf5#f1VvS}8 z^8zS)SM0>Z9imQ4STfAQP5WS-<(qn4M6$C@Cj832X_}mV&XoLp0aQ06e@9GUbZ%=c zi4N5hB`EQ^$XjozOUK(rmX3{Ephk*qBN01Xgs9)xaICTKkNXYoWV5>JxBW%4d2_+c znr6faMu-E-4)IC zD@2ui6kF2W$WBZCx*&aP&h3>qQR@I!n%`25$^J=5c@htufj5pclLc=qWGN>ke_WD; zs~W(D+!wZCXKu}&o-e6~gY-Q#6_F#x^BLXn=zp!;dYZk~V)!2jqCpkn@#Sr~hTA3f zZA*9jI|0LguQcL2;;S${0jbN_EV&v0baQw_XO=Q>i>s_B`=Ny~kFw!Q#2K z)^}z1rI9Xc&OTb~JS6!K>?L3F(O2tKajT8df5|TTo`Rp*kG>=+nBX^rmu&>YuGV?h8QKpOmJjv9 z3_BA#28GIRp@Z(!fe;~6NDe6@SCPSOgrv6!vBTkWtja zN}0b{Kn98k);mRT3eqV!73@M0sf97zKcbTN$JAB9Dngx5308L7Y~Jfh76160%emb9 zz2AGzy=S}5cfHz&o3rT_oSvQ7kJIzB>xfs_8D%e?D!!*Yi~AMlXkKxetcp7|1S*(+ z`vJNaK!ftxTZQ;}+>yl#hHC0iPO@%qdh(SD7zbQUg>uhLFicnSuOt|rQbjXCa$8h) zj@~M01(bYKR29^$)Xk`&V)>2DsuEs+^6xkCO)vtb-Of47f9>DZzleTK@)qG)X;q`D zOAtS_ za#gpr4Ea7O(NJAUHXdd3+w{}NB{ttt8Ye-?&yd)k?zPqHTf2wlz&RXA2%otFGb0d4E<<<)0MtCvn%+EPu()ChKZlN;{cr;cuet2^QmN1c*9Bq6Dk zYN;H5h@6!hxO8!5sh|&sw3o=#9yw?|JYZU0^S4zt?zcjJ2{5pPiNs1>w(9jq_NhOX z_)=isjn!&?MJzUIQ`k92g_2utJ|{Pu^aegDO8*>UsyKJstar~3m6n`-D4c&`efx_t z_V!@2vydCjHw;OBncW{~zkRZzsUE%B<9FE0fxGZqwisxqMy>@~P%YL4gC4w>C2C`s zW|`XW@EFs>^=&;30AoZiF+ubZHt_&)1V9_1@eyK_c#KVihx&IdV0_%tRKY)z)%by| zwFQ4)hA7U-(EqO?_+QT(H@=AOv;&#fJc55LcCxi_qj%TRrGspHqz6A_1Cdrd$0j3V zI9>cY((mcaL;#*3juY<^i^PFCfb4F78Tto@pPJD+I<$^ddpERq^mg6T+m$Ms4M&uJ E0Cu!;%m4rY diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMC21J18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21G18A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMC21J18A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21G18A.bin index c76d7026cee2cb165a168c00a799d6d1192d01ed..6caa86030c1118e378495a148215b3ae0f59e8d3 GIT binary patch delta 923 zcmX|=e`s4(6vyvL(jV5Cnjc%6_}1N*ChMz9XWy2xtu*ZAmAcnFLl_19jY>xTsk36urR+NH5Eo=~0*j>|luO}7!<8vx?_+2aNKWlCzCN$f8JlTnm6XH zjAcdgrRaIr;k@KWWFc0kFjOLc%}9PzkOX(y;*gT`{)|lUlalm3atzvwmpLmvU66n( ziDj1NRf~?I^OF)Z#gS-alHF=nr(TxOwXIq}LCHTvu?Nn=^2+AvF`3>08r*foR(3?Q z{R&YfAHkM%H?mWbzadE9s&jMsE!5hNmF6~8W3qn&lAgpPXV065o5{R47P6HSl0PX) z!c`4mL+*>bnNQ!CIXzcW4+ZJ_XeuIy%@@;#=`sFZzVR%3y~XrD5JZD2#N$g_vJJP3 z>`qH}{CfdI50@M9E%9xbo`B?KY?j>g^9}l0!?9hfw6|Uc*j1@KR`xvgXT2w{W`f0Y ztF7*?8d{#Ez zhTzv_z!LnL^y7L}`u~3s?Y0q(-mj)*0Fd6_yM2 z!ZbS*ItGQx@1XzN`r2cuJPDy$1-j9M6D`!Y7k{V;V^u!>M8RDzYAHk;@8q>3MY&*3?o z^FROdJm;M1IM?xBH>^#inqXpTbSF&AOsxQ1XD5~IaJ=xT@+$09>_a)lZZONvct25z z@wb%zpH-{Jyh~0;aY4~ z!>Z&Z_LIBT|Bcv=vq4d&dDQnak0%M7r992bJ;8Dw3mi7%89ecnC3#)|HB8B069+JR zc|A^wTFo6MDDi<9u;0)Yj#l+84DYi+YsgjgHDv2^5VrRQ@cKU=4Vc_X+eWw{EBS)x zw=FA@%||{~p2z&K9Ep}Gbmz&h7bU+eNSr%WF-S?ejQO!gC23i84BCvoUzhGih(nP? z_blGlESg5&$0X>gBhkjQY-WRY;)sOCM~WjTDEUbg`_s9zba#FCfb87?I()B0@9qd^ z5-QOo-;EWHR92@Xe^HQ@73b>GE2!0lC(W;`#$;j;+THP0=keo*Hjvw!q9I!ympmXz zTq#y#IsOn?GuwOR;^cf@8wk+1(bP8CXFlC)m~P{@B{t$U1AhskLlI)J#hOgT>yPY` zHxj!cp!?oZCBH7_>ghPNPh+9vx|^@j%^JRe3kB(&21pd9ADVJ+`=Q*F)%FB)Z?0^7 zOGZBFYqV#xL%F(s$*-~}eXS3Vm8t5|Dm^~K-tj#K-?BMhD>ic3*92;z#_xB*6D(F8 zffP$ue+P$|7OZXQtRrL?=|V=4Zp1?NBL@kggE&5e3?a|4(O`eimRX37m{b+~OIeAZ z%W6yT&tw4Ov<&?J8vOtDyngjsc(dh8zwZ+KE3ug^2kYHi=CAB#8$+G&1?vqp!)Z1a z8it9&tx%7vJsl$C1>^{F7MVkK)ew@|O2{PsgMBYe(zZ6*mS|0q*0!#WWLKiIVALH{ F{sETRbC3W4 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMC21E15A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21J15A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMC21E15A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21J15A.bin index 58f3a4052320fb0f1c2bbb2f4bf01c97286cab5e..772a84d3570e1541806947b9c6e1ab1ee2e7834a GIT binary patch delta 923 zcmX|=e`s4(6vyvL(jV5Cnjc%6_}1N*ChMz9XVa!^D-C;jrS3J)&_!C*&EgwG%>EnG zO>x5phNAwVW>;i5hkva4#|DEn_8+A%HpQQRcIU&%GQt z_j|tgoO@@7J{{*xq{yIQ9@k^E`VI61vlq9u^rEgK3-PO5rT zQ=oQnqoD*>N$u_?TqK&Wy3_i^Xj%F%`>r@dB~J?XO0N=CB(Dp&q^HQ<-?7HWSfkm& zya3AH5xX&Qm#EVcmJG9S(|*`s`KDeMk?dTP3BR&$nxM0;sF7mZXv7W|A?i0a9c%pi6Mlm`*{rVmZGX{h-dZ%X zrWvtI(F?Alw&cfTAy%g_QX+rONq$R^1b5ovke2k`oJ{ajlJq@rblQuTIVU|`kbo+Q zWmgtela8bFQxY`Ak!WO^-ELNAo|n+It6D%o$=^e<`_9tp+V<%Qnb`vx+;PR$_C$02 z3Q;8=!)W#X@@SVeZyzgm9+vzE_JS|@@XK|oxYfq!KWCSGPr%RYM_&?_*gw7=@K)mO?QY1h zp+Gl`vF8H6z*8(4?C8@v3CSamBU4BMIe=u4NkZrt?&FAsOt90z!x^Bh^SUAUyllJ; z!EeZbDfo5i$Mu@@|NkP|Ej=2sBgH(<{p;ujx7U1RT<|Z1mu&{auGR(C89D$JmJjv9 zEIS)I4u#5Zp+oM}!4M(SNDe6@*N~wdgrs*8at6Og=JZQ+Fi8jc2a+V28cq%j_YYQ% IbWXbd1+#o~8vpFz3b&J&5y3>?)_*s_JT=FObj`)+0bUM>(z*jXw&Ki6Sxx8 zKtrg%=z$az5sXtsunLkYSQVNcp-2prV*e49+drx{3Pusq3X#J|C%M)c-$n6{&l}z_ z^PTU!H*==*T<06TxG|Gz!l{|@eK<8Yvxaz;omTeX$-;-q3%E~lj^q@l!796xgP?-> zw;!Nu9yBPOxs#8d!|fS7Z>XjYr6lX}rY2r5gR$S$R48@d2E%kE|5}3KDV8-8B)3In z=g6JBmPg4qL`6Z(NZpJYDwf{fs3_riDE)pL-vJ{~+~u6L{MY|o{j2EHBySR)NpB-2u?X>l z%hz;UOOx*t5)IXrWa9}ow?#j7Ok(5R#W50;{4|OE>0V#Cxw(5t_U}ale^BB#_eL|V zD(I3QpbEz-t5cFcBcNr?y|VH=Y4y-ai<_zm**c6J-sHM_-^n9e;M(?h#8D?D4@pQW z#cC?YA0lgI`!8RdUd-!5A?;N%wObBYkM*0D*SxX9#{5?3F98M?F_BoV$yB`l#4h<` ziLV6q-dd^TSH(iTHi;dxR4BRW<_mJOL2uwfLHcJATMM(>X1u$9EH`EKgW=rEYg=ED zvG)cVo%!rYu5M8BE9{{_+g%f7P4(!N9>33C3*3v}v4ubzHF7o3gleHC81&!+EKwc9 z6iZisk4Kpvu5IbA0~jTGh;gEqu!)C>!vNYajgJ!}#FK11JlMB$9^+${rV9S4ti+FH zwJrEZGDLA!hW>vI!T)+*zy4)(haE`2=@I-hv4gFK>%BV{FCSoABi;B3>yI?!SvCmHIs))Cag6wYSRnS-0AzLnOw&I&^z5|O-mbN`wsk>Udr#;6JssTzv+l6+ E4|d&h(*OVf diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMC21J16A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21J16A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMC21J16A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21J16A.bin index fd76e56126a00d43b32f5c7194b7f5a3c70c521f..224717caae3ec0c2554114b1577c50260bfbc428 GIT binary patch delta 923 zcmX|=ZD?Cn7{||(q%YQ(nwPCjyz9>by3C|167oq>)$vxJh`ryHf%Gw!aDiyP>Q?J>qh;a0=zHP-l{_ijOT9`|k-RS8qMjl<|G*rdVUA`8 z;{qsqS8T_?ZK6&~m@>@5O?zOC<(qn4M6$C@Cj7>3H%&~vU`qah0ID03zbnRZcW!eo zi4N5hB`EQQ$Xjo#i^toB7mtluphk*q!x1}Ngs9(GcdXGLj{6PnWV5>JxBW%4d1Kzp znr6fK9CBl%5165MHvLt4`NGcv(XO49ep(P=MU=B)H|K?15I zmR*`xO*)FsPfE}fN1~BQcB@&PdRao(wrT+dCI1k`9ykljE1RdsWM&6waMu-E*%8h4 zD@2ui1WVH0h)zrXh9G^b&duewP-`D%n%h*3$^HpQc@mGD-ESUlCiC7{$Wl&7{-h)c zS2chIxi4(P&fJ(eJy%i>1?l@}Dk6uC7c;uy(f?k)@hp42#qd86M1v~C<4ap|4Y!Nz zPD^+EdjUfammB+A;@dDi0jbMaEV=3D8}ze=ZM#-!Z@mn#t5SKa?0M?XdXKGUgT-^J zt?$Y1OT%5(tbL@|c~J5n*->Be@z?59ajT8if5k5Po`GN3Prf89uz!3#;H|{l+ue|1 zgMn@sVJ`)Kh38l@*wLqT5|T%rMkbI1vKPr9osNi1o!wtA)}~; zl`>x!kbxqC^-LK!1?d#FDcFS~QVV0aFQStBVd|=2H-v73N?6BEo6U24QpFFy=kOfP z`JexJo^wuioauP48`h>$O)xPvx(g;|rd9whvlGe=I9B*fc@=gk_JN#YH<)E-yq~DV z_}fcJa+Xk1I(a`IJp-FFa86eZjg;an=}wKkTPFH$hpMF1d5`FZBl!=K=&oX!8boqS zRCW&C&(l0ez9uRPYDQ{CSXZI+;aWur&XLlsdvJ>AzT!6fwCTP2@9OKKhf3ZgT#Ll&4v_D_G8Bfx~7zgU6q?B+m<=hAH`L;wj8t zUXPQaR&$35N_-#&>^HQ9BUOD1!~1N|8gf;A4cYn}gzd)zc>QZf0w#CTwh?Z~O1>ca zZOe*e^O28~=P^GhN1|m4-Ffoo107EPn?qY`x0k!a&Eo7tcpKO~{?!Qu!CN`3;xZaY_(Zm#bhki9!WhhLTG&7I*) zLM58yd$7Wh%IcKlFACDK;#^vK1+}{Hr1^E#m`n^pyF0$>JaX*726AO{G-Rvek_RM- zE5&Lo$6q3AW_vGQn4HgR0|ELrn%XY=%x8KH({0>XVk2HNa7PdwiV%w})?_MPe`jBN zBeCxVbl+X7iX$ zAjQ(vzraDJ1#4S6>j)V}x{y(%8?lflk^O|wK^&h&hLGpjXt2L$>nub^OsWe0g{;K0 zvf2{-a~Z%mEd&3*2LFFOuV4Kxyv6dR-**ZArP#ujgZ1vM^B4E9jiF9B&w4}6aGH&U zhGC-cW2nc~o(>W60&)oX6q!SI*ASA~M#v=ogMBYe(zZ6*mS|0q*0!#WWLM(Rf>F0$ F`3IKGbB+K2 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMC21J17A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21J17A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMC21J17A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21J17A.bin index 8916dd16ed52c4143ec33d8cc7cb199316b40812..8fac66f102bd9a1f70187588f5e21cce88bfef62 GIT binary patch delta 923 zcmX|=e`s4(6vyvL(jV5Cnjc%6_}1N*ChMz9XVax@D-C;jrS3J)&_!C*&EgwG%>EnG zO>x5phNAwVW>;i5hkva4#|DEn>pzpi*c5;Mkp~vnic(Ohg$=?A-ZicFdQ!nZKKF9q z-0%6`bMBoP{CM!AVOTAvd!SH$c{dcUm)8L1+1sw2P^^66Is+a1<_IOVPc}=j8Sv)d zil*o)sqJBwCq4aPooJ&DRY+}UgJ`-V`A?E)?rNRtMDk}vuOaDiyP>UQfhqh;~G?0e!Ml{_ij%e_iek-RS8qMjnVf5#f1VvS}8 z^8zS)SM0>Z9imQ4STfAQP5WS-<(qn4M6$C@Cj832X_}mV&XoLp0aQ06e@9GUbZ%=c zi4N5hB`EQ^$XjozOUK(rmX3{Ephk*qBN01Xgs9)xaICTKkNXYoWV5>JxBW%4d2_+c znr6faMu-E-4)IC zD@2ui6kF2W$WBZCx*&aP&h3>qQR@I!n%`25$^J=5c@htuy>A?8CJWwJ$Wl&7{Tc10h1DkQ`D*t|Eim2uW`zzN`r2cuJPDy$1-j9M6D`!Y7k{V;V^u!>M8RDzYAHk;@8q>3MY&*3?o z^FROdJm;M1IM?xBH>^#inqXpTbSF&AOsxQ1XD5~IaJ=xT@+$09>_a)lZZONvct25z z@wb%zpH-{Jyh~0;aY4~ z!>Z&Z_LIBT|Bcv=vq4d&dDQnak0%M7r992bJ;8Dw3mi7%89ecnC3#)|HB8B069+JR zc|A^wTFo6MDDi<9u;0)Yj#l+84DYi+YsgjgHDv2^5VrRQ@cKU=4Vc_X+eWw{EBS)x zw=FA@%||{~p2z&K9Ep}Gbmz&h7bU+eNSr%WF-S?ejQO!gC23i84BCvoUzhGih(nP? z_blGlESg5&$0X>gBhkjQY-WRY;)sOCM~WjTDEUbg`_s9zba#FCfb87?I()B0@9qd^ z5-QOo-;EWHR92@Xe^HQ@73b>GE2!0lC(W;`#$;j;+THP0=keo*Hjvw!q9I!ympmXz zTq#y#IsOn?GuwOR;^cf@8wk+1(bP8CXFlC)m~P{@B{t$U1AhskLlI)J#hOgT>yPY` zHxj!cp!?oZCBH7_>ghPNPh+9vx|^@j%^JRe3kB(&21pd9ADVJ+`=Q*F)%FB)Z?0^7 zOGZBFYqV#xL%F(s$*-~}eXS3Vm8t5|Dm^~K-tj#K-?BMhD>ic3*92;z#_xB*6D(F8 zffP$ue+P$|7OZXQtRrL?=|V=4Zp1?NBL@kggE&5e3?a|4(O`eimRX37m{b+~OIeAZ z%W6yT&tw4Ov<&?J8vOtDyngjsc(dh8zwZ+KE3ug^2kYHi=CAB#8$+G&1?vqp!)Z1a z8it9&tx%7vJsl$C1>^{F7MVkK)ew@|O2{PsgMBYe(zZ6*mS|0q*0!#WWLF|tFzOB} F{{WWLbB_Q3 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMC21E18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMC21J18A.bin old mode 100755 new mode 100644 similarity index 64% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMC21E18A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMC21J18A.bin index 3e03b061ded76710d38ce5eafd58c9bbbec17ed4..5aa3fc78e1275de1e8a4ff3c1711c168e9485d3c GIT binary patch delta 922 zcmX|=e`s4(6vyvL(jV5Cnjc%6_}0CbChMz9XVV{SD-C;jr7q1g)X0juS$ugW>l_VXd6%fkOF(y->JbUI$pWSEDW_QM9xH}$$0@^eiY_?3UtG&S>d2E{uPRKrB^raVH?`R%nN zJ2X#}k;JDmZ@sQ9pJ*FfK0axI7AdxkMeJ}9qJDGJu_nGh;Wveo%^I5D_7^kFTZ@@& zCKIts(F?AlHi~0dh}BgXEwMl6P~4O(A)K~2q)@#(hY4{CS>JufPd|Jl=#7OeZv9)Zlcz(V0 zE$seetjn6Wj}CM+ zpc}^dvw>gW37!mg^y!_9<%vg$DI!4}AkxGU#?*1zCkTs}STV*mxUK zT*p90ifibn^(y-Re-Z7L5slc9VxH#yb@YPUn|WwLiZ7&>ZwAAz)&<@fIsg@(5B0(< zKN~s@h01TCL+-(YA;zYO98o5&62m(fOYLOr41JIE=@-?(q&m<)kYvfBk>tS0U}ds% G%JnZls&nc9 delta 919 zcmX|=e`p*<6vyA&yX)21-t}^q=113b_kJ`Rd%+}aObj`)+0bUM>(vyEXw&Ki6Sxx8 zKtrg%=z$az5sXtsunLkYv{f)Yf=CRM(*9Gb-2PFuQ80=SD?|<>o#a|)d>6$(K5ux# z%y+)?-puKavmI~s;QDl`2`8t=cH`vi^eW<2c1qcaCkh`cFX3**Ih<3R2CM8&41fye z-+qA3InbbV`ffgc7Pn;ZyrG&pl#;B|n;L(!48}fJQ=!y#2Mp7d{JI3gQ!HyHNN$VD z&f&XxEsv6~i;9Apk-8Z*R4l!_UQxpHQ2PB2z6VC2xZOEp`EUNa`WMlwN!}zpOU-Ij zmAu4$^412w5j$x%EXrD*^n=Xj>qO2{zGmgNU^$wtorgno{hyD8EbgWqGun`qd{GQI zwjImnWA7`^P<}*?#>*P^R!Hq5Ph@(zO9+Hq$ ziq%w(KSb8b_FcL-wUE~bL)zj%v9&OB&$M^P59Ow;ejuECb#?P= zGWJ1#qcfKs&eaV_ewjTIXuEg3tf?No(&G==8-WM#TQ(nPqeiX-noup&1cM%Yh$X6H zm}2Sb@9+rI!?i74bpRtoH!()^5H@j$cnm-rqVY*$n0T6vg$H`K&0&1h(p14em6do- zR@;JqB105sWa$6b5d5#_^=nt6TkSylZI9reiLGoUT<_hsaA`l=9O=RftS{1xXV`dT z1Sbn$M|wSb(h-1XiKE0v#5}RD1|YK?V2b|1!RM#6_I9nkwXGA{+Pga*?CvP^)(t8D E00bU#n*aa+ diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_D11C14A_SAMD11C14A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD11C14A.bin old mode 100755 new mode 100644 similarity index 79% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_D11C14A_SAMD11C14A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD11C14A.bin index 26611fa363559f8a50557fb17358cb47834bfd34..06ef3c332a412f6db4928a7fa9f9cbd7ffc361b2 GIT binary patch delta 214 zcmaDOe?)$Q4ddR4w(5*iCZ=iwiHQdp111ME_A5&L6!b1mVE7>RQz=WpTi8K4iCK9w zkk9v%7c9;-nVHEqQP@kw!(wZb6U#+mFJbS=PU0829tinNar%CNLHVLYhtubqPa{~2 zc@us-=ksP#ib~@3=2E&i|3-d-4dc^^w(5*~CZ=iwiHQdpQzi#9_ABcB6!b1mVECZ*Qz=WpTi8K4iCK9w zkgxQU7c4F}nVHGAUe-&_qhM>36U#+eFIn%&PC6I49?1Aiar%CNLHVLYhtubqPa{~2 zc@us-m+)p%ib@jqW>&mW!K2dQEZ}^j;BEzn!cu2e=eq?$-Ue!OtG7BUsF^y?EuLGw z)LFxMM)8d54reCkS;Y(=cK>C0FxlzOB?d*N!@r*Yd(ObXprFIRz@@MU!caJ{c_Y(H zMn;>-vsoM&r6=EIQRig;_e-IH;s1B$&AhChoQ!3Y!}*LET_$()nKItqe2|Zs5dd|m BT&Ms5 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_D11D14AM_SAMD11D14AM.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD11D14AM.bin old mode 100755 new mode 100644 similarity index 79% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_D11D14AM_SAMD11D14AM.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD11D14AM.bin index 8cefe0b89e89e8193ff5bb6d33cfcfc407d92cf0..48a63731d12d8619dc4c220bb2f10590dcf9633c GIT binary patch delta 214 zcmaDOe?)$Q4ddR4w(5*iCZ=iwiHQdp111ME_A5&L6!b1mVE7>RQz=WpTi8K4iCK9w zkk9v%7c9;-nVHEqQP@kw!(wZb6U#+mFJbS=PU0829tinNar%CNLHVLYhtubqPa{~2 zc@us-=ksP#ib~@3=2E&i|3-d-4dc^^w(5*~CZ=iwiHQdpQzi#9_ABcB6!b1mVECZ*Qz=WpTi8K4iCK9w zkgxQU7c4F}nVHGAUe-&_qhM>36U#+eFIn%&PC6I49?1Aiar%CNLHVLYhtubqPa{~2 zc@us-m+)p%ib@jqW>&mW!K2dQEZ}^j;BEzn!cu2e=eq?$-Ue!OtG7BUsF^y?EuLGw z)LFxMM)8d54reCkS;Y(=cK>C0FxlzOB?d*N!@r*Yd(ObXprFIRz@@MU!caJ{c_Y(H zMn;>-vsoM&r6=EIQRig;_e-IH;s1B$&AhChoQ!3Y!}*LET_$()nKItqe2|Zs5dd|m BT&Ms5 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_D11D14AS_SAMD11D14AS.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD11D14AS.bin old mode 100755 new mode 100644 similarity index 79% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_D11D14AS_SAMD11D14AS.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD11D14AS.bin index 26611fa363559f8a50557fb17358cb47834bfd34..06ef3c332a412f6db4928a7fa9f9cbd7ffc361b2 GIT binary patch delta 214 zcmaDOe?)$Q4ddR4w(5*iCZ=iwiHQdp111ME_A5&L6!b1mVE7>RQz=WpTi8K4iCK9w zkk9v%7c9;-nVHEqQP@kw!(wZb6U#+mFJbS=PU0829tinNar%CNLHVLYhtubqPa{~2 zc@us-=ksP#ib~@3=2E&i|3-d-4dc^^w(5*~CZ=iwiHQdpQzi#9_ABcB6!b1mVECZ*Qz=WpTi8K4iCK9w zkgxQU7c4F}nVHGAUe-&_qhM>36U#+eFIn%&PC6I49?1Aiar%CNLHVLYhtubqPa{~2 zc@us-m+)p%ib@jqW>&mW!K2dQEZ}^j;BEzn!cu2e=eq?$-Ue!OtG7BUsF^y?EuLGw z)LFxMM)8d54reCkS;Y(=cK>C0FxlzOB?d*N!@r*Yd(ObXprFIRz@@MU!caJ{c_Y(H zMn;>-vsoM&r6=EIQRig;_e-IH;s1B$&AhChoQ!3Y!}*LET_$()nKItqe2|Zs5dd|m BT&Ms5 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMD21E15A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21E15A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMD21E15A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21E15A.bin index 11c1fb564a5bcd54e322f9bdeec79a2ef4e135b4..16b6f95cd21a148eec814806afcdb415b3641d58 GIT binary patch delta 678 zcmXYtZAep57{{M;w=rLu?Daa>)$ZLsXuh#Kqe3&?z-8X;lZmzn+;q4Z_>vj>rbUrL zp>hf`2>MWj(HFZ7q8JH%EzyXmpxB4Tf(R!OcUyVaV+iMWew^q056{DS)_J3I={OOV zJL-sWIogQZ@=KDXK{7?g=qu7~aukIg$k~g0uONlyAa|SEm^jJMStd$WX@*%Pr{zV> z01=uBCTV&Ia`gr0m{GEHxgr{ujAy=J_+RI!UKb2odaXUjl2?4%ElaOOqQ2^_inKX! z%cpFDYs)_G`}HX^sBJY2<+D{1;|xU%Qib#Lq(N$M-kpZr#;!I^eLL?!U|tuqYIfZZ z0DJg8tBZ$qH>Qt1G|ux5&>yNx3YaD?3$A67-Sjp`)V&xwT?h%9zwi zx`1m)Rlb&ZPKc?>8#-$4)Rq)eo<25zuWZVT^YyWXrzNGG-m|RfH!!9u8M)s&OH2kVe=a8#3V>{S9tm@Nyp>0)zCW5M@RVB6VAHk#^`w=HuBCGb81v5b^vJTsIl~1sk zxX%D@OzH!BuW!;Y+e~WdB5ONzeivMKe7a3OCUOmU*QaVYJ2#oy%jc5^0y>W8s<1vl z-?G)Doo3iZ@?17mS8AC&M{6By%X^$|7x{pY8i0@JZ^%#N3C^{H{*5TeAC5*GA!4K{ z$M&p09O3;FGvg!Si}8tZI2j#}UWgC#ecoWgBX$Fr2`~&m*CspA4Gdv`02FKhHWolc z`jM%9ub?mChk0j4`BstlxIH3>huhpo+uTQBu)+XmkPx_VKLMT=H=Om#jWr9*KSMa* AjsO4v delta 709 zcmXYtUr19?7{JfD+ii0?*rvNGyUTN3IhRUqX{jjFT{QJ>^-y5>0f6K~$r{w=mdxGD_HsSP(eq;ku=FeUsq)&hLDGIOpTscfWQ&>cj&J zU3T2I;BSC!;T`@xz z5J_FDxENZTT^8%bSSU6d6&dka2xY$GZ>A`m?tF@O*?&rxID#+L3t=fSSe1%4g%N9ogW!LiBq#?mdtk*W8$e#;@7Xpg> zhPq8|wIUxB=)CD?Y1N)HS|7Ogsvz6x&GI$PTWC|{biAn|f{hzIybtR=_yw>^ljfT8 z^NJ=@Z2GRKz*tb^4Z3Tt#_hC(vzS8)33JJheM<}?hJ?mj?7T(WxhA_#A-o}3%m))% z?-8ExdZ-N@AY07CrbxiapMcm+A8?h`B4q7+3m^07Qm9dra`3f$8%%GfNv;8B;=j03 zbsw=JR0bbo09N5zE%+sjyAPuthnfO*fKjmzFaxVluLfIz8o*|y9hPC-MxR)A1HRGe z>CuU)i~jKd@p?sc)_>hUH8D;u^!UOqXD>2g#4reTr??>&F_=LZA%R1v3%Cs22A=-+ gC-4mX-nkny#N{HcX6G5?bak|z?r3qvfAdSsKR!(4?EnA( diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMD21E16A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21E16A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMD21E16A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21E16A.bin index a92826833bb15525fcbe2629f5744719dea55d4a..f7fe2d5736618325498d4b89db44ea6e7f12dae7 GIT binary patch delta 678 zcmXYtZAep57{{M;w=rLu?Daa>)$ZLsXujc{QK6Y`;4<&_$z-+&w&`#h_>vj>rbUrL zp>hf`2>MWj(HFZ7q8JH%EzyXmpxB4Tf(R!OcUyVaV+iMWew^q056{DS)^($6={OOV zJL`yXIo62V@=KDX0Ww9#=qu7=aukJL$k~g0pCEdLSEE%I|vQZCEq%1)J&1bt+B=;$m#Zmn3BGA4DB z&hHAV%GVOl32{|MXmww`c(~Q=O$Bo`F!$#U&rxW71o3F zEn7`GXohVh&t+3}rIyKawAR74yvONwkq-!|0r-gihWtdH;9NWC--v?z;b_zmB1W2W zY|r{4QQkK(Gd>)-I65&7Cu8HW3!_7PzbBAzi#-5l0t^Gty~zf9fFTSJfPxLc#sY}Q z05Y}j74#+iFwe{g-zM_zR<{V^;r7;}?cxy_tT4bCBm^$pPk_6n70!C(#+n7@A468( Aj{pDw delta 709 zcmXYtUr19?7{JfD+ii0?*rvNGyUTN3IhRUqX{jjFT{QJ>^-y5>0f6K~$r{w=mdxGD_HsSP(eq;ku=FeUsq)&hLDGIOpTscfWQ&>cj&J zU3T2I;BSC!;T`@xz z5J_FDxENZTT^8%bSSU6d6&dka2xY$GZ>A`m?tF@O*?&rxID#+L3t=fSSe1%4g%N9ogW!LiBq#?mdtk*W8$e#;@7Xpg> zhPq8|wIUxB=)CD?Y1N)HS|7Ogsvz6x&GI$PTWC|{biAn|f{hzIybtR=_yw>^ljfT8 z^NJ=@Z2GRKz*tb^4Z3Tt#_hC(vzS8)33JJheM<}?hJ?mj?7T(WxhA_#A-o}3%m))% z?-8ExdZ-N@AY07CrbxiapMcm+A8?h`B4q7+3m^07Qm9dra`3f$8%%GfNv;8B;=j03 zbsw=JR0bbo09N5zE%+sjyAPuthnfO*fKjmzFaxVluLfIz8o*|y9hPC-MxR)A1HRGe z>CuU)i~jKd@p?sc)_>hUH8D;u^!UOqXD>2g#4reTr??>&F_=LZA%R1v3%Cs22A=-+ gC-4mX-nkny#N{HcX6G5?bak|z?r3qvfAdSsKR!(4?EnA( diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMD21E17A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21E17A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMD21E17A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21E17A.bin index 2766d947c38162b083883e981ef0c857f6c8ad50..da4667d3d66a772348fefb06b518fc87148d3453 GIT binary patch delta 678 zcmXYtUr19?9LIm>ZevrM?2o$+cC~xA2hFK?XH;mW8@SB7J(NVm1dY#a#~*0 zgow~sFiX>ekgG2^$4rv7%N5nQWIXc)w4;>vP$gLF(DN|A> z=>o1nRry-tIU%kpZ|I1nQ(IEZdHUG$y`nKM&ez8mo|cq$de6G1-@urvWaR#;Sz>;` zVQX9zJ%?PS8Qa08AyuE=3vH_!G!axKttzQ?|1c)?*pE2L5?Qs!t(XZ?k#*Rvt9*jR z#C-;MQ&Jz;dwr8e*d|g-7g^h(^Sj`>Oagl4lyFOLJ*}2KoUOt~Z5YTZvSBdoy zealvpcA8<`f0Zh^C2*qRMVL(q$WbJ zpeQ*7D-e7!5`56sAgWQ}TNrFT871sREC?L*aNW|ozDaO?=Xbt8obz!WxL&&+cjAGC zE<0{p@YTb%@DBf_UOb8K(hs=TcseKaqfA4N3<}cl9LlUvGc$p+G|c#Lg6=RY*dKeO z8p1+%)+hx>P^L3mea#@1cH72Owiv`MS^ZJIiE3DH*gAN;KMNIu#_=*H(Be$#UB7{f?Ass1G9UVw#EY9i~ z{DN+1dhk8UYVAdn2RSl_^78dqt9GCWU!`H=vZXGMGV3{Q!VqUA)?*t{Pz^-iP%b{1RBD33FBH z1x1rCG<{c8U@R!|Cfzev;&xiZS`fPeJUW54rM65wdo^g^#**Nz|Z8*74PR8%%Gf39cTeW52j! zbsw=JR01Dk09N5zEqD#aJ%CY9LQMhJfl;9kFaxVluLN6xD!^u?9hPC-MxR>t{NB;& z>CuU)OTKYG@pwdZ&UeE%H8D;u_IN{1M=vsA#4reTC%GXOF_=LZA%R1v3%CN@0iON$ gC-4mX-uas|#OWl?CdXOiaCWqw>1b(={pOdLe?C&=?f?J) diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMD21E18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21E18A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAMD21E18A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21E18A.bin index c5d8cfe67e5efcf69b062f20f912c880f10bde1d..e770a39c0c37a95b8a50d1654481d699c1b07ffb GIT binary patch delta 678 zcmXYtUr19?9LIm>Zeu!|?2o$+cC~xA2Th%LXJBZi8@SB7J(*~Wz)gqKz(1L>H!X@3 z3YAlkLC`}HMlW_7L@^S2EtwHfL9vI%f(R!OcUyVa&k)Y%d^o@JJ^X&0XI(eCR*n;4 zwX=?xR-=u$t-d5#8YDAhg1#a>W=B!zg`B;}_X$#H0dlvgjTt8yI?qJOI?XWafler;SpB^X@Ff3z>0`t0k#*Rvt9+cr z#C-;MQ$ioue|?jNSvRSr%dG9l`8{ym@##{0OynByu3yz~c5XVkpU)=_1#}$GRbqXR zzGbUP2hFgJM|64={uQ0#L94*jNA& z89-(ZyoSDnALgAK<6A}E)8Y|9JlfvU*529%Lk1(9K|^-y5>0f6K~$r{w=mdxGD_HsSP(eq;ku=FeUsq)&hLDGIOpTscfWQ&>cj&J zU3T2I;BSO&;T`@MKNlfkVSf!*AHp6AdqM||E3~q(BWLadzt)NM2sau>) zh@`GnTnsJFE{pYIEEJoKij4RygtA`_)EVme@f8WodVWXQK?spBLON2RIy{ihc!Je4 z_&HtI^x(Uc)!IuY_w!^9736F2R_#CuzCt6$WlKW=W!LiBq#?mdtk*W8$e#;@7Xpg> zhPq8|wIUxB=)CD?Y1N)1S|7Ogsvz6x&GI$PTWC|{biBDDf{hzIybtR=_yw>^ljfT8 z^NJ=@Z2GRKz*tb^4Z3Tt#_hC(vzS8)33JJheM<}?hJ?mj?7T(Wxn{dgA-o}3%m))% z?-8ExdZ-N@AY07CrbxiSpMcm+A8?h`B4q8ni;sD9Db%D%HSo238%%GfNv;uR;=j03 zbsw=JR0bbo09N5zE%+sjyAPuthnfOz0Hb0bUmBah|@`&EsitD;p}KV-QjY@fAdSsKR#IG?*IS* diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMD21G15A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21G15A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMD21G15A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21G15A.bin index 7d6bbc2b1a9e074c159f97408de2412ab29ffe0e..08fd34a9c2506485e80e9ccaa1cc7d3c61c0bfd9 GIT binary patch delta 678 zcmXYtUr19?9LIm>Ze#vwvcK2Cu6FPCp!tv8*+Xfj8#K+kJ(*~Wz)gqKz(1L>H!X@3 z3YAlkLC`}HMlW_7NHG$6EzyXmpx8rWL4=ctyRCND&k)Y%d^o@JJ^X&0=bbk@mroF3 zrK64*SE7x$t-K@|8YI(XoW3HbOpb!k16g~4?-iubJY?@s8#6}IbdHIVHJWDD$QgM_ zGeCrIc}6JU9O16CF7aT8~)chs@Da>mR@VmvBXuMcE{3dk*KeFry^wz z-1aHk;M%b-_Ca*QeX&VC#JI9lsqTi)YzMdSlQY5+c>zac-7r#ROh`ZuB=e>fU(gou$Q z9lLY>aD?|y&Q6SkFO5x3KzDQ^dU0%+@AC%Z9Hj%D0NV$L$e8Jlf_y-sWzF!3qPMMMB`h{Umr=+;Gk-H`XjN{{TsU B-=6>g delta 709 zcmXYtT}V?=9Kg@H+ii0?*rvNGyUTN3IZY+ET&XD2UGnR0^-y5>|!&iQj5x?j7WbmD=9 zE<0{p@HfJ?@DBf_K0Jx<(GU2%@pNA3N7<%485E@9Ih0+YW@ZBCXoT_OB;8?Fa3KCz zHH3xkoKXsmploNZ_PRkT@3xJpY;lNNbNZuv3)Qf`h;{IIe=srcQKzkgR*8C=(z*=q zed>`@$d;~(dj5RdxuQO!AKBlnl9<}zu}VoLY=z5CL`8$R72FPM$+F0b+d-4mQnxsp z5J{a&TnsJFE{pYIEEJoKij4RogtA`_)fwvf@f8WoMt)b>MF^2FLON2RIy#Wfc!Je4 z_$A%Y^x*rH)!IuY5AtLV733Rnmv*28U!xJ@vZbMbvTJ#5(vV;!)@vJ48u(hi4W_r#B-e;D@n2l2 zx|diHDua(P0IP7V7Q6=I9>Az4p{9Tvz^K>WfoE@&S9WF=wH^0RE13#7I@Bjb+ diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMD21G16A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21G16A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMD21G16A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21G16A.bin index cfe30b9102450efa9de1d324946d5fe09f34f4bc..166a935842db69f2a95500989d535672e28159b3 GIT binary patch delta 678 zcmXYtUr19?9LIm>Y-9duvOn%R*wyac9yI^qojsIhx zD;>4Oyb^7|ZRI7&uppTx_WhLa!)?<{^8F+36TbvpE_iYb;II$SGw> zH$cS3yhWZFf^1#hHExz|UG9j^t>9V6oBr2%W;6uDw%*E~BZNt`{jJaBdtA^W6Ik~Aj_ zvLWCe($ud-ffr+%`i6~KJM~4?l4Fmo-^&|w(n4Kq@o7BfUI=2h%+djjl5R>?NyzA3+yn~-g?&Wid0|5gs@D*4e zU~jo9($3Oc19`4ks><~=$FmwI*Zdx*+eJPgq#EEO`Wx~Sd5m-IpnoGO@`q;;XNZ_t z(z!k74@U(5HjDzr+1r^O?IbhxeMXq(gugJmW-jfB9B`*H9zx4;>%(onrf{{cyz B-=F{h delta 709 zcmXYtT}V?=9Kg@H+ii0?*rvNGyUTN3IZY+ET&XD2UGnR0^-y5>|!&iQj5x?j7WbmD=9 zE<0{p@HfJ?@DBf_K0Jx<(GU2%@pNA3N7<%485E@9Ih0+YW@ZBCXoT_OB;8?Fa3KCz zHH3xkoKXsmploNZ_PRkT@3xJpY;lNNbNZuv3)Qf`h;{IIe=srcQKzkgR*8C=(z*=q zed>`@$d;~(dj5RdxuQO!AKBlnl9<}zu}VoLY=z5CL`8$R72FPM$+F0b+d-4mQnxsp z5J{a&TnsJFE{pYIEEJoKij4RogtA`_)fwvf@f8WoMt)b>MF^2FLON2RIy#Wfc!Je4 z_$A%Y^x*rH)!IuY5AtLV733Rnmv*28U!xJ@vZbMbvTJ#5(vV;!)@vJ48u(hi4W_r#B-e;D@n2l2 zx|diHDua(P0IP7V7Q6=I9>Az4p{9Tvz^K>WfoE@&S9WH15H^0RE13#PO@c;k- diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMD21G17A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21G17A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMD21G17A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21G17A.bin index dabdf123f3f660044866e868be5f5d56d9827a24..2af978d13e5481c3c46e5fa910cfda0b4a20fcfd GIT binary patch delta 678 zcmXYtUr19?9LIm>Ze#vwvOn%R*wxP69yI^qojsIhx zD;>4Oyb^7|ZRI7&uppTx_Whv{#fv^N_v8?A#bhvpFtG)>xWbBd3%l z-2f3A^A>q#2(oo~*SJ}>b-5!tw}NMyH~p^*%xDOPZM~H}M-rEP`Yl_pO=iBTt+JFg zaMP!5f_uxc;QRF{J*aOr4dpTwGUp0KOmdm)^OQ-hciowR?8dG>#e6&OK;&K*GFoQc z4*)cdRONK?NSsUXHQ^$i=fcIu0&CC46Fzn3@Wq=mZJ;?ttq&hFZt7&kDcscEIZa*kN; z3)mVLL(d~uSlWKDX;?F+_Cnj54oyT&O=)U!-9Lg!BlaUMvP{+-F&k!rOyZsPYZ{I7 zn7GFQH7AULz1KHbm~SFAY>BrYI=2h%+dji4jY&d1-t}oZ!68f~_wu>Kfq+4vLIu_b z*jv7ew6iqdK%Og>s&YM-6IhLtZ+?%{?IIr#QVsAC{SEnvJjS_p(7zEC`6IB1GepcR z>D-?4ha=QKIXf{DzA!d90o~Dw==rf>+UE_%JyJJ-l>o;9bZznj{lF0p2teKrVCMlO zq#v2y_bU1#ewcT5l(tIL)8dgpI^5QBw9V5BgJmW-jfB9B`*H9zx4;>%(ons~{R2t6 B-=P2i delta 708 zcmXYtT}V?=9Kg@H+ii0?*rvNGyUTN3IZY+ET&XD2UGnR0^-y5>>cf-xHvNE48;|FOew1y>lR-fmo31nsOQhOtqbZC`jOr3Dv7Bb9;=j8!bZ64NK`b48^O)6mMn>^xEVA_Ep>~t z36a#f#Kq9!?2=e7#zL{#sK|&EUN{4t2#^gdTvEkf4LxAHNME`^#jsRq85Z-eRWG|4sMO#ByD zs_rFLgv#J!48RIps|ByZxO*__QK%{41~4l20cKzY>eXN?Py^Vkw8Jut+vsD<&Sl@| z^z`V&)Or7SfOx$k>hoXoPfd)Ib3MMW)6s`a7%>b&-6?K}MGR&TMo8cg>H;nTw}2=A g{Run+zjx;P3~@S%v&C@=Ih-A?lO3-3Z~i&+4_lAqz5oCK diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMD21G18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21G18A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAMD21G18A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21G18A.bin index f0b405f9a5da95e33ff587a23726d6e10e87e437..4b1b155f1a707e37dbbb8dd02a4a87d4e8e995f8 GIT binary patch delta 678 zcmXYtUr19?9LIm>Ze#vwvOn%R*wyac9yI^q-Fhg^bc3dOw2;H1JPm>`jXz zg+k>NWDxXFgwc!L22zZKUQ1j=R8Z`pu^_@p#NAfj^)rO?IUmmNd=I}L=Xux7uH_R% zSm~@M#+7IjZYwWImIlZ)8K_%%Ik77|Lg>B*qbn7^Div=P85K=(slnxvf2IntFHNfxx^jX4UMb z4*>W$Qmr|#{6%MA$P4;I?;)$SrL4aE`rjfy4<+S_e7@{-If>K9rbqV966Ds4Wl3W~ zC+YmoAyxTW;yEFvDsSkhxl3D8OnLgm{JpX{FD^917N3=r4tn3RuHV9#s$}F~^&Bxh z9P;Zpo~y$8 z0Da5WkPez*o5+T2s;Sg6d5+fE+1B?s-5&A*A+-P>(ch4t$Wxqa7yTPikUt!a*h9of zllGlCUpT`1CTAx`!k5M-C!i-f5xqDz%=dc&ahKQwU?#vY0NvZ{KoA(h00Agi0jw;5 zhy;=81FxblM|ro%yV_hLh)3Joj<>trFj!%Lvq%V>xSs@9Ya5*N$W672%s)xl B-=Y8j delta 709 zcmXYtT}V?=9Kg@H+ii0?*rvNGyUTN3IZY+ET&XD2UGnR0^-y5>|!&iQj5x?j7WbmD=9 zE<0{p@HfJ?@DBf_K0Jx<(GU2%@pNA3N7<%485E@9Ih0+YW@ZBCXoT_OB;8?Fa3KCz zHH3xkoKXsmploNZ_PRkT@3xJpY;lNNbNZuv3)Qf`h;{IIe=srcQKzkgR*8C=(z*=q zed>`@$d;~(dj5RdxuQO!AKBlnl9<}zu}VoLY=z5CL`8$R72FPM$+F0b+d-4mQnxsp z5J{a&TnsJFE{pYIEEJoKij4RogtA`_)fwvf@f8WoMt)b>MF^2FLON2RIy#Wfc!Je4 z_$A%Y^x*rH)!IuY5AtLV733Rnmv*28U!xJ@vZbMbvTJ#5(vV;!)@vJ48u(hi4W_r#B-e;D@n2l2 zx|diHDua(P0IP7V7Q6=I9>Az4p{9Tvz^K>WfoE@&S9j?~+Z+?mS2S2Ce^8f$< diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMD21J15A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21J15A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMD21J15A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21J15A.bin index 39497992243cc643abdc2d6bdbeab1ac65bb7d31..c92b38fbdecfd5887ab65498b69ad15df19af1a2 GIT binary patch delta 678 zcmXYtZAep57{{M;w=rLu?Daa>)$ZLsXuh#K3qmv9pk=$;ClhTExan{j_>vj>rbUrL zp>hf`2>MWj(HFZ7q8JH%EtwHfL9q{w1rbgn?zZx-#}Ll%{5a3~AD)Nvtougy@-ZT; zbTts;N~{^Tm6s$(Lu8ta(^uq#$x#w|A#X470YM7SL;g0kF=Hf4=a?8-qgiH+oR*g~ z14L*knxvT_$Tt?9<3`ESbL4WAIWR^(6*{U6G2rns*>99k6==d{fLt+lQnzXf|(E%S%>Yq$|qP% z+-HC{CiTI+*EeZ|Z6)<|iM1U%zYDHAK3$rRi(C`l^{E=p&P}EE@`dDqppN6Y8mte{ zw`?uxq*=C^JeN(i)mo;&(Rv5l_8zC(MLr;;4&WpD8}bu*f^+Sle6lw zu|4OHM0x+@?8Hdq;@IQ_oQzGxE{qNHecn*QBL)D>1Q-UOC(RDTfFTSJfT9h+#sY{) zKQg`VRrDqNFz@Ur-!AeVw?_o=aEIvbI3mJel>yEmVQ}Go96W7qIO~<0>lT@RPodwf delta 709 zcmXYtT}V?=9Kg@H+ii0?*rvNGyUTN3IZdT)DSn_#cgb{jtA_&1CqEj@pqkEPAvF<# z1x3jzSb^Y+k>HE1K~$r{w=mdxGD_HsSP(eq;ku=F{U^cso!|L?aL%9e!2R0&xCaj{ z_S$jhVxSqe#dr8G_2Vggmwv!!ji(F3Aj-8Ah*ywC=232ynwd$Qr%@(=Q*?(}#lgfQ z)i4(N@q`fCQMvd=cIvLzsH%j=Kw4ys}OQLFd(U?{oZQD>}Pt3*958C{n5 zJ@LqCWXsgVJb%9JTvngakM8f*NKF06c(tSwwjvcLVxmFZ3T;QUWJP4f?T|@wG%U>} zMbgkNE`^uoR>Vdz9*)n&L`HlbM!7GC>MZsA_=*H(qp+*&B7{f;Aswkw9UVwdBFX9* z{DN+1`td!=YVBoH2L&>Zit_bDyLPAyU!_swilwQDa_a?c%8+Cw)@K`4603T&rED5Z;g~2V7-IfvDNuOHwg8s3Y znX$>~OM!_X@%cn_E^s3-Jvl)x_WL6)rx%$pVi<(_(%dkM7|bAykia3-3tR#20MGvW g6L=PW@BGbK;&Ks}!`XqHuI~1ZZigfBn_p)B0YGBp?f?J) diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMD21J16A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21J16A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMD21J16A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21J16A.bin index 112f23a9739282f8bd9c0b1d0e452006a93d1bc6..86090726ec9b9d2a7fae63bd23c71cdd633c97c1 GIT binary patch delta 678 zcmXYtUr19?9LIm>Ze#vwvOn%R*wxP69yI^qojrtRx1DEQoLtakrIs{S4uJ&WH0m-^1_6dDeZsd-*64 zSGwwnc_r3_+saFlWg#+6#@Q=!+~O>Xy^wPhX+V_2^N_p6?A#d1usJS9)>wvHBd3%l z-2f4r3l@212yzVt*SJ}>^|+%tw}NL{F#WF!%xDNjY=P?DBgxA?{gy3YlbNq(t0HX; z-t?)P;NEg9_oWL-}l#%(=o*lU(8YJY|v_U3X?6x3Q~FGvCfT5V_aItd?E( z0{~4R)w+EvUkoOWykI|!Ub4zs%IeFn{w>mZD5;l}vt=jCNrFAJJaBfEAorwLmNF*| zvLWam($uddDu{7SeZxkr-TIPh$+Jh+@0HDYX`vy$__U;Uvb(k?#tn>VYDVd=o+Fm~ z0=CA*(DTR@ma!jf8P<&Hz0kI%LlaR`)0&!E_m5!Gi2aC*ER!`y+=iJDlX$27nnn{m zChl=S%}HZ$@AVB9;af-@TjK49&h3Kxw$HFh`q~rc%%41y<+eTi@e!yT}KG)B=1&e?xvEk8!RY^lwB({s=7U3==a; zIk)Hhktp>~&Q6R(E{si1z=_yI?EKg;?em5b9w`7|CBSh2J)8VM3^>980Vvo3>^y*k z^dr;zUPWKT5A)8B(sqe@+B_0ShdU&xqs;?@6(%^1gu#vbG4Qmu!5Od8RJ+Li15Zfb AssI20 delta 709 zcmXYtT}V?=9Kg@H+ii0?*rvNGyUTN3IZdT)DSn_#cgb{jtA_&1CqEj@pqkEPAvF<# z1x3jzSb^Y+k>HE1K~$r{w=mdxGD_HsSP(eq;ku=F{U^cso!|L?aL%9e!2R0&xCaj{ z_S$jhVxSqe#dr8G_2Vggmwv!!ji(F3Aj-8Ah*ywC=232ynwd$Qr%@(=Q*?(}#lgfQ z)i4(N@q`fCQMvd=cIvLzsH%j=Kw4ys}OQLFd(U?{oZQD>}Pt3*958C{n5 zJ@LqCWXsgVJb%9JTvngakM8f*NKF06c(tSwwjvcLVxmFZ3T;QUWJP4f?T|@wG%U>} zMbgkNE`^uoR>Vdz9*)n&L`HlbM!7GC>MZsA_=*H(qp+*&B7{f;Aswkw9UVwdBFX9* z{DN+1`td!=YVBoH2L&>Zit_bDyLPAyU!_swilwQDa_a?c%8+Cw)@K`4603T&rED5Z;g~2V7-IfvDNuOHwg8s3Y znX$>~OM!_X@%cn_E^s3-Jvl)x_WL6)rx%$pVi<(_(%dkM7|bAykia3-3tR#20MGvW g6L=PW@BGbK;&Ks}!`XqHuI~1ZZih4Rn_p)B0YGTv?*IS* diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMD21J17A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21J17A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMD21J17A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21J17A.bin index 8a86c85ba9033a9a20c286e5a3574524ebb74665..6d81c1155468c8c6aa155b0792ba00fbbaf4c9f4 GIT binary patch delta 678 zcmXYtUr19?9LIm>Ze#vwvOn%R*wxP69yI^qojrtRx1DEQoLtakrIs{S4uJ&WH0m-^1_6dDeZsd-*64 zSGwwnc_r3_+saFlWg#+6#@Q=!+~O>Xy^wPhX+V_2^N_p6?A#d1usJS9)>wvHBd3%l z-2f4r3l@212yzVt*SJ}>^|+%tw}NL{F#WF!%xDNjY=P?DBgxA?{gy3YlbNq(t0HX; z-t?)P;NEg9_oWL-}l#%(=o*lU(8YJY|v_U3X?6x3Q~FGvCfT5V_aItd?E( z0{~4R)w+EvUkoOWykI|!Ub4zs%IeFn{w>mZD5;l}vt=jCNrFAJJaBfEAorwLmNF*| zvLWam($uddDu{7SeZxkr-TIPh$+Jh+@0HDYX`vy$__U;Uvb(k?#tn>VYDVd=o+Fm~ z0=CA*(DTR@ma!jf8P<&Hz0kI%LlaR`)0&!E_m5!Gi2aC*ER!`y+=iJDlX$27nnn{m zChl=S%}HZ$@AVB9;af-@TjK49&h3Kxw$HFh`q~rc%%41y<+eTi@e!yT}KG)B=1&e?xvEk8!RY^lwB({s=7U3==a; zIk)Hhktp>~&Q6R(E{si1z=_yI?EKg;?em5b9w`7|CBSh2J)8VM3^>980Vvo3>^y*k z^dr;zUPWKT5A)8B(sqe@+B_0ShdU&xL-N32g$Yh0VQ}Mq3_PuEaK@`N)h=@X08eJ$ As{jB1 delta 708 zcmXYtT}V?=9Kg@H+ii0?*rvNGyUTN3IZdT)DSn_#cgb{jtA_&1CqEj^pqkEPAvF<# z1x3jzSb zVy_){E(V%mTYQKAQa_%;x9A6a(s;Ze45D01fp`UJWFF;SQZqA&^EAo?aEfj*FL5w& zUp0({zPwQikD^>pzW%a7s_e6kt858~+w%H@yn||3f7I$dJQzwYc+?rI*D6s@OGcOF zeGffy8rd>6G0&fGTj$j$^rO4mH4;-lGF~mIgpEkWk(g)@H$s~cEm;;>aWiC+91Tlz zNs%iS^k=75Q_K@Ip|L z-%z*7tybjyB3&^3EU(#h#u|fnUKM3KyOHJPu6&MSOyiRw_wYZCxaTaq}ArUV1ao{O~h#{%*l{#^2Z={(|cTXtq55=-^Ry1x-@Fhq?`D9z7wXm(-hZ?vx#3^ zxq5(D5vqWXF#s!Ytrolr*Go4}~l2bh5ssMmt6KpkMS(r(KL?xc?_JD2=p zGc#k8)8_&cLE`g?=v3fpV0v$^Z~htc4_ss9y#N3J diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMD21J18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD21J18A.bin old mode 100755 new mode 100644 similarity index 77% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAMD21J18A.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAMD21J18A.bin index fc69c2bc434034ae84720094e26a860e28022d39..c3f3a122c6d9162e2a51eea8421b4bb52c8a06d0 GIT binary patch delta 678 zcmXYtUr19?9LIm>Y-9duvOn%R*wyac9yI^qojrtRx1DEQoLtakrIs{S4uJ&WH0m-^1_6dDeZsd-*64 zSGwwnc_r3_+saFlWg#+6#@Q=!+~O>Xy^wPhg@7oB=OK5C+36U`usIqdYb-<8$SGw> zH$cSZf<>Mgf?PwvHExz|J?^N^t>9TGnEuy!W;BE%wm^07k>q8ce#;iH$;?-?Rgty^ zZ~D|taBn#le7`pUT9m>p^2!eX-!S7`$sTo#D2s@mdTnUZo^E7Nu1MuO%oCv zChk!X%t>Q#@AVB9;aW%?TjK18&h3Kxw$HFB#3jBF@A@OWIXf{DxiB_40ViS;vGZfYLZ3I3@JImwD*;LYdN#R%7*Ili02J&1b`C&7 z`jP2 zVy_){E(V%mTYQKAQa_%;x9A6a(s;Ze45D01fp`UJWFF;SQZqA&^EAo?aEfj*FL5w& zUp0({zPwQikD^>pzW%a7s_e6kt858~+w%H@yn||3f7I$dJQzwYc+?rI*D6s@OGcOF zeGffy8rd>6G0&fGTj$j$^rO4mH4;-lGF~mIgpEkWk(g)@H$s~cEm;;>aWiC+91Tlz zNs%iS^k=75Q_K@Ip|L z-%z*7tybjyB3&^3EU(#h#u|fnUKM3KyOHJPu6&MSOyiRw_wYZCxaTaq}ArUV1ao{O~h#{%*l{#^2Z={(|cTXtq55=-^Ry1x-@Fhq?`D9z7wXm(-hZ?vx#3^ zxq5(D5vqWXF#s!Ytrolr*Go4}~l2bh5ssMmt6KpkMS(r(KL?xc?_JD2=p zGc#k8)8_&cLE`g?=v3fpV0v$^Z~htc4_ss9y#N3J diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51G18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51G18A.bin new file mode 100644 index 0000000000000000000000000000000000000000..46d51773c4918622805a883ec28006d07930ea11 GIT binary patch literal 8004 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51J18A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51J18A.bin new file mode 100644 index 0000000000000000000000000000000000000000..daf004376ed14895c54efc68d965316828937237 GIT binary patch literal 8004 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51J19A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51J19A.bin new file mode 100644 index 0000000000000000000000000000000000000000..1ede9790d2abb77c9161e7b439d765ad85bc7b21 GIT binary patch literal 8004 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51N19A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51N19A.bin new file mode 100644 index 0000000000000000000000000000000000000000..bf72e88f4011569f6b768d3e1da7938fe91c6bc6 GIT binary patch literal 8012 zcmZ8G4R{k(w)f6Ve)zQ-! zJwNx{bI(2ZCpQ#|-LFDu1Hdlt0RJKbAze^a!TIc+jG*se zO5Yele#~)RU6&6bmdJ;55z+?LLUxC`R9!~s>QY+Ncc=uqqh+DC>qnkvfPei>8C{Sq zV})d&vy&}1_%eKyyC-1u=9W9yaBZ>=7xn~_y#}A5T(Trzm|V*E>YaZNFy2fb^0Dsj zfX+KPn(5P*>wH_C89ft$o~NGBo9R={NDc9Ms=Q1u1BrBQttz@#))ZV+<6bPa$?OI%*meRV_5|2t1B}enTIX7(9D6oQdrwaE5 zjL#W;y3*RA4>F8iqKg4tRdvQ~wL@DdW214K8MJ3G8L7s`u5Wb?zZpws-a%UA&>#cS zpe%%PkYg)2l8kNUcT$Ol&n>ONxjdb93x8J5^nW-+`LqMHws1r%(*ru%&okj_(J3Kk zwI?ZR%h3yl5N7Ese!YRm(ywk{UVDW>+BnZc+YpXXn zB|lZYmeen9Xw!`JTKKMSrN(jp65q_v8;iqGU}NzpWS8icHJV}13i$A;3V>I7~p ztghcJy9->BgZ2Z)oZY)mURa=)Fs%=#3e~Gl1Md;%yim=mKMkcZTHefS%dj;62Iigv zJ_P(In!~fa4D-4V=9G+I0=!#R6{L5#B$mcemjvU5I?O9d5~^Vw(0?t(`5`h0pG)#5 z=)0lbrWx%e^H22DN}KRUfyQ-2P8UoU(kp1QUv`+5uc{l$UAw&AVe-oh(sSx^k z3`sq4Bx3vp!J`rA8QP12cL^1P5E1?&us-4ST6*}2fe&~r~Ku}_qlLVH~nw^e3sO6-inZ6Z-lC?UlnSXUtF;p=YhjJ(y> z3s42|T+FRlp~T)+DzBmy?JFpdw1MOa#VBO2x&Z!}EVv>5n;`z167io|aXZ&uuf%?n zkodZuNVq}bWo5-LE^2P{rc_K6+M%E6*Cz-o08hQ1CUA8~GF?v_Mb|AMok-#mc~d8paEcDZqbC>G!x#9_oV@-04M+&fB{egXaICVdU>l; z7c}rpWTK!eZ+1?Mq(mnQ&CVSDS{QK=L!)!B=Wyene6L* z@jeu~nS)t^!wh22K`uTqjBZcvQ48gRcu7@ltG{}C4~!5Eqs0S#ByPwUY(c-asAD4V z+_LO|zh?X22}jh{g}D1<&fx^WcE1&ew>YmwR2Aie^!=~+AKCsra2-Hqx5?dYywpeZ zxN>a4Y2of6$5JZw$Q4)mMNAKDcG1JgRb!y9+(*ACI~FgHuxcw{3i3mIpy#3s#`!Tx`_^EBm{3=)%TM1UhjZ(Yn(?<=1#{%kZF6M)v4{# zl=^Ej9^UK(8}M)#u}qX1M(dIF9}&z_Cv;sk6k_$k>B9614EZ{Tw?O9KHG(Ye2-&rq zqsVekM2Y=bF?7I==2c>QZje4#kv#|F+^uzV6pX?YJ#Vy{B|A08s zoE_)xjo-s6G4BmJsw*?|O6*b`w~br#CG^pv*gD7g-iuEGz8dIbBlK8xgHBiqzJ>VI z0@%Q2Vs|R|Zp}~$W%Ok6e{M(;_G(7YY0DibFe(k=xo{SE!U&n40y-sJY=De+4*WJ7 zBJTX#D#T7UF=i$9{ksS;LQ5Sj7@u7NYrbV=cL2CTgpX1e1sOh#*YrNkB9jt}DcE8? z&q$k?$tINLOC;}aVW9#1Ox4y@@+tgMHI&jCR_?T<-vnqbsk@CFW} zy!)c1Y~|J7wMy(UXvvL`kv*W`r3T-P=5o)Isz-?mAECb|C7Gqq%7_iH|J7!ZFk-sYVkeP zfJP}>BDaKEfUX64wvV=|BF7#n7ZN^X)uMHU*q8?obiCGjiG_bXZ)pcP2BAW{m`k+z7{Ok+OVvDn& zNAIJoRG7Bv!q(_H@pOQ>l5WCBmmm^5x>E;b6(Y0Z>PKu&^sI=aO%#14l8%q=MGU9J zmMi{Fh!)_{*bw9Br#*z*-~u@t)L2&XI#6^xZ;}3sf|Xa5breU|s1lp2RGs2{bv_uY z`4%AqvY#PDu^i;F>HHmL3iMA`iaLMfa1ZkOR%d3IP?sdAMx_*}9*{>Yp>`WdjxK`H z7Io18MP2v5rYKVIp+$(>af0FP9wjy{u7iEaA#L^Jqtn5LHz97>2q{-yy|hjTef~fq zfo+K%l(n{$PBq&Mr3s4<$`frfnFamyBM0SF+pRFdG#k{Wj%#UFXv^Qj$kLb4lxEHY zJs-!B<#UMX2`u4V3S&%z+O1H_wPi5Qe!A|UoNY6LrW_m8%*2NWiki@>M4gK|oD z^-WJ|Kq}dL$nWaMrZhM4@i(3a`%`ag_f7zvSs-KVzK2=ZpZeHAd2%;k%|Y2f@NFB6 zC~2E9$=ESEG_WIQ(Y5%~hp$~*+v#lgR03u%;3&nKqdT12FVGxq)_Eet55aP6l>*q`lu4y8{Z|f9%Mn%7XKfj ztoigZY)`R{L=b1>wWbGhUaMjAuLb6vXY+T4kQtj#ucMF7ag*GOEDq@70&q9lbjo?=?18f>So(5X2x{$%R{V^=_qUg{%OyH0||HX3dUa92^KoYI1)z8hm9dgjAC-NTZ3 zqF|opv3i)NyV+N2N$&W%7K6_%d~#I9YNOieo37Tsk;12#j`oo~jb?Qx$c<=xu4LCt zAxA`9Bfp#1d(e!E@Cx5WO-1il4ebrR#$(Q+5bUTtnt6BlNWpNxB^C9oRAPS}!xrNOPaP>gKc?;UcyEbr$!f1V(r|bsNK&VV(NjUtH;eBa zKoc`VMLc5d;NdxAYzK)E%yxY%Z)tC^yW4Be%gA=8`*?P)`$HLdLVe^8CvQKQAMKfoIU-dmjJ>G$f8*)2FuMM0Wy*9YV zsXDvPsdu#3esA=woDgMKdg@Z5N^CWZAo)T&tHdUc>0o?tChThW;bOY~{;3xCp*qOtT`B+uVB9`AIIDsavHdoFN;p&6MCU}T z<<@&A`6fwNjl)(?ax`DGz@}*M6Q+?a3~W!b=3FLwOqW0T0U?J+z5}lTy_P%hM)uZhK+m zXeYc6$a;Y>GrZB;F0y>f!gK*L9o*EieQ-B}lO~dOj3B9Rx-WxbiJa$ZBd6O82 zI~U87^L7o~SG++L-+e;MPvTSI%o@DmK#)OfyJQT2&{JB>ePzgyaZWWV=(O++JmTW9 z%ZdYb{*%sYpU;#j9kzephfplIubdI}z85R^EsFT|%BpS^-&|TL=_YKIHJ54cQeUyR z*=P6Lo7w^-f7$)Jg!Bzr{;Z~Lfs+1IQoQ31I++3zrK zl^N4L@RH;hq##3U%$uDCu=XQ=?iYb!|0X0o+nDr4V?L5z_HTx7tKXmRkk&W85Dg4B z0yXCE9&Bg~3_GCQ(C8S%_Esm7JdJgi1H-yCYr+|zCA@|U2Zpt4*24GD8i#a$Bg@BQ zBT7M&Mcf8w(GO2V`u?f4G+UEh@@FiGI6a=hg95XZ+d*K{j$C3{UHs9 zt;vxTkZucPSX)BLO-svO4DAhMn5W#NQ$NvN33^3>?lMojNvEw2DFZZK3}EY|u=*?o z_2kB6(C92nk2(c|n9_uIw*?rGE*31}OCe(uW8NFU$NoD?xQfeq!0w64P}JUJT}wvO z4D%k3{a)#hTEywMV)N%wdzl5YO^Tl~_eO2y$dv9kG~Hf?q{T?EXgZQ!NtEd6Xz-9fq+{@ap~JO98@pqrJ81e25lj8#hJmH($^B+@mkM@#cF4-@u#}O6j}R|SK!Sn zFZ!>#E~saKuI!(5>HeRtz3QBQ(Z&8BU62pfrbWjiNSla|;P94t;4~I zOM}*_W3~=fEa3BD&+t0pG0nT)n>;FBTRH(aGRLYqX7g@%t)31qcLvB$!((|ym3z3) z#*g!AgEX(@(;-i4yL6qDK*6nx+%vnu4j;_>lwdNSTbAUb`Noq>K8_%fj#BxlA=G5> zEkVq&bob$bRQjAN<*rnByE8cqagCFvzZfc!Z1~QCClv->0Z`~Q@HMez-J3rQX*V+hWc|dB z;evgF*!d@*0Y)>wQ%d(&BCgo8U)TuQzJ+h8Xt|dYTNY(ESa^r2W#P-h9M8-58a&9H z@7d4iix*($ZFOGhv5Q8Z0-5d2Mh-IDp2kbE_ed+ytS~P-%g&2rk6ER(K+95VafC?a zi-RzulVRLDLhzlvtMab!`M!&GxX$et0E--ouJVhdI{#4d>!1y9XYer--WI!dhK&gbeA^UUPoA<(9 zlAJ6D{G6y}v%!KZ(PdUTg1PNr@59kW*3?MCYn_}p|EAX>ag?C`E&71n(a0r&vkhBfmE;12;v zY`zZh`y#Y;0lWn89zYAgZvl=2{2u5e#zo-G66ZqChoI+q&~s6=+Im-{QbMV7#T4;t z{=foVI73cF^xozCk5RQ+Ch>&Z=+-TK>HtptCyZ+r$PzDS#5G(BWap%O_`Ly({3oG1 z3vGq^0mWX~pPik&OzPo8=Gb{r3%oa=PZP+I8M!vLk!ylE%@vT@=pl3JI?0LIH?{VS znW9GqZ203qlJypWK5rCD`l)mcw3T4hbk+Gg=Vpm;k5A9?q(NIPwBhp)&b`_FM)o8>jCnKm2&d&i9T-{&M+; zfr1Pj^+e$kb8yLv&e*!Y)!o%>*z#{DtJ}NI9(Z3F`me9+@?5i7250`G{)6?ubw9Uk z!zhovZ+6N>e{3G9{3Obp|>{vF6-r@=P$+LeFr~# z=Yv0$epB`D;_rM8ZLNW_a7CYd^!QRqZG~WqkeBRnI^3_lh$$<{9)nPijfdAHIKK?4O^0`epv{lrC{s z*}<2eeRFm1&#o@g&o7*HU#@q;Z-vKqzjAcnw&zw4SAH|2H|@+@^5dF|_gu*xy}sjo+o{)EPd!<_toqKClQs?{hm9xm_s*R)Hu3vaU*7xaYh62z ze|zwwUDKY?tg5eBP;q45mKo8U_fn_)FkgB2ug_d+d*hFx3oppOnY{XrXYXIM{%6gz z0`nsiq+AjK+D!Oydes-y{fpft%N7*Qa+WPZ(GzQ-! zJwNx{bI(2ZCpQ$D-LFDu1Hdlt0RJKbAze^a!TIc+jG*se zO5Yele#~)RU6&6bmdJ;55z+?LLUxC`R9!~s>QY+Ncc=uqqh+DC>qnkvfPei>8C{Sq zV})d&vy&}1_%eKyyC-1u=9W9yaBZ>=7xn~_y#}A5T(Trzm|V*E>YaZNFy2fb^0Dsj zfX+KPn(5P*>wH_C89ft$o~NGBo9R={NDc9Ms=Q1u1BrBQttz@#))ZV+<6bPa$?OI%*meRV_5|2t1B}enTIX7(9D6oQdrwaE5 zjL#W;y3*RA4>F8iqKg4tRdvQ~wL@DdW214K8MJ3G8L7s`u5Wb?zZpws-a%UA&>#cS zpe%%PkYg)2l8kNUcT$Ol&n>ONxjdb93x8J5^nW-+`LqMHws1r%(*ru%&okj_(J3Kk zwI?ZR%h3yl5N7Ese!YRm(ywk{UVDW>+BnZc+YpXXn zB|lZYmeen9Xw!`JTKKMSrN(jp65q_v8;iqGU}NzpWS8icHJV}13i$A;3V>I7~p ztghcJy9->BgZ2Z)oZY)mURa=)Fs%=#3e~Gl1Md;%yim=mKMkcZTHefS%dj;62Iigv zJ_P(In!~fa4D-4V=9G+I0=!#R6{L5#B$mcemjvU5I?O9d5~^Vw(0?t(`5`h0pG)#5 z=)0lbrWx%e^H22DN}KRUfyQ-2P8UoU(kp1QUv`+5uc{l$UAw&AVe-oh(sSx^k z3`sq4Bx3vp!J`rA8QP12cL^1P5E1?&us-4ST6*}2fe&~r~Ku}_qlLVH~nw^e3sO6-inZ6Z-lC?UlnSXUtF;p=YhjJ(y> z3s42|T+FRlp~T)+DzBmy?JFpdw1MOa#VBO2x&Z!}EVv>5n;`z167io|aXZ&uuf%?n zkodZuNVq}bWo5-LE^2P{rc_K6+M%E6*Cz-o08hQ1CUA8~GF?v_Mb|AMok-#mc~d8paEcDZqbC>G!x#9_oV@-04M+&fB{egXaICVdU>l; z7c}rpWTK!eZ+1?Mq(mnQ&CVSDS{QK=L!)!B=Wyene6L* z@jeu~nS)t^!wh22K`uTq?4Od{qZY~s@sg_AR)6*O9vC4SMvDjfNZgPy*n)m-QO88! zxnHA;tKeGLM;5vZJZj-y)c&U%* zapl;8)56_Dj-^!Ukt?qBi8~@l&uf!}G!2`ITM&{1&07gY2#Df29Bny%CrV)&yMrd`aL#bSq3tj0( zh}+`CVQe2w`1!{;poRa9e3`5lh#h?pVnllN2E^~Ov{Lx4#jhcfGul>kAk+3ht5e&f zDfQQ6JiOTnHsIkfVwos2jMgLTKO&f=PUyO7D8%Z6(}n3381i)vZ-LCeYXn)`5wdGJ zN0H^8h!Xp=V(5S!&8x)r+#r3fB7H7aV*iYjz7-RE*JYPt>4)oCKiM%did(!L{{eBN zIXlkX8^4EDV%{5cR99x^mDr^?ZX37eOX#CTv2~8~y%(PXd^OO=M(DBX2A!}Jd<*fZ z1+an5#O_q^-I}2i%IL}B|J;xy?A45()0R6>U{o5!bKxxTgb^}71$0Wd*Z>*t9QbWE zMBMqeRfwHzV$4eH`*#sygqAv5Fh08k)_lv#?f`Iw2p^>`3Nm~eujzf7MJ6Q{Q?SK) zo{=^&lT9i!0vrDlXURAe%LFC%g>q&{<4|Jf2?p9Z<=cP~iztp6Ot=)z6wk8|3(xrNeJE_!`DzT^Hm68IPWnKJdP+ODuu8K3z=VY*> zIsOpIk5?T_s%v4_zS>>aT5DYClxWIWM{p|OrR93jMRpg@ec+`qjQwK61&w@ek-$Sv zI|MoHP$H+52?As$@OxpkrwsbKU#ZU{e#i5aSVx>#7K;#TN&Rt!)a8hSHNmL8;0+u` zdG|$2*~+WEYn9kz(2^S=BYQx>$1V5c+02Ysf38Tw;vddV>{HN@nl=IMnTh$TkJ?8tyoeic7=b1hOQyj_dI zegyVwK#w7W^1g+fNI_zzPzHb=4yF(@ByM2Mr6P=WhiUW@#G!xJLr4zh^4UVRFI%JG zt3qYeeQYN9=Bv2215ceAExYDeK&<*pT(M9Qe777K>Wf_96#wn+=4mcrvp#BDobp%$(D{)I=|0jLJNm<-4ZqB9d+U~qN)Z%-n z0gY0&L~aSS09_08Y#(h^MV!B+f9dL{xNHVR5%=D+o1b;|W7gpEE+l-&tb-V*{C+V- zz?N(=J=`kpcBb_hI*mR$UmG$sL_N9=60<03Xkcp*tLwr5L^c;B^g*MD`Pmnm#TI8l zkKRXFsW5HTg{{$Z;^_c$CEbLNEnM(_Q6)B4sXE2^>U=O( z^DROKWIscQVmZiT)A>8h6zHF>6m|Z{;U47mtYJX_fK;;gkl)phO=)i8<8M3<_NU&~?wtTSvp~k!eGjv+KlQPL^5ky7nuD@|;M+DB zQPMVJlCfiSXkbUqqHFP|4_~{sw$s_}sRYbkz)^}dM|U{4U!XbK$|dwo1v{qcvKi=Y z#X*_VrGOQAI;e3dx-?7W&UYi0tF5c`cxQVUklh)gIf}c~mvTaa{glizIp>R&^TgdJ z&qp!Q@8fQ!S;gyQT+CWW!na%D*1@A`R-fvnDb~vK^id_YH@-_|J;;KjE&e}5 zS@Y>-*q&k?i6G9%YfTU2yjH{JUkl7T&*tw8Au~3gUPm9D<0iQmSscqXT*IMt(Q1_n;XS;T67%nu^}98rmCrjmMltA=puQH1qE8k%rSlTKZJyt3Etm-M?ho zBuP!q~Y*Nkfcrzqo;zPZx-J< zfF@>!ig?7@!NYUL*bWjSnC<#j-qPM+cemG`myzvG_wnpp_lGj_g!;%GPTrzQa4?DQ zc&tqmyg{&jhAUyUv-j%;WNvZJhUmJLZ*MqKi)PLazv_F6db|S{H{^DVUK=<$dTnrz zQ+0NoQ}1Z6{od$VIU&lf^wgz9mDp++LGp!m$c>tw_6AQKvE+Dm&^d6Pf?T}9tB$re z-0FU%R*6j>)4}-QOxV@#!^L#}{ZlROLv@hPyHo%Sz_@*Ka8?B;V*73UlyIiBiOz{w z%dPiL@=cPk8i%c(NVf%7De%<@c#T0PTXxBGNtmZw$|@Q`R& zsKof|b#JopM$zi2uAL${uKhft+LK)#g_j6Uhw?P$10I$)dT0{`C#9+pmZweR-1frA z(N1_Dko5v%W_Y8wU1a%|h3NuhI=HE2``~T{Cru>n7(r6s$PI`QV#7Cm(1uVda@>Ho zq&baGXxPIVguX{n@-Cu_0*1AI06-gz$I_LqZ?z62o%thzJE^*Yyf<*3c{3o5)KA$O5I&A;G5209aUpXV{eJ@t-TNLr_l~vs;zPYqg(oNVZYcA8?rM_Zs zv(N6gH?;*w{<8ab3F#ZM{8>%g0ww*arY!&Vvc0mp`>>3rA+2wGAsQHN z1ZvFRJ=o9~7dB4CpwU^D9(4)^F{KIbZVNCVT`X9{mqNxS#=JLxkNtO)a21#JfZY?7p{Tvdx|WQl z8Rk76`@Pa1wTRPi#pchW_A(1(n-o7~?v2{YktyA8Xu7=&NsE!zYiL5!L}Y*#e}J~2 z!B6~2zHFF1t)02z%52||-tqpBLyx2H4BCDdmio#n6#Pn|gjshG3 z_%*<*0QEWWf&Zm|9RO~CLr`xAFgDE>_6E#wLLzUPR1?{SD1Two-T=xMBUA#{hY6XrLQHtyz;lAJqeB;7yo1hRr21lV%Y0z|F+r{qDrWGBZlnKB1=#Xs|)V=6Gyw z9L_yxoI0Kx$h$M?!v%W+CpOCqF_JKXdoRcWtvr>d`7B;1V$KX)e;XrNWjv>7D%9}a zmIkd;$7~&}SitAQp5b-GW14rpH+fXNwsZn;WR6vJ%;w$jT0I?J?hKHhhR5=ZD)(@o zjUVUL25DZ)r$e69cIi4Pfr48Xxo38R9X^=%DZykuw=Bs=^NlB&d>la{9i{S9L#WB% zTY{Kl>F&b=sq{Hl%3Z1Mc4u-J;u*bx;K9q(r#u1$oh#L z!v*^UvGY$r1B_;Vr*wk*nSu<#C3%fgq1Ii8pAHF%IY z-?N|37caoh+v>d1V;7A+1v1;4jT~gQJ&l)S?~zuZSz%swmYo;L9jecRX(-NY1TwwGRc#1^a{Hd(%hBbK|x8;l3 z;+Ie}y7N7S;!e)`L-yyoH}8eJ zBsp0Q_&HI{W`hM+qRXsw1asTL-iM=$tf`TN*E%_I{!On%;wVA=Tl4|zePI3F(2l{I zXW|@W(DNb<ft3Rp%6Xnq_q26r8N6uoX@m zLw%fR18kU0&dn0x9-p4&NrSdpXv60poO`uzM!q^^ z6z6(CGu-Ws5cOmpAmZ(IPtiY6r~`Zv1b7R8`0f;7e}6hl3wBv&+tQC&f8zZs4DGrg z;+maw_>-DH!QJV4pRS8?(|ofNZum0J9)b5sn%B$NitPOZ!tYDXx-0PlGun3_Hj3^4W!tkUA_aO>X z2*dAg^bYvxuhuYMR#n#iPcvMX#`9j`3@Pfwp$+c0MOs3!`Sn1f4RbjH^Gt?sU7!4`s_Q3nf(0_ehm*<+zGC1=e^&hPNt^2uU zD_;?Umgkc8{r5M29sd29UA;^1ST`+wl1=^DQ`a8d_rQPf552YVcUdnNJ%1?{?>qR} zJ0JY1^qZ=G7k}q-Xlo6Wg)92xqwg>L>bp0tmu_p=pM1>PIb40N{H={Itz2tdoNS+) zkw13vi;qL2zrM1et!hW{DdX#}u6q8NzgL{8G0&jqc~VPq{_y<^WB>g0(=YRnr*w(C z$_~E#?3=55e|B||etzMs`*OV#extnm!q0C0+(e(@K^OmXH7k@YM*8b<;e);Ep&&F>3 zVBTkErw!h*M}1<_gO5J-)Ghq%2P!W7;-d-IZ~yMY{oifd-ue15chw`MYTs>Qx8bsO zb5XnHmmk+$yyr^p==B}v+fKdSdg{sYWz~1CoV0NuIcz+czjyAev5DWW`tsgSU+da& z{M&;c?V9$CW>tO7f{G*aw#&}PDq)2qIq?qBRKS+<~Xma}XT8ZRe`D2Z}G7$SdR61>7=5}K+!*g=>) u3JPk3Re2a;jcN<6MM@F_!J7<9HL6C+K@dd{LZ=~!;Q{dx_?D15{QVDwk2yO4 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51P19A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51P19A.bin new file mode 100644 index 0000000000000000000000000000000000000000..f10b370dbefbef5932ffd61869fc1286a7ac1430 GIT binary patch literal 8012 zcmZ8G4R{k(w)f6Ve)zQ-! zJwNx{bI(2ZCpQ#|-KRomJ-{ykwgT(~*bVUi{~Dof@6Gn-0skTcAze^a!TIc+jG*se zO5Yele#~)RU6&6bmdJ;55z+?LLUxC`R9!~s>QY+Ncc=uqqh*1%>qnkvfq&gi8C{Sq zV})d&vy&}1_%eKyyC-1u=9W9yaBZ>=7xn~_y#}A5T(Trzm|V*E>YaZNFy2fb^0Dsj zfX+KPn(5P*>wH_B89ft$o~NGBo9R={NDc9Ms=Q1u1BrBQjViiF))ZV+<6bPa$?SSB*meRV_5|2t1B}en8s{3O9D6o-QhY9n zqEo!y1t?So#_NK&3AdHDHaI0rwbml(&XK95NSZy8C(Jj$FCS&k0xVXK_Et)pTt*+^ zGI~jQpD$g)_QdrwaE3 zjL#c=y3*RA4>F8iqKg4tRdvR#wL_aJW214a8MJ3G8L7s`u5Wb?zZpws-a%UA&>#cS zpe%%PkYfutl8kNUcT$Ol&n>ONxjdb93x8J5^nW-+`LqMHws1r%(*ru%&okj_(J3Kk zwI?ZR%h3yl5N7Ese!YRm(ywk{UVDW>+BnZc+YpT~f zB|lZYhSV>vZ_|wQTKKMSrN(jp65qI7~p ztghcBy9->BgZ2Z)oZY)uUQnQyFs%=#3e_u51Mgwyyim=`KMkcZTHefS%dm9M4a_|c zd2z-8Rm5_%qbba1bCOMDoF2eNi2<{E(yj9b(mL_BvivVp#NHm^Fw41K9}TA z(04(-O*7g{=AY=Pl{Vs!0*z~loGzFyq*u^pzw9tATUj@hyJlIv!{nFer{~n$^87Me zQu73~uB%z@H)|{Wa-Jz?xnK6AFI&Bu@ILOB>rG@`{AiyS^ix81!$sA2e@KTMjPUsr z8IpS9NW}OHf=46JGqe{4?-D8oAtL-mV12^twe;}8CD?5A&K8Wma~f4|wdlGw_N3l{ ztiuso#qIZT8&?l~py!@ZVxK58h4#8EZi~#?l-L=C+eo6EP(q4Dur5c^BiG&B8F`DX z7oZB_xtLqNT#3D{R9;2P+m}-yX#>d(-0S#U%AH$nV2CE`D`;&!gRUWxrC zA@OxRk#K{=E6Va;T-4m?O{thDv_n7BuTKz`1D<+4P2lQ~WV)Uzq?Q{!lz`3EYl^y% z1C@}NCb3M$?LU?LteQ3;Esc>HKm)+Q+@cA$X(qfI?@I$v0Z;%m00W=~&;aO!^zv4x zE@fPwJ_o$hDPUL&*iGfBE}9GNV+tpiZ(k(dXUK_GuhYs z;(aJ|GY7K-hZ)44gIs)K7~P)SqZY~s@#3o5R)6)j9vC4SMvDgeNZgPy*n)m-QO88! zxn=2of6cbP6OO2@3vu_$oWlu#?S3l`Z+2dbs4B__=?9MZAKmsnaP3ECx5?dYywpeZ zxN>a4Y2of6#}X>_@D*43MNAKDa?!)cRb!y9+)uwGI~L8Cuxbln3i3mIpy#3s#`!Tx`_^EBm{3=)#6h1UhjZ(YnJy<=1#{WPdFc zrSr2RHMMFkE6U_o!fMn+=n*_fcnN1~ttzU@rxR^Sf^ktohnY~eIa)mw2XzPd#G!S= zda;qX&x9P`jel&XS6~*6-~rrEBXehX0HdN1V!?kll7+~6(+EaUBeXizp;WHQg|2iX z#BFxsFt(2-{QP4a(8B*lzD(8&#Ew1)F(SQs1LAjSS}A)v4{# zl=^Ej9@*ps8}M)#u}qX1M(dFE9}&z_Cv;sk6k_$k>B9614EZ{Tw?O9KIf5+i2-&rq zqsVe^M2Y=bF?7I==2c?5Z;(D$l0FwHv46%%---#oYqLwS^uzV6pX?YJ#Vy{B|A08s zoE_)xjo-^EG4BmJsw*?|O6*b`w~br#CG^pv*gD7g-iuEGz8dIb1N2yRgHBiqzJ>VI z0@%Q2Vs|R|ZuL+JW%Ok6e{M(;_Gm`WY0DibFe(k=xo{SE(g>NK0y-sJY=De+4*WJ7 zBJTX#D#T7UF=i$9{ksS;LQ5Sj7@u1VYrbVgcL2CTgpX1e1sOh#*YrNaB9jt}DcE8? z&qy1Y$tINLOC;}aVW9#1Ox4y@@+tgMHI&jCR_?CWb28Y` z9DkVP$E%LT)wQr|U+u1Itu?N2N;GAxBRCcCl5)N1BD;&{e(+Kl#(uHkf<`{KP~ah_ z9fX{AFp<;B1OYM=_`R^&QwDuKpw#CPzvFpItRqe=i$#dFr2d3L>T<-vnqbsk@CFW} zy!)f2Y~|J7HA?JpXvvL`kv*v3u2`rDzFUqA^~Eg%k^dYGbW~X+}<5f|@ z(FNlliNyLy`K>r3mbG{zh6ud zuq9he54VcDoM}CVPNR>`*MJ#4L&$8rWLI>bfuhkVXdR9czMvA@?NykU`Acj+7 z%M^bnL<{g}Y>096(;mWYaDki+YAh>x9Vj}Uw@Cj*!OE-3T8blUREf=1s!nmfIvaN=74M<__p;% zl(f~DWb7Cn8rYt*@LK$tL)WgY>2$VxDgm<>aFk-r(e2J{7if;QatVD?!H#LVYzBH; zen94QDPTpO4r&~VF3D24^WBK$YU^q}-q{`oWOsyUj^Zx$rJRspKPB@_&iP{HJaN|v zGy_TR`VqI>`-GcmR`EI+7qixp@a6v;PlK z)_i&?wx?J}B8W5cTGN9$uhp>m*8=m-v-vwh$c)XW*V0GlxJm9s7Kik*ze`SKHT$%G zprnbEjbDsem<4Tu_PqZ9oH3CVNt>W#)nQ3XQIbL%Pcf}h4YpHP=+qn;f3ju1F_Hr3 z)Uz9q)e-qvy`t9!F;W;;?P6LG7wo$|zdJlD|Do`9=Q}<00G@Dq>CZ=gHB`u-=!3pJ zpUH4XzT?dRnzb;jX+u^aT&OWd)GgSqX=Xd$hFLr5EV+;#ZILM(F4p%?(x*U_Zb{z+OFZU6vT_?d}8x1!FxT~mAPHDkY-;J>lJ@>#o-OG}B zqF|opv3i)NyV)bPBzJsWi^1m>J~^slwNdT#jaTd6Na0gVNBhX0MzgvTADZJ!nQnc)9PQrlR+&hW3VD<1uGZ2zFE+&AdB&xZ(7WmOj<_st@0z?q57@ zlBB4$k>pNx1r_zIP-1@_!xrNOPaP@0FsAMFcyEbr&T6ka+;C_GNK&VV(bGZDH;eBa zKoc`VMLc5d;NdxAYzK)E%yxY%Z*Fg}yW4Be%gA=8`*?P)`$HLdLVe^8CvR3IIGDtD zJl3WO-XK^%!KQFMKfoIU-dmrJ<)-S8*)2FuMM0Wy*9Yp zsXDvXsdu#3esA=wm=I-Gc)T1E)@U+Fm9h5oK?Yz*nS&7C7da3q;n$H za_fDQe3K-s#$l@`Ihrq8;5>;Vvpf@`R?jrp?LHlu}v=95>)C zX-?yl8upL|q3=0ffMKog2haxNv2>;DTdf00Xa0!bPO7dT?+u(M9y_M6yh)71 zor~qkdAkPgE8d`r?>?dBC-JFpW)0qOAjlxLoiYYM=xHtHzA|LUIHwvFbXxcZ9&z#5 zWyJwI|4HYy&u7Y%4%@%)Lns#9Th54j-%FKy7e;)0WL39{Z!WErbQ8A7n#;6ziLcn( z?6dprO>F^^zwG{%w&J|v^=4uGEZQ$}{&sDNCZ?01;A z$c*V;cu8^$QjnoF=1oomSo@Jb_lv-=emLgh8<9DXmku>d#e*kp2oV%fnnY1)!_`#5?;-P1H;%sD z5v8EXB5sAVXo_5U**R#UiKMI1F*F~phKFDmMA9rMnYdP`Ln>~xH$Ab&e%api{*Z>l z*5pVENVf$ttSzDBrX^)Bh4ut8%u{aCsh{Ys1id0bcbO;Nq|;W1lmQwq2C#KfSbdg) zdU9hjXmpmPN1cK}OliWq+5!wn7Yi2g<&d$7G4BcBWB(l`T*YNQVE062C~9xAt|6mo zhIx<2ey{XLE#mZBvHA0;z03mHCdE&gd!x2;WJ>oNnr<&c(juhw8k&$a5gDMxAD}I0 z@DqQMFB@i0YiF*wGTYaucf3F3(BtU)LrAapTST^uGIvC?nx>R*4VV(IBI(|&CM-?F zS^ff;Wi;I(y_T47G#yDt5+!;%8a(LF_+P#Hj1Cs=`MaZ=WmWW7QFsf1nEoxmQGmk$ zzXo^}pgspa@V^AG1HcV%5bEs!#-@9OJpnVEkjR@R)kJn7%3s*DCxG(B2$jI~VS?#= z&-rYh^(6h{xb$u752zRSQcbf!gSL>l;>=)8>1zn@c&%ssBDJ&E_*30simds`EAZx( z7yVaV7t}LASN2c3bpKD+9(B&Y=wknmF31OK(xT%Lq)kLfaw0;sX0isS#5GYeo5$ib zU~G!VTH-Y9`egjXNA&<2coU|MVRMPhq!~m#a5HguzdP}W%#4z?Pv~g_8f*};IUbuE zhjR}ar;g_a^6pIfaKWCyiOuo?j3kWU-V3roD^KNVK8x3hm@@;{-^NH*8P6%23N^g9 zr9tb|FK7V!D7XLud)nC4yYO&%4mEu8=ynPXKQvw1hXR!@hQI|JmW;juiU%01j? z5wP2UAj(6py1X;?wQ?ShY#j`N-&wvElcvzeB((bA4iZ#N2&bO5Na~` z79-|Zy8F;TDt*qCa#yOm-I*MQxW-A-Uka5-HhgEnGA~NP#e;n|ZYP`zeDGD-nAi30 zWD_kX=cK_mDTmw$@UinEQ%FZuWl7?PVix4`lL`Z`04Vet_?p<4wA{yuEeo?7EWE?ivfveAj^~y83?5|8 z_w3{I#S5_WwmPr$*hQmHfz0-1BL|sncjG15d$<*7R+yI^W#>h*$E;LZpk;}*I6|cI z#Y-|9xFlDcZgx(&u&J~_#D$dSBINW|qhHwMw1g-g7Z^PSo+1%9e=2LcVNG7gZTVuh z_$Abg?tD+7xC1m9-Gv^j2$DKnZ1vbhTx|F3hxYAGrpGK6iF+D8GVX#=&bhqUs*Z5t zit>jWio|rWWxn(a0{8&lhBfmE;12;v zY`zZh`x3Nu0lWk5RQsCh>&Z=+@1A>HtptCyZ+r$PzDS#5G(BWap%O_`Ly({3oG1 z3vGq^0mWX~pPik&RO;bG=Gb{r3%oa=PZP+I8M!vLfop;}%@vT@=pl3JI?0LIH?{VS znWBdWZ203qlJypWK5rCD`l)mcw3T4hbk+Gg=Vpm;k5A9?q(NIPwBhp)&Ar+;BVQdd zigP`n8SeH*hD=WZJfTl{Lm8}JKj4U`OD=W z1`0BC)RTpa&B4VlIb&=8R(DskVe`M8tZwf*yZ?P<=)bGWK)0k^tH$KKKLK}!*6Z)UDhi_FIQ#ozfH+FAo;;fg-_==%%5`tFVErCS^JB_FeP4p*Nme`~|bE7lknCEMp_ z!`@iTP~ zuI&$geB|iftcdVTx(wo|XSo_eZ$Y4x2eCT$o<4jWJA@0mMmY~uGTzr63$*SfYJ z|MtK~JEuLXSy^8*zvA$`%`>7o@1;)p;U49Yzdn1Z?TtT%F1#rJX7Z{#o_k>7x}P=A z3fvQ!Amx$>&}PDq(<{HA9$4fqSvtRPma}Xj8ZRe`D2Z}G7$SdR61>7=5}K+!*g=>) u3JPk3Re2a;jcPNkMM@F_!J7<9HL6C+K@dd{LZ=~!;Q{ec_?D15{QVDMl{jqx literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51P20A.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAMD51P20A.bin new file mode 100644 index 0000000000000000000000000000000000000000..328872ef51a3fb081006379b9d211dfd9804794f GIT binary patch literal 8012 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 literal 0 HcmV?d00001 diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAML21E15B.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAML21E15B.bin old mode 100755 new mode 100644 similarity index 63% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAML21E15B.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAML21E15B.bin index a7440b12810cc9eefe9c7cc4692125f79cea5e86..008809e6c8778c165c0078e202176ec2c0d4d5c6 GIT binary patch delta 1122 zcmXw%Urf_i6vxl`wY8-n>_?@Q@fEX4d(w4v~wR40xL1I!AT)RJr3p(P1 zG$v*v#w>WV1jrtiFdrbkV8V^hg8h;xiMwA6Bq% z!@@61ojA^yqzQZ_amDZq@f&{GRECzsb<-%yV;k}EPcScxlU~KALb`?@G1q%|2E0uv zra=1OI(U64q1_SSH6%042SU5G0SwYze9G+byp+kt;UuKf>o@}5{G>hfQNVmJ&f+Mv zMZJLuZJe)~cjbJrkzsL)zQRi_bvVk8T5b<^1ci1{N9GF%?SlRqdGBt{{klUnx`1Lo z)Z0R3>iw9t@qU-{4JljM$s^PUXOvcv;wZZ0zXpnjlYzYRP zk+|!cbUY%oW1_n}!|*^Hez_^MPj%R>rL1-j)(f^u8@&Q5*HS+Aydty#K9yt3?G@-% zQi86~!N1K>TiXThC{1=#3Zca*{Lj?A<&{l+NceZ67w<~tD?44`Dg{)b`Kev*th!!k zF&!%ZN`1L}fpYB=#vL=8SsC|R9Tj;3c1y`ZDttwc1S0;qo9AcZ>Z@!Bgk~3wfp)(y zVD$aAJlD+Q)`0w22QMbk<5?^UXRr1H|IX_6+|u#D-^*ElR{x@y^8>D$z;P3IjpkuIP1Pw-*8 z1O0r${sP`e%-ahL_%nZ4?8XN?$N3}v&X=5y%CG3Me-K|2Pl-FkU1Ev2K?OY|yFxr7 zo^Ve|r(`VUmr5QFHg}z5&1cT_c6as1&h)~|J-t2e#7?m`e|Vs#x(T2VL6QJ`N&B%T zkWc~ySS*LBLqyMi_A1%))Ia~Z*V*1`R#R0|4b`>#tLpaG)Lg*`S&f delta 1191 zcmXw1Z%kWN6hHTsu3dqR@~4dUG4AUt(rs;ojz4ArDQ%Flwu?H6Fk);6n06Y$$q@I! zbu&gVFGe-z$PP0AdWChSgK2Wtn1$O6!j&)d+s^+ zoZtPu-+Qt4&1ZMyb^`6w0(2vS+PKkD4gfD;^8eF=`{H<8osiode{FAmJ^u|^WI^&4 z39;`;)4r0V%};C>qq5KHy%>f}an|aCj3F!e-Bxo5G9PBo$V*!Dc)3?(vM``o%$2Z7 zp`U!gR)uL2NSxI?BIIW_sjVT9nAUzuj8nOo?J6k>l52L+EkUN99oDsl<5{qGrl|;- z*2iFXr@8VA2fHSfrEcKL%^Xn3yqb&A7~zVd<{88wm)usnNHWdYJQKMFnFo)_6xes9 zO#aV2y2XFHm(_O4l`q+!y1MQ0T$aX=?_(zETgV00r~m0xua7J5sf4;cTsf)sVD`?| zI;vJm1y;b>Pt+IvHPW4^!FwlcJ|;*8uleX9KatE4+=Z$l#OedOui%xgt*en2W?qOT4QkUI#-e^IFz)ZmbltD-N3>y2j^zmP4|dgd6yUL zCJvGU+ri}p$w#|U@-QcMG0joV5w@^hvh;DXyE-+9gj_j|WPha>*VebD1I%bBJL*CE z?ZID}Lw8u5o3 z@`O6(uaC{er03}*s;J~%Pj83YQ{cY8#wH9NV@3r#Ns-#x<%(cl+;42jAlKehN$cNh z`TTqJ+bTLj8n2);d`ryNDCQA<-V(Rf#r6#E@VAe7J2`neuB%Ndu#m3 zP=91s7gu8JZR690kt`K8k`>Ll#J)1NkYCxVaes9ehsAcA|8>uyM0t!XBAKo4qVrHmkdZJ*u*ikjhUH<2e!V?*bab_y%Hx%~sSn zUsrX@`6flxU?h^N+*g&k`R4|)QQEII$kzw+DEP??wWRL$O_x2lF2GFns0aBL&-%Nyb>{kSLiX$qR4ryuOn_C zHV{7`Qiw&w44&V`xPtf{vBsR1ejz8ak1P)&!SLv4IC}i0p@9eu1ia8S^ybj<=m0(3 z5gd0lbV4ZsK>%>4OfPFeAOaA8)d~P&0;ooGAYS<|et>Zd-90osMqMuIs&8n42G@b6 N<^zpQiDmJ!@DDm3#uoqp diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAML21G16B.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAML21E16B.bin old mode 100755 new mode 100644 similarity index 63% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAML21G16B.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAML21E16B.bin index a26ab27df2ac9d8fdc7ab694c438f37c4306a6fb..3a857ee6e7e9a9131647c915ea1375d29a48411f GIT binary patch delta 1122 zcmXw%Urf_i6vxl~wY7gh+>c6Y%MW{hE!B?6q!ofO0&NMbQaeY86C@_Bf@}8&aY09X zkjBJp#FzzdmH_c#3G)Hs3wG>b3xO;?%*ADGHa3+kgE+^CL%S{Rho$@7os#V)pL_1P z`JQv{IrpwNCYws~4xlG=01>2JHzJmA2Y{pK{6D&IT{hCNThKa2PFEG?YoC)v79nRz z51S)(dkr)0FpqataA`U>V|HNh~xQWDUxuuY9nm+qSq?lc z87e`xaRWU53|H=Q@MzLG>Ibge&I5&Pj7{sU?)|w!9GQY_c7u$9rzC9&Uk~ch+ADz9?~JkWCxSMSYxj zqzuO^bg^%Za(gEyJ1f#Xn1U-w4F5B8e`R%3ALfBw#6#{0m8-j)ks1kPt^}}Mu7bLO zD+v{<|H^#1ashMIaqZ68&8(CKOxCJm4ts=jDHgt}MuXA7{H^n|N%=K83|z7B=3r;Q zAJqDPTbXZVNmEdKqJoE{iQBzY7Aaiq2lk!G<-V%T{hsyt5Fwhs|;R08}PK;K6@fDE$9 zGKV>#>X!%!Dzw zrMjt7rP2$t1y%oy;qVrTN?S48*?+(_8q}p}+$&X~-=%7#9a8_MZhfZsunu)4xPO9; zSga(#CM_?Ko2doMHVyfiJ+isTLuR!9NPcI_c5C%lc-cRYuaRfSUF06JjNHV69-&=D z9wSegyS!V_RKmgXt0E`v@H*yH+{m))Sdmj52IQItK=cT?HpBKEf2WsjM)a{2((^lw0j)M#5 QM)18{1KoktQ)yWE7ayvcCIA2c delta 1191 zcmXw1Z%kWN6hHTsu3dpi`BO&w829xR>9#gP#~-tRls1#Hwu?H6Fk);6n06Y$$q@I! zbu&gVF&o~P;ik#V<_8x1z?vpTL&U|*7)@+Hu*t|0h$9RWmg*88d+Xly6!j&)d+s^+ zoZtPu-+PJn&1ZJxYJm3Y0lE-j{iNAe4gk+%^8eF~`{K#AIw7}f^3^^0_2X~IA`6o@ zNrZhzn)a5Y96{o^5SIgX|Ai=Ii&c97vL;mudhON-WIs^P$V+Fea8(0|P;NHx5>28rL@9=_M z#6{BJIJmqZ1!xya9^%9)W;n_@!WOnmwq8zlRi_7#kSnK=?61t?+WOXXh?z}gM}26Y zoIh{l$}tVx4>H%+PU3Vka?fq?NW8wAG#0ovGyBGlY=ea&M|n^j=1MUKmyj++BmU4L zzDURXwb8kR^c*?_N3cUB$*tp4O&T8N!X;NFeToKNT`;9G`5J{`??B%`IW7j_f>at$j++9xsucwSsz-`%Mne%Yegxh zDGRKrw4GG36Q%2gjhhYQ&e#On>}T<^S;I~2(Ugs(RDOz>&xwG47tjR8*Ac^PwxY)U znr2weHz}G9Bat-ao~F#rKRbY(hLk=??BpDo-We;yo^JNI!d7usqhl8AxFi5ANf|=< z>GRBOao0VmQL$t$Ums2xL)%0u7US88#~@Gn^l2Jv5cgo-$4*-+tD;z~6C1@TpD7J4 zLwdJp7oW!0@v~XWUUDUQ$MS@ZtgwwLnXEFi_11yAD7i?7S0ZNc3M0l@6giLeb;NbV z2I2=q8nK9&!Sg#9R}jA=)|lJYC*(x-q3wPw932^n#*e=^*dL>zkRLh+-xxd|@27`5 z!egF>PADZH2ms!+T0M&>N#LNH1_c4y5yN8BGsmDV-^$ji1;Mw2Q NyuYa_xh!51{sDy3#wq{+ diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAML21G17B.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAML21E17B.bin old mode 100755 new mode 100644 similarity index 63% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAML21G17B.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAML21E17B.bin index fe3cce90cd35dcfd190ab2937af12d0ae7ee000f..54bf26acfe2660342d8c4df5a49416e716ce6802 GIT binary patch delta 1122 zcmXw%e@s(X6vxkbZEY!tdsK>)huqgv?U+nJjAjvOOJJ4SIYOKuF=-WCyB~-PI^rMF zn3#u8DcN4$=bn3R zzUSO~&b?~~AZj4J@?f{ZihbvnY1Xxpaj{3X|d$uWScwaLLNq*I24 ztc72ex^SE?NfY==;)>xJ;y3)VsRAvD>!wkZ$FlLtPp}|_lODyZLb{G0F*mq*20YCv zra=1OI(WP(q1_SSF(fn03qre<1qSH|pE8%Y_h)i(I0@yP&^D-n$!Pzh0smoj|c4 z>g~Y_^?uCSbU)&FL&{Zl@(A_85v5tUG>T5yzn%&nx*e1KTB^0xtIAY%ah%dLTGUc|1))Od1XT%6uuqk!MjrB$_{6!Mgdi5K5CaMr*05h zOo!^fQeQ4#pj>-}ar?|hR>pnSlBxm$yQE|h6~3Z}{bAqS&GR#H^;I?mLbHn|e}~WO zH+p|to@?Q8t6zSsg9nr7b}tr(a!31te`j^MZ|Qj8@8z67tAA0-`mlbSdLcG8|BN<& zM)x$Htx5=e=k-sVL&Oe=Dia~W!;iLSzypNv8Px2mY;&PEK?}1>7 z8r8KFuP$oD68?74N`Bp1?fahS5H-!mBep5?_oUIaM~Tv{gD8(EKyL%sdu02G0X|V& zVTFNt-=2||MfZ3)^!M9q>_1mJVf=*q#%4NF^Id|Ku z8!L6DJU5e5^-Wt2Z&H}DnX;Yz2V5h5Q<6n%l`8T(b%U}^>D$n)O&1(Ck*<)|Pw-)T z3Htbi{RO;{n73~+;LrSFsS6+QJjajtJ702?RDVT>{e$?LcuL$M?h;GH4Jzm%*%jgu z@r1j}x+G&czf|^kuqASmwVXNE+a2kTo#};_dwP4`iJfBYzR*BjZ8Ja-f+PWWllEiH zAfW^Zuv!d|X9sW-hlrm4>{YVoseit6ud_Y1tgfc67HaEXs@YFJbXYe-CvhBHG#-Sy O7i*x)mw2KKN&f<>w39#gP#~-tRls1#Hwu?H6Fk&nNOgoL>WQhCV zx)~#wn62KJ;ik#V<_8x1z?vpTL&U|*7)@+Hu*t|0h$9RWmg*88d+Xly6!j&)d+s^+ zoZtPu-+S@)&1ZJx+JW}!0lE-jeZp)j2Y}}>`Tyz0eQ~0#PRQ*_yt*g9e*6ttWMT3q ziLmcT)83MlBS;(n+@{-;T3ujr}du_^HeVGxI&7;EjN|3E*hYfB02^E|NGE{_Y z>mzV_GhF$FgHxAQsTa6%BL@_+ujJx1PPn3Ic?L1eC9mBnl5De@XChZ2d;bxc0_Tpj zCHR@ou=sEHver(y@+JGzP`5piQ)wLeK4Oxwg`8)-#-C301i139MyS`vm6KXGW^Zq; zqgtg@UQ6JhT z=g-@?a!dpFgUt1{lQ`Xs+;dwz60h$jjRmgF%)ap>+hC!{Q63aWxKhl)C8SHyh(EN5 zFVZo8ZEP+sJx3=|MJ4z9dOEzm0`I*wHevFavl=)_n$*@VSA_H8eq&1}x%P%eTK`_l z=ih7JR?!jCcp07HTVlROF%R+k&Lri+%Y?X+KNcklY`4_9i2Yz$^t}hh2`+!`uL-6i zebJqrT#2){%uf|YRVwNvJDPKmePwPTzp_>HzUod6*;&;%SCTp->qAR=Iie|ettdq` zWq~!7wv#G$qIA8makF8<8J$F%{VY~CYq*I$nzE6U%1;sVIT7&h0vgBoI%0&)R@As( z(+tb`CPmX>B$B4w)0DaSX9uymw;+Xq!mIVmv$X800CRK24(y;vUTV*l9~;RX;L&N-omjm53RT0M&>N#LNH1_c4y4yN8CysK-M+^$ji1;Mw2Q NyuYa_xh!51{s9>R#!3JH diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAML21G18B.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAML21E18B.bin old mode 100755 new mode 100644 similarity index 63% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21G_SAML21G18B.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAML21E18B.bin index fce3b5b3302e79b3fcf85f9f0c32a399f3fbf3f3..5ffa1cc93b0f680a5cd9088aa2ab113fa93f98a5 GIT binary patch delta 1122 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 PQ2k;RbodibltJlVCAOM1 delta 1191 zcmXw1Z%kWN6hHTsu3dpi`BO&wfcyH2bXyytv|Yj3%}p*koi0#1V!GOLd8lb=|w3qQ2yJ&pqd! z^Si(IdoR|p^~|nZEzo`~Ko26QjTJ z2FMp|O_(8p#97TlLVjjb+FAmM8SSUUIGu~xu8^W2xoQ{P5@Z_KVO@JTo&|eXnu?HV zdjxiOnk&C>uxnCT>ISad$N`1SE4dhr5w0j|o!h%0@3$d;v~Ee3b5aV4pOLrELzh^w8`O)QLXaBijDbdSiDcX&Y! zagY?)4z4UpKH7tlM>w&IX^wJ^u*IE{rJs|U>eLVta^*CV{gqx?-`JiGFr%UDs0Zzn z^XKhcIi`a1LHhdoNt|v$?)hyVi8u6;rUJ)SdjG_c9k5trEBA||Tq)+@5K^UR#2;$N z6Y5;JHa;Jdo}*K!qLO<(eVuMkf&1P%n>2Wg85Qg#Me6ESDuQ`&zp-V5Tz5kyZGW%l z^Y7JftLP|cx{S{7Z82Y?n1}d%XA^SaWkMW@AB*AzmRs5Sko90$xfY{S5fPH zP1UXBn-o=pkw~g?PgUj@o*lwYT~g~OR&tKa?2eRSPcM61VW~K)(g_oGToQnmBz1xO z^m*nqIqRQPsaP_fua746fgK_hi}CElW00pk+7yj6ihD61V5d!$Rbi~wi%sIR$B+Vt zF11IricjO~c-fq3AGwmaV|qeER@r8iOxBpue5>m&N-omim55oqLXU9{MJ`}{192U( ziTDALLM$O>@%#?PRmAUzb>_4T2sx2`Xt^H=hR4Rj(c>=;4@PJp;DzqtH-?W#2kGI? z;DoEO3rYzH0)RVZdPxfc5r6=!RR9nZKsBNh@$!H1eT?Ji?xB%!>T*$6Lt`s6x(+nA N9B67utcaI{e*lCu#wY*) diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAML21E17B.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAML21G17B.bin old mode 100755 new mode 100644 similarity index 63% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAML21E17B.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAML21G17B.bin index bc6bbaea62eb328a45f5de6704e45c9e4e69e0ab..b0c81d9ef018747815e9c4b65c7386a4a3863e26 GIT binary patch delta 1122 zcmXw%Urf_i6vxl`wY8-n?nk9a`62h$Qtg;biV!y=(v}P>wR40pL1I!AT)RJr3p(P1 zG$v*v#w>Va0%Q+Mm=6$NuwxHf2xReLE-q`cv8iMk#5qPB+HG+^EbMo8O17JP?z!jY zd(OS*+`D=pUZ1~S5A3)JAWSryhUAj10MJU#|D&DOg+p~aC1cspsfz4;^>du(VLXFf zdVe`U3ATx9Q~+T8yvh$I%$|+ zxA03+2afSYX&hfoTsAyI{DxmLm7yhZ-86#o=z6^T6U+I*Kim-`AK`|qk#EdoW)US z3wk{h+8AFk@67pdJ;UM@eVLb9_TmU{wcH+P4+`yqj?5Pj+IjtT^4{B+`}88!=md(r zrniL3)cY}O!~IUjn^Ly26Gx~Ijwr1n#Zh$1fwffV(CwHU&{9oJK2?s$(IE9A*c1#p zB5~(c=~zT)M@3h8hT;A={Bl!hpX#tnOIhu1tP^a7HhKh9uBLqKc|~abd@{$D+au7U zqy$}|oqwC7Hn$1fUYhKp6hezr_@AkJOUoPjknrz758jo^mv=bBRSKv=^HaNAS#_Pz zVmeg*mHKk&Jmsnt#_iJ^SsC|Riz@O2?2?iNRQR$U2}Jy}H_uJS)z{b{2+b}U0&RX@ z!07vJX||EatpWM54jxRR+r3a2&R*>Y{+-q3zNO>-zn8N9jQ&M2>&2Qe>V?=i{4+ZI z8NJ^`q9k_=u_7^(H)O;)-Ygg61^$-2JNHzEDF)R^g^%#-@?QELKgoNrfy)K9oCks_ zYE;)!yt1Gki}*VQ%emF7-VZ#{L28jq_;(z~Hsoyt3GB3(Z1ALm2% zBJ}fd`wMs@F=yXmz@PcUVi!K(IgTIkcfRN-s{D#B`v>tg@szkj+$9!?8&uFkvdhFH z;t6+`bV$ZhezD~7Kx5|#)_D4CPgiGO>~s$t?C$A)H+GV>_{06x-h%)I2$BTgOWKdN zf`k$vz)B%Njvc^F93r~^vscKTqyG8NzQOi*S#?#l7rZt5s$Sk#TMKR0&CpI90~gH) Pp!&rs=v|Yj3%}p*koi0#1V!GOLd8lb=|w3qQ2yJ&pqd! z^Si(IdoR|p^~|nZ2he^kKo26QjTJ z2FMp|O_(8p#97TlLVjjb+FAmM8SSUUIGu~xu8^W2xoQ{P5@Z_KVO@JTo&|eXnu?HV zdjxiOnk&C>uxnCT>ISad$N`1SE4dhr5w0j|o!h%0@3$d;v~Ee3b5aV4pOLrELzh^w8`O)QLXaBijDbdSiDcX&Y! zagY?)4z4UpKH7tlM>w&IX^wJ^u*IE{rJs|U>eLVta^*CV{gqx?-`JiGFr%UDs0Zzn z^XKhcIi`a1LHhdoNt|v$?)hyVi8u6;rUJ)SdjG_c9k5trEBA||Tq)+@5K^UR#2;$N z6Y5;JHa;Jdo}*K!qLO<(eVuMkf&1P%n>2Wg85Qg#Me6ESDuQ`&zp-V5Tz5kyZGW%l z^Y7JftLP|cx{S{7Z82Y?n1}d%XA^SaWkMW@AB*AzmRs5Sko90$xfY{S5fPH zP1UXBn-o=pkw~g?PgUj@o*lwYT~g~OR&tKa?2eRSPcM61VW~K)(g_oGToQnmBz1xO z^m*nqIqRQPsaP_fua746fgK_hi}CElW00pk+7yj6ihD61V5d!$Rbi~wi%sIR$B+Vt zF11IricjO~c-fq3AGwmaV|qeER@r8iOxBpue5>m&N-omim55oqLXU9{MJ`}{192U( ziTDALLM$O>@%#?PRmAUzb>_4T2sx2`Xt^H=hR4Rj(c>=;4@PJp;DzqtH-?W#2kGI? z;DoEO3rYzH0)RVZdPxfc5r6=!RR9nZKsBNh@$!H1eT?Ji?xB%!>T*$6Lt`s6x(+nA N9B67ytcaI{e*hS1#z_DG diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAML21E18B.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAML21G18B.bin old mode 100755 new mode 100644 similarity index 63% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21E_SAML21E18B.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAML21G18B.bin index 308f2717e2c3ae0badd4a4362faa8e4f72e3f28b..c60914834b1039f87d937e5eb201f8d792a672df GIT binary patch delta 1122 zcmXw%Urf_i6vxl`m0Bo>`+*c&e#rf`R68bbX{EqDgI z`7G|;ojdIeqB<6>4450o!jRgMb_5_*khTZCc3a36Y2B2Wzvx&n+6GWHH`;iGbkeYp z$>o=%E*$4e(geO5zifDh_zk~gtias(b>k??W0_dxCs@#elP<-pLdwIBnChH74X#&` zOo3GWI=H+^q1_SSG9=Q>3qre<0S2ispE8v?UruM^a1v6fbsPa#VZsvp$ZxtAV=)xk zqTaxSHqKW~JM%uwq*;ujFZ1%;eK^Y7b8ioJ284D&N9Oel?Y#avdGBq^{d%dIV+V@8 zrndzv)ca9$jYb+ja~uOYe_GAUJ=>=pUNxF?-l4$ zl7g<#$-m80TRQ}9FHdw+3Zca){LkdQ<&_P6Q22JB3-3ymD?98hH43Og^HIATS#_Pz zqB>OnmHcw~JmuOea<xbARB93{lg3JX}0w`kpkp_9$-MI*9U!0`xb4y-&8E7~m5n z6~$5Aw3rn=)eU4()wN&wLW#A!jh?=6X0GXD30U#8G5B_qsdigLRnV?$SGa5`M$Vm< z>V`_4DbLMhRejUBhc_uq*-Y8a`~!{=zcIlgZl#L+PTinvQ~EY^YtsdXjif82{o{Pt zQi?u4VR->>#OEzr4EQsDXm#KNo@e_Jf9FfK((141vVRa?6Hkdd#9d;ExIqOyB)dX9 zBA#$(S(lVk&M%fd9&8GqU`?mb_I8K+qo;e}U{7z)yU~-Z&DS#EaUTRILXac?Z^Cl4 z9VCyaXNQ&Cp340|(9Z P;CZnIx_t2`%8>Lg#|WB> delta 1191 zcmXw1Z%kWN6hHTsu3dpi`BO&wfcyH2bXyytv|Yj3%}p*koi0#1V!GOLd8lb=|w3qQ2yJ&pqd! z^Si(IdoS9y_3W;^Y!RCh z`p6e-O_(8p_*u;(LVjjb+G+yv8SSUUIGv5!u9AWvxn>vL5~SGY__*?(N~qhzl~ZarX76mT zqiVU7X9b-7M19d;E!~M2ym$J|#|6pYH6J_dCz3ggyHG`#Sp5N`CzD!@7(Gg=Yug#F z+)_LJKA#+l%9n(J5LbHmpe;j5OBC*1=So5ahmtbX5LYXwn^+j;;M_{N=^l|Q@AAAV z;vh+|9a>qGe6$NC4|8G{Qyk?SWs5r{OD`u?mB~RQ(F^};3&c@~ZD}*@WKNiIDEVnbYA?u-%@cR$-lU)AXTkTJT z`og8=uJ!XQ-%=tZ2?9_LZ@j{L0ph`zt#+q~|jF`J%)bSsPf^${|(3Yegxn zDvPYKxQ$e>lf@hP4O{h-_V5(i>}8RXIo&PnQI*ZOR60S7=S0B23uqMM8;B7$S61zO zUDd7RniN%okw~g?UsdK8o*TqYT|(<8R&tKa><*V;Pd9r~W+^+X(s2`ZTo!;9C3Jz@ z^abWLIcuL*saQ0htB)k~fgK_h3-Rpa6OgAp+9VCvi+eHeW2a5!75!MP6&u89k0A*T zU2>0T6%XL+c-fq3AGsR8YkEpUR@r8SOxBpue7oZwN-oggm55oqLXU9{MJ`}{191bf ziTDALL@Xg@@%%2vRmAUzb>_7630aYSWO)z{_K%MCM^3ynG!UkNfEPN4-W)m+8K6hn zgX6CH4k#ud2mtP+>18blL;wP?Rt7*!0F{V##4G>B4=|3QyN8FzsLMrNb@k0q?>gAn NbgYCLbMNYbL_^WK1K4pRK!j*94$0+P0pJKZ|BrTBmk!nMl=2)yr>b)E)z5LBNAL`G z@fqB+JAcX@Ms+k^8L~8vc0y)L))j(GVb&S;JMB?>tYy>s+(p;C(cX`$rP0nE(n-Vo zdOp7-b>J9Zl*aMZd36?;i zE$9tQXk&cEwA1|IdX^<9`ZBM`--{#sNdE1C_K?sn=*av*p`F)XC-1$Dxlb=s^PE7j zAL*@Ohk8G5X}sTQe^bg;cH%Jg!5*Vk)D}ah99&C>58jT;K`q_f>{sQe91Bq|Ld~I& zJ(_S{m5xP)c2sm#W*P2Jz%Mt2_NflLw6w+Q#(Ke4Xro6!^=jJBo>zp{&nL|#1w8^i zN?Onr+WEI;wWUqq_KH*&r4U+z!v9R)TUy@Ghecoqdho7PxxB*}sZl@`T7cT+%Bkyx z7T2Nruk@Eo=PB17k+*$%BP-(pOIcN+fL&6mm)oKcjzPW4%~6M!gUlhkr(g zKcn}XNR}6jAyy@43WxG=jGR2@esqhhgUEWLI<0rWm8@XIuVtyc) zqQ-PB&8v$Wu#CS`yjV`_4DbG#kRJ~LAhc+op*-Y8a`~$AxpfSZ_UZslscHN+CQ+hXat5b!CjHD}~{o{Pd zT805WZhZl7BWb2U`?mb_H=dj#ZULZE8RWa@5WEE)H delta 1190 zcmXw1e@t6d6h8Nru3dpi`B6su829xR>9#gP2g58NrOl+!c2Or0MvUzMZKn~O3~_(B zZpH{EX6tUuaMQ$P^A8qGWK9#JA>v|Yj3%~!u*t|G#1V!GOLd8lb=|w3qQ2z2=bm%V z`R@0=_hM}uPi@Q90PWQRbRvS~8;&^MFklPV|c~^ct`!!i$LGlI( zv2RJ!?vkXRQ9`EZFy_sR)^t zhhTT7x$-jyyC#*TZs5xG98k!-l#9_A;fkW>8N?u$+*Z3tGJCUmCUONb_a2f-uy0G5 z{GWJq3;%X6scn=ipR+%8bz9@PER7-GhfLBplXI+B|Ko`sA6MQ{33Yq8a$N1k?5)jp zM6Hwxtbns0sn7Xqq+3yg_g2_^M34+#^Wg)2BAFw&3spsk)gLf=vgzfh(W9h0H=W_i z4YkAX^U0x@d_m|Baixb3*s_$g#Nf_Vt|V1(C}~42akX-~j)fr(&W*I2?i9K5HZRyg z93%y{uBCa&M>|pS5GQsq%~8%FHosM}^m4MJIyHcVTsetkf29{z*EXjE%xEY(>_PkF z{CO)^j;P?gpT4$w9H;jp_v|K*#Ou3BV}WBMy=Uyu7ML%xmHWkEt`u`{2&qyu;tw_C z3AN8%9i5Fy&(H}}QOUiYo_4pVzjT=11j0$#=BDJ+k6~Vl?U)iETuD!03mcLi? z`FH9!Rdkp%UP5R1rkJl#%me(s(+Roo5+RPn4@L0;%gtXB0vf~k8e*8uRMa?M zRdq}GCPmd?B$BG!Rh8Mfrw6c8m(==+m7F0{+aqPz)6E`LSSn7dbj*Yup9w%qlDa^C z`W$nboOO?@R4kdz*N2n(z!s5;#dvn?5y+DsZHh)3#9f&8v6H6CsxVgT#71$_V@QER zm)a>>#V7G~yllp_n_N!ZHa(^x%WS<$CM(QnzPbMnN-omim56D)LXYuF6gh|WHN-W< zI^ugo3bBBg#`D`4ml3}sR+-b%C*(x-f#u#S!SKjPIC}K?!Ttyh1ia8O`1;_{Xg@vJ z9vpKubU`TrK>%>4OfP6bAOaA8l?ni20;oo`BVPP3zK3xX-90cgN?k7Ms&8n92G_o( M=6&^v-^7c;Kfj*E@&Et; diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAML21J17B.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAML21J17B.bin old mode 100755 new mode 100644 similarity index 63% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAML21J17B.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAML21J17B.bin index b11c060dc58d3eb281419ce5dbd768659ee7b87b..4af9fe15df0d295ff12cc5d2dac27c428e4acf5b GIT binary patch delta 1122 zcmXw%Urf_i6vxl`m0DU5_oGs5`62h$Qtg;biWnCo(3XrxORUK7j(o2 zX-v#Uj9Ktz2@oHaFdrbkV8V^hg8h;xiMwAYCLbMIP1ys;?T2<*5Kpp|Gd4$Ea*0pJKZ|Bp^umkihMl=3QuPgUjStDoZnZ^bj% z&1Z4%?)+(Y2-UGzWzfAZj4KG~!i+QIb2`F~Xxpaj{6*J-(J_FkrOCl7q?3k) zY(Bpvb>TQ)k|yxg#AU-X#BcZ|V+H0Xt{X>D9?QlnKf%IQob)I@71Fi*u&Lh7GvIkS z#S}<4tb@mw651UB9z!z2d?2)2SzwTk@F`QN`=v}S4ksa_u(i%l7D-!GbpqRIx=5CXy^6U$$M{O?$=AzJSR}> zM|yjxLcJfeG~JIl-js5coj6Q=a71Ypwnxz^2i8-egSTUHKufi>_*6M8M}yRhU`sIQ z2*;gQrDI{C9TnY`8HNYq@XJl1eX7GQEoHH}v0kuM+UONfy_WK^=M|w1@F}ykpjV(r zNeQ|_C;!&0wsi>HUY_ix6hezr_@AkJ%PSlDknrz758jn3S9UmCYZOq0=BIYKa_V}a z#dN6tEA{2_dCIj{)^p8y4{NUf^%Zy9-Wbm|{?!RQM>rF7Ko7@sqp2CSjyiiUMZ+u^M2ro4pGzmJYt8HPnQQ)70%n~yhTd*A)oqKa3OaS|3YTqG~vezENFU~}XIYd(Fpw>#1wJKYPf^z`<;8#~F`{jCGF-WGsj1W5w$C2dE0 zKtc%+V6_CmYy)r;2Z^5l>=m--sDJ*mZ?HXHR$Ei+1#jJcuXlf49duYWLnm9#gP2g58NrOl+!c2Or0MvUzMZKn~O3~_(B zZpH{EX6tUuaMQ$P^A8qGWK9#JA>v|Yj3%~!u*t|G#1V!GOLd8lb=|w3qQ2z2=bm%V z`R@0=_hM}uPi@P!0qxZSbRvS~8;&^MFklPV|c~^ct`!!i$LGlI( zv2RJ!?vkXRQ9`EZFy_sR)^t zhhTT7x$-jyyC#*TZs5xG98k!-l#9_A;fkW>8N?u$+*Z3tGJCUmCUONb_a2f-uy0G5 z{GWJq3;%X6scn=ipR+%8bz9@PER7-GhfLBplXI+B|Ko`sA6MQ{33Yq8a$N1k?5)jp zM6Hwxtbns0sn7Xqq+3yg_g2_^M34+#^Wg)2BAFw&3spsk)gLf=vgzfh(W9h0H=W_i z4YkAX^U0x@d_m|Baixb3*s_$g#Nf_Vt|V1(C}~42akX-~j)fr(&W*I2?i9K5HZRyg z93%y{uBCa&M>|pS5GQsq%~8%FHosM}^m4MJIyHcVTsetkf29{z*EXjE%xEY(>_PkF z{CO)^j;P?gpT4$w9H;jp_v|K*#Ou3BV}WBMy=Uyu7ML%xmHWkEt`u`{2&qyu;tw_C z3AN8%9i5Fy&(H}}QOUiYo_4pVzjT=11j0$#=BDJ+k6~Vl?U)iETuD!03mcLi? z`FH9!Rdkp%UP5R1rkJl#%me(s(+Roo5+RPn4@L0;%gtXB0vf~k8e*8uRMa?M zRdq}GCPmd?B$BG!Rh8Mfrw6c8m(==+m7F0{+aqPz)6E`LSSn7dbj*Yup9w%qlDa^C z`W$nboOO?@R4kdz*N2n(z!s5;#dvn?5y+DsZHh)3#9f&8v6H6CsxVgT#71$_V@QER zm)a>>#V7G~yllp_n_N!ZHa(^x%WS<$CM(QnzPbMnN-omim56D)LXYuF6gh|WHN-W< zI^ugo3bBBg#`D`4ml3}sR+-b%C*(x-f#u#S!SKjPIC}K?!Ttyh1ia8O`1;_{Xg@vJ z9vpKubU`TrK>%>4OfP6bAOaA8l?ni20;oo`BVPP3zK3xX-90cgN?k7Ms&8n92G_o( M=6&^v-^7c;KU1y75&!@I diff --git a/bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAML21J18B.bin b/bootloaders/zero/binaries/sam_ba_sdcard_SAML21J18B.bin old mode 100755 new mode 100644 similarity index 63% rename from bootloaders/zero/binaries/sam_ba_sdcard_Generic_x21J_SAML21J18B.bin rename to bootloaders/zero/binaries/sam_ba_sdcard_SAML21J18B.bin index cb6a8398988fa4e854a8b6fb481ee714a885d67d..c1709a8032cf5fdb46622c2701c491aac47e14f0 GIT binary patch delta 1122 zcmXw%Urf_i6vxl`mD)cb?gvtA`62h$Qtg;biVzng(w2->DszN5L1NM>xORUK7j(o2 zX-v#Uj9Ktz2@oHaFdrbkV8V^hg8h;xiMwAYCLbMM-Lcw=F95ZG}eKr7K^9G1(r0>BY+{vVyRE*WmvDdklRpQ_5uS3k!E-il|i zo6lnXZu7J|gz8wVGH7iYi$Hoy#ubEgLB<*KIUQj~v~5#%{-SHa=omoN+T`FB(n-TY z*32(ST{zB{qzQaAaoO+;@f&{0Sb^rmb>k??W7&A+Cs@#mlODyVLb{e8HZ{0;20SmP zm;&ho>)`RFgmy=O$B@i09|-MM78s->e9BbnekqfS!%0Y|*Kq_qg-KiJTEKKK&f+Mv zMZJ*;ZJe)~c3M8nW>}n}FY|KqUL55|%(n+SgF?HYBl87>c3yv-y!STde!W!9a{|SF zq_>AE)cY}O)BT9!O(|E|iNn+fN0e4!dla2=U_BK&csnKsv{XxrPnE-RG)TP&wgiKY zaNK!SIu;h%QPEwQVYojIzuXksr#kG?QdXNA8w6XWja~uOYbhUlUJ=>=pRyF^_X_kV zDM450Y%ah%dLTGUc|1))Od1XT%68;_N!MjrB$_{61jRLCB{M0U2PTe51 zm=4u{rM_G~Pr2$v-u9V|tc?4urBww2c1g)1Dttu`2g3fjo9AZY>T7HWgk}>>feybf zkmvhtd9InqtpWM54jxRR+r3!Qn!DN${5z}5eM`sve=q0!S^Wz;>%+Qn>V?=i{4+ZI z8NJ_RqAY(Lu_`fJFr0_;yiK;_1^$-2JO5OMDF)R^g^%*<@?QELKgoNriOWUBmIs0< zYE;)!yt=3nOZhuREBUo+-VZ#{A!?eRM~bIR-;+ky9wqEs2T>kTfc^%s_sRAX1AL;S zqBy3T7IUJfx`8aJy7ntyD6yBf)6*Bu%r$>30V|$1hTd*A)oqKa3OaS|3YTrg$hq5A z-B_tJ<++)hs&CqSXp_Q}&6MrTKj0b(7?UjORjSDE)D6lurEf#GHeGPYNV-DWKhB43 zrRe7qwiob5V&1mJfIstxb{9V27RQhHJ702?R)0m8{e$?LcuL$M?h;GH4Jzm%*%jgu z@r1j}x}>~vezENFU~}XIYd(Fpw>#1wJKYPf^z`<;8#~F`{jCGF-WGr&1W5w$C2dE0 zKtc%+V6_CmVgqm!2Z^5l>=m--sDJ*mZ?HXHR$Ei+1#jIxuXkU49duYXLnm9#gP2g58NrOl+!c2Or0MvUzM(@rBe8RGts zZpH{EX6tUuaMNUF^A8qGWK9#JA>v|Yj3%~!u*t|0h$9RWmg*88>$-P6MSaP4&pqd! z^WE=#@5S0SpV^Tc2imIz=tKmyaigUi0G`L>|EC-G#qriUA-603>Yn_1?i;emg5*sS zV&9Rby(LMTpV%%$WuMi1Aq<(~tknk@Lss&;t>zG9KFFSym$c@wa<9l_p?Ov=A(!FL^4Nk7pjU7t3P1$WYa5Aqen@1ZaKr1 zn`(#O=aWM*`J&Jt;z|!6uw^M}iNW1#TuG|nP|}84;%en|0}DeOoSSJk-7RwE9bT}D zI7kX?UCRrSk9MNuAx`XKnxmW}Y+<`(>E&csb!q?!xpE50{z@;dt#3^Sn9)#n)PwfP z`SVt;981zUmGRnc1vR(BJ7RAnO}m5&qSSrPE>0vf~kI%1g3R@69O zQ+3PvCPmd?B$BG!Q%&QXV4FzAVmv$X800CBHbo;1;vUTV*eO$GRT!&vVxu_aF{Hqu zOYIh|;?wv#UN&pmORgmDn4Zv(6}C|&lT~Ik-#T~~B^PP%O2iCap~v_Yik!##I^sHF z1MveQg;+$);Q1YlD~R6_Ys_is6LKQ^&~iT#43CV2qsLzy?2phuzzZFNZwwxf_S3`d z!7*1u7nBkZ1ORu+^pX|?A^-tctpFe + +/* The SAM-BA interface, which is used with both USB CDC and UART (TTL + * serial), can operate in either binary (default) or terminal mode. If + * TERMINAL_MODE_ENABLED is defined, additional terminal handling code + * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled + * in. To switch to terminal mode, type 'T#' (you should then see a prompt). + * Then, type 'V#' to show version information. See README.md for more commands. + * Size: ~228B. Enabled by default. Disable with 4KB bootloader. + */ +#define TERMINAL_MODE_ENABLED + +/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. + * See "SD Card Bootloader" section. This define can also be set from the + * makefile (so it can be used with the build_all_bootloaders.sh script). + * Size: ~2788B. Disabled by default. Available with 4KB bootloader. + */ +#ifndef SDCARD_ENABLED +//#define SDCARD_ENABLED +#endif + +/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. + * When setting SDCARD_SPI_PADx defines, consult the appropriate header file + * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- + * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ + * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. + * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and + * associated pins are only initialized if either pin is active. + */ +#define SDCARD_SPI_SERCOM_INSTANCE 1 +#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 +#define SDCARD_SPI_PAD0 PINMUX_PA16C_SERCOM1_PAD0 +#define SDCARD_SPI_PAD1 PINMUX_UNUSED +#define SDCARD_SPI_PAD2 PINMUX_PA18C_SERCOM1_PAD2 +#define SDCARD_SPI_PAD3 PINMUX_PA19C_SERCOM1_PAD3 + + +/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN + * must also be defined. PORT can be 0 (Port A) or 1 (Port B). + */ +#define SDCARD_SPI_CS_PORT (0) +#define SDCARD_SPI_CS_PIN (23) + +/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can + * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must + * also be defined. See "SD Card External Pins" section for more information. PORT + * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or + * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. + * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. + */ +#define SDCARD_USE_PIN1 +#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW +#define SDCARD_PIN1_PORT (0) +#define SDCARD_PIN1_PIN (3) +#define SDCARD_PIN1_CONFIG INPUT_PULLUP + +//#define SDCARD_USE_PIN2 +#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW +#define SDCARD_PIN2_PORT (0) +#define SDCARD_PIN2_PIN (4) +#define SDCARD_PIN2_CONFIG INPUT_PULLUP + +/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH + * after programming will not occur, nor will the initial check to see if the + * FLASH contents are already the same as the file. + * Size: ~284B. By default, this is not defined, so verification will be enabled. + */ +//#define SDCARD_VERIFICATION_DISABLED + +/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not + * automatically run the firmware that was just installed. Instead, the LED will + * blink with status code LED_STATUS_SUCCESS. This option also applies when the + * binary file on the SD card already matches the installed firmware. In this + * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. + * By default, SDCARD_AUTORUN_DISABLED is defined. + */ +#define SDCARD_AUTORUN_DISABLED + +/* Two different binary files can be loaded, depending on external pin settings. + * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be + * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. + * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be + * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is + * loaded when PIN2 is enabled. If only one pin or no pin is configured, only + * SDCARD_FILENAME_PRIMARY is loaded. + */ +//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" +//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" + +/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or + * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except + * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 + * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, + * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). + */ +#define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY + +/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which + * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one + * interface is used, then the pin acts as an enable. In both cases, the value of + * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of + * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and + * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are + * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, + * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the + * device is not selected/enabled. If no interface is selected by the pin, the LED + * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. + * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. + */ +//#define SAM_BA_INTERFACE_USE_PIN +#if (SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES) + // The pin functions as a toggle between the two interfaces + #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_USBCDC_LOW +#else + // The pin functions as an enable for the compiled interface + #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW +#endif +#define SAM_BA_INTERFACE_PIN_PORT (0) +#define SAM_BA_INTERFACE_PIN_PIN (5) +#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP + +/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands + * will become available which will speed up programming when using the Arduino + * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. + * Size: ~904B. This is defined and set to 1 by default (except with 4KB). + */ +#define ARDUINO_EXTENDED_CAPABILITIES 1 + +/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to + * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, + * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or + * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If + * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must + * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL + * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so + * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB + * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in + * open-loop mode, except when connected to a USB port with data lines (and + * not suspended), where it will calibrate against the USB SOF signal. + */ +#ifndef CLOCKCONFIG_CLOCK_SOURCE + #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB +#endif + +/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ + * must also be defined with the external crystal frequency in Hertz. + */ +#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL + +/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL + * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in + * a more accurate 48MHz output frequency at the expense of increased jitter. + */ +//#define PLL_FRACTIONAL_ENABLED + +/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal + * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being + * multiplied by the PLL. This will result in a faster lock time for the PLL, + * however, it will also result in a less accurate PLL output frequency if the + * crystal is not divisible (without remainder) by 1MHz. In this case, define + * PLL_FRACTIONAL_ENABLED as well. + */ +//#define PLL_FAST_STARTUP + +/* Master clock frequency (also Fcpu frequency). With the D51, + * this can be either 120000000ul or 48000000ul. See README.md. + */ +#define VARIANT_MCK (120000000ul) +//#define VARIANT_MCK (48000000ul) + +/* The fine calibration value for DFLL open-loop mode is defined here. + * The coarse calibration value is loaded from NVM OTP (factory calibration values). + */ +#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) + +/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and + * STRING_PRODUCT will be sent to the host. + * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). + */ +#define USB_VENDOR_STRINGS_ENABLED +#define STRING_MANUFACTURER "Fab Foundation" +#define STRING_PRODUCT "Generic SAMD51G" + +/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ +#define USB_VID_HIGH 0x16 +#define USB_VID_LOW 0xD0 +#define USB_PID_HIGH 0x75 +#define USB_PID_LOW 0x57 + +/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. + * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting + * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: + * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ + * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED + * if not used. By default, this interface is not enabled (except with the C21). + */ +#define BOOT_USART_SERCOM_INSTANCE 0 +#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 +#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3 +#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2 +#define BOOT_USART_PAD1 PINMUX_UNUSED +#define BOOT_USART_PAD0 PINMUX_UNUSED + +/* + * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly + * tapping two times on the reset button (within 1/2 second). + * Size: ~96B. Enabled by default. + */ +#define BOOT_DOUBLE_TAP_ENABLED + +/* + * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected + * pin is active after reset. There is a 10ms delay before testing the pin to + * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 + * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or + * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. + * Size: ~84B. Disabled by default. + */ +//#define BOOT_LOAD_PIN_ENABLED +#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW +#define BOOT_LOAD_PIN_PORT (0) +#define BOOT_LOAD_PIN (27) +#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP + +/* + * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an + * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader + * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). + * Size: ~160B. Enabled by default. + */ +#define BOARD_LED_FADE_ENABLED + +/* + * If the LED PORT is defined, then the LED on the associated pin is enabled. + * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. + * By default, only BOARD_LED is enabled. + */ +#if defined(SDCARD_ENABLED) + #define BOARD_LED_PORT (0) + #define BOARD_LED_PIN (6) + #define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON +#else + //#define BOARD_LED_PORT (0) + //#define BOARD_LED_PIN (6) + //#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON +#endif + +//#define BOARD_LEDRX_PORT (0) +//#define BOARD_LEDRX_PIN (6) +//#define BOARD_LEDRX_POLARITY LED_POLARITY_HIGH_ON + +//#define BOARD_LEDTX_PORT (0) +//#define BOARD_LEDTX_PIN (6) +//#define BOARD_LEDTX_POLARITY LED_POLARITY_HIGH_ON + +#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_Generic_D51J.h b/bootloaders/zero/board_definitions/board_definitions_Generic_D51J.h new file mode 100644 index 000000000..1dd8f1bf4 --- /dev/null +++ b/bootloaders/zero/board_definitions/board_definitions_Generic_D51J.h @@ -0,0 +1,278 @@ +/* + Copyright (c) 2017 MattairTech LLC. All right reserved. + Copyright (c) 2015 Arduino LLC. All right reserved. + Copyright (c) 2015 Atmel Corporation/Thibaut VIARD. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _BOARD_DEFINITIONS_H_ +#define _BOARD_DEFINITIONS_H_ + +#include + +/* The SAM-BA interface, which is used with both USB CDC and UART (TTL + * serial), can operate in either binary (default) or terminal mode. If + * TERMINAL_MODE_ENABLED is defined, additional terminal handling code + * (add prompt, add \n\r to EOL, number formatting, etc.) will be compiled + * in. To switch to terminal mode, type 'T#' (you should then see a prompt). + * Then, type 'V#' to show version information. See README.md for more commands. + * Size: ~228B. Enabled by default. Disable with 4KB bootloader. + */ +#define TERMINAL_MODE_ENABLED + +/* If SDCARD_ENABLED is defined, SD card bootloader support is compiled in. + * See "SD Card Bootloader" section. This define can also be set from the + * makefile (so it can be used with the build_all_bootloaders.sh script). + * Size: ~2788B. Disabled by default. Available with 4KB bootloader. + */ +#ifndef SDCARD_ENABLED +//#define SDCARD_ENABLED +#endif + +/* If SDCARD_ENABLED is defined, then all SDCARD_SPI_* defines must also be set. + * When setting SDCARD_SPI_PADx defines, consult the appropriate header file + * from CMSIS-Atmel (ie: ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS- + * Atmel/1.0.0-mattairtech-2/CMSIS/Device/ATMEL/sam/include/ + * .h). SDCARD_SPI_PAD_SETTINGS values are in SDCard/diskio.h. + * When using SDCARD_USE_PIN1 or SDCARD_USE_PIN2, the SPI peripheral and + * associated pins are only initialized if either pin is active. + */ +#define SDCARD_SPI_SERCOM_INSTANCE 1 +#define SDCARD_SPI_PAD_SETTINGS SPI_RX_PAD0_TX_PAD2_SCK_PAD3 +#define SDCARD_SPI_PAD0 PINMUX_PA16C_SERCOM1_PAD0 +#define SDCARD_SPI_PAD1 PINMUX_UNUSED +#define SDCARD_SPI_PAD2 PINMUX_PA18C_SERCOM1_PAD2 +#define SDCARD_SPI_PAD3 PINMUX_PA19C_SERCOM1_PAD3 + +/* If SDCARD_ENABLED is defined, then SDCARD_SPI_CS_PORT and SDCARD_SPI_CS_PIN + * must also be defined. PORT can be 0 (Port A) or 1 (Port B). + */ +#define SDCARD_SPI_CS_PORT (0) +#define SDCARD_SPI_CS_PIN (23) + +/* If SDCARD_ENABLED is defined, then SDCARD_USE_PIN1 and SDCARD_USE_PIN2 can + * optionally be defined. When SDCARD_USE_PIN2 is defined, SDCARD_USE_PIN1 must + * also be defined. See "SD Card External Pins" section for more information. PORT + * can be 0 (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or + * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. + * Size: ~60B for SDCARD_USE_PIN1, ~92B for both pins. By default, only pin1 used. + */ +#define SDCARD_USE_PIN1 +#define SDCARD_PIN1_POLARITY PIN_POLARITY_ACTIVE_LOW +#define SDCARD_PIN1_PORT (0) +#define SDCARD_PIN1_PIN (3) +#define SDCARD_PIN1_CONFIG INPUT_PULLUP + +//#define SDCARD_USE_PIN2 +#define SDCARD_PIN2_POLARITY PIN_POLARITY_ACTIVE_LOW +#define SDCARD_PIN2_PORT (0) +#define SDCARD_PIN2_PIN (4) +#define SDCARD_PIN2_CONFIG INPUT_PULLUP + +/* If SDCARD_VERIFICATION_DISABLED is defined, then verification of the FLASH + * after programming will not occur, nor will the initial check to see if the + * FLASH contents are already the same as the file. + * Size: ~284B. By default, this is not defined, so verification will be enabled. + */ +//#define SDCARD_VERIFICATION_DISABLED + +/* If SDCARD_AUTORUN_DISABLED is defined, then the SD card bootloader will not + * automatically run the firmware that was just installed. Instead, the LED will + * blink with status code LED_STATUS_SUCCESS. This option also applies when the + * binary file on the SD card already matches the installed firmware. In this + * case, the LED will blink with status code LED_STATUS_FILE_ALREADY_MATCHES. + * By default, SDCARD_AUTORUN_DISABLED is defined. + */ +#define SDCARD_AUTORUN_DISABLED + +/* Two different binary files can be loaded, depending on external pin settings. + * By default, the filenames are UPDATE.BIN and UPDATE2.BIN, but these can be + * overridden by defining SDCARD_FILENAME_PRIMARY and SDCARD_FILENAME_SECONDARY. + * If both pins are configured, SDCARD_FILENAME_PRIMARY (UPDATE.BIN) will be + * loaded when PIN1 is enabled, and SDCARD_FILENAME_PRIMARY (UPDATE2.BIN) is + * loaded when PIN2 is enabled. If only one pin or no pin is configured, only + * SDCARD_FILENAME_PRIMARY is loaded. + */ +//#define SDCARD_FILENAME_PRIMARY "UPDATE.BIN" +//#define SDCARD_FILENAME_SECONDARY "UPDATE2.BIN" + +/* Set SAM_BA_INTERFACE to SAM_BA_USBCDC_ONLY, SAM_BA_UART_ONLY, SAM_BA_NONE, or + * SAM_BA_BOTH_INTERFACES. With 4KB bootloaders, select only one interface (except + * when using SDCARD_ENABLED, then set SAM_BA_INTERFACE to SAM_BA_NONE). The C21 + * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, + * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). + */ +#define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY + +/* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which + * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one + * interface is used, then the pin acts as an enable. In both cases, the value of + * SAM_BA_INTERFACE_PIN_POLARITY controls the polarity, with values of + * PIN_POLARITY_ACTIVE_LOW or PIN_POLARITY_ACTIVE_HIGH for a single interface, and + * PIN_POLARITY_USBCDC_LOW or PIN_POLARITY_USBCDC_HIGH when both interfaces are + * enabled. PORT can be 0 (Port A) or 1 (Port B). Config can be INPUT, INPUT_PULLUP, + * or INPUT_PULLDOWN.The USB/UART peripheral and pins will not be setup if the + * device is not selected/enabled. If no interface is selected by the pin, the LED + * will blink with status code LED_STATUS_NO_SAM_BA_INTERFACE. + * Size: ~100B. By default, SAM_BA_INTERFACE_USE_PIN is not defined. + */ +//#define SAM_BA_INTERFACE_USE_PIN +#if (SAM_BA_INTERFACE == SAM_BA_BOTH_INTERFACES) + // The pin functions as a toggle between the two interfaces + #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_USBCDC_LOW +#else + // The pin functions as an enable for the compiled interface + #define SAM_BA_INTERFACE_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW +#endif +#define SAM_BA_INTERFACE_PIN_PORT (0) +#define SAM_BA_INTERFACE_PIN_PIN (5) +#define SAM_BA_INTERFACE_PIN_CONFIG INPUT_PULLUP + +/* If ARDUINO_EXTENDED_CAPABILITIES is defined and set to 1, 3 additional commands + * will become available which will speed up programming when using the Arduino + * IDE or the bossac tool standalone. Set to 0 with 4KB bootloaders. + * Size: ~904B. This is defined and set to 1 by default (except with 4KB). + */ +#define ARDUINO_EXTENDED_CAPABILITIES 1 + +/* The clock source must be chosen by setting CLOCKCONFIG_CLOCK_SOURCE to + * CLOCKCONFIG_32768HZ_CRYSTAL, CLOCKCONFIG_HS_CRYSTAL, CLOCKCONFIG_INTERNAL, + * or CLOCKCONFIG_INTERNAL_USB. If CLOCKCONFIG_32768HZ_CRYSTAL or + * CLOCKCONFIG_HS_CRYSTAL is defined, then the PLL will be used. If + * CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ must + * also be defined with the crystal frequency in Hertz. CLOCKCONFIG_INTERNAL + * uses the DFLL in open-loop mode, except with the C21 which lacks a DFLL, so + * the internal 48MHz RC oscillator is used instead. CLOCKCONFIG_INTERNAL_USB + * can be defined for the D21, D11, L21, or D51. It will also use the DFLL in + * open-loop mode, except when connected to a USB port with data lines (and + * not suspended), where it will calibrate against the USB SOF signal. + */ +#ifndef CLOCKCONFIG_CLOCK_SOURCE + #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB +#endif + +/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ + * must also be defined with the external crystal frequency in Hertz. + */ +#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL + +/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL + * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in + * a more accurate 48MHz output frequency at the expense of increased jitter. + */ +//#define PLL_FRACTIONAL_ENABLED + +/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal + * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being + * multiplied by the PLL. This will result in a faster lock time for the PLL, + * however, it will also result in a less accurate PLL output frequency if the + * crystal is not divisible (without remainder) by 1MHz. In this case, define + * PLL_FRACTIONAL_ENABLED as well. + */ +//#define PLL_FAST_STARTUP + +/* Master clock frequency (also Fcpu frequency). With the D51, + * this can be either 120000000ul or 48000000ul. See README.md. + */ +#define VARIANT_MCK (120000000ul) +//#define VARIANT_MCK (48000000ul) + +/* The fine calibration value for DFLL open-loop mode is defined here. + * The coarse calibration value is loaded from NVM OTP (factory calibration values). + */ +#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) + +/* If USB_VENDOR_STRINGS_ENABLED is defined, then STRING_MANUFACTURER and + * STRING_PRODUCT will be sent to the host. + * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). + */ +#define USB_VENDOR_STRINGS_ENABLED +#define STRING_MANUFACTURER "Fab Foundation" +#define STRING_PRODUCT "Generic SAMD51J" + +/* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ +#define USB_VID_HIGH 0x16 +#define USB_VID_LOW 0xD0 +#define USB_PID_HIGH 0x85 +#define USB_PID_LOW 0x57 + +/* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. + * See board_driver_serial.h for BOOT_USART_PAD_SETTINGS values. When setting + * BOOT_USART_PADx defines, consult the appropriate header file from CMSIS-Atmel (ie: + * ~/arduino15/packages/MattairTech_Arduino/tools/CMSIS-Atmel/1.0.0-mattairtech-2/ + * CMSIS/Device/ATMEL/sam/include/.h). Use PINMUX_UNUSED + * if not used. By default, this interface is not enabled (except with the C21). + */ +#define BOOT_USART_SERCOM_INSTANCE 0 +#define BOOT_USART_PAD_SETTINGS UART_RX_PAD3_TX_PAD2 +#define BOOT_USART_PAD3 PINMUX_PA11C_SERCOM0_PAD3 +#define BOOT_USART_PAD2 PINMUX_PA10C_SERCOM0_PAD2 +#define BOOT_USART_PAD1 PINMUX_UNUSED +#define BOOT_USART_PAD0 PINMUX_UNUSED + +/* + * If BOOT_DOUBLE_TAP_ENABLED is defined the bootloader is started by quickly + * tapping two times on the reset button (within 1/2 second). + * Size: ~96B. Enabled by default. + */ +#define BOOT_DOUBLE_TAP_ENABLED + +/* + * If BOOT_LOAD_PIN_ENABLED is defined, the bootloader is started if the selected + * pin is active after reset. There is a 10ms delay before testing the pin to + * allow time for debouncing capacitors to charge (ie: button use). PORT can be 0 + * (Port A) or 1 (Port B). Polarity can be PIN_POLARITY_ACTIVE_LOW or + * PIN_POLARITY_ACTIVE_HIGH. Config can be INPUT, INPUT_PULLUP, or INPUT_PULLDOWN. + * Size: ~84B. Disabled by default. + */ +//#define BOOT_LOAD_PIN_ENABLED +#define BOOT_LOAD_PIN_POLARITY PIN_POLARITY_ACTIVE_LOW +#define BOOT_LOAD_PIN_PORT (0) +#define BOOT_LOAD_PIN (27) +#define BOOT_LOAD_PIN_CONFIG INPUT_PULLUP + +/* + * If BOARD_LED_FADE_ENABLED is defined, then the main LED produces a PWM fade in an + * "M-wave" pattern, otherwise, it simply turns on (if enabled). When the SD bootloader + * is running, the fading will be twice as fast as the SAM-BA interface (USB CDC or UART). + * Size: ~160B. Enabled by default. + */ +#define BOARD_LED_FADE_ENABLED + +/* + * If the LED PORT is defined, then the LED on the associated pin is enabled. + * Polarity can be either LED_POLARITY_HIGH_ON or LED_POLARITY_LOW_ON. + * By default, only BOARD_LED is enabled. + */ +#if defined(SDCARD_ENABLED) + #define BOARD_LED_PORT (0) + #define BOARD_LED_PIN (6) + #define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON +#else + //#define BOARD_LED_PORT (0) + //#define BOARD_LED_PIN (6) + //#define BOARD_LED_POLARITY LED_POLARITY_HIGH_ON +#endif + +//#define BOARD_LEDRX_PORT (1) +//#define BOARD_LEDRX_PIN (2) +//#define BOARD_LEDRX_POLARITY LED_POLARITY_HIGH_ON + +//#define BOARD_LEDTX_PORT (1) +//#define BOARD_LEDTX_PIN (2) +//#define BOARD_LEDTX_POLARITY LED_POLARITY_HIGH_ON + +#endif // _BOARD_DEFINITIONS_H_ diff --git a/bootloaders/zero/board_definitions/board_definitions_Generic_D51N.h b/bootloaders/zero/board_definitions/board_definitions_Generic_D51N.h index 8b2a105b6..d65a99fa3 100644 --- a/bootloaders/zero/board_definitions/board_definitions_Generic_D51N.h +++ b/bootloaders/zero/board_definitions/board_definitions_Generic_D51N.h @@ -115,11 +115,7 @@ * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). */ -#if (SAMC21) - #define SAM_BA_INTERFACE SAM_BA_UART_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#endif +#define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY /* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one @@ -165,11 +161,7 @@ * not suspended), where it will calibrate against the USB SOF signal. */ #ifndef CLOCKCONFIG_CLOCK_SOURCE - #if (SAMC21) - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL - #else - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB - #endif + #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB #endif /* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ @@ -208,13 +200,13 @@ * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). */ #define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" +#define STRING_MANUFACTURER "Fab Foundation" #define STRING_PRODUCT "Generic SAMD51N" /* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ #define USB_VID_HIGH 0x16 #define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 +#define USB_PID_HIGH 0x95 #define USB_PID_LOW 0x57 /* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. diff --git a/bootloaders/zero/board_definitions/board_definitions_Generic_D51P.h b/bootloaders/zero/board_definitions/board_definitions_Generic_D51P.h index b7c0ff9d7..3b5150fed 100644 --- a/bootloaders/zero/board_definitions/board_definitions_Generic_D51P.h +++ b/bootloaders/zero/board_definitions/board_definitions_Generic_D51P.h @@ -115,11 +115,7 @@ * lacks USB, so set to SAM_BA_UART_ONLY in this case. By default, * SAM_BA_USBCDC_ONLY is set (SAM_BA_UART_ONLY with the C21). */ -#if (SAMC21) - #define SAM_BA_INTERFACE SAM_BA_UART_ONLY -#else - #define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY -#endif +#define SAM_BA_INTERFACE SAM_BA_USBCDC_ONLY /* If SAM_BA_INTERFACE_USE_PIN is defined, then the associated pin controls which * SAM-BA interface is used (if SAM_BA_BOTH_INTERFACES is defined). If only one @@ -165,11 +161,7 @@ * not suspended), where it will calibrate against the USB SOF signal. */ #ifndef CLOCKCONFIG_CLOCK_SOURCE - #if (SAMC21) - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL - #else - #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB - #endif + #define CLOCKCONFIG_CLOCK_SOURCE CLOCKCONFIG_INTERNAL_USB #endif /* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ @@ -208,13 +200,13 @@ * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). */ #define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" +#define STRING_MANUFACTURER "Fab Foundation" #define STRING_PRODUCT "Generic SAMD51P" /* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ #define USB_VID_HIGH 0x16 #define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 +#define USB_PID_HIGH 0xA5 #define USB_PID_LOW 0x57 /* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. diff --git a/bootloaders/zero/board_definitions/board_definitions_Generic_x21E.h b/bootloaders/zero/board_definitions/board_definitions_Generic_x21E.h index d6f5d62f2..c957a209b 100644 --- a/bootloaders/zero/board_definitions/board_definitions_Generic_x21E.h +++ b/bootloaders/zero/board_definitions/board_definitions_Generic_x21E.h @@ -207,13 +207,13 @@ * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). */ #define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" +#define STRING_MANUFACTURER "Fab Foundation" #define STRING_PRODUCT "Generic SAMx21E" /* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ #define USB_VID_HIGH 0x16 #define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 +#define USB_PID_HIGH 0x45 #define USB_PID_LOW 0x57 /* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. diff --git a/bootloaders/zero/board_definitions/board_definitions_Generic_xx1G.h b/bootloaders/zero/board_definitions/board_definitions_Generic_x21G.h similarity index 97% rename from bootloaders/zero/board_definitions/board_definitions_Generic_xx1G.h rename to bootloaders/zero/board_definitions/board_definitions_Generic_x21G.h index a93d61769..38acf7c90 100644 --- a/bootloaders/zero/board_definitions/board_definitions_Generic_xx1G.h +++ b/bootloaders/zero/board_definitions/board_definitions_Generic_x21G.h @@ -221,21 +221,13 @@ * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). */ #define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" -#if (SAMD21) - #define STRING_PRODUCT "Generic SAMxx1G D21" -#elif (SAML21) - #define STRING_PRODUCT "Generic SAMxx1G L21" -#elif (SAMC21) - #define STRING_PRODUCT "Generic SAMxx1G C21" -#elif (SAMD51) - #define STRING_PRODUCT "Generic SAMxx1G D51" -#endif +#define STRING_MANUFACTURER "Fab Foundation" +#define STRING_PRODUCT "Generic SAMx21G" /* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ #define USB_VID_HIGH 0x16 #define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 +#define USB_PID_HIGH 0x55 #define USB_PID_LOW 0x57 /* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. diff --git a/bootloaders/zero/board_definitions/board_definitions_Generic_xx1J.h b/bootloaders/zero/board_definitions/board_definitions_Generic_x21J.h similarity index 97% rename from bootloaders/zero/board_definitions/board_definitions_Generic_xx1J.h rename to bootloaders/zero/board_definitions/board_definitions_Generic_x21J.h index bed520199..2b2ea7143 100644 --- a/bootloaders/zero/board_definitions/board_definitions_Generic_xx1J.h +++ b/bootloaders/zero/board_definitions/board_definitions_Generic_x21J.h @@ -221,21 +221,13 @@ * Size: ~228B. By default, USB_VENDOR_STRINGS_ENABLED is defined (including 4KB). */ #define USB_VENDOR_STRINGS_ENABLED -#define STRING_MANUFACTURER "MattairTech LLC" -#if (SAMD21) - #define STRING_PRODUCT "Generic SAMxx1J D21" -#elif (SAML21) - #define STRING_PRODUCT "Generic SAMxx1J L21" -#elif (SAMC21) - #define STRING_PRODUCT "Generic SAMxx1J C21" -#elif (SAMD51) - #define STRING_PRODUCT "Generic SAMxx1J D51" -#endif +#define STRING_MANUFACTURER "Fab Foundation" +#define STRING_PRODUCT "Generic SAMx21J" /* If USB CDC is used, then the USB vendor ID (VID) and product ID (PID) must be set. */ #define USB_VID_HIGH 0x16 #define USB_VID_LOW 0xD0 -#define USB_PID_HIGH 0x05 +#define USB_PID_HIGH 0x65 #define USB_PID_LOW 0x57 /* BOOT_USART_SERCOM_INSTANCE must be a single digit representing the SERCOM number. diff --git a/bootloaders/zero/build_all_bootloaders.sh b/bootloaders/zero/build_all_bootloaders.sh index f017511a6..d5a67f1a5 100755 --- a/bootloaders/zero/build_all_bootloaders.sh +++ b/bootloaders/zero/build_all_bootloaders.sh @@ -16,34 +16,36 @@ BOARD_ID=Generic_x21E MCU=SAMC21E16A SDCARD=SDCARD_DISABLED make all mostly_clea BOARD_ID=Generic_x21E MCU=SAMC21E17A SDCARD=SDCARD_DISABLED make all mostly_clean BOARD_ID=Generic_x21E MCU=SAMC21E18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD21G15A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD21G16A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD21G17A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAML21G16B SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAML21G17B SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAML21G18B SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMC21G15A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMC21G16A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMC21G17A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMC21G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD51G18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD51G19A SDCARD=SDCARD_DISABLED make all mostly_clean - -BOARD_ID=Generic_xx1J MCU=SAMD21J15A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD21J16A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD21J17A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD21J18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAML21J16B SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAML21J17B SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAML21J18B SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMC21J15A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMC21J16A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMC21J17A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMC21J18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD51J18A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD51J19A SDCARD=SDCARD_DISABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD51J20A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMD21G15A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMD21G16A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMD21G17A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMD21G18A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAML21G16B SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAML21G17B SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAML21G18B SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMC21G15A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMC21G16A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMC21G17A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMC21G18A SDCARD=SDCARD_DISABLED make all mostly_clean + +BOARD_ID=Generic_x21J MCU=SAMD21J15A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMD21J16A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMD21J17A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMD21J18A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAML21J16B SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAML21J17B SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAML21J18B SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMC21J15A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMC21J16A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMC21J17A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMC21J18A SDCARD=SDCARD_DISABLED make all mostly_clean + +BOARD_ID=Generic_D51G MCU=SAMD51G18A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_D51G MCU=SAMD51G19A SDCARD=SDCARD_DISABLED make all mostly_clean + +BOARD_ID=Generic_D51J MCU=SAMD51J18A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_D51J MCU=SAMD51J19A SDCARD=SDCARD_DISABLED make all mostly_clean +BOARD_ID=Generic_D51J MCU=SAMD51J20A SDCARD=SDCARD_DISABLED make all mostly_clean BOARD_ID=Generic_D51N MCU=SAMD51N19A SDCARD=SDCARD_DISABLED make all mostly_clean BOARD_ID=Generic_D51N MCU=SAMD51N20A SDCARD=SDCARD_DISABLED make all mostly_clean @@ -69,34 +71,36 @@ BOARD_ID=Generic_x21E MCU=SAMC21E16A SDCARD=SDCARD_ENABLED make all mostly_clean BOARD_ID=Generic_x21E MCU=SAMC21E17A SDCARD=SDCARD_ENABLED make all mostly_clean BOARD_ID=Generic_x21E MCU=SAMC21E18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD21G15A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD21G16A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD21G17A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAML21G16B SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAML21G17B SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAML21G18B SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMC21G15A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMC21G16A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMC21G17A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMC21G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD51G18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1G MCU=SAMD51G19A SDCARD=SDCARD_ENABLED make all mostly_clean - -BOARD_ID=Generic_xx1J MCU=SAMD21J15A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD21J16A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD21J17A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD21J18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAML21J16B SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAML21J17B SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAML21J18B SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMC21J15A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMC21J16A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMC21J17A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMC21J18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD51J18A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD51J19A SDCARD=SDCARD_ENABLED make all mostly_clean -BOARD_ID=Generic_xx1J MCU=SAMD51J20A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMD21G15A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMD21G16A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMD21G17A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMD21G18A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAML21G16B SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAML21G17B SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAML21G18B SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMC21G15A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMC21G16A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMC21G17A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21G MCU=SAMC21G18A SDCARD=SDCARD_ENABLED make all mostly_clean + +BOARD_ID=Generic_x21J MCU=SAMD21J15A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMD21J16A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMD21J17A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMD21J18A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAML21J16B SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAML21J17B SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAML21J18B SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMC21J15A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMC21J16A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMC21J17A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_x21J MCU=SAMC21J18A SDCARD=SDCARD_ENABLED make all mostly_clean + +BOARD_ID=Generic_D51G MCU=SAMD51G18A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_D51G MCU=SAMD51G19A SDCARD=SDCARD_ENABLED make all mostly_clean + +BOARD_ID=Generic_D51J MCU=SAMD51J18A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_D51J MCU=SAMD51J19A SDCARD=SDCARD_ENABLED make all mostly_clean +BOARD_ID=Generic_D51J MCU=SAMD51J20A SDCARD=SDCARD_ENABLED make all mostly_clean BOARD_ID=Generic_D51N MCU=SAMD51N19A SDCARD=SDCARD_ENABLED make all mostly_clean BOARD_ID=Generic_D51N MCU=SAMD51N20A SDCARD=SDCARD_ENABLED make all mostly_clean diff --git a/extras/package_index.json.Release.template b/extras/package_index.json.Release.template index 9eb81bf2a..9e20db109 100644 --- a/extras/package_index.json.Release.template +++ b/extras/package_index.json.Release.template @@ -25,7 +25,7 @@ "version": "4.8.3-2014q1" }, { - "packager": "MattairTech_Arduino", + "packager": "Fab_SAM_Arduino", "name": "bossac", "version": "1.7.0-mattairtech-3" }, @@ -40,7 +40,7 @@ "version": "4.5.0" }, { - "packager": "MattairTech_Arduino", + "packager": "Fab_SAM_Arduino", "name": "CMSIS-Atmel", "version": "1.0.0-mattairtech-2" }, diff --git a/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha1_index.json b/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha1_index.json new file mode 100644 index 000000000..d1a4345ad --- /dev/null +++ b/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha1_index.json @@ -0,0 +1,53 @@ +{ + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.6.18-alpha1", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha1/Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "checksum": "SHA-256:5745e58fe3d6fc0b47b7f19f241684219e9df623eb6da033d7247e8e244b9bfd", + "size": "357035", + "boards": [ + { + "name": "Generic_D21E" + }, + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "MattairTech_Arduino", + "name": "bossac", + "version": "1.7.0-mattairtech-3" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "MattairTech_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.0" + } + ] +} diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index d21037f3b..af917c613 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -12,12 +12,12 @@ { "name": "Fab SAM core for Arduino", "architecture": "samd", - "version": "1.6.18", + "version": "1.6.18-alpha1", "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18/Fab_SAM_Core_for_Arduino-1.6.18.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18.tar.bz2", - "checksum": "SHA-256:3ccf87ab650a722248c4847fd6ceb4c22049bf3a37d5a9688af58064c848cfe3", - "size": "630541", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha1/Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "checksum": "SHA-256:5745e58fe3d6fc0b47b7f19f241684219e9df623eb6da033d7247e8e244b9bfd", + "size": "357035", "boards": [ { "name": "Generic_D21E" diff --git a/platform.txt b/platform.txt index 4ec2a819e..c57a1e254 100644 --- a/platform.txt +++ b/platform.txt @@ -18,7 +18,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Fab SAM core for Arduino -version=1.6.18 +version=1.6.18-alpha1 # Compile variables # ----------------- @@ -170,11 +170,11 @@ tools.openocd.program.params.verbose=-d2 tools.openocd.program.params.quiet=-d0 tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.elf}} verify reset; shutdown" -tools.openocd.erase.params.verbose=-d3 +tools.openocd.erase.params.verbose=-d2 tools.openocd.erase.params.quiet=-d0 -tools.openocd.erase.pattern= +tools.openocd.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd chip-erase; shutdown" -tools.openocd.bootloader.params.verbose=-d3 +tools.openocd.bootloader.params.verbose=-d2 tools.openocd.bootloader.params.quiet=-d0 tools.openocd.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd bootloader 0; program {{{runtime.platform.path}/bootloaders/{bootloader.file}}} verify reset; shutdown" @@ -196,9 +196,9 @@ tools.openocd-withbootsize.program.params.verbose=-d2 tools.openocd-withbootsize.program.params.quiet=-d0 tools.openocd-withbootsize.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.elf}} verify reset; shutdown" -tools.openocd-withbootsize.erase.params.verbose=-d3 +tools.openocd-withbootsize.erase.params.verbose=-d2 tools.openocd-withbootsize.erase.params.quiet=-d0 -tools.openocd-withbootsize.erase.pattern= +tools.openocd-withbootsize.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd chip-erase; shutdown" tools.openocd-withbootsize.bootloader.params.verbose=-d2 tools.openocd-withbootsize.bootloader.params.quiet=-d0 diff --git a/variants/Generic_D11C14A/README.md b/variants/Generic_D11C14A/README.md index b18961546..258263d9d 100644 --- a/variants/Generic_D11C14A/README.md +++ b/variants/Generic_D11C14A/README.md @@ -1,271 +1,271 @@ -# Generic ATsamD11C14A - -``` -====================================== ATsamD11C14A ===================================== -Other COM PWM Analog INT Arduino* Arduino* INT Analog PWM COM Other -========================================================================================= - 1------------------- - SCK*/RX2 TCC01 * * 5 | A5 A4 | 4 * * TCC00 MOSI*/TX2 REF - MOSI* TCC02 * 8 | A8 (XIN) A2 | 2 * * DAC - SCK* TCC03 * 9 | A9 (XOUT) Vdd | - SDA/MISO* TC10 * NMI 14 | A14 Gnd | - SCL/SS* TC11 * * 15 | A15 A25 | 25 USB/DP -BOOT 28 | A28/RST A24 | 24 USB/DM -SWDCLK TX1/MISO* 30 | A30 A31 | 31 * RX1/SS* SWDIO - ------------------- - -* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port - pin number printed on the chip above is also used in Arduino (but without the 'A') for - all of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). - When using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the - top left pin (A5). PIN_MAP_COMPACT uses less FLASH. -* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -* When using ONE_UART_NO_WIRE_ONE_SPI, use SPI on pins 4, 5, 14, and 15. - When using NO_UART_ONE_WIRE_ONE_SPI, use SPI on pins 8, 9, 30, and 31. -* Tone available on TC2. TC2 is not routed to pins in the D11C14A. -* Leave pin A30 floating (or use external pullup) during reset. -* DO NOT connect voltages higher than 3.3V! -``` - - -## Pins descriptions for Generic ATsamD11C14A - -### PIN_MAP_STANDARD -``` -==================================================================================================================================== -Arduino | Port | Alternate Function | Comments (! means not used with this peripheral assignment) ---------|-------|-----------------------|------------------------------------------------------------------------------------------- -0 | ---- | NOT A PIN | NOT A PIN -1 | ---- | NOT A PIN | NOT A PIN -2 | PA02 | DAC | EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT -3 | ---- | NOT A PIN | NOT A PIN -4 | PA04 | REFB / TX2* / TCC00 | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[2] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] -5 | PA05 | RX2* / TCC01 | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] -6 | ---- | NOT A PIN | NOT A PIN -7 | ---- | NOT A PIN | NOT A PIN -8 | PA08 | TX1 / MOSI / TCC02 | EIC/EXTINT[6] SERCOM1/PAD[2] !SERCOM0/PAD[2] TCC0/WO[2] !TCC0/WO[4] Xin32 / Xin -9 | PA09 | RX1 / SCK / TCC03 | EIC/EXTINT[7] SERCOM1/PAD[3] !SERCOM0/PAD[3] TCC0/WO[3] !TCC0/WO[5] Xout32 / Xout -10 | ---- | NOT A PIN | NOT A PIN -11 | ---- | NOT A PIN | NOT A PIN -12 | ---- | NOT A PIN | NOT A PIN -13 | ---- | NOT A PIN | NOT A PIN -14 | PA14 | SDA / TC10 | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] TC1/WO[0] !TCC0/WO[0] -15 | PA15 | SCL / TC11 | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] TC1/WO[1] !TCC0/WO[1] -16 | ---- | NOT A PIN | NOT A PIN -17 | ---- | NOT A PIN | NOT A PIN -18 | ---- | NOT A PIN | NOT A PIN -19 | ---- | NOT A PIN | NOT A PIN -20 | ---- | NOT A PIN | NOT A PIN -21 | ---- | NOT A PIN | NOT A PIN -22 | ---- | NOT A PIN | NOT A PIN -23 | ---- | NOT A PIN | NOT A PIN -24 | PA24 | USB_NEGATIVE | USB/DM -25 | PA25 | USB_POSITIVE | USB/DP -26 | ---- | NOT A PIN | NOT A PIN -27 | ---- | NOT A PIN | NOT A PIN -28 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) -29 | ---- | NOT A PIN | NOT A PIN -30 | PA30 | MISO / SWD CLK | !EIC/EXTINT[2] SERCOM1/PAD[0] !SERCOM1/PAD[2] !TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot -31 | PA31 | SS / SWD IO | EIC/EXTINT[3] SERCOM1/PAD[1] !SERCOM1/PAD[3] !TC2/WO[1] !TCC0/WO[3] SWD IO -==================================================================================================================================== -``` - - -### PIN_MAP_COMPACT -``` -==================================================================================================================================== -Arduino | Port | Alternate Function | Comments (! means not used with this peripheral assignment) ---------|-------|-----------------------|------------------------------------------------------------------------------------------- -0 | PA02 | DAC | EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT -1 | PA04 | REFB / TX2* / TCC00 | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[2] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] -2 | PA05 | RX2* / TCC01 | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] -3 | PA08 | TX1 / MOSI / TCC02 | EIC/EXTINT[6] SERCOM1/PAD[2] !SERCOM0/PAD[2] TCC0/WO[2] !TCC0/WO[4] Xin32 / Xin -4 | PA09 | RX1 / SCK / TCC03 | EIC/EXTINT[7] SERCOM1/PAD[3] !SERCOM0/PAD[3] TCC0/WO[3] !TCC0/WO[5] Xout32 / Xout -5 | PA14 | SDA / TC10 | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] TC1/WO[0] !TCC0/WO[0] -6 | PA15 | SCL / TC11 | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] TC1/WO[1] !TCC0/WO[1] -7 | PA24 | USB_NEGATIVE | USB/DM -8 | PA25 | USB_POSITIVE | USB/DP -9 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) -10 | PA30 | MISO / SWD CLK | !EIC/EXTINT[2] SERCOM1/PAD[0] !SERCOM1/PAD[2] !TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot -11 | PA31 | SS / SWD IO | EIC/EXTINT[3] SERCOM1/PAD[1] !SERCOM1/PAD[3] !TC2/WO[1] !TCC0/WO[3] SWD IO -==================================================================================================================================== - -* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port - pin number printed on the chip above is also used in Arduino (but without the 'A') for - all of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). - When using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the - top left pin (A5). PIN_MAP_COMPACT uses less RAM. -* NOT A PIN means the Arduino pin number is not mapped to a physical pin. -* Pins 24 and 25 are in use by USB (USB_NEGATIVE and USB_POSITIVE). -* The tone library uses TC2. TC2 is not routed to pins in the D11C14A (14-pin). -* When using ONE_UART_NO_WIRE_ONE_SPI, Serial1 refers to TX2/RX2 instead of TX1/RX1. -* Leave pin A30 floating (or use external pullup) during reset. -* SERCOM2 does not exist on the D11C14A. -``` - - -## Board Configuration Notes - -* **Crystals** - * Either a 32.768KHz crystal or a high speed crystal can be used. - * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. - -* **GPIO** - * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. - * Each pin can source or sink a maximum of 7 mA (when PER_ATTR_DRIVE_STRONG is set for the pin, enabled by default). - * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). - -* **Analog Inputs** - * 5 pins can be configured as ADC analog inputs. - * Each pin measures from ground to 3.3 volts by default. - * Each pin provides 10 bits of resolution (1024 values) by default. - * 12-bit resolution supported by using the analogReadResolution() function. - * The upper end of the measurement range can be changed using the analogReference() function. - * A reference voltage can be connected to REF. - -* **DAC** - * One analog output is available on pin 2. - * Provides a 10-bit voltage output with the analogWrite() function. - -* **PWM** - * 6 pins can be configured as PWM outputs. - * Each pin provides 8 bits of resolution (256 values) by default. - * 12-bit resolution supported by using the analogWriteResolution() function. - -* **External Interrupts** - * 7 pins can be configured with external interrupts. - -* **SERCOM** - * 2 SERCOM are available. - * Up to 2 UART instances - * 1 SPI instance - * 1 WIRE (I2C) instance - - - -## PinDescription table format - -### Note that in 1.6.18-beta-b1 a new compact table format was added. -The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE -to use a more compact format that uses only 4 bytes per pin (currently only available -for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used -(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to -pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC -column. Note that external libraries that reference the PinDescription table directly (uncommon) -will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which -is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. - -### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. -MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. -If using board variant files with the old format, the new core will still read the -table the old way, losing any new features introduced by the new column. Additionally, -new definitions have been added for D51, L21, and C21 support. - -### Each pin can have multiple functions. -The PinDescription table describes how each of the pins can be used by the Arduino -core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, -communications, etc.), and the PinDescription table configures which functions can -be used for each pin. This table is mainly accessed by the pinPeripheral function in -wiring_private.c, which is used to attach a pin to a particular peripheral function. -The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), -analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to -verify that the pin can perform the function requested, and to configure the pin for -that function. Most of the contents of pinMode() are now in pinPeripheral(). - -### Pin Mapping -There are different ways that pins can be mapped. Typically, there is no relation -between the arduino pin number used, and the actual port pin designator. Thus, the -pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, -a cross reference table is needed to find the arduino pin number. However, this results -in the least amount of space used by the table. Another method, used by default by the -MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino -pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins -are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added -for pins that are used for other purposes or for pins that do not exist (especially the -D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp -from the MT-D11 variant. The Xeno combines both methods, using the actual port pin -designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then -using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be -used, leaving the other pin for some number above 31. - -**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** - -### Port -This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### Pin -This is the pin (bit) within the port. Valid values are 0-31. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetPortPin() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column -using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, -use SetPortPin(NOT_A_PORT, 0). - -### PinType -This indicates what peripheral function the pin can be attached to. In most cases, -this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute -field. It can also be set to a specific peripheral. In this case, any attempt to -configure the pin (using pinPeripheral or pinMode) as anything else will fail (and -pinPeripheral will return -1). This can be used to prevent accidental re-configuration -of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin -is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See -WVariant.h for valid entries. These entries are also used as a parameter to -pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function -now calls pinPeripheral() with the desired mode. Note that this field is not used to -select between the different peripherals possible with each of the SERCOM and TIMER -functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE -is defined, PinType is not used (the pin is treated as PIO_MULTI). - -### PeripheralAttribute -This is an 8-bit bitfield used for various peripheral configuration. It is primarily -used to select between the different peripherals possible with each of the SERCOM and -TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four -pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on -the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. -Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the -pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, -buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are -two) is also selected here. Note that the D51 adds a third timer attribute and -requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. - -### PinAttribute -This is a 32-bit bitfield used to list all of the valid peripheral functions that a -pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain -attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL -includes all of the GPIO functions, while PIN_ATTR_TIMER includes both -PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). -PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for -limiting a pin to only input related functions or output functions. This allows a pin -to have a more flexible configuration, while restricting the direction (ie: to avoid -contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### TCChannel -This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available -on multiple pins. In general, only one pin should be configured in the pinDescription -table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column -to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on -the D21). See WVariant.h for valid entries. - -### ADCChannelNumber -This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC -instances, which are selected in the PeripheralAttribute column. See WVariant.h for -valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### ExtInt -This is the interrupt (if any) assigned to the pin. Some interrupt numbers are -available on multiple pins. In general, only one pin should be configured in the -pinDescription table per interrupt number. Thus, for example, if an interrupt was -needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid -entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetExtIntADC() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined -into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, -ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). - -### GCLKCCL -This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support -the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, -L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. +# Generic ATsamD11C14A + +``` +====================================== ATsamD11C14A ===================================== +Other COM PWM Analog INT Arduino* Arduino* INT Analog PWM COM Other +========================================================================================= + 1------------------- + SCK*/RX2 TCC01 * * 5 | A5 A4 | 4 * * TCC00 MOSI*/TX2 REF + MOSI* TCC02 * 8 | A8 (XIN) A2 | 2 * * DAC + SCK* TCC03 * 9 | A9 (XOUT) Vdd | + SDA/MISO* TC10 * NMI 14 | A14 Gnd | + SCL/SS* TC11 * * 15 | A15 A25 | 25 USB/DP +BOOT 28 | A28/RST A24 | 24 USB/DM +SWDCLK TX1/MISO* 30 | A30 A31 | 31 * RX1/SS* SWDIO + ------------------- + +* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port + pin number printed on the chip above is also used in Arduino (but without the 'A') for + all of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). + When using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the + top left pin (A5). PIN_MAP_COMPACT uses less FLASH. +* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. +* When using ONE_UART_NO_WIRE_ONE_SPI, use SPI on pins 4, 5, 14, and 15. + When using NO_UART_ONE_WIRE_ONE_SPI, use SPI on pins 8, 9, 30, and 31. +* Tone available on TC2. TC2 is not routed to pins in the D11C14A. +* Leave pin A30 floating (or use external pullup) during reset. +* DO NOT connect voltages higher than 3.3V! +``` + + +## Pins descriptions for Generic ATsamD11C14A + +### PIN_MAP_STANDARD +``` +==================================================================================================================================== +Arduino | Port | Alternate Function | Comments (! means not used with this peripheral assignment) +--------|-------|-----------------------|------------------------------------------------------------------------------------------- +0 | ---- | NOT A PIN | NOT A PIN +1 | ---- | NOT A PIN | NOT A PIN +2 | PA02 | DAC | EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT +3 | ---- | NOT A PIN | NOT A PIN +4 | PA04 | REFB / TX2* / TCC00 | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[2] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] +5 | PA05 | RX2* / TCC01 | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] +6 | ---- | NOT A PIN | NOT A PIN +7 | ---- | NOT A PIN | NOT A PIN +8 | PA08 | TX1 / MOSI / TCC02 | EIC/EXTINT[6] SERCOM1/PAD[2] !SERCOM0/PAD[2] TCC0/WO[2] !TCC0/WO[4] Xin32 / Xin +9 | PA09 | RX1 / SCK / TCC03 | EIC/EXTINT[7] SERCOM1/PAD[3] !SERCOM0/PAD[3] TCC0/WO[3] !TCC0/WO[5] Xout32 / Xout +10 | ---- | NOT A PIN | NOT A PIN +11 | ---- | NOT A PIN | NOT A PIN +12 | ---- | NOT A PIN | NOT A PIN +13 | ---- | NOT A PIN | NOT A PIN +14 | PA14 | SDA / TC10 | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] TC1/WO[0] !TCC0/WO[0] +15 | PA15 | SCL / TC11 | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] TC1/WO[1] !TCC0/WO[1] +16 | ---- | NOT A PIN | NOT A PIN +17 | ---- | NOT A PIN | NOT A PIN +18 | ---- | NOT A PIN | NOT A PIN +19 | ---- | NOT A PIN | NOT A PIN +20 | ---- | NOT A PIN | NOT A PIN +21 | ---- | NOT A PIN | NOT A PIN +22 | ---- | NOT A PIN | NOT A PIN +23 | ---- | NOT A PIN | NOT A PIN +24 | PA24 | USB_NEGATIVE | USB/DM +25 | PA25 | USB_POSITIVE | USB/DP +26 | ---- | NOT A PIN | NOT A PIN +27 | ---- | NOT A PIN | NOT A PIN +28 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) +29 | ---- | NOT A PIN | NOT A PIN +30 | PA30 | MISO / SWD CLK | !EIC/EXTINT[2] SERCOM1/PAD[0] !SERCOM1/PAD[2] !TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot +31 | PA31 | SS / SWD IO | EIC/EXTINT[3] SERCOM1/PAD[1] !SERCOM1/PAD[3] !TC2/WO[1] !TCC0/WO[3] SWD IO +==================================================================================================================================== +``` + + +### PIN_MAP_COMPACT +``` +==================================================================================================================================== +Arduino | Port | Alternate Function | Comments (! means not used with this peripheral assignment) +--------|-------|-----------------------|------------------------------------------------------------------------------------------- +0 | PA02 | DAC | EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT +1 | PA04 | REFB / TX2* / TCC00 | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[2] AC/AIN[0] PTC/Y[2] SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] +2 | PA05 | RX2* / TCC01 | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] +3 | PA08 | TX1 / MOSI / TCC02 | EIC/EXTINT[6] SERCOM1/PAD[2] !SERCOM0/PAD[2] TCC0/WO[2] !TCC0/WO[4] Xin32 / Xin +4 | PA09 | RX1 / SCK / TCC03 | EIC/EXTINT[7] SERCOM1/PAD[3] !SERCOM0/PAD[3] TCC0/WO[3] !TCC0/WO[5] Xout32 / Xout +5 | PA14 | SDA / TC10 | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] TC1/WO[0] !TCC0/WO[0] +6 | PA15 | SCL / TC11 | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] TC1/WO[1] !TCC0/WO[1] +7 | PA24 | USB_NEGATIVE | USB/DM +8 | PA25 | USB_POSITIVE | USB/DP +9 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) +10 | PA30 | MISO / SWD CLK | !EIC/EXTINT[2] SERCOM1/PAD[0] !SERCOM1/PAD[2] !TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot +11 | PA31 | SS / SWD IO | EIC/EXTINT[3] SERCOM1/PAD[1] !SERCOM1/PAD[3] !TC2/WO[1] !TCC0/WO[3] SWD IO +==================================================================================================================================== + +* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port + pin number printed on the chip above is also used in Arduino (but without the 'A') for + all of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). + When using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the + top left pin (A5). PIN_MAP_COMPACT uses less RAM. +* NOT A PIN means the Arduino pin number is not mapped to a physical pin. +* Pins 24 and 25 are in use by USB (USB_NEGATIVE and USB_POSITIVE). +* The tone library uses TC2. TC2 is not routed to pins in the D11C14A (14-pin). +* When using ONE_UART_NO_WIRE_ONE_SPI, Serial1 refers to TX2/RX2 instead of TX1/RX1. +* Leave pin A30 floating (or use external pullup) during reset. +* SERCOM2 does not exist on the D11C14A. +``` + + +## Board Configuration Notes + +* **Crystals** + * Either a 32.768KHz crystal or a high speed crystal can be used. + * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. + +* **GPIO** + * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. + * Each pin can source or sink a maximum of 7 mA (when PER_ATTR_DRIVE_STRONG is set for the pin, enabled by default). + * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). + +* **Analog Inputs** + * 5 pins can be configured as ADC analog inputs. + * Each pin measures from ground to 3.3 volts by default. + * Each pin provides 10 bits of resolution (1024 values) by default. + * 12-bit resolution supported by using the analogReadResolution() function. + * The upper end of the measurement range can be changed using the analogReference() function. + * A reference voltage can be connected to REF. + +* **DAC** + * One analog output is available on pin 2. + * Provides a 10-bit voltage output with the analogWrite() function. + +* **PWM** + * 6 pins can be configured as PWM outputs. + * Each pin provides 8 bits of resolution (256 values) by default. + * 12-bit resolution supported by using the analogWriteResolution() function. + +* **External Interrupts** + * 7 pins can be configured with external interrupts. + +* **SERCOM** + * 2 SERCOM are available. + * Up to 2 UART instances + * 1 SPI instance + * 1 WIRE (I2C) instance + + + +## PinDescription table format + +### Note that in 1.6.18-beta-b1 a new compact table format was added. +The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE +to use a more compact format that uses only 4 bytes per pin (currently only available +for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used +(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to +pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC +column. Note that external libraries that reference the PinDescription table directly (uncommon) +will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which +is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. + +### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. +MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. +If using board variant files with the old format, the new core will still read the +table the old way, losing any new features introduced by the new column. Additionally, +new definitions have been added for D51, L21, and C21 support. + +### Each pin can have multiple functions. +The PinDescription table describes how each of the pins can be used by the Arduino +core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, +communications, etc.), and the PinDescription table configures which functions can +be used for each pin. This table is mainly accessed by the pinPeripheral function in +wiring_private.c, which is used to attach a pin to a particular peripheral function. +The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), +analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to +verify that the pin can perform the function requested, and to configure the pin for +that function. Most of the contents of pinMode() are now in pinPeripheral(). + +### Pin Mapping +There are different ways that pins can be mapped. Typically, there is no relation +between the arduino pin number used, and the actual port pin designator. Thus, the +pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, +a cross reference table is needed to find the arduino pin number. However, this results +in the least amount of space used by the table. Another method, used by default by the +MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino +pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins +are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added +for pins that are used for other purposes or for pins that do not exist (especially the +D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp +from the MT-D11 variant. The Xeno combines both methods, using the actual port pin +designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then +using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be +used, leaving the other pin for some number above 31. + +**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** + +### Port +This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### Pin +This is the pin (bit) within the port. Valid values are 0-31. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetPortPin() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column +using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, +use SetPortPin(NOT_A_PORT, 0). + +### PinType +This indicates what peripheral function the pin can be attached to. In most cases, +this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute +field. It can also be set to a specific peripheral. In this case, any attempt to +configure the pin (using pinPeripheral or pinMode) as anything else will fail (and +pinPeripheral will return -1). This can be used to prevent accidental re-configuration +of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin +is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See +WVariant.h for valid entries. These entries are also used as a parameter to +pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function +now calls pinPeripheral() with the desired mode. Note that this field is not used to +select between the different peripherals possible with each of the SERCOM and TIMER +functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE +is defined, PinType is not used (the pin is treated as PIO_MULTI). + +### PeripheralAttribute +This is an 8-bit bitfield used for various peripheral configuration. It is primarily +used to select between the different peripherals possible with each of the SERCOM and +TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four +pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on +the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. +Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the +pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, +buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are +two) is also selected here. Note that the D51 adds a third timer attribute and +requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. + +### PinAttribute +This is a 32-bit bitfield used to list all of the valid peripheral functions that a +pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain +attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL +includes all of the GPIO functions, while PIN_ATTR_TIMER includes both +PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). +PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for +limiting a pin to only input related functions or output functions. This allows a pin +to have a more flexible configuration, while restricting the direction (ie: to avoid +contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### TCChannel +This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available +on multiple pins. In general, only one pin should be configured in the pinDescription +table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column +to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on +the D21). See WVariant.h for valid entries. + +### ADCChannelNumber +This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC +instances, which are selected in the PeripheralAttribute column. See WVariant.h for +valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### ExtInt +This is the interrupt (if any) assigned to the pin. Some interrupt numbers are +available on multiple pins. In general, only one pin should be configured in the +pinDescription table per interrupt number. Thus, for example, if an interrupt was +needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid +entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetExtIntADC() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined +into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, +ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). + +### GCLKCCL +This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support +the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, +L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/Generic_D11C14A/debug_scripts/SAMD11C14A.gdb b/variants/Generic_D11C14A/debug_scripts/SAMD11C14A.gdb index ff7008e6e..7fb9d812e 100644 --- a/variants/Generic_D11C14A/debug_scripts/SAMD11C14A.gdb +++ b/variants/Generic_D11C14A/debug_scripts/SAMD11C14A.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd11c14a" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd11c14a" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D11C14A/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld b/variants/Generic_D11C14A/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld index 1e2d5f052..6f9bc1576 100644 --- a/variants/Generic_D11C14A/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld +++ b/variants/Generic_D11C14A/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x1000, LENGTH = 0x00004000-0x1000 /* First 4KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x1000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x1000, LENGTH = 0x00004000-0x1000 /* First 4KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x1000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D11C14A/linker_scripts/gcc/No_Bootloader/flash_16KB.ld b/variants/Generic_D11C14A/linker_scripts/gcc/No_Bootloader/flash_16KB.ld index bd135b3dd..674a40d60 100644 --- a/variants/Generic_D11C14A/linker_scripts/gcc/No_Bootloader/flash_16KB.ld +++ b/variants/Generic_D11C14A/linker_scripts/gcc/No_Bootloader/flash_16KB.ld @@ -1,214 +1,214 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00004000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00004000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg b/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg index 2e1525a73..5c39d8b33 100644 --- a/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg +++ b/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd11c14a -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd11c14a +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_D11C14A/pins_arduino.h b/variants/Generic_D11C14A/pins_arduino.h index db0e40c3d..36ab06c77 100644 --- a/variants/Generic_D11C14A/pins_arduino.h +++ b/variants/Generic_D11C14A/pins_arduino.h @@ -1,21 +1,21 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// API compatibility -#include "variant.h" - +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// API compatibility +#include "variant.h" + diff --git a/variants/Generic_D11C14A/variant.cpp b/variants/Generic_D11C14A/variant.cpp index 1aa33b74e..3a5ac4d52 100644 --- a/variants/Generic_D11C14A/variant.cpp +++ b/variants/Generic_D11C14A/variant.cpp @@ -1,164 +1,164 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 9 June 2018 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - - -#include "variant.h" - -/* - * Pins descriptions - */ -#if defined PIN_MAP_STANDARD -#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) -const PinDescription g_APinDescription[]= -{ - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel0 ) }, - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, - { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 8 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, - { SetPortPin( PORTA, 9 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_7, No_ADC_Channel ) }, - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_NMI, ADC_Channel6 ) }, - { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM - { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SWD CLK - { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // SWD IO -} ; -#else -const PinDescription g_APinDescription[]= -{ - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH2, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO -} ; -#endif -#elif defined(PIN_MAP_COMPACT) -#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) -const PinDescription g_APinDescription[]= -{ - { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { SetPortPin( PORTA, 8 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TCC0_CH2, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, - { SetPortPin( PORTA, 9 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, - { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, - { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, - { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM - { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP - { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) - { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SWD CLK - { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO -} ; -#else -const PinDescription g_APinDescription[]= -{ - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH2, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO -} ; -#endif -#endif - -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TC1, TC2 } ; - -// Multi-serial objects instantiation -SERCOM sercom0( SERCOM0 ) ; -SERCOM sercom1( SERCOM1 ) ; - -#if defined(ONE_UART) || defined(TWO_UART) -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - -void SERCOM1_Handler() -{ - Serial1.IrqHandler(); -} -#endif - -#if defined(TWO_UART) -Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; - -void SERCOM0_Handler() -{ - Serial2.IrqHandler(); -} -#endif +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 9 June 2018 by Justin Mattair + * for MattairTech boards (www.mattairtech.com) + * + * See README.md for documentation and pin mapping information + */ + + +#include "variant.h" + +/* + * Pins descriptions + */ +#if defined PIN_MAP_STANDARD +#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) +const PinDescription g_APinDescription[]= +{ + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel0 ) }, + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, + { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 8 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, + { SetPortPin( PORTA, 9 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_7, No_ADC_Channel ) }, + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_NMI, ADC_Channel6 ) }, + { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM + { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SWD CLK + { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // SWD IO +} ; +#else +const PinDescription g_APinDescription[]= +{ + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH2, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, + { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO +} ; +#endif +#elif defined(PIN_MAP_COMPACT) +#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) +const PinDescription g_APinDescription[]= +{ + { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, + { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { SetPortPin( PORTA, 8 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TCC0_CH2, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, + { SetPortPin( PORTA, 9 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, + { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, + { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, + { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM + { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP + { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) + { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SWD CLK + { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO +} ; +#else +const PinDescription g_APinDescription[]= +{ + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH2, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, + { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, + { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO +} ; +#endif +#endif + +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TC1, TC2 } ; + +// Multi-serial objects instantiation +SERCOM sercom0( SERCOM0 ) ; +SERCOM sercom1( SERCOM1 ) ; + +#if defined(ONE_UART) || defined(TWO_UART) +Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; + +void SERCOM1_Handler() +{ + Serial1.IrqHandler(); +} +#endif + +#if defined(TWO_UART) +Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; + +void SERCOM0_Handler() +{ + Serial2.IrqHandler(); +} +#endif diff --git a/variants/Generic_D11C14A/variant.h b/variants/Generic_D11C14A/variant.h index 7a8a67318..6e550598d 100644 --- a/variants/Generic_D11C14A/variant.h +++ b/variants/Generic_D11C14A/variant.h @@ -1,381 +1,381 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 16 June 2018 by Justin Mattair (www.mattairtech.com) - * See README.md for documentation and pin mapping information - */ - -#ifndef _VARIANT_MATTAIRTECH_D11C14A_ -#define _VARIANT_MATTAIRTECH_D11C14A_ - -/* This variant requires the MattairTech SAM D|L|C Core for Arduino >= 1.6.18-beta-b1. - * The format is different than the stock Arduino SAMD core, - * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. - */ -#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10618 - -/*---------------------------------------------------------------------------- - * Clock Configuration - *----------------------------------------------------------------------------*/ - -/** Master clock frequency (also Fcpu frequency) */ -#define VARIANT_MCK (48000000ul) - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" -#include "sam.h" -#include "../../config.h" - -#ifdef __cplusplus -#include "SERCOM.h" -#include "Uart.h" -#endif // __cplusplus - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/*---------------------------------------------------------------------------- - * Pins - *----------------------------------------------------------------------------*/ - -// Number of pins defined in PinDescription array -#define PIN_MAP_STANDARD -//#define PIN_MAP_COMPACT - -#if defined PIN_MAP_STANDARD - #define NUM_PIN_DESCRIPTION_ENTRIES (32u) -#elif defined PIN_MAP_COMPACT - #define NUM_PIN_DESCRIPTION_ENTRIES (12u) -#else - #error "variant.h: You must set PIN_MAP_STANDARD or PIN_MAP_COMPACT" -#endif - -#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES -#define NUM_DIGITAL_PINS PINS_COUNT -#define NUM_ANALOG_INPUTS (5u) -#define NUM_ANALOG_OUTPUTS (1u) -#define analogInputToDigitalPin(p) (p) - -#define digitalPinToPort(P) ( &(PORT->Group[GetPort(P)]) ) -#define digitalPinToBitMask(P) ( 1 << GetPin(P) ) - -#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) - #define digitalPinHasPWM(P) ( g_APinDescription[P].ulTCChannel != NOT_ON_TIMER ) -#else - #define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) -#endif - -//#define analogInPinToBit(P) ( ) -#define portOutputRegister(port) ( &(port->OUT.reg) ) -#define portInputRegister(port) ( &(port->IN.reg) ) -#define portModeRegister(port) ( &(port->DIR.reg) ) - -/* - * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD - * architecture. If you need to check if a pin supports PWM you must - * use digitalPinHasPWM(..). - * - * https://github.com/arduino/Arduino/issues/1833 - */ -// #define digitalPinToTimer(P) - -/* LEDs - * None of these defines are currently used by the core. - */ -#if defined PIN_MAP_STANDARD -#define PIN_LED_13 (5u) -#define PIN_LED_RXL (8u) -#define PIN_LED_TXL (9u) -#elif defined PIN_MAP_COMPACT -#define PIN_LED_13 (2u) -#define PIN_LED_RXL (3u) -#define PIN_LED_TXL (4u) -#endif - -#define PIN_LED PIN_LED_13 -#define PIN_LED2 PIN_LED_RXL -#define PIN_LED3 PIN_LED_TXL -#define LED_BUILTIN PIN_LED_13 - -/* - * Analog pins - */ -#if defined PIN_MAP_STANDARD -#define PIN_A2 (2ul) -#define PIN_A4 (4ul) -#define PIN_A5 (5ul) -#define PIN_A14 (14ul) -#define PIN_A15 (15ul) -#define PIN_DAC0 (2ul) -#elif defined PIN_MAP_COMPACT -#define PIN_A2 (0ul) -#define PIN_A4 (1ul) -#define PIN_A5 (2ul) -#define PIN_A14 (5ul) -#define PIN_A15 (6ul) -#define PIN_DAC0 (2ul) -#endif - -static const uint8_t A2 = PIN_A2; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; -static const uint8_t A14 = PIN_A14; -static const uint8_t A15 = PIN_A15; -static const uint8_t DAC0 = PIN_DAC0; - - -#define ADC_RESOLUTION 12 - -// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 - -/* Set default analog voltage reference */ -#define VARIANT_AR_DEFAULT AR_DEFAULT - -/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ -#if defined PIN_MAP_STANDARD -#define REFB_PIN (4ul) -#elif defined PIN_MAP_COMPACT -#define REFB_PIN (1ul) -#endif - - -// The ATN pin may be used in the future as the first SPI chip select. -// On boards that do not have the Arduino physical form factor, it can to set to any free pin. -#if defined PIN_MAP_STANDARD -#define PIN_ATN (15ul) -#elif defined PIN_MAP_COMPACT -#define PIN_ATN (6ul) -#endif -static const uint8_t ATN = PIN_ATN; - - -/* - * Serial interfaces - */ -// Serial1 -#if defined PIN_MAP_STANDARD -#define PIN_SERIAL1_RX (31ul) -#define PIN_SERIAL1_TX (30ul) -#elif defined PIN_MAP_COMPACT -#define PIN_SERIAL1_RX (11ul) -#define PIN_SERIAL1_TX (10ul) -#endif - -#define PAD_SERIAL1_TX (UART_TX_PAD_0) -#define PAD_SERIAL1_RX (SERCOM_RX_PAD_1) -#define SERCOM_INSTANCE_SERIAL1 &sercom1 - -// Serial2 -#if defined PIN_MAP_STANDARD -#define PIN_SERIAL2_RX (5ul) -#define PIN_SERIAL2_TX (4ul) -#elif defined PIN_MAP_COMPACT -#define PIN_SERIAL2_RX (2ul) -#define PIN_SERIAL2_TX (1ul) -#endif - -#define PAD_SERIAL2_TX (UART_TX_PAD_2) -#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) -#define SERCOM_INSTANCE_SERIAL2 &sercom0 - - -/* - * SPI Interfaces - */ -#if defined(ONE_SPI) -#define SPI_INTERFACES_COUNT 1 -#else -#define SPI_INTERFACES_COUNT 0 -#endif - -#if defined(ONE_WIRE) && defined (ONE_SPI) - #if defined PIN_MAP_STANDARD - #define PIN_SPI_MISO (30u) - #define PIN_SPI_MOSI (8u) - #define PIN_SPI_SCK (9u) - #define PIN_SPI_SS (31u) - #elif defined PIN_MAP_COMPACT - #define PIN_SPI_MISO (10u) - #define PIN_SPI_MOSI (3u) - #define PIN_SPI_SCK (4u) - #define PIN_SPI_SS (11u) - #endif - - #define PERIPH_SPI sercom1 - #define PAD_SPI_TX SPI_PAD_2_SCK_3 - #define PAD_SPI_RX SERCOM_RX_PAD_0 - -// ONE_UART and ONE_SPI -#else - #if defined PIN_MAP_STANDARD - #define PIN_SPI_MISO (14u) - #define PIN_SPI_MOSI (4u) - #define PIN_SPI_SCK (5u) - #define PIN_SPI_SS (15u) - #elif defined PIN_MAP_COMPACT - #define PIN_SPI_MISO (5u) - #define PIN_SPI_MOSI (1u) - #define PIN_SPI_SCK (2u) - #define PIN_SPI_SS (5u) - #endif - - #define PERIPH_SPI sercom0 - #define PAD_SPI_TX SPI_PAD_2_SCK_3 - #define PAD_SPI_RX SERCOM_RX_PAD_0 -#endif - -static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI = PIN_SPI_MOSI ; -static const uint8_t MISO = PIN_SPI_MISO ; -static const uint8_t SCK = PIN_SPI_SCK ; - - -/* - * Wire Interfaces - */ -#if defined(ONE_WIRE) -#define WIRE_INTERFACES_COUNT 1 -#else -#define WIRE_INTERFACES_COUNT 0 -#endif - -#if defined PIN_MAP_STANDARD -#define PIN_WIRE_SDA (14u) -#define PIN_WIRE_SCL (15u) -#elif defined PIN_MAP_COMPACT -#define PIN_WIRE_SDA (5u) -#define PIN_WIRE_SCL (6u) -#endif - -#define PERIPH_WIRE sercom0 -#define WIRE_IT_HANDLER SERCOM0_Handler - -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; - - -/* - * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to - * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. - */ -#if defined PIN_MAP_STANDARD -#define PIN_USB_DM (24ul) -#define PIN_USB_DP (25ul) -//#define PIN_USB_HOST_ENABLE (14ul) -#elif defined PIN_MAP_COMPACT -#define PIN_USB_DM (7ul) -#define PIN_USB_DP (8ul) -//#define PIN_USB_HOST_ENABLE (5ul) -#endif - -#define PIN_USB_HOST_ENABLE_VALUE HIGH - -#ifdef __cplusplus -} -#endif - - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#ifdef __cplusplus - -/* ========================= - * ===== SERCOM DEFINITION - * ========================= -*/ -extern SERCOM sercom0; -extern SERCOM sercom1; - -extern Uart Serial1; -extern Uart Serial2; - -#endif - -// These serial port names are intended to allow libraries and architecture-neutral -// sketches to automatically default to the correct port name for a particular type -// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, -// the first hardware serial port whose RX/TX pins are not dedicated to another use. -// -// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor -// -// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial -// -// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library -// -// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. -// -// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX -// pins are NOT connected to anything by default. -#define SERIAL_PORT_USBVIRTUAL SerialUSB -// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). -// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. -// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. -// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get -// the USB Host debugging output. -#define SERIAL_PORT_MONITOR Serial1 -// Serial has no physical pins broken out, so it's not listed as HARDWARE port -#define SERIAL_PORT_HARDWARE Serial1 -#define SERIAL_PORT_HARDWARE_OPEN Serial1 - -// The MT-D11 does not have the EDBG support chip, which provides a USB-UART bridge -// accessible using Serial (the Arduino serial monitor is normally connected to this). -// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. -// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. -// Remember to use while(!Serial); to wait for a connection before Serial printing. - -// When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -#if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) -#define Serial SerialUSB -#else -#define Serial Serial1 -#endif - -#endif /* _VARIANT_ARDUINO_ZERO_ */ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 16 June 2018 by Justin Mattair (www.mattairtech.com) + * See README.md for documentation and pin mapping information + */ + +#ifndef _VARIANT_GENERIC_D11C14A_ +#define _VARIANT_GENERIC_D11C14A_ + +/* This variant requires the MattairTech SAM D|L|C Core for Arduino >= 1.6.18-beta-b1. + * The format is different than the stock Arduino SAMD core, + * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. + */ +#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10618 + +/*---------------------------------------------------------------------------- + * Clock Configuration + *----------------------------------------------------------------------------*/ + +/** Master clock frequency (also Fcpu frequency) */ +#define VARIANT_MCK (48000000ul) + +/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ + * must also be defined with the external crystal frequency in Hertz. + */ +#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL + +/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL + * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in + * a more accurate 48MHz output frequency at the expense of increased jitter. + */ +//#define PLL_FRACTIONAL_ENABLED + +/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal + * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being + * multiplied by the PLL. This will result in a faster lock time for the PLL, + * however, it will also result in a less accurate PLL output frequency if the + * crystal is not divisible (without remainder) by 1MHz. In this case, define + * PLL_FRACTIONAL_ENABLED as well. + */ +//#define PLL_FAST_STARTUP + +/* The fine calibration value for DFLL open-loop mode is defined here. + * The coarse calibration value is loaded from NVM OTP (factory calibration values). + */ +#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) + +/*---------------------------------------------------------------------------- + * Headers + *----------------------------------------------------------------------------*/ + +#include "WVariant.h" +#include "sam.h" +#include "../../config.h" + +#ifdef __cplusplus +#include "SERCOM.h" +#include "Uart.h" +#endif // __cplusplus + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/*---------------------------------------------------------------------------- + * Pins + *----------------------------------------------------------------------------*/ + +// Number of pins defined in PinDescription array +#define PIN_MAP_STANDARD +//#define PIN_MAP_COMPACT + +#if defined PIN_MAP_STANDARD + #define NUM_PIN_DESCRIPTION_ENTRIES (32u) +#elif defined PIN_MAP_COMPACT + #define NUM_PIN_DESCRIPTION_ENTRIES (12u) +#else + #error "variant.h: You must set PIN_MAP_STANDARD or PIN_MAP_COMPACT" +#endif + +#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES +#define NUM_DIGITAL_PINS PINS_COUNT +#define NUM_ANALOG_INPUTS (5u) +#define NUM_ANALOG_OUTPUTS (1u) +#define analogInputToDigitalPin(p) (p) + +#define digitalPinToPort(P) ( &(PORT->Group[GetPort(P)]) ) +#define digitalPinToBitMask(P) ( 1 << GetPin(P) ) + +#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) + #define digitalPinHasPWM(P) ( g_APinDescription[P].ulTCChannel != NOT_ON_TIMER ) +#else + #define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) +#endif + +//#define analogInPinToBit(P) ( ) +#define portOutputRegister(port) ( &(port->OUT.reg) ) +#define portInputRegister(port) ( &(port->IN.reg) ) +#define portModeRegister(port) ( &(port->DIR.reg) ) + +/* + * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD + * architecture. If you need to check if a pin supports PWM you must + * use digitalPinHasPWM(..). + * + * https://github.com/arduino/Arduino/issues/1833 + */ +// #define digitalPinToTimer(P) + +/* LEDs + * None of these defines are currently used by the core. + */ +#if defined PIN_MAP_STANDARD +#define PIN_LED_13 (5u) +#define PIN_LED_RXL (8u) +#define PIN_LED_TXL (9u) +#elif defined PIN_MAP_COMPACT +#define PIN_LED_13 (2u) +#define PIN_LED_RXL (3u) +#define PIN_LED_TXL (4u) +#endif + +#define PIN_LED PIN_LED_13 +#define PIN_LED2 PIN_LED_RXL +#define PIN_LED3 PIN_LED_TXL +#define LED_BUILTIN PIN_LED_13 + +/* + * Analog pins + */ +#if defined PIN_MAP_STANDARD +#define PIN_A2 (2ul) +#define PIN_A4 (4ul) +#define PIN_A5 (5ul) +#define PIN_A14 (14ul) +#define PIN_A15 (15ul) +#define PIN_DAC0 (2ul) +#elif defined PIN_MAP_COMPACT +#define PIN_A2 (0ul) +#define PIN_A4 (1ul) +#define PIN_A5 (2ul) +#define PIN_A14 (5ul) +#define PIN_A15 (6ul) +#define PIN_DAC0 (2ul) +#endif + +static const uint8_t A2 = PIN_A2; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A14 = PIN_A14; +static const uint8_t A15 = PIN_A15; +static const uint8_t DAC0 = PIN_DAC0; + + +#define ADC_RESOLUTION 12 + +// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 + +/* Set default analog voltage reference */ +#define VARIANT_AR_DEFAULT AR_DEFAULT + +/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ +#if defined PIN_MAP_STANDARD +#define REFB_PIN (4ul) +#elif defined PIN_MAP_COMPACT +#define REFB_PIN (1ul) +#endif + + +// The ATN pin may be used in the future as the first SPI chip select. +// On boards that do not have the Arduino physical form factor, it can to set to any free pin. +#if defined PIN_MAP_STANDARD +#define PIN_ATN (15ul) +#elif defined PIN_MAP_COMPACT +#define PIN_ATN (6ul) +#endif +static const uint8_t ATN = PIN_ATN; + + +/* + * Serial interfaces + */ +// Serial1 +#if defined PIN_MAP_STANDARD +#define PIN_SERIAL1_RX (31ul) +#define PIN_SERIAL1_TX (30ul) +#elif defined PIN_MAP_COMPACT +#define PIN_SERIAL1_RX (11ul) +#define PIN_SERIAL1_TX (10ul) +#endif + +#define PAD_SERIAL1_TX (UART_TX_PAD_0) +#define PAD_SERIAL1_RX (SERCOM_RX_PAD_1) +#define SERCOM_INSTANCE_SERIAL1 &sercom1 + +// Serial2 +#if defined PIN_MAP_STANDARD +#define PIN_SERIAL2_RX (5ul) +#define PIN_SERIAL2_TX (4ul) +#elif defined PIN_MAP_COMPACT +#define PIN_SERIAL2_RX (2ul) +#define PIN_SERIAL2_TX (1ul) +#endif + +#define PAD_SERIAL2_TX (UART_TX_PAD_2) +#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) +#define SERCOM_INSTANCE_SERIAL2 &sercom0 + + +/* + * SPI Interfaces + */ +#if defined(ONE_SPI) +#define SPI_INTERFACES_COUNT 1 +#else +#define SPI_INTERFACES_COUNT 0 +#endif + +#if defined(ONE_WIRE) && defined (ONE_SPI) + #if defined PIN_MAP_STANDARD + #define PIN_SPI_MISO (30u) + #define PIN_SPI_MOSI (8u) + #define PIN_SPI_SCK (9u) + #define PIN_SPI_SS (31u) + #elif defined PIN_MAP_COMPACT + #define PIN_SPI_MISO (10u) + #define PIN_SPI_MOSI (3u) + #define PIN_SPI_SCK (4u) + #define PIN_SPI_SS (11u) + #endif + + #define PERIPH_SPI sercom1 + #define PAD_SPI_TX SPI_PAD_2_SCK_3 + #define PAD_SPI_RX SERCOM_RX_PAD_0 + +// ONE_UART and ONE_SPI +#else + #if defined PIN_MAP_STANDARD + #define PIN_SPI_MISO (14u) + #define PIN_SPI_MOSI (4u) + #define PIN_SPI_SCK (5u) + #define PIN_SPI_SS (15u) + #elif defined PIN_MAP_COMPACT + #define PIN_SPI_MISO (5u) + #define PIN_SPI_MOSI (1u) + #define PIN_SPI_SCK (2u) + #define PIN_SPI_SS (5u) + #endif + + #define PERIPH_SPI sercom0 + #define PAD_SPI_TX SPI_PAD_2_SCK_3 + #define PAD_SPI_RX SERCOM_RX_PAD_0 +#endif + +static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. +static const uint8_t MOSI = PIN_SPI_MOSI ; +static const uint8_t MISO = PIN_SPI_MISO ; +static const uint8_t SCK = PIN_SPI_SCK ; + + +/* + * Wire Interfaces + */ +#if defined(ONE_WIRE) +#define WIRE_INTERFACES_COUNT 1 +#else +#define WIRE_INTERFACES_COUNT 0 +#endif + +#if defined PIN_MAP_STANDARD +#define PIN_WIRE_SDA (14u) +#define PIN_WIRE_SCL (15u) +#elif defined PIN_MAP_COMPACT +#define PIN_WIRE_SDA (5u) +#define PIN_WIRE_SCL (6u) +#endif + +#define PERIPH_WIRE sercom0 +#define WIRE_IT_HANDLER SERCOM0_Handler + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + + +/* + * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to + * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. + */ +#if defined PIN_MAP_STANDARD +#define PIN_USB_DM (24ul) +#define PIN_USB_DP (25ul) +//#define PIN_USB_HOST_ENABLE (14ul) +#elif defined PIN_MAP_COMPACT +#define PIN_USB_DM (7ul) +#define PIN_USB_DP (8ul) +//#define PIN_USB_HOST_ENABLE (5ul) +#endif + +#define PIN_USB_HOST_ENABLE_VALUE HIGH + +#ifdef __cplusplus +} +#endif + + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus + +/* ========================= + * ===== SERCOM DEFINITION + * ========================= +*/ +extern SERCOM sercom0; +extern SERCOM sercom1; + +extern Uart Serial1; +extern Uart Serial2; + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_USBVIRTUAL SerialUSB +// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). +// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. +// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. +// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get +// the USB Host debugging output. +#define SERIAL_PORT_MONITOR Serial1 +// Serial has no physical pins broken out, so it's not listed as HARDWARE port +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +// The MT-D11 does not have the EDBG support chip, which provides a USB-UART bridge +// accessible using Serial (the Arduino serial monitor is normally connected to this). +// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. +// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. +// Remember to use while(!Serial); to wait for a connection before Serial printing. + +// When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. +#if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) +#define Serial SerialUSB +#else +#define Serial Serial1 +#endif + +#endif /* _VARIANT_GENERIC_D11C14A_ */ diff --git a/variants/Generic_D11D14AM/README.md b/variants/Generic_D11D14AM/README.md new file mode 100644 index 000000000..3c22972ed --- /dev/null +++ b/variants/Generic_D11D14AM/README.md @@ -0,0 +1,286 @@ +# MattairTech MT-D11 (ATsamD11D14AM) + +``` +=========================== MattairTech MT-D11 (ATsamD11D14AM) ========================== +Other COM PWM Analog INT Arduino* Arduino* INT PWM COM Other +========================================================================================= + ------------------- +DAC * 2 | A2 | USB | Gnd | +REF * 3 | A3 | | Vcc | + TCC00 * * 4 | A4 ----- A31 | 31 * TC21 RX1 SWDIO + TCC01 * * 5 | A5 A30 | 30 TC20 TX1 SWDCLK + TCC02 * 6 | A6 A27 | 27 * + TCC03 * 7 | A7 A23 | 23 SCL + MOSI / TX2 * * 10 | A10 A22 | 22 * SDA + SCK / RX2 * 11 | A11 A17 | 17 TC11 + MISO * NMI 14 | A14 A16 | 16 * TC10 LED +BTN SS * * 15 | A15 RST | BOOT + ------------------- + +* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port + pin number printed on the board is also used in Arduino (but without the 'A') for all + of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). When + using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the top + left pin (A2). PIN_MAP_COMPACT uses less FLASH. +* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. +* Leave pin A30 floating (or use external pullup) during reset. +* DO NOT connect voltages higher than 3.3V! +* Tone available on TC2. +``` + + +## Pins descriptions for the MattairTech MT-D11 + +### PIN_MAP_STANDARD +``` +============================================================================================================================================ +Arduino | Silk | Port | Alternate Function | Comments (! means not used with this peripheral assignment) +--------|-------|-------|-----------------------|------------------------------------------------------------------------------------------- +0 | --- | ---- | NOT A PIN | NOT A PIN +1 | --- | ---- | NOT A PIN | NOT A PIN +2 | A2 | PA02 | DAC | !EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT +3 | A3 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] +4 | A4 | PA04 | REFB / VM | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] +5 | A5 | PA05 | | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] +6 | A6 | PA06 | | !EIC/EXTINT[6] ADC/AIN[4] AC/AIN[2] PTC/Y[4] !SERCOM0/PAD[0] !SERCOM0/PAD[2] !TC2/WO[0] TCC0/WO[2] +7 | A7 | PA07 | | !EIC/EXTINT[7] ADC/AIN[5] AC/AIN[3] PTC/Y[5] !SERCOM0/PAD[1] !SERCOM0/PAD[3] !TC2/WO[1] TCC0/WO[3] +8 | -- | PA08 | Xin32 / Xin | Xin32 +9 | -- | PA09 | Xout32 / Xout | Xout32 +10 | A10 | PA10 | SPI MOSI / TX2 | EIC/EXTINT[2] ADC/AIN[8] PTC/X[2] PTC/Y[8] SERCOM0/PAD[2] !SERCOM2/PAD[2] !TC2/WO[0] !TCC0/WO[2] +11 | A11 | PA11 | SPI SCK / RX2 | !EIC/EXTINT[3] ADC/AIN[9] PTC/X[3] PTC/Y[9] SERCOM0/PAD[3] !SERCOM2/PAD[3] !TC2/WO[1] !TCC0/WO[3] +12 | --- | ---- | NOT A PIN | NOT A PIN +13 | --- | ---- | NOT A PIN | NOT A PIN +14 | A14 | PA14 | SPI MISO | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[0] +15 | A15 | PA15 | Button / SPI SS | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[1] Button +16 | A16 | PA16 | LED | EIC/EXTINT[0] PTC/X[4] PTC/Y[10] !SERCOM1/PAD[2] !SERCOM2/PAD[2] TC1/WO[0] !TCC0/WO[6] LED +17 | A17 | PA17 | HOST_ENABLE | !EIC/EXTINT[1] PTC/X[5] PTC/Y[11] !SERCOM1/PAD[3] !SERCOM2/PAD[3] TC1/WO[1] !TCC0/WO[7] HOST_ENABLE +18 | --- | ---- | NOT A PIN | NOT A PIN +19 | --- | ---- | NOT A PIN | NOT A PIN +20 | --- | ---- | NOT A PIN | NOT A PIN +21 | --- | ---- | NOT A PIN | NOT A PIN +22 | A22 | PA22 | I2C/SDA w/pullup | EIC/EXTINT[6] PTC/X[6] PTC/Y[12] !SERCOM1/PAD[0] SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[4] +23 | A23 | PA23 | I2C/SCL w/pullup | !EIC/EXTINT[7] PTC/X[7] PTC/Y[13] !SERCOM1/PAD[1] SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[5] +24 | --- | PA24 | USB_NEGATIVE | USB/DM +25 | --- | PA25 | USB_POSITIVE | USB/DP +26 | --- | ---- | NOT A PIN | NOT A PIN +27 | A27 | PA27 | | EIC/EXTINT[7] PTC/X[10] +28 | A28 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) +29 | --- | ---- | NOT A PIN | NOT A PIN +30 | A30 | PA30 | TX1 / SWD CLK | !EIC/EXTINT[2] !SERCOM1/PAD[0] SERCOM1/PAD[2] TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot +31 | A31 | PA31 | RX1 / SWD IO | EIC/EXTINT[3] !SERCOM1/PAD[1] SERCOM1/PAD[3] TC2/WO[1] !TCC0/WO[3] SWD IO +============================================================================================================================================ +``` + +### PIN_MAP_COMPACT +``` +============================================================================================================================================ +Arduino | Silk | Port | Alternate Function | Comments (! means not used with this peripheral assignment) +--------|-------|-------|-----------------------|------------------------------------------------------------------------------------------- +0 | A2 | PA02 | DAC | !EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT +1 | A3 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] +2 | A4 | PA04 | REFB / VM | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] +3 | A5 | PA05 | | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] +4 | A6 | PA06 | | !EIC/EXTINT[6] ADC/AIN[4] AC/AIN[2] PTC/Y[4] !SERCOM0/PAD[0] !SERCOM0/PAD[2] !TC2/WO[0] TCC0/WO[2] +5 | A7 | PA07 | | !EIC/EXTINT[7] ADC/AIN[5] AC/AIN[3] PTC/Y[5] !SERCOM0/PAD[1] !SERCOM0/PAD[3] !TC2/WO[1] TCC0/WO[3] +6 | A10 | PA10 | SPI MOSI / TX2 | EIC/EXTINT[2] ADC/AIN[8] PTC/X[2] PTC/Y[8] SERCOM0/PAD[2] !SERCOM2/PAD[2] !TC2/WO[0] !TCC0/WO[2] +7 | A11 | PA11 | SPI SCK / RX2 | !EIC/EXTINT[3] ADC/AIN[9] PTC/X[3] PTC/Y[9] SERCOM0/PAD[3] !SERCOM2/PAD[3] !TC2/WO[1] !TCC0/WO[3] +8 | A14 | PA14 | SPI MISO | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[0] +9 | A15 | PA15 | Button / SPI SS | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[1] Button +10 | A16 | PA16 | LED | EIC/EXTINT[0] PTC/X[4] PTC/Y[10] !SERCOM1/PAD[2] !SERCOM2/PAD[2] TC1/WO[0] !TCC0/WO[6] LED +11 | A17 | PA17 | HOST_ENABLE | !EIC/EXTINT[1] PTC/X[5] PTC/Y[11] !SERCOM1/PAD[3] !SERCOM2/PAD[3] TC1/WO[1] !TCC0/WO[7] HOST_ENABLE +12 | A22 | PA22 | I2C/SDA w/pullup | EIC/EXTINT[6] PTC/X[6] PTC/Y[12] !SERCOM1/PAD[0] SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[4] +13 | A23 | PA23 | I2C/SCL w/pullup | !EIC/EXTINT[7] PTC/X[7] PTC/Y[13] !SERCOM1/PAD[1] SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[5] +14 | A27 | PA27 | | EIC/EXTINT[7] PTC/X[10] +15 | A30 | PA30 | TX1 / SWD CLK | !EIC/EXTINT[2] !SERCOM1/PAD[0] SERCOM1/PAD[2] TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot +16 | A31 | PA31 | RX1 / SWD IO | EIC/EXTINT[3] !SERCOM1/PAD[1] SERCOM1/PAD[3] TC2/WO[1] !TCC0/WO[3] SWD IO +============================================================================================================================================ + +* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port + pin number printed on the board is also used in Arduino (but without the 'A') for all + of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). When + using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the top + left pin (A2). PIN_MAP_COMPACT uses less RAM. +* The following Arduino pin numbers are not mapped to a physical pin: 0, 1, 8, 9, 12, 13, 18, 19, 20, 21, 24, 25, 26, 28, and 29. +* Pins 24 and 25 are in use by USB (USB_NEGATIVE and USB_POSITIVE). +* Leave pin A30 floating (or use external pullup) during reset. +* Pins 8 and 9 are by default connected to the 32.768KHz crystal. +* The tone library uses TC2. +``` + + +## Board Configuration Notes + +* **Crystals** + * Either the 32.768KHz crystal or the 16MHz crystal can be used. Be sure to set the correct solder jumpers. + * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. + +* **LED (LED_BUILTIN)** + * Bring the pin HIGH to turn the LED on. + * The LED is enabled (solder jumper) by default. + +* **Button (BUTTON_BUILTIN)** + * Pressing the button will bring the pin LOW. The pullup must be enabled first. + * If the debouncing capacitor is connected, delay reading the pin at least 6ms after turning on the pullup. + * The button is connected to the Reset pin by default, but can be connected to pin 15 via the solder jumper. + * BTN pin is shared with SPI SS, so the button must be configured as reset (default) when using SPI. + +* **GPIO** + * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. + * Each pin can source or sink a maximum of 7 mA (when PER_ATTR_DRIVE_STRONG is set for the pin, enabled by default). + * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). + +* **Analog Inputs** + * 10 pins can be configured as ADC analog inputs. + * Each pin measures from ground to 3.3 volts by default. + * Each pin provides 10 bits of resolution (1024 values) by default. + * 12-bit resolution supported by using the analogReadResolution() function. + * The upper end of the measurement range can be changed using the analogReference() function. + * A reference voltage can be connected to REF. In this case, the capacitor should be enabled via the solder jumper. + +* **DAC** + * One analog output is available on pin 2. + * Provides a 10-bit voltage output with the analogWrite() function. + +* **PWM** + * 8 pins can be configured as PWM outputs. + * Each pin provides 8 bits of resolution (256 values) by default. + * 12-bit resolution supported by using the analogWriteResolution() function. + +* **External Interrupts** + * 8 pins can be configured with external interrupts. + +* **SERCOM** + * 3 SERCOM are available. + * Up to 2 UART instances + * 1 SPI instance + * 1 WIRE (I2C) instance + * The WIRE pullup resistors are enabled by default. + + + +## PinDescription table format + +### Note that in 1.6.18-beta-b1 a new compact table format was added. +The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE +to use a more compact format that uses only 4 bytes per pin (currently only available +for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used +(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to +pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC +column. Note that external libraries that reference the PinDescription table directly (uncommon) +will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which +is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. + +### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. +MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. +If using board variant files with the old format, the new core will still read the +table the old way, losing any new features introduced by the new column. Additionally, +new definitions have been added for D51, L21, and C21 support. + +### Each pin can have multiple functions. +The PinDescription table describes how each of the pins can be used by the Arduino +core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, +communications, etc.), and the PinDescription table configures which functions can +be used for each pin. This table is mainly accessed by the pinPeripheral function in +wiring_private.c, which is used to attach a pin to a particular peripheral function. +The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), +analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to +verify that the pin can perform the function requested, and to configure the pin for +that function. Most of the contents of pinMode() are now in pinPeripheral(). + +### Pin Mapping +There are different ways that pins can be mapped. Typically, there is no relation +between the arduino pin number used, and the actual port pin designator. Thus, the +pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, +a cross reference table is needed to find the arduino pin number. However, this results +in the least amount of space used by the table. Another method, used by default by the +MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino +pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins +are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added +for pins that are used for other purposes or for pins that do not exist (especially the +D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp +from the MT-D11 variant. The Xeno combines both methods, using the actual port pin +designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then +using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be +used, leaving the other pin for some number above 31. + +**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** + +### Port +This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### Pin +This is the pin (bit) within the port. Valid values are 0-31. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetPortPin() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column +using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, +use SetPortPin(NOT_A_PORT, 0). + +### PinType +This indicates what peripheral function the pin can be attached to. In most cases, +this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute +field. It can also be set to a specific peripheral. In this case, any attempt to +configure the pin (using pinPeripheral or pinMode) as anything else will fail (and +pinPeripheral will return -1). This can be used to prevent accidental re-configuration +of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin +is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See +WVariant.h for valid entries. These entries are also used as a parameter to +pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function +now calls pinPeripheral() with the desired mode. Note that this field is not used to +select between the different peripherals possible with each of the SERCOM and TIMER +functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE +is defined, PinType is not used (the pin is treated as PIO_MULTI). + +### PeripheralAttribute +This is an 8-bit bitfield used for various peripheral configuration. It is primarily +used to select between the different peripherals possible with each of the SERCOM and +TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four +pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on +the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. +Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the +pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, +buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are +two) is also selected here. Note that the D51 adds a third timer attribute and +requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. + +### PinAttribute +This is a 32-bit bitfield used to list all of the valid peripheral functions that a +pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain +attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL +includes all of the GPIO functions, while PIN_ATTR_TIMER includes both +PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). +PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for +limiting a pin to only input related functions or output functions. This allows a pin +to have a more flexible configuration, while restricting the direction (ie: to avoid +contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### TCChannel +This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available +on multiple pins. In general, only one pin should be configured in the pinDescription +table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column +to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on +the D21). See WVariant.h for valid entries. + +### ADCChannelNumber +This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC +instances, which are selected in the PeripheralAttribute column. See WVariant.h for +valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### ExtInt +This is the interrupt (if any) assigned to the pin. Some interrupt numbers are +available on multiple pins. In general, only one pin should be configured in the +pinDescription table per interrupt number. Thus, for example, if an interrupt was +needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid +entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetExtIntADC() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined +into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, +ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). + +### GCLKCCL +This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support +the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, +L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/Generic_D11D14AM/debug_scripts/SAMD11D14AM.gdb b/variants/Generic_D11D14AM/debug_scripts/SAMD11D14AM.gdb new file mode 100644 index 000000000..2842b9322 --- /dev/null +++ b/variants/Generic_D11D14AM/debug_scripts/SAMD11D14AM.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd11d14am" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D11D14AM/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld b/variants/Generic_D11D14AM/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld new file mode 100644 index 000000000..6f9bc1576 --- /dev/null +++ b/variants/Generic_D11D14AM/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x1000, LENGTH = 0x00004000-0x1000 /* First 4KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x1000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D11D14AM/linker_scripts/gcc/No_Bootloader/flash_16KB.ld b/variants/Generic_D11D14AM/linker_scripts/gcc/No_Bootloader/flash_16KB.ld new file mode 100644 index 000000000..674a40d60 --- /dev/null +++ b/variants/Generic_D11D14AM/linker_scripts/gcc/No_Bootloader/flash_16KB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00004000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg b/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg new file mode 100644 index 000000000..b5ae3e4b1 --- /dev/null +++ b/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd11d14am +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_D21E/pins_arduino.h b/variants/Generic_D11D14AM/pins_arduino.h similarity index 97% rename from variants/Generic_D21E/pins_arduino.h rename to variants/Generic_D11D14AM/pins_arduino.h index db0e40c3d..36ab06c77 100644 --- a/variants/Generic_D21E/pins_arduino.h +++ b/variants/Generic_D11D14AM/pins_arduino.h @@ -1,21 +1,21 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// API compatibility -#include "variant.h" - +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// API compatibility +#include "variant.h" + diff --git a/variants/Generic_D11D14AM/variant.cpp b/variants/Generic_D11D14AM/variant.cpp new file mode 100644 index 000000000..68f998606 --- /dev/null +++ b/variants/Generic_D11D14AM/variant.cpp @@ -0,0 +1,243 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 26 April 2018 by Justin Mattair + * for MattairTech boards (www.mattairtech.com) + * + * See README.md for documentation and pin mapping information + */ + + +#include "variant.h" + +/* + * Pins descriptions + */ +#if defined(PIN_MAP_STANDARD) +#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) +const PinDescription g_APinDescription[]= +{ + // 0..1 pins don't exist + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + + // 2..7 - Analog capable pins (DAC available on 0) + { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel0 ) }, + { SetPortPin( PORTA, 3 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel1 ) }, + { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, + { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, + { SetPortPin( PORTA, 6 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel4 ) }, + { SetPortPin( PORTA, 7 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel5 ) }, + + // 8..9 are unused (pins in use by 32.768KHz crystal, which in turn is used by the Arduino core) + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + + // 10..11 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 9) + { SetPortPin( PORTA, 10 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel8 ) }, // SPI MOSI + { SetPortPin( PORTA, 11 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel9 ) }, // SPI SCK + + // 12..13 pins don't exist + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + + // 14..15 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 15) + { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel6 ) }, // SPI MISO + { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, // Button / SPI SS (unused) + + // 16..17 Digital functions (LED available on pin 10) + { SetPortPin( PORTA, 16 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_0, No_ADC_Channel ) }, // LED + { SetPortPin( PORTA, 17 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, + + // 18..21 pins don't exist + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + + // 22..23 SERCOM/I2C (Wire) or Digital functions + { SetPortPin( PORTA, 22 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, // SDA + { SetPortPin( PORTA, 23 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SCL + + // 24..26 are unused (25 and 26 in use by USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist) + { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM + { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + + // 27..29 Digital functions (pin 28 is Reset and pin 29 does not exist) + { SetPortPin( PORTA, 27 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_7, No_ADC_Channel ) }, + { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + + // 30..31 SERCOM/UART (Serial1) or Digital functions or Debug interface (SWD CLK and SWD IO) + { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH0, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // TX / SWD CLK + { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH1, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // RX / SWD IO +} ; +#else +const PinDescription g_APinDescription[]= +{ + // 0..1 pins don't exist + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 2..7 - Analog capable pins (DAC available on 2) + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH2, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH3, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 8..9 are unused (pins in use by 32.768KHz crystal, which in turn is used by the Arduino core) + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 10..11 - SERCOM/SPI (SPI) or Analog or Digital functions + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_2, GCLK_CCL_NONE }, // SPI MOSI + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SPI SCK + + // 12..13 pins don't exist + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 14..15 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 15) + { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // SPI MISO + { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, // Button / SPI SS (unused) + + // 16..17 Digital functions (LED available on pin 16) + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // LED + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 18..21 pins don't exist + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 22..23 SERCOM/I2C (Wire) or Digital functions + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // SDA + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SCL + + // 24..26 are unused (25 and 26 in use by USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist) + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 Digital functions (pin 28 is Reset and pin 29 does not exist) + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 SERCOM/UART (Serial1) or Digital functions or Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TX / SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // RX / SWD IO +} ; +#endif +#elif defined(PIN_MAP_COMPACT) +#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) +const PinDescription g_APinDescription[]= +{ + // 0..5 - Analog capable pins (DAC available on 0) + { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel0 ) }, + { SetPortPin( PORTA, 3 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel1 ) }, + { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, + { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, + { SetPortPin( PORTA, 6 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel4 ) }, + { SetPortPin( PORTA, 7 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel5 ) }, + + // 6..9 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 9) + { SetPortPin( PORTA, 10 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel8 ) }, // SPI MOSI + { SetPortPin( PORTA, 11 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel9 ) }, // SPI SCK + { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel6 ) }, // SPI MISO + { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, // Button / SPI SS (unused) + + // 10..11 Digital functions (LED available on pin 10) + { SetPortPin( PORTA, 16 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_0, No_ADC_Channel ) }, // LED + { SetPortPin( PORTA, 17 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, + + // 12..13 SERCOM/I2C (Wire) or Digital functions + { SetPortPin( PORTA, 22 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, // SDA + { SetPortPin( PORTA, 23 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SCL + + // 14 Digital functions + { SetPortPin( PORTA, 27 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_7, No_ADC_Channel ) }, + + // 15..16 SERCOM/UART (Serial1) or Digital functions or Debug interface (SWD CLK and SWD IO) + { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH0, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // TX / SWD CLK + { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH1, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // RX / SWD IO +} ; +#else +const PinDescription g_APinDescription[]= +{ + // 0..5 - Analog capable pins (DAC available on 0) + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH2, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH3, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 6..9 - SERCOM/SPI (SPI) or Analog or Digital functions (Button available on pin 9) + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_2, GCLK_CCL_NONE }, // SPI MOSI + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SPI SCK + { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // SPI MISO + { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, // Button / SPI SS (unused) + + // 10..11 Digital functions (LED available on pin 10) + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // LED + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 12..13 SERCOM/I2C (Wire) or Digital functions + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // SDA + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SCL + + // 14 Digital functions + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, + + // 15..16 SERCOM/UART (Serial1) or Digital functions or Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TX / SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // RX / SWD IO +} ; +#endif +#endif + +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TC1, TC2 } ; + +// Multi-serial objects instantiation +SERCOM sercom0( SERCOM0 ) ; +SERCOM sercom1( SERCOM1 ) ; +SERCOM sercom2( SERCOM2 ) ; + +#if defined(ONE_UART) || defined(TWO_UART) +Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; + +void SERCOM1_Handler() +{ + Serial1.IrqHandler(); +} +#endif + +#if defined(TWO_UART) +Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; + +void SERCOM0_Handler() +{ + Serial2.IrqHandler(); +} +#endif diff --git a/variants/Generic_D11D14AM/variant.h b/variants/Generic_D11D14AM/variant.h new file mode 100644 index 000000000..cd024d8ce --- /dev/null +++ b/variants/Generic_D11D14AM/variant.h @@ -0,0 +1,397 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 16 June 2018 by Justin Mattair (www.mattairtech.com) + * See README.md for documentation and pin mapping information + */ + +#ifndef _VARIANT_GENERIC_D11D14AM_ +#define _VARIANT_GENERIC_D11D14AM_ + +/* This variant requires the MattairTech SAM D|L|C Core for Arduino >= 1.6.18-beta-b1. + * The format is different than the stock Arduino SAMD core, + * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. + */ +#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10618 + +/*---------------------------------------------------------------------------- + * Clock Configuration + *----------------------------------------------------------------------------*/ + +/** Master clock frequency (also Fcpu frequency) */ +#define VARIANT_MCK (48000000ul) + +/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ + * must also be defined with the external crystal frequency in Hertz. + */ +#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL + +/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL + * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in + * a more accurate 48MHz output frequency at the expense of increased jitter. + */ +//#define PLL_FRACTIONAL_ENABLED + +/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal + * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being + * multiplied by the PLL. This will result in a faster lock time for the PLL, + * however, it will also result in a less accurate PLL output frequency if the + * crystal is not divisible (without remainder) by 1MHz. In this case, define + * PLL_FRACTIONAL_ENABLED as well. + */ +//#define PLL_FAST_STARTUP + +/* The fine calibration value for DFLL open-loop mode is defined here. + * The coarse calibration value is loaded from NVM OTP (factory calibration values). + */ +#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) + +/*---------------------------------------------------------------------------- + * Headers + *----------------------------------------------------------------------------*/ + +#include "WVariant.h" +#include "sam.h" +#include "../../config.h" + +#ifdef __cplusplus +#include "SERCOM.h" +#include "Uart.h" +#endif // __cplusplus + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/*---------------------------------------------------------------------------- + * Pins + *----------------------------------------------------------------------------*/ + +// Number of pins defined in PinDescription array +#define PIN_MAP_STANDARD +//#define PIN_MAP_COMPACT + +#if defined PIN_MAP_STANDARD + #define NUM_PIN_DESCRIPTION_ENTRIES (32u) +#elif defined PIN_MAP_COMPACT + #define NUM_PIN_DESCRIPTION_ENTRIES (17u) +#else + #error "variant.h: You must set PIN_MAP_STANDARD or PIN_MAP_COMPACT" +#endif + +#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES +#define NUM_DIGITAL_PINS PINS_COUNT +#define NUM_ANALOG_INPUTS (10u) +#define NUM_ANALOG_OUTPUTS (1u) +#define analogInputToDigitalPin(p) (p) + +#define digitalPinToPort(P) ( &(PORT->Group[GetPort(P)]) ) +#define digitalPinToBitMask(P) ( 1 << GetPin(P) ) + +#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) + #define digitalPinHasPWM(P) ( g_APinDescription[P].ulTCChannel != NOT_ON_TIMER ) +#else + #define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) +#endif + +//#define analogInPinToBit(P) ( ) +#define portOutputRegister(port) ( &(port->OUT.reg) ) +#define portInputRegister(port) ( &(port->IN.reg) ) +#define portModeRegister(port) ( &(port->DIR.reg) ) + +/* + * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD + * architecture. If you need to check if a pin supports PWM you must + * use digitalPinHasPWM(..). + * + * https://github.com/arduino/Arduino/issues/1833 + */ +// #define digitalPinToTimer(P) + +/* LEDs + * None of these defines are currently used by the core. + * The MT-D11 onboard LED is on pin 16. + * The RX and TX LEDs are not present. + * You may optionally add them to any free pins. + */ +#if defined PIN_MAP_STANDARD +#define PIN_LED_13 (16u) +#define PIN_LED_RXL (10u) +#define PIN_LED_TXL (11u) +#elif defined PIN_MAP_COMPACT +#define PIN_LED_13 (10u) +#define PIN_LED_RXL (6u) +#define PIN_LED_TXL (7u) +#endif + +#define PIN_LED PIN_LED_13 +#define PIN_LED2 PIN_LED_RXL +#define PIN_LED3 PIN_LED_TXL +#define LED_BUILTIN PIN_LED_13 + +/* Buttons + * Note that Button A is connected to Reset by default. + * A solder jumper can be changed to route Button A to pin 15 instead. + * Thre is a debouncing capacitor connected, so delay reading the pin + * at least 6ms after turning on the pullup to allow the capacitor to charge. + */ +#if defined PIN_MAP_STANDARD +#define BUTTON (15u) +#elif defined PIN_MAP_COMPACT +#define BUTTON (9u) +#endif + +#define BUTTON_BUILTIN BUTTON + + +/* + * Analog pins + */ +#if defined PIN_MAP_STANDARD +#define PIN_A2 (2ul) +#define PIN_A3 (3ul) +#define PIN_A4 (4ul) +#define PIN_A5 (5ul) +#define PIN_A6 (6ul) +#define PIN_A7 (7ul) +#define PIN_A10 (10ul) +#define PIN_A11 (11ul) +#define PIN_A14 (14ul) +#define PIN_A15 (15ul) +#define PIN_DAC0 (2ul) +#elif defined PIN_MAP_COMPACT +#define PIN_A2 (0ul) +#define PIN_A3 (1ul) +#define PIN_A4 (2ul) +#define PIN_A5 (3ul) +#define PIN_A6 (4ul) +#define PIN_A7 (5ul) +#define PIN_A10 (6ul) +#define PIN_A11 (7ul) +#define PIN_A14 (8ul) +#define PIN_A15 (9ul) +#define PIN_DAC0 (0ul) +#endif + +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; +static const uint8_t A10 = PIN_A10; +static const uint8_t A11 = PIN_A11; +static const uint8_t A14 = PIN_A14; +static const uint8_t A15 = PIN_A15; +static const uint8_t DAC0 = PIN_DAC0; + +#define ADC_RESOLUTION 12 + +// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 + +/* Set default analog voltage reference */ +#define VARIANT_AR_DEFAULT AR_DEFAULT + +/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ +#if defined PIN_MAP_STANDARD +#define REFA_PIN (3ul) +#define REFB_PIN (4ul) +#elif defined PIN_MAP_COMPACT +#define REFA_PIN (1ul) +#define REFB_PIN (2ul) +#endif + + +// The ATN pin may be used in the future as the first SPI chip select. +// On boards that do not have the Arduino physical form factor, it can to set to any free pin. +#if defined PIN_MAP_STANDARD +#define PIN_ATN (15ul) +#elif defined PIN_MAP_COMPACT +#define PIN_ATN (9ul) +#endif +static const uint8_t ATN = PIN_ATN; + + +/* + * Serial interfaces + */ +// Serial1 +#if defined PIN_MAP_STANDARD +#define PIN_SERIAL1_RX (31ul) +#define PIN_SERIAL1_TX (30ul) +#elif defined PIN_MAP_COMPACT +#define PIN_SERIAL1_RX (16ul) +#define PIN_SERIAL1_TX (15ul) +#endif + +#define PAD_SERIAL1_TX (UART_TX_PAD_2) +#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) +#define SERCOM_INSTANCE_SERIAL1 &sercom1 + +// Serial2 +#if defined PIN_MAP_STANDARD +#define PIN_SERIAL2_RX (11ul) +#define PIN_SERIAL2_TX (10ul) +#elif defined PIN_MAP_COMPACT +#define PIN_SERIAL2_RX (7ul) +#define PIN_SERIAL2_TX (6ul) +#endif + +#define PAD_SERIAL2_TX (UART_TX_PAD_2) +#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) +#define SERCOM_INSTANCE_SERIAL2 &sercom0 + + +/* + * SPI Interfaces + */ +#if defined(ONE_SPI) +#define SPI_INTERFACES_COUNT 1 +#else +#define SPI_INTERFACES_COUNT 0 +#endif + +#if defined PIN_MAP_STANDARD +#define PIN_SPI_MISO (14u) +#define PIN_SPI_MOSI (10u) +#define PIN_SPI_SCK (11u) +#define PIN_SPI_SS (15u) +#elif defined PIN_MAP_COMPACT +#define PIN_SPI_MISO (8u) +#define PIN_SPI_MOSI (6u) +#define PIN_SPI_SCK (7u) +#define PIN_SPI_SS (9u) +#endif + +#define PERIPH_SPI sercom0 +#define PAD_SPI_TX SPI_PAD_2_SCK_3 +#define PAD_SPI_RX SERCOM_RX_PAD_0 + +static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. +static const uint8_t MOSI = PIN_SPI_MOSI ; +static const uint8_t MISO = PIN_SPI_MISO ; +static const uint8_t SCK = PIN_SPI_SCK ; + + +/* + * Wire Interfaces + */ +#if defined(ONE_WIRE) +#define WIRE_INTERFACES_COUNT 1 +#else +#define WIRE_INTERFACES_COUNT 0 +#endif + +#if defined PIN_MAP_STANDARD +#define PIN_WIRE_SDA (22u) +#define PIN_WIRE_SCL (23u) +#elif defined PIN_MAP_COMPACT +#define PIN_WIRE_SDA (12u) +#define PIN_WIRE_SCL (13u) +#endif + +#define PERIPH_WIRE sercom2 +#define WIRE_IT_HANDLER SERCOM2_Handler + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + + +/* + * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to + * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. + */ +#if defined PIN_MAP_STANDARD +#define PIN_USB_DM (24ul) +#define PIN_USB_DP (25ul) +//#define PIN_USB_HOST_ENABLE (17ul) +#elif defined PIN_MAP_COMPACT +// USB pins not directly accessible using PIN_MAP_COMPACT +#define PIN_USB_DM (0ul) +#define PIN_USB_DP (0ul) +//#define PIN_USB_HOST_ENABLE (0ul) +#endif + +#define PIN_USB_HOST_ENABLE_VALUE HIGH + +#ifdef __cplusplus +} +#endif + + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus + +/* ========================= + * ===== SERCOM DEFINITION + * ========================= +*/ +extern SERCOM sercom0; +extern SERCOM sercom1; +extern SERCOM sercom2; + +extern Uart Serial1; +extern Uart Serial2; + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_USBVIRTUAL SerialUSB +// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). +// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. +// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. +// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get +// the USB Host debugging output. +#define SERIAL_PORT_MONITOR Serial1 +// Serial has no physical pins broken out, so it's not listed as HARDWARE port +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +// The MT-D11 does not have the EDBG support chip, which provides a USB-UART bridge +// accessible using Serial (the Arduino serial monitor is normally connected to this). +// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. +// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. +// Remember to use while(!Serial); to wait for a connection before Serial printing. + +// When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. +#if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) +#define Serial SerialUSB +#else +#define Serial Serial1 +#endif + +#endif /* _VARIANT_GENERIC_D11D14AM_ */ diff --git a/variants/Generic_D11D14AS/README.md b/variants/Generic_D11D14AS/README.md index 7ce74b90c..ead5dede5 100644 --- a/variants/Generic_D11D14AS/README.md +++ b/variants/Generic_D11D14AS/README.md @@ -1,275 +1,275 @@ -# Generic ATsamD11D14AS - -``` -===================================== ATsamD11D14AS =================================== -Other COM PWM Analog INT Arduino* Arduino* Analog INT PWM COM Other -========================================================================================= - 1------------------- - TCC01 * * 5 | A5 A4 | 4 * * TCC00 REFB - SS TCC02 * 6 | A6 A3 | 3 * REFA - MISO TCC03 * * 7 | A7 A2 | 2 * * DAC -Xin32/Xin 8 | A8 (XIN) Vdd | -Xout32/Xout 9 | A9 (XOUT) Gnd | - MOSI/TX2 * NMI 14 | A14 A25 | 25 USB D+ - SCK/RX2 TC11 * * 15 | A15 A24 | 24 USB D- - TC10 * 16 | A16 A31 | 31 * TC21 RX1 SWDIO - SDA * 22 | A22 A30 | 30 TC20 TX1 SWDCLK - SCL 23 | A23 RST/A28 | 28 BOOT - ------------------- - -* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port - pin number printed on the chip above is also used in Arduino (but without the 'A') for - all of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). - When using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the - top left pin (A5). PIN_MAP_COMPACT uses less FLASH. -* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -* Tone available on TC2. -* Leave pin A30 floating (or use external pullup) during reset. -* DO NOT connect voltages higher than 3.3V! -``` - - -## Pins descriptions for Generic ATsamD11D14AS - -### PIN_MAP_STANDARD -``` -============================================================================================================================================ -Arduino | Port | Alternate Function | Comments (! means not used with this peripheral assignment) ---------|-------|-----------------------|------------------------------------------------------------------------------------------- -0 | ---- | NOT A PIN | NOT A PIN -1 | ---- | NOT A PIN | NOT A PIN -2 | PA02 | DAC | EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT -3 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] -4 | PA04 | REFB / TCC00 | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] -5 | PA05 | TCC01 | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] -6 | PA06 | SS (unused) / TCC02 | !EIC/EXTINT[6] ADC/AIN[4] AC/AIN[2] PTC/Y[4] SERCOM0/PAD[0] !SERCOM0/PAD[2] !TC2/WO[0] TCC0/WO[2] -7 | PA07 | MISO / TCC03 | EIC/EXTINT[7] ADC/AIN[5] AC/AIN[3] PTC/Y[5] SERCOM0/PAD[1] !SERCOM0/PAD[3] !TC2/WO[1] TCC0/WO[3] -8 | PA08 | Xin32 / Xin | Xin32 -9 | PA09 | Xout32 / Xout | Xout32 -10 | ---- | NOT A PIN | NOT A PIN -11 | ---- | NOT A PIN | NOT A PIN -12 | ---- | NOT A PIN | NOT A PIN -13 | ---- | NOT A PIN | NOT A PIN -14 | PA14 | MOSI / TX2 | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[0] -15 | PA15 | SCK / RX2 / TC11 | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] TC1/WO[1] !TCC0/WO[1] -16 | PA16 | TC10 | EIC/EXTINT[0] PTC/X[4] PTC/Y[10] !SERCOM1/PAD[2] !SERCOM2/PAD[2] TC1/WO[0] !TCC0/WO[6] -17 | ---- | NOT A PIN | NOT A PIN -18 | ---- | NOT A PIN | NOT A PIN -19 | ---- | NOT A PIN | NOT A PIN -20 | ---- | NOT A PIN | NOT A PIN -21 | ---- | NOT A PIN | NOT A PIN -22 | PA22 | SDA | EIC/EXTINT[6] PTC/X[6] PTC/Y[12] !SERCOM1/PAD[0] SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[4] -23 | PA23 | SCL | !EIC/EXTINT[7] PTC/X[7] PTC/Y[13] !SERCOM1/PAD[1] SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[5] -24 | PA24 | USB_NEGATIVE | USB/DM -25 | PA25 | USB_POSITIVE | USB/DP -26 | ---- | NOT A PIN | NOT A PIN -27 | ---- | NOT A PIN | NOT A PIN -28 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) -29 | ---- | NOT A PIN | NOT A PIN -30 | PA30 | TX1 / TC20 / SWD CLK | !EIC/EXTINT[2] !SERCOM1/PAD[0] SERCOM1/PAD[2] TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot -31 | PA31 | RX1 / TC21 / SWD IO | EIC/EXTINT[3] !SERCOM1/PAD[1] SERCOM1/PAD[3] TC2/WO[1] !TCC0/WO[3] SWD IO -============================================================================================================================================ -``` - -### PIN_MAP_COMPACT -``` -============================================================================================================================================ -Arduino | Port | Alternate Function | Comments (! means not used with this peripheral assignment) ---------|-------|-----------------------|------------------------------------------------------------------------------------------- -0 | PA02 | DAC | EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT -1 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] -2 | PA04 | REFB / TCC00 | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] -3 | PA05 | TCC01 | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] -4 | PA06 | SS (unused) / TCC02 | !EIC/EXTINT[6] ADC/AIN[4] AC/AIN[2] PTC/Y[4] SERCOM0/PAD[0] !SERCOM0/PAD[2] !TC2/WO[0] TCC0/WO[2] -5 | PA07 | MISO / TCC03 | EIC/EXTINT[7] ADC/AIN[5] AC/AIN[3] PTC/Y[5] SERCOM0/PAD[1] !SERCOM0/PAD[3] !TC2/WO[1] TCC0/WO[3] -6 | PA08 | Xin32 / Xin | Xin32 -7 | PA09 | Xout32 / Xout | Xout32 -8 | PA14 | MOSI / TX2 | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[0] -9 | PA15 | SCK / RX2 / TC11 | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] TC1/WO[1] !TCC0/WO[1] -10 | PA16 | TC10 | EIC/EXTINT[0] PTC/X[4] PTC/Y[10] !SERCOM1/PAD[2] !SERCOM2/PAD[2] TC1/WO[0] !TCC0/WO[6] -11 | PA22 | SDA | EIC/EXTINT[6] PTC/X[6] PTC/Y[12] !SERCOM1/PAD[0] SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[4] -12 | PA23 | SCL | !EIC/EXTINT[7] PTC/X[7] PTC/Y[13] !SERCOM1/PAD[1] SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[5] -13 | PA24 | USB_NEGATIVE | USB/DM -14 | PA25 | USB_POSITIVE | USB/DP -15 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) -16 | PA30 | TX1 / TC20 / SWD CLK | !EIC/EXTINT[2] !SERCOM1/PAD[0] SERCOM1/PAD[2] TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot -17 | PA31 | RX1 / TC21 / SWD IO | EIC/EXTINT[3] !SERCOM1/PAD[1] SERCOM1/PAD[3] TC2/WO[1] !TCC0/WO[3] SWD IO -============================================================================================================================================ - -* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port - pin number printed on the chip above is also used in Arduino (but without the 'A') for - all of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). - When using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the - top left pin (A5). PIN_MAP_COMPACT uses less RAM. -* NOT A PIN means the Arduino pin number is not mapped to a physical pin. -* Pins 24 and 25 are in use by USB (USB_NEGATIVE and USB_POSITIVE). -* The tone library uses TC2. -* Leave pin A30 floating (or use external pullup) during reset. -``` - - -## Board Configuration Notes - -* **Crystals** - * Either a 32.768KHz crystal or a high speed crystal can be used. - * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. - -* **GPIO** - * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. - * Each pin can source or sink a maximum of 7 mA (when PER_ATTR_DRIVE_STRONG is set for the pin, enabled by default). - * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). - -* **Analog Inputs** - * 8 pins can be configured as ADC analog inputs. - * Each pin measures from ground to 3.3 volts by default. - * Each pin provides 10 bits of resolution (1024 values) by default. - * 12-bit resolution supported by using the analogReadResolution() function. - * The upper end of the measurement range can be changed using the analogReference() function. - * A reference voltage can be connected to REF. - -* **DAC** - * One analog output is available on pin 2. - * Provides a 10-bit voltage output with the analogWrite() function. - -* **PWM** - * 8 pins can be configured as PWM outputs. - * Each pin provides 8 bits of resolution (256 values) by default. - * 12-bit resolution supported by using the analogWriteResolution() function. - -* **External Interrupts** - * 8 pins can be configured with external interrupts. - -* **SERCOM** - * 3 SERCOM are available. - * Up to 2 UART instances - * 1 SPI instance - * 1 WIRE (I2C) instance - - - -## PinDescription table format - -### Note that in 1.6.18-beta-b1 a new compact table format was added. -The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE -to use a more compact format that uses only 4 bytes per pin (currently only available -for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used -(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to -pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC -column. Note that external libraries that reference the PinDescription table directly (uncommon) -will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which -is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. - -### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. -MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. -If using board variant files with the old format, the new core will still read the -table the old way, losing any new features introduced by the new column. Additionally, -new definitions have been added for D51, L21, and C21 support. - -### Each pin can have multiple functions. -The PinDescription table describes how each of the pins can be used by the Arduino -core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, -communications, etc.), and the PinDescription table configures which functions can -be used for each pin. This table is mainly accessed by the pinPeripheral function in -wiring_private.c, which is used to attach a pin to a particular peripheral function. -The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), -analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to -verify that the pin can perform the function requested, and to configure the pin for -that function. Most of the contents of pinMode() are now in pinPeripheral(). - -### Pin Mapping -There are different ways that pins can be mapped. Typically, there is no relation -between the arduino pin number used, and the actual port pin designator. Thus, the -pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, -a cross reference table is needed to find the arduino pin number. However, this results -in the least amount of space used by the table. Another method, used by default by the -MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino -pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins -are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added -for pins that are used for other purposes or for pins that do not exist (especially the -D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp -from the MT-D11 variant. The Xeno combines both methods, using the actual port pin -designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then -using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be -used, leaving the other pin for some number above 31. - -**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** - -### Port -This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### Pin -This is the pin (bit) within the port. Valid values are 0-31. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetPortPin() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column -using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, -use SetPortPin(NOT_A_PORT, 0). - -### PinType -This indicates what peripheral function the pin can be attached to. In most cases, -this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute -field. It can also be set to a specific peripheral. In this case, any attempt to -configure the pin (using pinPeripheral or pinMode) as anything else will fail (and -pinPeripheral will return -1). This can be used to prevent accidental re-configuration -of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin -is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See -WVariant.h for valid entries. These entries are also used as a parameter to -pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function -now calls pinPeripheral() with the desired mode. Note that this field is not used to -select between the different peripherals possible with each of the SERCOM and TIMER -functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE -is defined, PinType is not used (the pin is treated as PIO_MULTI). - -### PeripheralAttribute -This is an 8-bit bitfield used for various peripheral configuration. It is primarily -used to select between the different peripherals possible with each of the SERCOM and -TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four -pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on -the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. -Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the -pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, -buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are -two) is also selected here. Note that the D51 adds a third timer attribute and -requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. - -### PinAttribute -This is a 32-bit bitfield used to list all of the valid peripheral functions that a -pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain -attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL -includes all of the GPIO functions, while PIN_ATTR_TIMER includes both -PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). -PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for -limiting a pin to only input related functions or output functions. This allows a pin -to have a more flexible configuration, while restricting the direction (ie: to avoid -contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### TCChannel -This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available -on multiple pins. In general, only one pin should be configured in the pinDescription -table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column -to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on -the D21). See WVariant.h for valid entries. - -### ADCChannelNumber -This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC -instances, which are selected in the PeripheralAttribute column. See WVariant.h for -valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### ExtInt -This is the interrupt (if any) assigned to the pin. Some interrupt numbers are -available on multiple pins. In general, only one pin should be configured in the -pinDescription table per interrupt number. Thus, for example, if an interrupt was -needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid -entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetExtIntADC() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined -into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, -ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). - -### GCLKCCL -This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support -the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, -L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. +# Generic ATsamD11D14AS + +``` +===================================== ATsamD11D14AS =================================== +Other COM PWM Analog INT Arduino* Arduino* Analog INT PWM COM Other +========================================================================================= + 1------------------- + TCC01 * * 5 | A5 A4 | 4 * * TCC00 REFB + SS TCC02 * 6 | A6 A3 | 3 * REFA + MISO TCC03 * * 7 | A7 A2 | 2 * * DAC +Xin32/Xin 8 | A8 (XIN) Vdd | +Xout32/Xout 9 | A9 (XOUT) Gnd | + MOSI/TX2 * NMI 14 | A14 A25 | 25 USB D+ + SCK/RX2 TC11 * * 15 | A15 A24 | 24 USB D- + TC10 * 16 | A16 A31 | 31 * TC21 RX1 SWDIO + SDA * 22 | A22 A30 | 30 TC20 TX1 SWDCLK + SCL 23 | A23 RST/A28 | 28 BOOT + ------------------- + +* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port + pin number printed on the chip above is also used in Arduino (but without the 'A') for + all of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). + When using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the + top left pin (A5). PIN_MAP_COMPACT uses less FLASH. +* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. +* Tone available on TC2. +* Leave pin A30 floating (or use external pullup) during reset. +* DO NOT connect voltages higher than 3.3V! +``` + + +## Pins descriptions for Generic ATsamD11D14AS + +### PIN_MAP_STANDARD +``` +============================================================================================================================================ +Arduino | Port | Alternate Function | Comments (! means not used with this peripheral assignment) +--------|-------|-----------------------|------------------------------------------------------------------------------------------- +0 | ---- | NOT A PIN | NOT A PIN +1 | ---- | NOT A PIN | NOT A PIN +2 | PA02 | DAC | EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT +3 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] +4 | PA04 | REFB / TCC00 | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] +5 | PA05 | TCC01 | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] +6 | PA06 | SS (unused) / TCC02 | !EIC/EXTINT[6] ADC/AIN[4] AC/AIN[2] PTC/Y[4] SERCOM0/PAD[0] !SERCOM0/PAD[2] !TC2/WO[0] TCC0/WO[2] +7 | PA07 | MISO / TCC03 | EIC/EXTINT[7] ADC/AIN[5] AC/AIN[3] PTC/Y[5] SERCOM0/PAD[1] !SERCOM0/PAD[3] !TC2/WO[1] TCC0/WO[3] +8 | PA08 | Xin32 / Xin | Xin32 +9 | PA09 | Xout32 / Xout | Xout32 +10 | ---- | NOT A PIN | NOT A PIN +11 | ---- | NOT A PIN | NOT A PIN +12 | ---- | NOT A PIN | NOT A PIN +13 | ---- | NOT A PIN | NOT A PIN +14 | PA14 | MOSI / TX2 | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[0] +15 | PA15 | SCK / RX2 / TC11 | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] TC1/WO[1] !TCC0/WO[1] +16 | PA16 | TC10 | EIC/EXTINT[0] PTC/X[4] PTC/Y[10] !SERCOM1/PAD[2] !SERCOM2/PAD[2] TC1/WO[0] !TCC0/WO[6] +17 | ---- | NOT A PIN | NOT A PIN +18 | ---- | NOT A PIN | NOT A PIN +19 | ---- | NOT A PIN | NOT A PIN +20 | ---- | NOT A PIN | NOT A PIN +21 | ---- | NOT A PIN | NOT A PIN +22 | PA22 | SDA | EIC/EXTINT[6] PTC/X[6] PTC/Y[12] !SERCOM1/PAD[0] SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[4] +23 | PA23 | SCL | !EIC/EXTINT[7] PTC/X[7] PTC/Y[13] !SERCOM1/PAD[1] SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[5] +24 | PA24 | USB_NEGATIVE | USB/DM +25 | PA25 | USB_POSITIVE | USB/DP +26 | ---- | NOT A PIN | NOT A PIN +27 | ---- | NOT A PIN | NOT A PIN +28 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) +29 | ---- | NOT A PIN | NOT A PIN +30 | PA30 | TX1 / TC20 / SWD CLK | !EIC/EXTINT[2] !SERCOM1/PAD[0] SERCOM1/PAD[2] TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot +31 | PA31 | RX1 / TC21 / SWD IO | EIC/EXTINT[3] !SERCOM1/PAD[1] SERCOM1/PAD[3] TC2/WO[1] !TCC0/WO[3] SWD IO +============================================================================================================================================ +``` + +### PIN_MAP_COMPACT +``` +============================================================================================================================================ +Arduino | Port | Alternate Function | Comments (! means not used with this peripheral assignment) +--------|-------|-----------------------|------------------------------------------------------------------------------------------- +0 | PA02 | DAC | EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT +1 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] +2 | PA04 | REFB / TCC00 | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[2] !SERCOM0/PAD[0] !TC1/WO[0] TCC0/WO[0] +3 | PA05 | TCC01 | EIC/EXTINT[5] ADC/AIN[3] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[3] !SERCOM0/PAD[1] !TC1/WO[1] TCC0/WO[1] +4 | PA06 | SS (unused) / TCC02 | !EIC/EXTINT[6] ADC/AIN[4] AC/AIN[2] PTC/Y[4] SERCOM0/PAD[0] !SERCOM0/PAD[2] !TC2/WO[0] TCC0/WO[2] +5 | PA07 | MISO / TCC03 | EIC/EXTINT[7] ADC/AIN[5] AC/AIN[3] PTC/Y[5] SERCOM0/PAD[1] !SERCOM0/PAD[3] !TC2/WO[1] TCC0/WO[3] +6 | PA08 | Xin32 / Xin | Xin32 +7 | PA09 | Xout32 / Xout | Xout32 +8 | PA14 | MOSI / TX2 | EIC/NMI ADC/AIN[6] PTC/X[0] PTC/Y[6] SERCOM0/PAD[0] !SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[0] +9 | PA15 | SCK / RX2 / TC11 | EIC/EXTINT[1] ADC/AIN[7] PTC/X[1] PTC/Y[7] SERCOM0/PAD[1] !SERCOM2/PAD[1] TC1/WO[1] !TCC0/WO[1] +10 | PA16 | TC10 | EIC/EXTINT[0] PTC/X[4] PTC/Y[10] !SERCOM1/PAD[2] !SERCOM2/PAD[2] TC1/WO[0] !TCC0/WO[6] +11 | PA22 | SDA | EIC/EXTINT[6] PTC/X[6] PTC/Y[12] !SERCOM1/PAD[0] SERCOM2/PAD[0] !TC1/WO[0] !TCC0/WO[4] +12 | PA23 | SCL | !EIC/EXTINT[7] PTC/X[7] PTC/Y[13] !SERCOM1/PAD[1] SERCOM2/PAD[1] !TC1/WO[1] !TCC0/WO[5] +13 | PA24 | USB_NEGATIVE | USB/DM +14 | PA25 | USB_POSITIVE | USB/DP +15 | PA28 | Reset | Reset, BOOT (double tap bootloader entry) +16 | PA30 | TX1 / TC20 / SWD CLK | !EIC/EXTINT[2] !SERCOM1/PAD[0] SERCOM1/PAD[2] TC2/WO[0] !TCC0/WO[2] SWD CLK, leave floating during boot +17 | PA31 | RX1 / TC21 / SWD IO | EIC/EXTINT[3] !SERCOM1/PAD[1] SERCOM1/PAD[3] TC2/WO[1] !TCC0/WO[3] SWD IO +============================================================================================================================================ + +* Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port + pin number printed on the chip above is also used in Arduino (but without the 'A') for + all of the supported functions (ie: digitalRead(), analogRead(), analogWrite(), etc.). + When using PIN_MAP_COMPACT, the Arduino numbering is sequential starting from 0 at the + top left pin (A5). PIN_MAP_COMPACT uses less RAM. +* NOT A PIN means the Arduino pin number is not mapped to a physical pin. +* Pins 24 and 25 are in use by USB (USB_NEGATIVE and USB_POSITIVE). +* The tone library uses TC2. +* Leave pin A30 floating (or use external pullup) during reset. +``` + + +## Board Configuration Notes + +* **Crystals** + * Either a 32.768KHz crystal or a high speed crystal can be used. + * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. + +* **GPIO** + * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. + * Each pin can source or sink a maximum of 7 mA (when PER_ATTR_DRIVE_STRONG is set for the pin, enabled by default). + * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). + +* **Analog Inputs** + * 8 pins can be configured as ADC analog inputs. + * Each pin measures from ground to 3.3 volts by default. + * Each pin provides 10 bits of resolution (1024 values) by default. + * 12-bit resolution supported by using the analogReadResolution() function. + * The upper end of the measurement range can be changed using the analogReference() function. + * A reference voltage can be connected to REF. + +* **DAC** + * One analog output is available on pin 2. + * Provides a 10-bit voltage output with the analogWrite() function. + +* **PWM** + * 8 pins can be configured as PWM outputs. + * Each pin provides 8 bits of resolution (256 values) by default. + * 12-bit resolution supported by using the analogWriteResolution() function. + +* **External Interrupts** + * 8 pins can be configured with external interrupts. + +* **SERCOM** + * 3 SERCOM are available. + * Up to 2 UART instances + * 1 SPI instance + * 1 WIRE (I2C) instance + + + +## PinDescription table format + +### Note that in 1.6.18-beta-b1 a new compact table format was added. +The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE +to use a more compact format that uses only 4 bytes per pin (currently only available +for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used +(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to +pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC +column. Note that external libraries that reference the PinDescription table directly (uncommon) +will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which +is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. + +### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. +MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. +If using board variant files with the old format, the new core will still read the +table the old way, losing any new features introduced by the new column. Additionally, +new definitions have been added for D51, L21, and C21 support. + +### Each pin can have multiple functions. +The PinDescription table describes how each of the pins can be used by the Arduino +core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, +communications, etc.), and the PinDescription table configures which functions can +be used for each pin. This table is mainly accessed by the pinPeripheral function in +wiring_private.c, which is used to attach a pin to a particular peripheral function. +The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), +analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to +verify that the pin can perform the function requested, and to configure the pin for +that function. Most of the contents of pinMode() are now in pinPeripheral(). + +### Pin Mapping +There are different ways that pins can be mapped. Typically, there is no relation +between the arduino pin number used, and the actual port pin designator. Thus, the +pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, +a cross reference table is needed to find the arduino pin number. However, this results +in the least amount of space used by the table. Another method, used by default by the +MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino +pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins +are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added +for pins that are used for other purposes or for pins that do not exist (especially the +D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp +from the MT-D11 variant. The Xeno combines both methods, using the actual port pin +designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then +using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be +used, leaving the other pin for some number above 31. + +**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** + +### Port +This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### Pin +This is the pin (bit) within the port. Valid values are 0-31. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetPortPin() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column +using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, +use SetPortPin(NOT_A_PORT, 0). + +### PinType +This indicates what peripheral function the pin can be attached to. In most cases, +this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute +field. It can also be set to a specific peripheral. In this case, any attempt to +configure the pin (using pinPeripheral or pinMode) as anything else will fail (and +pinPeripheral will return -1). This can be used to prevent accidental re-configuration +of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin +is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See +WVariant.h for valid entries. These entries are also used as a parameter to +pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function +now calls pinPeripheral() with the desired mode. Note that this field is not used to +select between the different peripherals possible with each of the SERCOM and TIMER +functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE +is defined, PinType is not used (the pin is treated as PIO_MULTI). + +### PeripheralAttribute +This is an 8-bit bitfield used for various peripheral configuration. It is primarily +used to select between the different peripherals possible with each of the SERCOM and +TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four +pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on +the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. +Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the +pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, +buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are +two) is also selected here. Note that the D51 adds a third timer attribute and +requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. + +### PinAttribute +This is a 32-bit bitfield used to list all of the valid peripheral functions that a +pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain +attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL +includes all of the GPIO functions, while PIN_ATTR_TIMER includes both +PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). +PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for +limiting a pin to only input related functions or output functions. This allows a pin +to have a more flexible configuration, while restricting the direction (ie: to avoid +contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### TCChannel +This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available +on multiple pins. In general, only one pin should be configured in the pinDescription +table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column +to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on +the D21). See WVariant.h for valid entries. + +### ADCChannelNumber +This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC +instances, which are selected in the PeripheralAttribute column. See WVariant.h for +valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### ExtInt +This is the interrupt (if any) assigned to the pin. Some interrupt numbers are +available on multiple pins. In general, only one pin should be configured in the +pinDescription table per interrupt number. Thus, for example, if an interrupt was +needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid +entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetExtIntADC() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined +into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, +ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). + +### GCLKCCL +This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support +the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, +L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/Generic_D11D14AS/debug_scripts/SAMD11D14AS.gdb b/variants/Generic_D11D14AS/debug_scripts/SAMD11D14AS.gdb index 1daf3ccc2..861e5a4d5 100644 --- a/variants/Generic_D11D14AS/debug_scripts/SAMD11D14AS.gdb +++ b/variants/Generic_D11D14AS/debug_scripts/SAMD11D14AS.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd11d14as" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd11d14as" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D11D14AS/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld b/variants/Generic_D11D14AS/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld index 1e2d5f052..6f9bc1576 100644 --- a/variants/Generic_D11D14AS/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld +++ b/variants/Generic_D11D14AS/linker_scripts/gcc/4KB_Bootloader/flash_16KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x1000, LENGTH = 0x00004000-0x1000 /* First 4KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x1000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x1000, LENGTH = 0x00004000-0x1000 /* First 4KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x1000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D11D14AS/linker_scripts/gcc/No_Bootloader/flash_16KB.ld b/variants/Generic_D11D14AS/linker_scripts/gcc/No_Bootloader/flash_16KB.ld index bd135b3dd..674a40d60 100644 --- a/variants/Generic_D11D14AS/linker_scripts/gcc/No_Bootloader/flash_16KB.ld +++ b/variants/Generic_D11D14AS/linker_scripts/gcc/No_Bootloader/flash_16KB.ld @@ -1,214 +1,214 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00004000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00004000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg b/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg index 2b1d4c72f..b4d7e4ccd 100644 --- a/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg +++ b/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd11d14as -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd11d14as +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_D11D14AS/pins_arduino.h b/variants/Generic_D11D14AS/pins_arduino.h index db0e40c3d..36ab06c77 100644 --- a/variants/Generic_D11D14AS/pins_arduino.h +++ b/variants/Generic_D11D14AS/pins_arduino.h @@ -1,21 +1,21 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -// API compatibility -#include "variant.h" - +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// API compatibility +#include "variant.h" + diff --git a/variants/Generic_D11D14AS/variant.cpp b/variants/Generic_D11D14AS/variant.cpp index bbd0675de..656cae9aa 100644 --- a/variants/Generic_D11D14AS/variant.cpp +++ b/variants/Generic_D11D14AS/variant.cpp @@ -1,177 +1,177 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 9 June 2018 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - - -#include "variant.h" - -/* - * Pins descriptions - */ -#if defined PIN_MAP_STANDARD -#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) -const PinDescription g_APinDescription[]= -{ - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel0 ) }, - { SetPortPin( PORTA, 3 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel1 ) }, - { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, - { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, - { SetPortPin( PORTA, 6 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel4 ) }, - { SetPortPin( PORTA, 7 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_7, ADC_Channel5 ) }, - { SetPortPin( PORTA, 8 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, - { SetPortPin( PORTA, 9 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NMI, ADC_Channel6 ) }, - { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, - { SetPortPin( PORTA, 16 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_0, No_ADC_Channel ) }, - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 22 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, - { SetPortPin( PORTA, 23 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, - { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM - { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) - { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused - { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH0, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SWD CLK - { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH1, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // SWD IO -} ; -#else -const PinDescription g_APinDescription[]= -{ - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH2, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, ADC_Channel5, EXTERNAL_INT_7, GCLK_CCL_NONE }, - { PORTA, 8, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO -} ; -#endif -#elif defined(PIN_MAP_COMPACT) -#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) -const PinDescription g_APinDescription[]= -{ - { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel0 ) }, - { SetPortPin( PORTA, 3 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel1 ) }, - { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, - { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, - { SetPortPin( PORTA, 6 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel4 ) }, - { SetPortPin( PORTA, 7 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_7, ADC_Channel5 ) }, - { SetPortPin( PORTA, 8 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, - { SetPortPin( PORTA, 9 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, - { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NMI, ADC_Channel6 ) }, - { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, - { SetPortPin( PORTA, 16 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_0, No_ADC_Channel ) }, - { SetPortPin( PORTA, 22 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, - { SetPortPin( PORTA, 23 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, - { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM - { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP - { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) - { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH0, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SWD CLK - { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH1, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // SWD IO -} ; -#else -const PinDescription g_APinDescription[]= -{ - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, - { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, - { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH2, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, ADC_Channel5, EXTERNAL_INT_7, GCLK_CCL_NONE }, - { PORTA, 8, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 9, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO -} ; -#endif -#endif - -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TC1, TC2 } ; - -// Multi-serial objects instantiation -SERCOM sercom0( SERCOM0 ) ; -SERCOM sercom1( SERCOM1 ) ; -SERCOM sercom2( SERCOM2 ) ; - -#if defined(ONE_UART) || defined(TWO_UART) -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - -void SERCOM1_Handler() -{ - Serial1.IrqHandler(); -} -#endif - -#if defined(TWO_UART) -Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; - -void SERCOM0_Handler() -{ - Serial2.IrqHandler(); -} -#endif +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 9 June 2018 by Justin Mattair + * for MattairTech boards (www.mattairtech.com) + * + * See README.md for documentation and pin mapping information + */ + + +#include "variant.h" + +/* + * Pins descriptions + */ +#if defined PIN_MAP_STANDARD +#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) +const PinDescription g_APinDescription[]= +{ + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel0 ) }, + { SetPortPin( PORTA, 3 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel1 ) }, + { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, + { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, + { SetPortPin( PORTA, 6 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel4 ) }, + { SetPortPin( PORTA, 7 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_7, ADC_Channel5 ) }, + { SetPortPin( PORTA, 8 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, + { SetPortPin( PORTA, 9 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NMI, ADC_Channel6 ) }, + { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, + { SetPortPin( PORTA, 16 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_0, No_ADC_Channel ) }, + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 22 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, + { SetPortPin( PORTA, 23 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, + { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM + { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) + { SetPortPin( NOT_A_PORT, 0 ), PER_ATTR_NONE, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused + { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH0, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SWD CLK + { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH1, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // SWD IO +} ; +#else +const PinDescription g_APinDescription[]= +{ + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH2, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, ADC_Channel5, EXTERNAL_INT_7, GCLK_CCL_NONE }, + { PORTA, 8, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 9, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, + { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO +} ; +#endif +#elif defined(PIN_MAP_COMPACT) +#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) +const PinDescription g_APinDescription[]= +{ + { SetPortPin( PORTA, 2 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_2, ADC_Channel0 ) }, + { SetPortPin( PORTA, 3 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel1 ) }, + { SetPortPin( PORTA, 4 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH0, SetExtIntADC( EXTERNAL_INT_4, ADC_Channel2 ) }, + { SetPortPin( PORTA, 5 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), TCC0_CH1, SetExtIntADC( EXTERNAL_INT_5, ADC_Channel3 ) }, + { SetPortPin( PORTA, 6 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), TCC0_CH2, SetExtIntADC( EXTERNAL_INT_NONE, ADC_Channel4 ) }, + { SetPortPin( PORTA, 7 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), TCC0_CH3, SetExtIntADC( EXTERNAL_INT_7, ADC_Channel5 ) }, + { SetPortPin( PORTA, 8 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, + { SetPortPin( PORTA, 9 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, + { SetPortPin( PORTA, 14 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NMI, ADC_Channel6 ) }, + { SetPortPin( PORTA, 15 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), TC1_CH1, SetExtIntADC( EXTERNAL_INT_1, ADC_Channel7 ) }, + { SetPortPin( PORTA, 16 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), TC1_CH0, SetExtIntADC( EXTERNAL_INT_0, No_ADC_Channel ) }, + { SetPortPin( PORTA, 22 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_6, No_ADC_Channel ) }, + { SetPortPin( PORTA, 23 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, + { SetPortPin( PORTA, 24 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DM + { SetPortPin( PORTA, 25 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // USB/DP + { SetPortPin( PORTA, 28 ), PER_ATTR_DRIVE_STRONG, NOT_ON_TIMER, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // Unused (Reset) + { SetPortPin( PORTA, 30 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH0, SetExtIntADC( EXTERNAL_INT_NONE, No_ADC_Channel ) }, // SWD CLK + { SetPortPin( PORTA, 31 ), (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), TC2_CH1, SetExtIntADC( EXTERNAL_INT_3, No_ADC_Channel ) }, // SWD IO +} ; +#else +const PinDescription g_APinDescription[]= +{ + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH0, ADC_Channel2, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TCC0_CH1, ADC_Channel3, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH2, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, ADC_Channel5, EXTERNAL_INT_7, GCLK_CCL_NONE }, + { PORTA, 8, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 9, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, + { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_1, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused (Reset) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SWD IO +} ; +#endif +#endif + +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TC1, TC2 } ; + +// Multi-serial objects instantiation +SERCOM sercom0( SERCOM0 ) ; +SERCOM sercom1( SERCOM1 ) ; +SERCOM sercom2( SERCOM2 ) ; + +#if defined(ONE_UART) || defined(TWO_UART) +Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; + +void SERCOM1_Handler() +{ + Serial1.IrqHandler(); +} +#endif + +#if defined(TWO_UART) +Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; + +void SERCOM0_Handler() +{ + Serial2.IrqHandler(); +} +#endif diff --git a/variants/Generic_D11D14AS/variant.h b/variants/Generic_D11D14AS/variant.h index 1a2d12bb0..405b2c3e0 100644 --- a/variants/Generic_D11D14AS/variant.h +++ b/variants/Generic_D11D14AS/variant.h @@ -1,374 +1,374 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 16 June 2018 by Justin Mattair (www.mattairtech.com) - * See README.md for documentation and pin mapping information - */ - -#ifndef _VARIANT_MATTAIRTECH_D11D14AS_ -#define _VARIANT_MATTAIRTECH_D11D14AS_ - -/* This variant requires the MattairTech SAM D|L|C Core for Arduino >= 1.6.18-beta-b1. - * The format is different than the stock Arduino SAMD core, - * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. - */ -#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10618 - -/*---------------------------------------------------------------------------- - * Clock Configuration - *----------------------------------------------------------------------------*/ - -/** Master clock frequency (also Fcpu frequency) */ -#define VARIANT_MCK (48000000ul) - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" -#include "sam.h" -#include "../../config.h" - -#ifdef __cplusplus -#include "SERCOM.h" -#include "Uart.h" -#endif // __cplusplus - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/*---------------------------------------------------------------------------- - * Pins - *----------------------------------------------------------------------------*/ - -// Number of pins defined in PinDescription array -#define PIN_MAP_STANDARD -//#define PIN_MAP_COMPACT - -#if defined PIN_MAP_STANDARD - #define NUM_PIN_DESCRIPTION_ENTRIES (32u) -#elif defined PIN_MAP_COMPACT - #define NUM_PIN_DESCRIPTION_ENTRIES (18u) -#else - #error "variant.h: You must set PIN_MAP_STANDARD or PIN_MAP_COMPACT" -#endif - -#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES -#define NUM_DIGITAL_PINS PINS_COUNT -#define NUM_ANALOG_INPUTS (8u) -#define NUM_ANALOG_OUTPUTS (1u) -#define analogInputToDigitalPin(p) (p) - -#define digitalPinToPort(P) ( &(PORT->Group[GetPort(P)]) ) -#define digitalPinToBitMask(P) ( 1 << GetPin(P) ) - -#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) - #define digitalPinHasPWM(P) ( g_APinDescription[P].ulTCChannel != NOT_ON_TIMER ) -#else - #define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) -#endif - -//#define analogInPinToBit(P) ( ) -#define portOutputRegister(port) ( &(port->OUT.reg) ) -#define portInputRegister(port) ( &(port->IN.reg) ) -#define portModeRegister(port) ( &(port->DIR.reg) ) - -/* - * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD - * architecture. If you need to check if a pin supports PWM you must - * use digitalPinHasPWM(..). - * - * https://github.com/arduino/Arduino/issues/1833 - */ -// #define digitalPinToTimer(P) - -/* LEDs - * None of these defines are currently used by the core. - */ -#if defined PIN_MAP_STANDARD -#define PIN_LED_13 (16u) -#define PIN_LED_RXL (22u) -#define PIN_LED_TXL (23u) -#elif defined PIN_MAP_COMPACT -#define PIN_LED_13 (10u) -#define PIN_LED_RXL (11u) -#define PIN_LED_TXL (12u) -#endif - -#define PIN_LED PIN_LED_13 -#define PIN_LED2 PIN_LED_RXL -#define PIN_LED3 PIN_LED_TXL -#define LED_BUILTIN PIN_LED_13 - - -/* - * Analog pins - */ -#if defined PIN_MAP_STANDARD -#define PIN_A2 (2ul) -#define PIN_A3 (3ul) -#define PIN_A4 (4ul) -#define PIN_A5 (5ul) -#define PIN_A6 (6ul) -#define PIN_A7 (7ul) -#define PIN_A14 (14ul) -#define PIN_A15 (15ul) -#define PIN_DAC0 (2ul) -#elif defined PIN_MAP_COMPACT -#define PIN_A2 (0ul) -#define PIN_A3 (1ul) -#define PIN_A4 (2ul) -#define PIN_A5 (3ul) -#define PIN_A6 (4ul) -#define PIN_A7 (5ul) -#define PIN_A14 (8ul) -#define PIN_A15 (9ul) -#define PIN_DAC0 (0ul) -#endif - -static const uint8_t A2 = PIN_A2; -static const uint8_t A3 = PIN_A3; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; -static const uint8_t A6 = PIN_A6; -static const uint8_t A7 = PIN_A7; -static const uint8_t A14 = PIN_A14; -static const uint8_t A15 = PIN_A15; -static const uint8_t DAC0 = PIN_DAC0; - -#define ADC_RESOLUTION 12 - -#define REMAP_ANALOG_PIN_ID while(0) -// #define REMAP_ANALOG_PIN_ID if ( ulPin < A0 ) ulPin += A0 - -/* Set default analog voltage reference */ -#define VARIANT_AR_DEFAULT AR_DEFAULT - -/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ -#if defined PIN_MAP_STANDARD -#define REFA_PIN (3ul) -#define REFB_PIN (4ul) -#elif defined PIN_MAP_COMPACT -#define REFA_PIN (1ul) -#define REFB_PIN (2ul) -#endif - - -// The ATN pin may be used in the future as the first SPI chip select. -// On boards that do not have the Arduino physical form factor, it can to set to any free pin. -#if defined PIN_MAP_STANDARD -#define PIN_ATN (6ul) -#elif defined PIN_MAP_COMPACT -#define PIN_ATN (4ul) -#endif -static const uint8_t ATN = PIN_ATN; - - -/* - * Serial interfaces - */ -// Serial1 -#if defined PIN_MAP_STANDARD -#define PIN_SERIAL1_RX (31ul) -#define PIN_SERIAL1_TX (30ul) -#elif defined PIN_MAP_COMPACT -#define PIN_SERIAL1_RX (17ul) -#define PIN_SERIAL1_TX (16ul) -#endif - -#define PAD_SERIAL1_TX (UART_TX_PAD_2) -#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) -#define SERCOM_INSTANCE_SERIAL1 &sercom1 - -// Serial2 -#if defined PIN_MAP_STANDARD -#define PIN_SERIAL2_RX (15ul) -#define PIN_SERIAL2_TX (14ul) -#elif defined PIN_MAP_COMPACT -#define PIN_SERIAL2_RX (9ul) -#define PIN_SERIAL2_TX (8ul) -#endif - -#define PAD_SERIAL2_TX (UART_TX_PAD_0) -#define PAD_SERIAL2_RX (SERCOM_RX_PAD_1) -#define SERCOM_INSTANCE_SERIAL2 &sercom0 - - -/* - * SPI Interfaces - */ -#if defined(ONE_SPI) -#define SPI_INTERFACES_COUNT 1 -#else -#define SPI_INTERFACES_COUNT 0 -#endif - -#if defined PIN_MAP_STANDARD -#define PIN_SPI_MISO (7u) -#define PIN_SPI_MOSI (14u) -#define PIN_SPI_SCK (15u) -#define PIN_SPI_SS (6u) -#elif defined PIN_MAP_COMPACT -#define PIN_SPI_MISO (5u) -#define PIN_SPI_MOSI (8u) -#define PIN_SPI_SCK (9u) -#define PIN_SPI_SS (4u) -#endif - -#define PERIPH_SPI sercom0 -#define PAD_SPI_TX SPI_PAD_0_SCK_1 -#define PAD_SPI_RX SERCOM_RX_PAD_3 - -static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI = PIN_SPI_MOSI ; -static const uint8_t MISO = PIN_SPI_MISO ; -static const uint8_t SCK = PIN_SPI_SCK ; - - -/* - * Wire Interfaces - */ -#if defined(ONE_WIRE) -#define WIRE_INTERFACES_COUNT 1 -#else -#define WIRE_INTERFACES_COUNT 0 -#endif - -#if defined PIN_MAP_STANDARD -#define PIN_WIRE_SDA (22u) -#define PIN_WIRE_SCL (23u) -#elif defined PIN_MAP_COMPACT -#define PIN_WIRE_SDA (11u) -#define PIN_WIRE_SCL (12u) -#endif - -#define PERIPH_WIRE sercom2 -#define WIRE_IT_HANDLER SERCOM2_Handler - -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; - - -/* - * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to - * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. - */ -#if defined PIN_MAP_STANDARD -#define PIN_USB_DM (24ul) -#define PIN_USB_DP (25ul) -//#define PIN_USB_HOST_ENABLE (28ul) -#elif defined PIN_MAP_COMPACT -#define PIN_USB_DM (13ul) -#define PIN_USB_DP (14ul) -//#define PIN_USB_HOST_ENABLE (15ul) -#endif - -#define PIN_USB_HOST_ENABLE_VALUE HIGH - -#ifdef __cplusplus -} -#endif - - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#ifdef __cplusplus - -/* ========================= - * ===== SERCOM DEFINITION - * ========================= -*/ -extern SERCOM sercom0; -extern SERCOM sercom1; -extern SERCOM sercom2; - -extern Uart Serial1; -extern Uart Serial2; - -#endif - -// These serial port names are intended to allow libraries and architecture-neutral -// sketches to automatically default to the correct port name for a particular type -// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, -// the first hardware serial port whose RX/TX pins are not dedicated to another use. -// -// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor -// -// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial -// -// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library -// -// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. -// -// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX -// pins are NOT connected to anything by default. -#define SERIAL_PORT_USBVIRTUAL SerialUSB -// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). -// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. -// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. -// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get -// the USB Host debugging output. -#define SERIAL_PORT_MONITOR Serial1 -// Serial has no physical pins broken out, so it's not listed as HARDWARE port -#define SERIAL_PORT_HARDWARE Serial1 -#define SERIAL_PORT_HARDWARE_OPEN Serial1 - -// The MT-D11 does not have the EDBG support chip, which provides a USB-UART bridge -// accessible using Serial (the Arduino serial monitor is normally connected to this). -// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. -// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. -// Remember to use while(!Serial); to wait for a connection before Serial printing. - -// When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -#if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) -#define Serial SerialUSB -#else -#define Serial Serial1 -#endif - -#endif /* _VARIANT_ARDUINO_ZERO_ */ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 16 June 2018 by Justin Mattair (www.mattairtech.com) + * See README.md for documentation and pin mapping information + */ + +#ifndef _VARIANT_GENERIC_D11D14AS_ +#define _VARIANT_GENERIC_D11D14AS_ + +/* This variant requires the MattairTech SAM D|L|C Core for Arduino >= 1.6.18-beta-b1. + * The format is different than the stock Arduino SAMD core, + * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. + */ +#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10618 + +/*---------------------------------------------------------------------------- + * Clock Configuration + *----------------------------------------------------------------------------*/ + +/** Master clock frequency (also Fcpu frequency) */ +#define VARIANT_MCK (48000000ul) + +/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ + * must also be defined with the external crystal frequency in Hertz. + */ +#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL + +/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL + * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in + * a more accurate 48MHz output frequency at the expense of increased jitter. + */ +//#define PLL_FRACTIONAL_ENABLED + +/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal + * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being + * multiplied by the PLL. This will result in a faster lock time for the PLL, + * however, it will also result in a less accurate PLL output frequency if the + * crystal is not divisible (without remainder) by 1MHz. In this case, define + * PLL_FRACTIONAL_ENABLED as well. + */ +//#define PLL_FAST_STARTUP + +/* The fine calibration value for DFLL open-loop mode is defined here. + * The coarse calibration value is loaded from NVM OTP (factory calibration values). + */ +#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) + +/*---------------------------------------------------------------------------- + * Headers + *----------------------------------------------------------------------------*/ + +#include "WVariant.h" +#include "sam.h" +#include "../../config.h" + +#ifdef __cplusplus +#include "SERCOM.h" +#include "Uart.h" +#endif // __cplusplus + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/*---------------------------------------------------------------------------- + * Pins + *----------------------------------------------------------------------------*/ + +// Number of pins defined in PinDescription array +#define PIN_MAP_STANDARD +//#define PIN_MAP_COMPACT + +#if defined PIN_MAP_STANDARD + #define NUM_PIN_DESCRIPTION_ENTRIES (32u) +#elif defined PIN_MAP_COMPACT + #define NUM_PIN_DESCRIPTION_ENTRIES (18u) +#else + #error "variant.h: You must set PIN_MAP_STANDARD or PIN_MAP_COMPACT" +#endif + +#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES +#define NUM_DIGITAL_PINS PINS_COUNT +#define NUM_ANALOG_INPUTS (8u) +#define NUM_ANALOG_OUTPUTS (1u) +#define analogInputToDigitalPin(p) (p) + +#define digitalPinToPort(P) ( &(PORT->Group[GetPort(P)]) ) +#define digitalPinToBitMask(P) ( 1 << GetPin(P) ) + +#if defined(PIN_DESCRIPTION_TABLE_SIMPLE) + #define digitalPinHasPWM(P) ( g_APinDescription[P].ulTCChannel != NOT_ON_TIMER ) +#else + #define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) +#endif + +//#define analogInPinToBit(P) ( ) +#define portOutputRegister(port) ( &(port->OUT.reg) ) +#define portInputRegister(port) ( &(port->IN.reg) ) +#define portModeRegister(port) ( &(port->DIR.reg) ) + +/* + * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD + * architecture. If you need to check if a pin supports PWM you must + * use digitalPinHasPWM(..). + * + * https://github.com/arduino/Arduino/issues/1833 + */ +// #define digitalPinToTimer(P) + +/* LEDs + * None of these defines are currently used by the core. + */ +#if defined PIN_MAP_STANDARD +#define PIN_LED_13 (16u) +#define PIN_LED_RXL (22u) +#define PIN_LED_TXL (23u) +#elif defined PIN_MAP_COMPACT +#define PIN_LED_13 (10u) +#define PIN_LED_RXL (11u) +#define PIN_LED_TXL (12u) +#endif + +#define PIN_LED PIN_LED_13 +#define PIN_LED2 PIN_LED_RXL +#define PIN_LED3 PIN_LED_TXL +#define LED_BUILTIN PIN_LED_13 + + +/* + * Analog pins + */ +#if defined PIN_MAP_STANDARD +#define PIN_A2 (2ul) +#define PIN_A3 (3ul) +#define PIN_A4 (4ul) +#define PIN_A5 (5ul) +#define PIN_A6 (6ul) +#define PIN_A7 (7ul) +#define PIN_A14 (14ul) +#define PIN_A15 (15ul) +#define PIN_DAC0 (2ul) +#elif defined PIN_MAP_COMPACT +#define PIN_A2 (0ul) +#define PIN_A3 (1ul) +#define PIN_A4 (2ul) +#define PIN_A5 (3ul) +#define PIN_A6 (4ul) +#define PIN_A7 (5ul) +#define PIN_A14 (8ul) +#define PIN_A15 (9ul) +#define PIN_DAC0 (0ul) +#endif + +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; +static const uint8_t A14 = PIN_A14; +static const uint8_t A15 = PIN_A15; +static const uint8_t DAC0 = PIN_DAC0; + +#define ADC_RESOLUTION 12 + +#define REMAP_ANALOG_PIN_ID while(0) +// #define REMAP_ANALOG_PIN_ID if ( ulPin < A0 ) ulPin += A0 + +/* Set default analog voltage reference */ +#define VARIANT_AR_DEFAULT AR_DEFAULT + +/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ +#if defined PIN_MAP_STANDARD +#define REFA_PIN (3ul) +#define REFB_PIN (4ul) +#elif defined PIN_MAP_COMPACT +#define REFA_PIN (1ul) +#define REFB_PIN (2ul) +#endif + + +// The ATN pin may be used in the future as the first SPI chip select. +// On boards that do not have the Arduino physical form factor, it can to set to any free pin. +#if defined PIN_MAP_STANDARD +#define PIN_ATN (6ul) +#elif defined PIN_MAP_COMPACT +#define PIN_ATN (4ul) +#endif +static const uint8_t ATN = PIN_ATN; + + +/* + * Serial interfaces + */ +// Serial1 +#if defined PIN_MAP_STANDARD +#define PIN_SERIAL1_RX (31ul) +#define PIN_SERIAL1_TX (30ul) +#elif defined PIN_MAP_COMPACT +#define PIN_SERIAL1_RX (17ul) +#define PIN_SERIAL1_TX (16ul) +#endif + +#define PAD_SERIAL1_TX (UART_TX_PAD_2) +#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) +#define SERCOM_INSTANCE_SERIAL1 &sercom1 + +// Serial2 +#if defined PIN_MAP_STANDARD +#define PIN_SERIAL2_RX (15ul) +#define PIN_SERIAL2_TX (14ul) +#elif defined PIN_MAP_COMPACT +#define PIN_SERIAL2_RX (9ul) +#define PIN_SERIAL2_TX (8ul) +#endif + +#define PAD_SERIAL2_TX (UART_TX_PAD_0) +#define PAD_SERIAL2_RX (SERCOM_RX_PAD_1) +#define SERCOM_INSTANCE_SERIAL2 &sercom0 + + +/* + * SPI Interfaces + */ +#if defined(ONE_SPI) +#define SPI_INTERFACES_COUNT 1 +#else +#define SPI_INTERFACES_COUNT 0 +#endif + +#if defined PIN_MAP_STANDARD +#define PIN_SPI_MISO (7u) +#define PIN_SPI_MOSI (14u) +#define PIN_SPI_SCK (15u) +#define PIN_SPI_SS (6u) +#elif defined PIN_MAP_COMPACT +#define PIN_SPI_MISO (5u) +#define PIN_SPI_MOSI (8u) +#define PIN_SPI_SCK (9u) +#define PIN_SPI_SS (4u) +#endif + +#define PERIPH_SPI sercom0 +#define PAD_SPI_TX SPI_PAD_0_SCK_1 +#define PAD_SPI_RX SERCOM_RX_PAD_3 + +static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. +static const uint8_t MOSI = PIN_SPI_MOSI ; +static const uint8_t MISO = PIN_SPI_MISO ; +static const uint8_t SCK = PIN_SPI_SCK ; + + +/* + * Wire Interfaces + */ +#if defined(ONE_WIRE) +#define WIRE_INTERFACES_COUNT 1 +#else +#define WIRE_INTERFACES_COUNT 0 +#endif + +#if defined PIN_MAP_STANDARD +#define PIN_WIRE_SDA (22u) +#define PIN_WIRE_SCL (23u) +#elif defined PIN_MAP_COMPACT +#define PIN_WIRE_SDA (11u) +#define PIN_WIRE_SCL (12u) +#endif + +#define PERIPH_WIRE sercom2 +#define WIRE_IT_HANDLER SERCOM2_Handler + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + + +/* + * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to + * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. + */ +#if defined PIN_MAP_STANDARD +#define PIN_USB_DM (24ul) +#define PIN_USB_DP (25ul) +//#define PIN_USB_HOST_ENABLE (28ul) +#elif defined PIN_MAP_COMPACT +#define PIN_USB_DM (13ul) +#define PIN_USB_DP (14ul) +//#define PIN_USB_HOST_ENABLE (15ul) +#endif + +#define PIN_USB_HOST_ENABLE_VALUE HIGH + +#ifdef __cplusplus +} +#endif + + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus + +/* ========================= + * ===== SERCOM DEFINITION + * ========================= +*/ +extern SERCOM sercom0; +extern SERCOM sercom1; +extern SERCOM sercom2; + +extern Uart Serial1; +extern Uart Serial2; + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_USBVIRTUAL SerialUSB +// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). +// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. +// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. +// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get +// the USB Host debugging output. +#define SERIAL_PORT_MONITOR Serial1 +// Serial has no physical pins broken out, so it's not listed as HARDWARE port +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +// The MT-D11 does not have the EDBG support chip, which provides a USB-UART bridge +// accessible using Serial (the Arduino serial monitor is normally connected to this). +// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. +// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. +// Remember to use while(!Serial); to wait for a connection before Serial printing. + +// When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. +#if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) +#define Serial SerialUSB +#else +#define Serial Serial1 +#endif + +#endif /* _VARIANT_GENERIC_D11D14AS_ */ diff --git a/variants/Generic_D21E/README.md b/variants/Generic_x21E/README.md similarity index 98% rename from variants/Generic_D21E/README.md rename to variants/Generic_x21E/README.md index dedbea61a..5fd352d38 100644 --- a/variants/Generic_D21E/README.md +++ b/variants/Generic_x21E/README.md @@ -1,265 +1,265 @@ -# MattairTech MT-D21E (ATsamD21EXXA) - -``` -============================= MattairTech MT-D21E (ATsamD21EXXA) ======================== -Other COM PWM Analog INT Arduino* Arduino* INT PWM COM Other -========================================================================================= - ------------------- -Xin32 | A0 RST | BOOT -Xout32 | A1 NC | -DAC * 2 | A2 NC | -REFA * 3 | A3 A31 | 31 * TCC11 RX3 SWDIO* -REFB * * 4 | A4 A30 | 30 * TCC10 TX3 SWDCLK - * * 5 | A5 NC | - * 6 | A6 A28 | 28 * LED -VM * 7 | A7 A27 | 27 * BTNA - SDA1/MISO1 TCC00 * NMI 8 | A8 A23 | 23 * TC41 SS - SCL1/SS1 TCC01 * * 9 | A9 A22 | 22 * TC40 MISO - TX1 TCC02 * 10 | A10 A19 | 19 * SCK - RX1 TCC03 * 11 | A11 A18 | 18 * MOSI - TX2/MOSI1 TC30 * 14 | A14 A17 | 17 * TCC21 SCL/RX4 - RX2/SCK1 TC31 15 | A15 A16 | 16 * TCC20 SDA/TX4 - | NC NC | - | NC NC | - | Vbus 3.3V| * Button B available on 31. -USB D- TC50 | A24- _____ Vcc | -USB D+ TC51 | A25+ | | Vin | - | Gnd | USB | Gnd | - ------------------- - -* Most pins can be used for more than one function. The port pin number printed - on the board is also used in Arduino (but without the 'A') for all of the supported - functions (ie: digitalRead(), analogRead(), analogWrite(), attachInterrupt(), etc.). -* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -* Leave pin A30 floating (or use external pullup) during reset. -* DO NOT connect voltages higher than 3.3V! -* Tone available on TC5. -``` - -## Pins descriptions for the MattairTech MT-D21E -``` -============================================================================================================================================ -Arduino | Silk | Port | Alternate Function | Comments (! means not used with this peripheral assignment) ---------|-------|-------|-----------------------|------------------------------------------------------------------------------------------- -0 | A0 | PA00 | Xin32 | Xin32 -1 | A1 | PA01 | Xout32 | Xout32 -2 | A2 | PA02 | | !EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT -3 | A3 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] -4 | A4 | PA04 | REFB | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[0] !TCC0/WO[0] -5 | A5 | PA05 | | EIC/EXTINT[5] ADC/AIN[5] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[1] !TCC0/WO[1] -6 | A6 | PA06 | | !EIC/EXTINT[6] ADC/AIN[6] AC/AIN[2] PTC/Y[4] !SERCOM0/PAD[2] !TCC1/WO[0] -7 | A7 | PA07 | Voltage Divider | !EIC/EXTINT[7] ADC/AIN[7] AC/AIN[3] PTC/Y[5] !SERCOM0/PAD[3] !TCC1/WO[1] -8 | A8 | PA08 | SDA1/MISO1 | EIC/NMI ADC/AIN[16] PTC/X[0] !SERCOM0/PAD[0] SERCOM2/PAD[0] TCC0/WO[0] !TCC1/WO[2] -9 | A9 | PA09 | SCL1/SS1 | EIC/EXTINT[9] ADC/AIN[17] PTC/X[1] !SERCOM0/PAD[1] SERCOM2/PAD[1] TCC0/WO[1] !TCC1/WO[3] -10 | A10 | PA10 | TX1 | !EIC/EXTINT[10] ADC/AIN[18] PTC/X[2] SERCOM0/PAD[2] !SERCOM2/PAD[2] !TCC1/WO[0] TCC0/WO[2] -11 | A11 | PA11 | RX1 | !EIC/EXTINT[11] ADC/AIN[19] PTC/X[3] SERCOM0/PAD[3] !SERCOM2/PAD[3] !TCC1/WO[1] TCC0/WO[3] -12 | --- | ---- | NOT A PIN | NOT A PIN -13 | --- | ---- | NOT A PIN | NOT A PIN -14 | A14 | PA14 | Xin, TX2/MOSI1 | EIC/EXTINT[14] SERCOM2/PAD[2] TC3/WO[0] !TCC0/WO[4] Xin, HOST_ENABLE -15 | A15 | PA15 | Xout, RX2/SCK1 | !EIC/EXTINT[15] SERCOM2/PAD[3] TC3/WO[1] !TCC0/WO[5] Xout -16 | A16 | PA16 | SDA/TX4 w/pullup | EIC/EXTINT[0] PTC/X[4] SERCOM1/PAD[0] SERCOM3/PAD[0] TCC2/WO[0] !TCC0/WO[6] -17 | A17 | PA17 | SCL/RX4 w/pullup | EIC/EXTINT[1] PTC/X[5] SERCOM1/PAD[1] SERCOM3/PAD[1] TCC2/WO[1] !TCC0/WO[7] -18 | A18 | PA18 | SPI | EIC/EXTINT[2] PTC/X[6] !SERCOM1/PAD[2] SERCOM3/PAD[2] !TC3/WO[0] !TCC0/WO[2] -19 | A19 | PA19 | SCK | EIC/EXTINT[3] PTC/X[7] !SERCOM1/PAD[3] SERCOM3/PAD[3] !TC3/WO[1] !TCC0/WO[3] -20 | --- | ---- | NOT A PIN | NOT A PIN -21 | --- | ---- | NOT A PIN | NOT A PIN -22 | A22 | PA22 | MISO | EIC/EXTINT[6] PTC/X[10] SERCOM3/PAD[0] TC4/WO[0] !TCC0/WO[4] -23 | A23 | PA23 | SS | EIC/EXTINT[7] PTC/X[11] SERCOM3/PAD[1] TC4/WO[1] !TCC0/WO[5] -24 | A24- | PA24 | USB_NEGATIVE | USB/DM TC5/WO[0] -25 | A25+ | PA25 | USB_POSITIVE | USB/DP TC5/WO[1] -26 | --- | ---- | NOT A PIN | NOT A PIN -27 | A27 | PA27 | Button A | EIC/EXTINT[15] Button A -28 | A28 | PA28 | LED | EIC/EXTINT[8] LED -29 | --- | ---- | NOT A PIN | NOT A PIN -30 | A30 | PA30 | SWDCLK / TX3 | EIC/EXTINT[10] SERCOM1/PAD[2] TCC1/WO[0] SWD CLK, leave floating during boot -31 | A31 | PA31 | Button B / SWDIO / RX3| EIC/EXTINT[11] SERCOM1/PAD[3] TCC1/WO[1] Button B SWD IO --- | RST | ---- | | Reset, BOOT (double tap bootloader entry) -============================================================================================================================================ - -* Most pins can be used for more than one function. The port pin number printed - on the board is also used in Arduino (but without the 'A') for all of the supported - functions (ie: digitalRead(), analogRead(), analogWrite(), attachInterrupt(), etc.). -* The following Arduino pin numbers are not mapped to a physical pin: 12, 13, 20, 21, 26, and 29. -* Pins 24 and 25 are by default in use by USB (USB_NEGATIVE and USB_POSITIVE). -* TC5(D21) is available on these pins otherwise. The tone library uses TC5. -* A0 and A1 are by default connected to the 32.768KHz crystal. -* Leave pin A30 floating (or use external pullup) during reset. -``` - - -## Board Configuration Notes - -* **Crystals** - * Either the 32.768KHz crystal or the 16MHz crystal can be used. Be sure to set the correct solder jumpers. - * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. - -* **LED (LED_BUILTIN)** - * Bring the pin HIGH to turn the LED on. - * The LED is enabled (solder jumper) by default. - -* **Buttons (BUTTON_BUILTIN)** - * Button A (BTNA) is connected to pin 27 by default (BUTTON_BUILTIN). - * Button B (BTNB) is connected to the Reset pin by default, but can be connected to pin 31 via the solder jumper. - * Pressing the button will bring the pin LOW. The pullup must be enabled first. - * If the debouncing capacitor is connected, delay reading the pin at least 6ms after turning on the pullup. - -* **GPIO** - * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. - * Each pin can source or sink a maximum of 7 mA (when PER_ATTR_DRIVE_STRONG is set for the pin, enabled by default). - * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). - -* **Analog Inputs** - * 10 pins can be configured as ADC analog inputs. - * Each pin measures from ground to 3.3 volts by default. - * Each pin provides 10 bits of resolution (1024 values) by default. - * 12-bit resolution supported by using the analogReadResolution() function. - * The upper end of the measurement range can be changed using the analogReference() function. - * A reference voltage can be connected to REFA or REFB. In these cases, the capacitors should be enabled via the solder jumpers. - -* **DAC** - * One analog output is available on pin 2. - * Provides a 10-bit voltage output with the analogWrite() function. - -* **PWM** - * 12 pins can be configured as PWM outputs. - * Each pin provides 8 bits of resolution (256 values) by default. - * 12-bit resolution supported by using the analogWriteResolution() function. - -* **External Interrupts** - * 14 pins can be configured with external interrupts. - -* **SERCOM** - * 4 SERCOM are available. - * Up to 4 UART instances - * Up to 2 SPI instances - * Up to 2 WIRE (I2C) instances - * The WIRE pullup resistors are enabled by default. - - - -## PinDescription table format - -### Note that in 1.6.18-beta-b1 a new compact table format was added. -The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE -to use a more compact format that uses only 4 bytes per pin (currently only available -for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used -(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to -pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC -column. Note that external libraries that reference the PinDescription table directly (uncommon) -will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which -is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. - -### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. -MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. -If using board variant files with the old format, the new core will still read the -table the old way, losing any new features introduced by the new column. Additionally, -new definitions have been added for D51, L21, and C21 support. - -### Each pin can have multiple functions. -The PinDescription table describes how each of the pins can be used by the Arduino -core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, -communications, etc.), and the PinDescription table configures which functions can -be used for each pin. This table is mainly accessed by the pinPeripheral function in -wiring_private.c, which is used to attach a pin to a particular peripheral function. -The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), -analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to -verify that the pin can perform the function requested, and to configure the pin for -that function. Most of the contents of pinMode() are now in pinPeripheral(). - -### Pin Mapping -There are different ways that pins can be mapped. Typically, there is no relation -between the arduino pin number used, and the actual port pin designator. Thus, the -pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, -a cross reference table is needed to find the arduino pin number. However, this results -in the least amount of space used by the table. Another method, used by default by the -MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino -pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins -are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added -for pins that are used for other purposes or for pins that do not exist (especially the -D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp -from the MT-D11 variant. The Xeno combines both methods, using the actual port pin -designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then -using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be -used, leaving the other pin for some number above 31. - -**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** - -### Port -This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### Pin -This is the pin (bit) within the port. Valid values are 0-31. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetPortPin() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column -using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, -use SetPortPin(NOT_A_PORT, 0). - -### PinType -This indicates what peripheral function the pin can be attached to. In most cases, -this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute -field. It can also be set to a specific peripheral. In this case, any attempt to -configure the pin (using pinPeripheral or pinMode) as anything else will fail (and -pinPeripheral will return -1). This can be used to prevent accidental re-configuration -of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin -is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See -WVariant.h for valid entries. These entries are also used as a parameter to -pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function -now calls pinPeripheral() with the desired mode. Note that this field is not used to -select between the different peripherals possible with each of the SERCOM and TIMER -functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE -is defined, PinType is not used (the pin is treated as PIO_MULTI). - -### PeripheralAttribute -This is an 8-bit bitfield used for various peripheral configuration. It is primarily -used to select between the different peripherals possible with each of the SERCOM and -TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four -pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on -the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. -Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the -pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, -buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are -two) is also selected here. Note that the D51 adds a third timer attribute and -requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. - -### PinAttribute -This is a 32-bit bitfield used to list all of the valid peripheral functions that a -pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain -attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL -includes all of the GPIO functions, while PIN_ATTR_TIMER includes both -PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). -PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for -limiting a pin to only input related functions or output functions. This allows a pin -to have a more flexible configuration, while restricting the direction (ie: to avoid -contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### TCChannel -This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available -on multiple pins. In general, only one pin should be configured in the pinDescription -table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column -to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on -the D21). See WVariant.h for valid entries. - -### ADCChannelNumber -This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC -instances, which are selected in the PeripheralAttribute column. See WVariant.h for -valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### ExtInt -This is the interrupt (if any) assigned to the pin. Some interrupt numbers are -available on multiple pins. In general, only one pin should be configured in the -pinDescription table per interrupt number. Thus, for example, if an interrupt was -needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid -entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. - -### SetExtIntADC() -When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined -into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, -ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). - -### GCLKCCL -This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support -the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, -L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with -PIN_DESCRIPTION_TABLE_SIMPLE. +# MattairTech MT-D21E (ATsamD21EXXA) + +``` +============================= MattairTech MT-D21E (ATsamD21EXXA) ======================== +Other COM PWM Analog INT Arduino* Arduino* INT PWM COM Other +========================================================================================= + ------------------- +Xin32 | A0 RST | BOOT +Xout32 | A1 NC | +DAC * 2 | A2 NC | +REFA * 3 | A3 A31 | 31 * TCC11 RX3 SWDIO* +REFB * * 4 | A4 A30 | 30 * TCC10 TX3 SWDCLK + * * 5 | A5 NC | + * 6 | A6 A28 | 28 * LED +VM * 7 | A7 A27 | 27 * BTNA + SDA1/MISO1 TCC00 * NMI 8 | A8 A23 | 23 * TC41 SS + SCL1/SS1 TCC01 * * 9 | A9 A22 | 22 * TC40 MISO + TX1 TCC02 * 10 | A10 A19 | 19 * SCK + RX1 TCC03 * 11 | A11 A18 | 18 * MOSI + TX2/MOSI1 TC30 * 14 | A14 A17 | 17 * TCC21 SCL/RX4 + RX2/SCK1 TC31 15 | A15 A16 | 16 * TCC20 SDA/TX4 + | NC NC | + | NC NC | + | Vbus 3.3V| * Button B available on 31. +USB D- TC50 | A24- _____ Vcc | +USB D+ TC51 | A25+ | | Vin | + | Gnd | USB | Gnd | + ------------------- + +* Most pins can be used for more than one function. The port pin number printed + on the board is also used in Arduino (but without the 'A') for all of the supported + functions (ie: digitalRead(), analogRead(), analogWrite(), attachInterrupt(), etc.). +* When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. +* Leave pin A30 floating (or use external pullup) during reset. +* DO NOT connect voltages higher than 3.3V! +* Tone available on TC5. +``` + +## Pins descriptions for the MattairTech MT-D21E +``` +============================================================================================================================================ +Arduino | Silk | Port | Alternate Function | Comments (! means not used with this peripheral assignment) +--------|-------|-------|-----------------------|------------------------------------------------------------------------------------------- +0 | A0 | PA00 | Xin32 | Xin32 +1 | A1 | PA01 | Xout32 | Xout32 +2 | A2 | PA02 | | !EIC/EXTINT[2] ADC/AIN[0] PTC/Y[0] DAC/VOUT +3 | A3 | PA03 | REFA | !EIC/EXTINT[3] REF/ADC/VREFA REF/DAC/VREFA ADC/AIN[1] PTC/Y[1] +4 | A4 | PA04 | REFB | EIC/EXTINT[4] REF/ADC/VREFB ADC/AIN[4] AC/AIN[0] PTC/Y[2] !SERCOM0/PAD[0] !TCC0/WO[0] +5 | A5 | PA05 | | EIC/EXTINT[5] ADC/AIN[5] AC/AIN[1] PTC/Y[3] !SERCOM0/PAD[1] !TCC0/WO[1] +6 | A6 | PA06 | | !EIC/EXTINT[6] ADC/AIN[6] AC/AIN[2] PTC/Y[4] !SERCOM0/PAD[2] !TCC1/WO[0] +7 | A7 | PA07 | Voltage Divider | !EIC/EXTINT[7] ADC/AIN[7] AC/AIN[3] PTC/Y[5] !SERCOM0/PAD[3] !TCC1/WO[1] +8 | A8 | PA08 | SDA1/MISO1 | EIC/NMI ADC/AIN[16] PTC/X[0] !SERCOM0/PAD[0] SERCOM2/PAD[0] TCC0/WO[0] !TCC1/WO[2] +9 | A9 | PA09 | SCL1/SS1 | EIC/EXTINT[9] ADC/AIN[17] PTC/X[1] !SERCOM0/PAD[1] SERCOM2/PAD[1] TCC0/WO[1] !TCC1/WO[3] +10 | A10 | PA10 | TX1 | !EIC/EXTINT[10] ADC/AIN[18] PTC/X[2] SERCOM0/PAD[2] !SERCOM2/PAD[2] !TCC1/WO[0] TCC0/WO[2] +11 | A11 | PA11 | RX1 | !EIC/EXTINT[11] ADC/AIN[19] PTC/X[3] SERCOM0/PAD[3] !SERCOM2/PAD[3] !TCC1/WO[1] TCC0/WO[3] +12 | --- | ---- | NOT A PIN | NOT A PIN +13 | --- | ---- | NOT A PIN | NOT A PIN +14 | A14 | PA14 | Xin, TX2/MOSI1 | EIC/EXTINT[14] SERCOM2/PAD[2] TC3/WO[0] !TCC0/WO[4] Xin, HOST_ENABLE +15 | A15 | PA15 | Xout, RX2/SCK1 | !EIC/EXTINT[15] SERCOM2/PAD[3] TC3/WO[1] !TCC0/WO[5] Xout +16 | A16 | PA16 | SDA/TX4 w/pullup | EIC/EXTINT[0] PTC/X[4] SERCOM1/PAD[0] SERCOM3/PAD[0] TCC2/WO[0] !TCC0/WO[6] +17 | A17 | PA17 | SCL/RX4 w/pullup | EIC/EXTINT[1] PTC/X[5] SERCOM1/PAD[1] SERCOM3/PAD[1] TCC2/WO[1] !TCC0/WO[7] +18 | A18 | PA18 | SPI | EIC/EXTINT[2] PTC/X[6] !SERCOM1/PAD[2] SERCOM3/PAD[2] !TC3/WO[0] !TCC0/WO[2] +19 | A19 | PA19 | SCK | EIC/EXTINT[3] PTC/X[7] !SERCOM1/PAD[3] SERCOM3/PAD[3] !TC3/WO[1] !TCC0/WO[3] +20 | --- | ---- | NOT A PIN | NOT A PIN +21 | --- | ---- | NOT A PIN | NOT A PIN +22 | A22 | PA22 | MISO | EIC/EXTINT[6] PTC/X[10] SERCOM3/PAD[0] TC4/WO[0] !TCC0/WO[4] +23 | A23 | PA23 | SS | EIC/EXTINT[7] PTC/X[11] SERCOM3/PAD[1] TC4/WO[1] !TCC0/WO[5] +24 | A24- | PA24 | USB_NEGATIVE | USB/DM TC5/WO[0] +25 | A25+ | PA25 | USB_POSITIVE | USB/DP TC5/WO[1] +26 | --- | ---- | NOT A PIN | NOT A PIN +27 | A27 | PA27 | Button A | EIC/EXTINT[15] Button A +28 | A28 | PA28 | LED | EIC/EXTINT[8] LED +29 | --- | ---- | NOT A PIN | NOT A PIN +30 | A30 | PA30 | SWDCLK / TX3 | EIC/EXTINT[10] SERCOM1/PAD[2] TCC1/WO[0] SWD CLK, leave floating during boot +31 | A31 | PA31 | Button B / SWDIO / RX3| EIC/EXTINT[11] SERCOM1/PAD[3] TCC1/WO[1] Button B SWD IO +-- | RST | ---- | | Reset, BOOT (double tap bootloader entry) +============================================================================================================================================ + +* Most pins can be used for more than one function. The port pin number printed + on the board is also used in Arduino (but without the 'A') for all of the supported + functions (ie: digitalRead(), analogRead(), analogWrite(), attachInterrupt(), etc.). +* The following Arduino pin numbers are not mapped to a physical pin: 12, 13, 20, 21, 26, and 29. +* Pins 24 and 25 are by default in use by USB (USB_NEGATIVE and USB_POSITIVE). +* TC5(D21) is available on these pins otherwise. The tone library uses TC5. +* A0 and A1 are by default connected to the 32.768KHz crystal. +* Leave pin A30 floating (or use external pullup) during reset. +``` + + +## Board Configuration Notes + +* **Crystals** + * Either the 32.768KHz crystal or the 16MHz crystal can be used. Be sure to set the correct solder jumpers. + * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. + +* **LED (LED_BUILTIN)** + * Bring the pin HIGH to turn the LED on. + * The LED is enabled (solder jumper) by default. + +* **Buttons (BUTTON_BUILTIN)** + * Button A (BTNA) is connected to pin 27 by default (BUTTON_BUILTIN). + * Button B (BTNB) is connected to the Reset pin by default, but can be connected to pin 31 via the solder jumper. + * Pressing the button will bring the pin LOW. The pullup must be enabled first. + * If the debouncing capacitor is connected, delay reading the pin at least 6ms after turning on the pullup. + +* **GPIO** + * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. + * Each pin can source or sink a maximum of 7 mA (when PER_ATTR_DRIVE_STRONG is set for the pin, enabled by default). + * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). + +* **Analog Inputs** + * 10 pins can be configured as ADC analog inputs. + * Each pin measures from ground to 3.3 volts by default. + * Each pin provides 10 bits of resolution (1024 values) by default. + * 12-bit resolution supported by using the analogReadResolution() function. + * The upper end of the measurement range can be changed using the analogReference() function. + * A reference voltage can be connected to REFA or REFB. In these cases, the capacitors should be enabled via the solder jumpers. + +* **DAC** + * One analog output is available on pin 2. + * Provides a 10-bit voltage output with the analogWrite() function. + +* **PWM** + * 12 pins can be configured as PWM outputs. + * Each pin provides 8 bits of resolution (256 values) by default. + * 12-bit resolution supported by using the analogWriteResolution() function. + +* **External Interrupts** + * 14 pins can be configured with external interrupts. + +* **SERCOM** + * 4 SERCOM are available. + * Up to 4 UART instances + * Up to 2 SPI instances + * Up to 2 WIRE (I2C) instances + * The WIRE pullup resistors are enabled by default. + + + +## PinDescription table format + +### Note that in 1.6.18-beta-b1 a new compact table format was added. +The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE +to use a more compact format that uses only 4 bytes per pin (currently only available +for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used +(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to +pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC +column. Note that external libraries that reference the PinDescription table directly (uncommon) +will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which +is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. + +### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. +MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. +If using board variant files with the old format, the new core will still read the +table the old way, losing any new features introduced by the new column. Additionally, +new definitions have been added for D51, L21, and C21 support. + +### Each pin can have multiple functions. +The PinDescription table describes how each of the pins can be used by the Arduino +core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, +communications, etc.), and the PinDescription table configures which functions can +be used for each pin. This table is mainly accessed by the pinPeripheral function in +wiring_private.c, which is used to attach a pin to a particular peripheral function. +The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), +analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to +verify that the pin can perform the function requested, and to configure the pin for +that function. Most of the contents of pinMode() are now in pinPeripheral(). + +### Pin Mapping +There are different ways that pins can be mapped. Typically, there is no relation +between the arduino pin number used, and the actual port pin designator. Thus, the +pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, +a cross reference table is needed to find the arduino pin number. However, this results +in the least amount of space used by the table. Another method, used by default by the +MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino +pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins +are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added +for pins that are used for other purposes or for pins that do not exist (especially the +D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp +from the MT-D11 variant. The Xeno combines both methods, using the actual port pin +designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then +using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be +used, leaving the other pin for some number above 31. + +**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** + +### Port +This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### Pin +This is the pin (bit) within the port. Valid values are 0-31. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetPortPin() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column +using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, +use SetPortPin(NOT_A_PORT, 0). + +### PinType +This indicates what peripheral function the pin can be attached to. In most cases, +this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute +field. It can also be set to a specific peripheral. In this case, any attempt to +configure the pin (using pinPeripheral or pinMode) as anything else will fail (and +pinPeripheral will return -1). This can be used to prevent accidental re-configuration +of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin +is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See +WVariant.h for valid entries. These entries are also used as a parameter to +pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function +now calls pinPeripheral() with the desired mode. Note that this field is not used to +select between the different peripherals possible with each of the SERCOM and TIMER +functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE +is defined, PinType is not used (the pin is treated as PIO_MULTI). + +### PeripheralAttribute +This is an 8-bit bitfield used for various peripheral configuration. It is primarily +used to select between the different peripherals possible with each of the SERCOM and +TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four +pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on +the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. +Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the +pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, +buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are +two) is also selected here. Note that the D51 adds a third timer attribute and +requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. + +### PinAttribute +This is a 32-bit bitfield used to list all of the valid peripheral functions that a +pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain +attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL +includes all of the GPIO functions, while PIN_ATTR_TIMER includes both +PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). +PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for +limiting a pin to only input related functions or output functions. This allows a pin +to have a more flexible configuration, while restricting the direction (ie: to avoid +contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### TCChannel +This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available +on multiple pins. In general, only one pin should be configured in the pinDescription +table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column +to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on +the D21). See WVariant.h for valid entries. + +### ADCChannelNumber +This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC +instances, which are selected in the PeripheralAttribute column. See WVariant.h for +valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### ExtInt +This is the interrupt (if any) assigned to the pin. Some interrupt numbers are +available on multiple pins. In general, only one pin should be configured in the +pinDescription table per interrupt number. Thus, for example, if an interrupt was +needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid +entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetExtIntADC() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined +into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, +ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). + +### GCLKCCL +This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support +the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, +L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/Generic_D21E/debug_scripts/SAMC21E15A.gdb b/variants/Generic_x21E/debug_scripts/SAMC21E15A.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAMC21E15A.gdb rename to variants/Generic_x21E/debug_scripts/SAMC21E15A.gdb index 070351956..654279ee6 100644 --- a/variants/Generic_D21E/debug_scripts/SAMC21E15A.gdb +++ b/variants/Generic_x21E/debug_scripts/SAMC21E15A.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e15" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e15" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAMC21E16A.gdb b/variants/Generic_x21E/debug_scripts/SAMC21E16A.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAMC21E16A.gdb rename to variants/Generic_x21E/debug_scripts/SAMC21E16A.gdb index acabddd1d..aba6fc528 100644 --- a/variants/Generic_D21E/debug_scripts/SAMC21E16A.gdb +++ b/variants/Generic_x21E/debug_scripts/SAMC21E16A.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e16" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e16" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAMC21E17A.gdb b/variants/Generic_x21E/debug_scripts/SAMC21E17A.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAMC21E17A.gdb rename to variants/Generic_x21E/debug_scripts/SAMC21E17A.gdb index 4ae2dd669..506ebf41b 100644 --- a/variants/Generic_D21E/debug_scripts/SAMC21E17A.gdb +++ b/variants/Generic_x21E/debug_scripts/SAMC21E17A.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e17" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e17" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAMC21E18A.gdb b/variants/Generic_x21E/debug_scripts/SAMC21E18A.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAMC21E18A.gdb rename to variants/Generic_x21E/debug_scripts/SAMC21E18A.gdb index 2ca3b2cdc..ce6f69e30 100644 --- a/variants/Generic_D21E/debug_scripts/SAMC21E18A.gdb +++ b/variants/Generic_x21E/debug_scripts/SAMC21E18A.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e18" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21e18" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAMD21E15A.gdb b/variants/Generic_x21E/debug_scripts/SAMD21E15A.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAMD21E15A.gdb rename to variants/Generic_x21E/debug_scripts/SAMD21E15A.gdb index 4ae3c04f0..b76e47337 100644 --- a/variants/Generic_D21E/debug_scripts/SAMD21E15A.gdb +++ b/variants/Generic_x21E/debug_scripts/SAMD21E15A.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e15" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e15" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAMD21E16A.gdb b/variants/Generic_x21E/debug_scripts/SAMD21E16A.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAMD21E16A.gdb rename to variants/Generic_x21E/debug_scripts/SAMD21E16A.gdb index eb114b493..ddbcf4f0f 100644 --- a/variants/Generic_D21E/debug_scripts/SAMD21E16A.gdb +++ b/variants/Generic_x21E/debug_scripts/SAMD21E16A.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e16" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e16" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAMD21E17A.gdb b/variants/Generic_x21E/debug_scripts/SAMD21E17A.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAMD21E17A.gdb rename to variants/Generic_x21E/debug_scripts/SAMD21E17A.gdb index cb1c7c44e..f85cbcfa7 100644 --- a/variants/Generic_D21E/debug_scripts/SAMD21E17A.gdb +++ b/variants/Generic_x21E/debug_scripts/SAMD21E17A.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e17" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e17" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAMD21E18A.gdb b/variants/Generic_x21E/debug_scripts/SAMD21E18A.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAMD21E18A.gdb rename to variants/Generic_x21E/debug_scripts/SAMD21E18A.gdb index 13ee2a173..2ab8bf457 100644 --- a/variants/Generic_D21E/debug_scripts/SAMD21E18A.gdb +++ b/variants/Generic_x21E/debug_scripts/SAMD21E18A.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21e18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAML21E15B.gdb b/variants/Generic_x21E/debug_scripts/SAML21E15B.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAML21E15B.gdb rename to variants/Generic_x21E/debug_scripts/SAML21E15B.gdb index f4cdf835f..fc1b4efcd 100644 --- a/variants/Generic_D21E/debug_scripts/SAML21E15B.gdb +++ b/variants/Generic_x21E/debug_scripts/SAML21E15B.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e15" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e15" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAML21E16B.gdb b/variants/Generic_x21E/debug_scripts/SAML21E16B.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAML21E16B.gdb rename to variants/Generic_x21E/debug_scripts/SAML21E16B.gdb index 50e424551..bab326bf4 100644 --- a/variants/Generic_D21E/debug_scripts/SAML21E16B.gdb +++ b/variants/Generic_x21E/debug_scripts/SAML21E16B.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e16" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e16" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAML21E17B.gdb b/variants/Generic_x21E/debug_scripts/SAML21E17B.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAML21E17B.gdb rename to variants/Generic_x21E/debug_scripts/SAML21E17B.gdb index 29323011f..51d5a47d0 100644 --- a/variants/Generic_D21E/debug_scripts/SAML21E17B.gdb +++ b/variants/Generic_x21E/debug_scripts/SAML21E17B.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e17" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e17" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/debug_scripts/SAML21E18B.gdb b/variants/Generic_x21E/debug_scripts/SAML21E18B.gdb similarity index 97% rename from variants/Generic_D21E/debug_scripts/SAML21E18B.gdb rename to variants/Generic_x21E/debug_scripts/SAML21E18B.gdb index b48a48445..77d302ab3 100644 --- a/variants/Generic_D21E/debug_scripts/SAML21E18B.gdb +++ b/variants/Generic_x21E/debug_scripts/SAML21E18B.gdb @@ -1,31 +1,31 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -# Define 'reset' command -define reset - -info reg - -break main - -# End of 'reset' command -end - -target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e18" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21e18" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld b/variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld rename to variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld index c541d8cd0..90d7f473d 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld +++ b/variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00020000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00020000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld b/variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld rename to variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld index a0b9f951f..74b6b298c 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld +++ b/variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld b/variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld rename to variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld index 5d8d047a9..9030f5437 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld +++ b/variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00008000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00008000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld b/variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld rename to variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld index 3f7223790..3f276ac1d 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld +++ b/variants/Generic_x21E/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00010000-0x4000 /* First 16KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x4000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00010000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld b/variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld rename to variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld index 07940acbd..4b2f64bca 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld +++ b/variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00020000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00020000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld b/variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld rename to variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld index 39944cffc..060e5acc5 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld +++ b/variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld b/variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld rename to variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld index 0d3aaf7a9..f60a390ee 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld +++ b/variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00008000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00008000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld b/variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld rename to variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld index 1c36f57e1..3b999367f 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld +++ b/variants/Generic_x21E/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld @@ -1,217 +1,217 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00010000-0x2000 /* First 8KB used by bootloader */ - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.sketch_boot)) - - . = ALIGN(0x2000); - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00010000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld b/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld new file mode 100644 index 000000000..eeb603e40 --- /dev/null +++ b/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld @@ -0,0 +1,215 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00020000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld b/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld new file mode 100644 index 000000000..a40ea2767 --- /dev/null +++ b/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld @@ -0,0 +1,215 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld b/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld new file mode 100644 index 000000000..fb87bcc75 --- /dev/null +++ b/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld @@ -0,0 +1,215 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld b/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld new file mode 100644 index 000000000..cecbe42f8 --- /dev/null +++ b/variants/Generic_x21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld @@ -0,0 +1,215 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/openocd_scripts/SAMC21E15A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAMC21E15A.cfg rename to variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg index b6b72ccda..cf2cb9240 100644 --- a/variants/Generic_D21E/openocd_scripts/SAMC21E15A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21e15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21e15 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAMC21E16A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAMC21E16A.cfg rename to variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg index 613b357da..912dcafec 100644 --- a/variants/Generic_D21E/openocd_scripts/SAMC21E16A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21e16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21e16 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAMC21E17A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAMC21E17A.cfg rename to variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg index c687b08f0..f2820ad5f 100644 --- a/variants/Generic_D21E/openocd_scripts/SAMC21E17A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21e17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21e17 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAMC21E18A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAMC21E18A.cfg rename to variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg index b87fb0116..472f4a01e 100644 --- a/variants/Generic_D21E/openocd_scripts/SAMC21E18A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samc21e18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samcXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21e18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAMD21E15A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAMD21E15A.cfg rename to variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg index 0355cc401..18bc87761 100644 --- a/variants/Generic_D21E/openocd_scripts/SAMD21E15A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21e15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21e15 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAMD21E16A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAMD21E16A.cfg rename to variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg index 4eaf7acfc..73b23ab66 100644 --- a/variants/Generic_D21E/openocd_scripts/SAMD21E16A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21e16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21e16 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAMD21E17A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAMD21E17A.cfg rename to variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg index 6b5641483..0d6dc227b 100644 --- a/variants/Generic_D21E/openocd_scripts/SAMD21E17A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21e17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21e17 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAMD21E18A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAMD21E18A.cfg rename to variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg index b99d610ef..d8c4945b0 100644 --- a/variants/Generic_D21E/openocd_scripts/SAMD21E18A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91samd21e18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samdXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21e18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAML21E15B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAML21E15B.cfg rename to variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg index 82fbb0650..cee3c424f 100644 --- a/variants/Generic_D21E/openocd_scripts/SAML21E15B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21e15 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21e15 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAML21E16B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAML21E16B.cfg rename to variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg index c74f6102a..55ecc9013 100644 --- a/variants/Generic_D21E/openocd_scripts/SAML21E16B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21e16 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21e16 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAML21E17B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAML21E17B.cfg rename to variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg index 3b844e436..6597381e9 100644 --- a/variants/Generic_D21E/openocd_scripts/SAML21E17B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21e17 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21e17 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_D21E/openocd_scripts/SAML21E18B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg similarity index 97% rename from variants/Generic_D21E/openocd_scripts/SAML21E18B.cfg rename to variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg index 4e7a27fde..c8035b01e 100644 --- a/variants/Generic_D21E/openocd_scripts/SAML21E18B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg @@ -1,30 +1,30 @@ -# -# Arduino Zero OpenOCD script. -# -# Copyright (c) 2014-2015 Arduino LLC. All right reserved. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -# - -source [find interface/cmsis-dap.cfg] - -# chip name -set CHIPNAME at91saml21e18 -set ENDIAN little - -# choose a port here -set telnet_port 0 - -source [find target/at91samlXX.cfg] +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21e18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_x21E/pins_arduino.h b/variants/Generic_x21E/pins_arduino.h new file mode 100644 index 000000000..36ab06c77 --- /dev/null +++ b/variants/Generic_x21E/pins_arduino.h @@ -0,0 +1,21 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// API compatibility +#include "variant.h" + diff --git a/variants/Generic_D21E/variant.cpp b/variants/Generic_x21E/variant.cpp similarity index 98% rename from variants/Generic_D21E/variant.cpp rename to variants/Generic_x21E/variant.cpp index d360c87bd..2e628123d 100644 --- a/variants/Generic_D21E/variant.cpp +++ b/variants/Generic_x21E/variant.cpp @@ -1,134 +1,134 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 9 December 2016 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - - -#include "variant.h" - -/* - * Pins descriptions - */ -const PinDescription g_APinDescription[]= -{ - // 0..1 are unused by default (pins in use by 32.768KHz crystal, which is used by the Arduino core) - { PORTA, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - { PORTA, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, - - // 2..9 - Analog capable pins (DAC available on 2) - { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[0] / DAC - { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[1] - { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_4, GCLK_CCL_NONE }, // ADC/AIN[4] - { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_5, GCLK_CCL_NONE }, // ADC/AIN[5] - { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[6] - { PORTA, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[7] - { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH0, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // TCC0/WO[0] - { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH1, ADC_Channel17, EXTERNAL_INT_9, GCLK_CCL_NONE }, // TCC0/WO[1] - - // 10..11 - SERCOM/UART (Serial1) or Analog or Digital functions - { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TCC0_CH2, ADC_Channel18, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TX: SERCOM0/PAD[2] - { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TCC0_CH3, ADC_Channel19, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // RX: SERCOM0/PAD[3] - - // 12..13 pins don't exist - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 14..15 - SERCOM/UART (Serial2) or Digital functions - { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, // TC3/WO[0], HOST_ENABLE - { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TC3/WO[1], ATN - - // 16..17 SERCOM/I2C (Wire) or Serial4 or Digital functions -#if defined(FOUR_UART) - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // TX4: SERCOM3/PAD[0] - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // RX4: SERCOM3/PAD[1] -#else - { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // SDA: SERCOM1/PAD[0] - { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // SCL: SERCOM1/PAD[1] -#endif - - // 18..23 - SERCOM/SPI (SPI) or Digital functions (pins 20..21 do not exist) - { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, // SPI MOSI: SERCOM3/PAD[2] (PIN_ATTR_SERCOM_ALT) - { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SPI SCK: SERCOM3/PAD[3] (PIN_ATTR_SERCOM_ALT) - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // SPI MISO: SERCOM3/PAD[0] - { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // SPI SS: SERCOM3/PAD[1] - - // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist - { PORTA, 24, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM - { PORTA, 25, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 27..29 Button A and LED (pin 29 does not exist) - { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, // Button A - { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_8, GCLK_CCL_NONE }, // LED - { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused - - // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) - { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH0, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, // TCC1/WO[0] / SWD CLK / TX3 - { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH1, No_ADC_Channel, EXTERNAL_INT_11, GCLK_CCL_NONE }, // TCC1/WO[1] / SWD IO / RX3 -} ; - -const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ; - -// Multi-serial objects instantiation -SERCOM sercom0( SERCOM0 ) ; -SERCOM sercom1( SERCOM1 ) ; -SERCOM sercom2( SERCOM2 ) ; -SERCOM sercom3( SERCOM3 ) ; - -#if defined(ONE_UART) || defined(TWO_UART) || defined(THREE_UART) || defined(FOUR_UART) -Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; - -void SERCOM0_Handler() -{ - Serial1.IrqHandler(); -} -#endif - -#if defined(TWO_UART) || defined(THREE_UART) || defined(FOUR_UART) -Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; - -void SERCOM2_Handler() -{ - Serial2.IrqHandler(); -} -#endif - -#if defined(THREE_UART) || defined(FOUR_UART) -Uart Serial3( SERCOM_INSTANCE_SERIAL3, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX ) ; - -void SERCOM1_Handler() -{ - Serial3.IrqHandler(); -} -#endif - -#if defined(FOUR_UART) -Uart Serial4( SERCOM_INSTANCE_SERIAL4, PIN_SERIAL4_RX, PIN_SERIAL4_TX, PAD_SERIAL4_RX, PAD_SERIAL4_TX ) ; - -void SERCOM3_Handler() -{ - Serial4.IrqHandler(); -} -#endif +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 9 December 2016 by Justin Mattair + * for MattairTech boards (www.mattairtech.com) + * + * See README.md for documentation and pin mapping information + */ + + +#include "variant.h" + +/* + * Pins descriptions + */ +const PinDescription g_APinDescription[]= +{ + // 0..1 are unused by default (pins in use by 32.768KHz crystal, which is used by the Arduino core) + { PORTA, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 2..9 - Analog capable pins (DAC available on 2) + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[0] / DAC + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[1] + { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_4, GCLK_CCL_NONE }, // ADC/AIN[4] + { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_5, GCLK_CCL_NONE }, // ADC/AIN[5] + { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[6] + { PORTA, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // ADC/AIN[7] + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH0, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // TCC0/WO[0] + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH1, ADC_Channel17, EXTERNAL_INT_9, GCLK_CCL_NONE }, // TCC0/WO[1] + + // 10..11 - SERCOM/UART (Serial1) or Analog or Digital functions + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TCC0_CH2, ADC_Channel18, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TX: SERCOM0/PAD[2] + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TCC0_CH3, ADC_Channel19, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // RX: SERCOM0/PAD[3] + + // 12..13 pins don't exist + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 14..15 - SERCOM/UART (Serial2) or Digital functions + { PORTA, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, // TC3/WO[0], HOST_ENABLE + { PORTA, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // TC3/WO[1], ATN + + // 16..17 SERCOM/I2C (Wire) or Serial4 or Digital functions +#if defined(FOUR_UART) + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // TX4: SERCOM3/PAD[0] + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // RX4: SERCOM3/PAD[1] +#else + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // SDA: SERCOM1/PAD[0] + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // SCL: SERCOM1/PAD[1] +#endif + + // 18..23 - SERCOM/SPI (SPI) or Digital functions (pins 20..21 do not exist) + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, // SPI MOSI: SERCOM3/PAD[2] (PIN_ATTR_SERCOM_ALT) + { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, // SPI SCK: SERCOM3/PAD[3] (PIN_ATTR_SERCOM_ALT) + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // SPI MISO: SERCOM3/PAD[0] + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // SPI SS: SERCOM3/PAD[1] + + // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist + { PORTA, 24, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 Button A and LED (pin 29 does not exist) + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, // Button A + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_8, GCLK_CCL_NONE }, // LED + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH0, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, // TCC1/WO[0] / SWD CLK / TX3 + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH1, No_ADC_Channel, EXTERNAL_INT_11, GCLK_CCL_NONE }, // TCC1/WO[1] / SWD IO / RX3 +} ; + +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ; + +// Multi-serial objects instantiation +SERCOM sercom0( SERCOM0 ) ; +SERCOM sercom1( SERCOM1 ) ; +SERCOM sercom2( SERCOM2 ) ; +SERCOM sercom3( SERCOM3 ) ; + +#if defined(ONE_UART) || defined(TWO_UART) || defined(THREE_UART) || defined(FOUR_UART) +Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; + +void SERCOM0_Handler() +{ + Serial1.IrqHandler(); +} +#endif + +#if defined(TWO_UART) || defined(THREE_UART) || defined(FOUR_UART) +Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; + +void SERCOM2_Handler() +{ + Serial2.IrqHandler(); +} +#endif + +#if defined(THREE_UART) || defined(FOUR_UART) +Uart Serial3( SERCOM_INSTANCE_SERIAL3, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX ) ; + +void SERCOM1_Handler() +{ + Serial3.IrqHandler(); +} +#endif + +#if defined(FOUR_UART) +Uart Serial4( SERCOM_INSTANCE_SERIAL4, PIN_SERIAL4_RX, PIN_SERIAL4_TX, PAD_SERIAL4_RX, PAD_SERIAL4_TX ) ; + +void SERCOM3_Handler() +{ + Serial4.IrqHandler(); +} +#endif diff --git a/variants/Generic_D21E/variant.h b/variants/Generic_x21E/variant.h similarity index 96% rename from variants/Generic_D21E/variant.h rename to variants/Generic_x21E/variant.h index f592778df..ececbbee8 100644 --- a/variants/Generic_D21E/variant.h +++ b/variants/Generic_x21E/variant.h @@ -1,373 +1,373 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* - * Modified 9 December 2016 by Justin Mattair - * for MattairTech boards (www.mattairtech.com) - * - * See README.md for documentation and pin mapping information - */ - -#ifndef _VARIANT_MATTAIRTECH_MT_D21E_ -#define _VARIANT_MATTAIRTECH_MT_D21E_ - -/* The definitions here need the MattairTech SAMD core >=1.6.8. - * The format is different than the stock Arduino SAMD core, - * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. - */ -#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10608 - -/*---------------------------------------------------------------------------- - * Clock Configuration - *----------------------------------------------------------------------------*/ - -/** Master clock frequency (also Fcpu frequency) */ -#define VARIANT_MCK (48000000ul) - -/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ - * must also be defined with the external crystal frequency in Hertz. - */ -#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL - -/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL - * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in - * a more accurate 48MHz output frequency at the expense of increased jitter. - */ -//#define PLL_FRACTIONAL_ENABLED - -/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal - * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being - * multiplied by the PLL. This will result in a faster lock time for the PLL, - * however, it will also result in a less accurate PLL output frequency if the - * crystal is not divisible (without remainder) by 1MHz. In this case, define - * PLL_FRACTIONAL_ENABLED as well. - */ -//#define PLL_FAST_STARTUP - -/* The fine calibration value for DFLL open-loop mode is defined here. - * The coarse calibration value is loaded from NVM OTP (factory calibration values). - */ -#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) - -/*---------------------------------------------------------------------------- - * Headers - *----------------------------------------------------------------------------*/ - -#include "WVariant.h" -#include "sam.h" - -#ifdef __cplusplus -#include "SERCOM.h" -#include "Uart.h" -#endif // __cplusplus - -#ifdef __cplusplus -extern "C" -{ -#endif // __cplusplus - -/*---------------------------------------------------------------------------- - * Pins - *----------------------------------------------------------------------------*/ - -// Number of pins defined in PinDescription array -#define NUM_PIN_DESCRIPTION_ENTRIES (32u) - -#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES -#define NUM_DIGITAL_PINS PINS_COUNT -#define NUM_ANALOG_INPUTS (10u) -#define NUM_ANALOG_OUTPUTS (1u) -#define analogInputToDigitalPin(p) (p) - -#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) ) -#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin ) -//#define analogInPinToBit(P) ( ) -#define portOutputRegister(port) ( &(port->OUT.reg) ) -#define portInputRegister(port) ( &(port->IN.reg) ) -#define portModeRegister(port) ( &(port->DIR.reg) ) -#define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) - -/* - * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD - * architecture. If you need to check if a pin supports PWM you must - * use digitalPinHasPWM(..). - * - * https://github.com/arduino/Arduino/issues/1833 - */ -// #define digitalPinToTimer(P) - -/* LEDs - * None of these defines are currently used by the core. - * The MT-D21E onboard LED is on pin 28. - * The RX and TX LEDs are not present. - * You may optionally add them to any free pins. - */ -#define PIN_LED_13 (28u) -#define PIN_LED_RXL (30u) -#define PIN_LED_TXL (31u) -#define PIN_LED PIN_LED_13 -#define PIN_LED2 PIN_LED_RXL -#define PIN_LED3 PIN_LED_TXL -#define LED_BUILTIN PIN_LED_13 - -/* Buttons - * Note that Button B is connected to Reset by default. - * A solder jumper can be changed to route Button B to pin 31 instead. - * There is a debouncing capacitor connected, so delay reading the pin for - * at least 6ms after turning on the pullup to allow the capacitor to charge. - */ -#define BUTTON_A (27u) -#define BUTTON_B (31u) -#define BUTTON_BUILTIN BUTTON_A - - -/* - * Analog pins - */ -#define PIN_A2 (2ul) -#define PIN_A3 (3ul) -#define PIN_A4 (4ul) -#define PIN_A5 (5ul) -#define PIN_A6 (6ul) -#define PIN_A7 (7ul) -#define PIN_A8 (8ul) -#define PIN_A9 (9ul) -#define PIN_A10 (10ul) -#define PIN_A11 (11ul) -#define PIN_DAC0 (2ul) - -static const uint8_t A2 = PIN_A2; -static const uint8_t A3 = PIN_A3; -static const uint8_t A4 = PIN_A4; -static const uint8_t A5 = PIN_A5; -static const uint8_t A6 = PIN_A6; -static const uint8_t A7 = PIN_A7; -static const uint8_t A8 = PIN_A8; -static const uint8_t A9 = PIN_A9; -static const uint8_t A10 = PIN_A10; -static const uint8_t A11 = PIN_A11; -static const uint8_t DAC0 = PIN_DAC0; - -#define ADC_RESOLUTION 12 - -// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 - -/* Set default analog voltage reference */ -#define VARIANT_AR_DEFAULT AR_DEFAULT - -/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ -#define REFA_PIN (3ul) -#define REFB_PIN (4ul) - - -// The ATN pin may be used in the future as the first SPI chip select. -// On boards that do not have the Arduino physical form factor, it can to set to any free pin. -#define PIN_ATN (15ul) -static const uint8_t ATN = PIN_ATN; - - -/* - * Serial interfaces - */ -// Serial1 -#define PIN_SERIAL1_RX (11ul) -#define PIN_SERIAL1_TX (10ul) -#define PAD_SERIAL1_TX (UART_TX_PAD_2) -#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL1 &sercom0 - -// Serial2 -#define PIN_SERIAL2_RX (15ul) -#define PIN_SERIAL2_TX (14ul) -#define PAD_SERIAL2_TX (UART_TX_PAD_2) -#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL2 &sercom2 - -// Serial3 -#define PIN_SERIAL3_RX (31ul) -#define PIN_SERIAL3_TX (30ul) -#define PAD_SERIAL3_TX (UART_TX_PAD_2) -#define PAD_SERIAL3_RX (SERCOM_RX_PAD_3) - -#define SERCOM_INSTANCE_SERIAL3 &sercom1 - -// Serial4 -#define PIN_SERIAL4_RX (17ul) -#define PIN_SERIAL4_TX (16ul) -#define PAD_SERIAL4_TX (UART_TX_PAD_0) -#define PAD_SERIAL4_RX (SERCOM_RX_PAD_1) - -#define SERCOM_INSTANCE_SERIAL4 &sercom3 - - -/* - * SPI Interfaces - */ -#if defined(TWO_SPI) -#define SPI_INTERFACES_COUNT 2 -#else -#define SPI_INTERFACES_COUNT 1 -#endif - -#define PIN_SPI_MISO (22u) -#define PIN_SPI_MOSI (18u) -#define PIN_SPI_SCK (19u) -#define PIN_SPI_SS (23u) -#define PERIPH_SPI sercom3 -#define PAD_SPI_TX SPI_PAD_2_SCK_3 -#define PAD_SPI_RX SERCOM_RX_PAD_0 - -static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI = PIN_SPI_MOSI ; -static const uint8_t MISO = PIN_SPI_MISO ; -static const uint8_t SCK = PIN_SPI_SCK ; - -#define PIN_SPI1_MISO (8u) -#define PIN_SPI1_MOSI (14u) -#define PIN_SPI1_SCK (15u) -#define PIN_SPI1_SS (9u) -#define PERIPH_SPI1 sercom2 -#define PAD_SPI1_TX SPI_PAD_2_SCK_3 -#define PAD_SPI1_RX SERCOM_RX_PAD_0 - -static const uint8_t SS1 = PIN_SPI1_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. -static const uint8_t MOSI1 = PIN_SPI1_MOSI ; -static const uint8_t MISO1 = PIN_SPI1_MISO ; -static const uint8_t SCK1 = PIN_SPI1_SCK ; - - -/* - * Wire Interfaces - */ -#if defined(TWO_WIRE) -#define WIRE_INTERFACES_COUNT 2 -#else -#define WIRE_INTERFACES_COUNT 1 -#endif - -#define PIN_WIRE_SDA (16u) -#define PIN_WIRE_SCL (17u) -#if defined(THREE_UART) && defined(ONE_WIRE) && defined(NO_SPI) - #define PERIPH_WIRE sercom3 - #define WIRE_IT_HANDLER SERCOM3_Handler -#else - #define PERIPH_WIRE sercom1 - #define WIRE_IT_HANDLER SERCOM1_Handler -#endif - -static const uint8_t SDA = PIN_WIRE_SDA; -static const uint8_t SCL = PIN_WIRE_SCL; - -#define PIN_WIRE1_SDA (8u) -#define PIN_WIRE1_SCL (9u) -#define PERIPH_WIRE1 sercom2 -#define WIRE1_IT_HANDLER SERCOM2_Handler - -static const uint8_t SDA1 = PIN_WIRE1_SDA; -static const uint8_t SCL1 = PIN_WIRE1_SCL; - - -/* - * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to - * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. - */ -#define PIN_USB_DM (24ul) -#define PIN_USB_DP (25ul) -//#define PIN_USB_HOST_ENABLE (14ul) -#define PIN_USB_HOST_ENABLE_VALUE HIGH - -/* - * I2S Interfaces - */ -#define I2S_INTERFACES_COUNT 1 - -#define I2S_DEVICE 0 -#define I2S_CLOCK_GENERATOR 3 -#define PIN_I2S_SD (7u) -#define PIN_I2S_SCK (10u) -#define PIN_I2S_FS (11u) - -#ifdef __cplusplus -} -#endif - - -/*---------------------------------------------------------------------------- - * Arduino objects - C++ only - *----------------------------------------------------------------------------*/ - -#ifdef __cplusplus - -/* ========================= - * ===== SERCOM DEFINITION - * ========================= -*/ -extern SERCOM sercom0; -extern SERCOM sercom1; -extern SERCOM sercom2; -extern SERCOM sercom3; - -extern Uart Serial1; -extern Uart Serial2; -extern Uart Serial3; -extern Uart Serial4; - -#endif - -// These serial port names are intended to allow libraries and architecture-neutral -// sketches to automatically default to the correct port name for a particular type -// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, -// the first hardware serial port whose RX/TX pins are not dedicated to another use. -// -// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor -// -// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial -// -// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library -// -// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. -// -// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX -// pins are NOT connected to anything by default. -#define SERIAL_PORT_USBVIRTUAL SerialUSB -// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). -// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. -// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. -// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get -// the USB Host debugging output. -#define SERIAL_PORT_MONITOR Serial1 -// Serial has no physical pins broken out, so it's not listed as HARDWARE port -#define SERIAL_PORT_HARDWARE Serial1 -#define SERIAL_PORT_HARDWARE_OPEN Serial1 - -// The MT-D21E does not have the EDBG support chip, which provides a USB-UART bridge -// accessible using Serial (the Arduino serial monitor is normally connected to this). -// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. -// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. -// Remember to use while(!Serial); to wait for a connection before Serial printing. - -// When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. -#if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) -#define Serial SerialUSB -#else -#define Serial Serial1 -#endif - -#endif /* _VARIANT_MATTAIRTECH_MT_D21E_ */ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 9 December 2016 by Justin Mattair + * for MattairTech boards (www.mattairtech.com) + * + * See README.md for documentation and pin mapping information + */ + +#ifndef _VARIANT_GENERIC_XX1E_ +#define _VARIANT_GENERIC_XX1E_ + +/* The definitions here need the MattairTech SAMD core >=1.6.8. + * The format is different than the stock Arduino SAMD core, + * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. + */ +#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10608 + +/*---------------------------------------------------------------------------- + * Clock Configuration + *----------------------------------------------------------------------------*/ + +/** Master clock frequency (also Fcpu frequency) */ +#define VARIANT_MCK (48000000ul) + +/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ + * must also be defined with the external crystal frequency in Hertz. + */ +#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL + +/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL + * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in + * a more accurate 48MHz output frequency at the expense of increased jitter. + */ +//#define PLL_FRACTIONAL_ENABLED + +/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal + * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being + * multiplied by the PLL. This will result in a faster lock time for the PLL, + * however, it will also result in a less accurate PLL output frequency if the + * crystal is not divisible (without remainder) by 1MHz. In this case, define + * PLL_FRACTIONAL_ENABLED as well. + */ +//#define PLL_FAST_STARTUP + +/* The fine calibration value for DFLL open-loop mode is defined here. + * The coarse calibration value is loaded from NVM OTP (factory calibration values). + */ +#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) + +/*---------------------------------------------------------------------------- + * Headers + *----------------------------------------------------------------------------*/ + +#include "WVariant.h" +#include "sam.h" + +#ifdef __cplusplus +#include "SERCOM.h" +#include "Uart.h" +#endif // __cplusplus + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/*---------------------------------------------------------------------------- + * Pins + *----------------------------------------------------------------------------*/ + +// Number of pins defined in PinDescription array +#define NUM_PIN_DESCRIPTION_ENTRIES (32u) + +#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES +#define NUM_DIGITAL_PINS PINS_COUNT +#define NUM_ANALOG_INPUTS (10u) +#define NUM_ANALOG_OUTPUTS (1u) +#define analogInputToDigitalPin(p) (p) + +#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) ) +#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin ) +//#define analogInPinToBit(P) ( ) +#define portOutputRegister(port) ( &(port->OUT.reg) ) +#define portInputRegister(port) ( &(port->IN.reg) ) +#define portModeRegister(port) ( &(port->DIR.reg) ) +#define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) + +/* + * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD + * architecture. If you need to check if a pin supports PWM you must + * use digitalPinHasPWM(..). + * + * https://github.com/arduino/Arduino/issues/1833 + */ +// #define digitalPinToTimer(P) + +/* LEDs + * None of these defines are currently used by the core. + * The MT-D21E onboard LED is on pin 28. + * The RX and TX LEDs are not present. + * You may optionally add them to any free pins. + */ +#define PIN_LED_13 (28u) +#define PIN_LED_RXL (30u) +#define PIN_LED_TXL (31u) +#define PIN_LED PIN_LED_13 +#define PIN_LED2 PIN_LED_RXL +#define PIN_LED3 PIN_LED_TXL +#define LED_BUILTIN PIN_LED_13 + +/* Buttons + * Note that Button B is connected to Reset by default. + * A solder jumper can be changed to route Button B to pin 31 instead. + * There is a debouncing capacitor connected, so delay reading the pin for + * at least 6ms after turning on the pullup to allow the capacitor to charge. + */ +#define BUTTON_A (27u) +#define BUTTON_B (31u) +#define BUTTON_BUILTIN BUTTON_A + + +/* + * Analog pins + */ +#define PIN_A2 (2ul) +#define PIN_A3 (3ul) +#define PIN_A4 (4ul) +#define PIN_A5 (5ul) +#define PIN_A6 (6ul) +#define PIN_A7 (7ul) +#define PIN_A8 (8ul) +#define PIN_A9 (9ul) +#define PIN_A10 (10ul) +#define PIN_A11 (11ul) +#define PIN_DAC0 (2ul) + +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; +static const uint8_t A8 = PIN_A8; +static const uint8_t A9 = PIN_A9; +static const uint8_t A10 = PIN_A10; +static const uint8_t A11 = PIN_A11; +static const uint8_t DAC0 = PIN_DAC0; + +#define ADC_RESOLUTION 12 + +// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 + +/* Set default analog voltage reference */ +#define VARIANT_AR_DEFAULT AR_DEFAULT + +/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ +#define REFA_PIN (3ul) +#define REFB_PIN (4ul) + + +// The ATN pin may be used in the future as the first SPI chip select. +// On boards that do not have the Arduino physical form factor, it can to set to any free pin. +#define PIN_ATN (15ul) +static const uint8_t ATN = PIN_ATN; + + +/* + * Serial interfaces + */ +// Serial1 +#define PIN_SERIAL1_RX (11ul) +#define PIN_SERIAL1_TX (10ul) +#define PAD_SERIAL1_TX (UART_TX_PAD_2) +#define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) + +#define SERCOM_INSTANCE_SERIAL1 &sercom0 + +// Serial2 +#define PIN_SERIAL2_RX (15ul) +#define PIN_SERIAL2_TX (14ul) +#define PAD_SERIAL2_TX (UART_TX_PAD_2) +#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) + +#define SERCOM_INSTANCE_SERIAL2 &sercom2 + +// Serial3 +#define PIN_SERIAL3_RX (31ul) +#define PIN_SERIAL3_TX (30ul) +#define PAD_SERIAL3_TX (UART_TX_PAD_2) +#define PAD_SERIAL3_RX (SERCOM_RX_PAD_3) + +#define SERCOM_INSTANCE_SERIAL3 &sercom1 + +// Serial4 +#define PIN_SERIAL4_RX (17ul) +#define PIN_SERIAL4_TX (16ul) +#define PAD_SERIAL4_TX (UART_TX_PAD_0) +#define PAD_SERIAL4_RX (SERCOM_RX_PAD_1) + +#define SERCOM_INSTANCE_SERIAL4 &sercom3 + + +/* + * SPI Interfaces + */ +#if defined(TWO_SPI) +#define SPI_INTERFACES_COUNT 2 +#else +#define SPI_INTERFACES_COUNT 1 +#endif + +#define PIN_SPI_MISO (22u) +#define PIN_SPI_MOSI (18u) +#define PIN_SPI_SCK (19u) +#define PIN_SPI_SS (23u) +#define PERIPH_SPI sercom3 +#define PAD_SPI_TX SPI_PAD_2_SCK_3 +#define PAD_SPI_RX SERCOM_RX_PAD_0 + +static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. +static const uint8_t MOSI = PIN_SPI_MOSI ; +static const uint8_t MISO = PIN_SPI_MISO ; +static const uint8_t SCK = PIN_SPI_SCK ; + +#define PIN_SPI1_MISO (8u) +#define PIN_SPI1_MOSI (14u) +#define PIN_SPI1_SCK (15u) +#define PIN_SPI1_SS (9u) +#define PERIPH_SPI1 sercom2 +#define PAD_SPI1_TX SPI_PAD_2_SCK_3 +#define PAD_SPI1_RX SERCOM_RX_PAD_0 + +static const uint8_t SS1 = PIN_SPI1_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. +static const uint8_t MOSI1 = PIN_SPI1_MOSI ; +static const uint8_t MISO1 = PIN_SPI1_MISO ; +static const uint8_t SCK1 = PIN_SPI1_SCK ; + + +/* + * Wire Interfaces + */ +#if defined(TWO_WIRE) +#define WIRE_INTERFACES_COUNT 2 +#else +#define WIRE_INTERFACES_COUNT 1 +#endif + +#define PIN_WIRE_SDA (16u) +#define PIN_WIRE_SCL (17u) +#if defined(THREE_UART) && defined(ONE_WIRE) && defined(NO_SPI) + #define PERIPH_WIRE sercom3 + #define WIRE_IT_HANDLER SERCOM3_Handler +#else + #define PERIPH_WIRE sercom1 + #define WIRE_IT_HANDLER SERCOM1_Handler +#endif + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +#define PIN_WIRE1_SDA (8u) +#define PIN_WIRE1_SCL (9u) +#define PERIPH_WIRE1 sercom2 +#define WIRE1_IT_HANDLER SERCOM2_Handler + +static const uint8_t SDA1 = PIN_WIRE1_SDA; +static const uint8_t SCL1 = PIN_WIRE1_SCL; + + +/* + * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to + * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. + */ +#define PIN_USB_DM (24ul) +#define PIN_USB_DP (25ul) +//#define PIN_USB_HOST_ENABLE (14ul) +#define PIN_USB_HOST_ENABLE_VALUE HIGH + +/* + * I2S Interfaces + */ +#define I2S_INTERFACES_COUNT 1 + +#define I2S_DEVICE 0 +#define I2S_CLOCK_GENERATOR 3 +#define PIN_I2S_SD (7u) +#define PIN_I2S_SCK (10u) +#define PIN_I2S_FS (11u) + +#ifdef __cplusplus +} +#endif + + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus + +/* ========================= + * ===== SERCOM DEFINITION + * ========================= +*/ +extern SERCOM sercom0; +extern SERCOM sercom1; +extern SERCOM sercom2; +extern SERCOM sercom3; + +extern Uart Serial1; +extern Uart Serial2; +extern Uart Serial3; +extern Uart Serial4; + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#define SERIAL_PORT_USBVIRTUAL SerialUSB +// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). +// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. +// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. +// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get +// the USB Host debugging output. +#define SERIAL_PORT_MONITOR Serial1 +// Serial has no physical pins broken out, so it's not listed as HARDWARE port +#define SERIAL_PORT_HARDWARE Serial1 +#define SERIAL_PORT_HARDWARE_OPEN Serial1 + +// The MT-D21E does not have the EDBG support chip, which provides a USB-UART bridge +// accessible using Serial (the Arduino serial monitor is normally connected to this). +// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. +// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. +// Remember to use while(!Serial); to wait for a connection before Serial printing. + +// When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. +#if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) +#define Serial SerialUSB +#else +#define Serial Serial1 +#endif + +#endif /* _VARIANT_GENERIC_XX1E_ */ diff --git a/variants/Generic_xx1G/README.md b/variants/Generic_xx1G/README.md new file mode 100644 index 000000000..5183877b7 --- /dev/null +++ b/variants/Generic_xx1G/README.md @@ -0,0 +1,229 @@ +# MattairTech Xeno Mini (ATSAMD51G/ATSAMD21G/ATSAML21G/ATSAMC21G) + +``` +======== MattairTech Xeno Mini (Rev B) (ATSAMD51G/ATSAMD21G/ATSAML21G/ATSAMC21G) ======== +Alt COM PWM Analog INT Arduino* Arduino* INT Analog PWM COM Alt +========================================================================================= + ------------------- +HB1+ (MTR) TX1 TC~ O I 0 | B8 RST | BOOT +HB2+ (MTR) RX1 TC~ O I 1 | B9 B3 | 35 O Vcoin +DAC O 2 | A2 B2 | 34 O LED +REFA* O 3 | A3 B23 | 33 I SLP+ (MTR) +REFB O 4 | A4 B22 | 32 I INT+! (IMU) +VI (VIN) / DAC1* O 5 | A5 A31 | 31 TCC~ IO (DGB) +VU! (USB) O 6 | A6 A30 | 30 TCC~ CLK (DGB) +VB (VBAT) O 7 | A7 A27 | 27 +MOSI (MEM) O 8 | A8 A23 | 23 TCC0~ SCL1/SCK1* EN1+ (MTR) +MISO (MEM) O 9 | A9 A22 | 22 TCC0~ SDA1/MOSI1* EN2+ (MTR) +D2 (QSPI) O 10 | A10 A21 | 21 I TCC0~ MISO1 +D3 (QSPI) / SCK (MEM) O I 11 | A11 A20 | 20 I TCC0~ + TX2 TCC~ I 12 | A12 A19 | 19 I TC~ RX3 +CEN (CHG) RX2 TCC~ I 13 | A13 A18 | 18 I TC~ TX3 STA+! (CHG) +SCK (QSPI) TC~ I 14 | B10 A17 | 17 I SCL (I2C) +CS (MEM) TC~ 15 | B11 A16 | 16 I SDA (I2C) + | Vaux VccL | +USB D- / CAN TX | A24 _____ VccH | ! VccL is 3.3V by default. +USB D+ / CAN RX | A25 | | Vin | DO NOT exceed 3.6V on VccL or + | Gnd | USB | Gnd | any IO pin with the D51, D21, + USB: D51/D21/L21 only ------------------- or L21 installed. 5V allowed + CAN: D51/C21 only ONLY with the C21 installed. + +* Most pins can be used for more than one function. The port pin number printed on the + board is also used in Arduino for all 'A' pins. For 'B' pins, see Arduino column. + DAC1 is present only on the D51 and L21. With the D51, REFA is tied to VccL (J20). + For the D51, the COM pins on A22 and A23 are reversed (ie: A22 is instead SCL1/SCK1). + ++ This header pin has limited use because the alternate function, if installed, cannot be + disconnected via solder jumper. EN1, EN2, HB1, and HB2 have pulldowns, but can be used + if SLP is low. Note that Rev A boards differ with regards to the MTR pins (see docs). + +! These pins should not be driven if the associated hardware is installed. This variant + will only allow configuring these pins as inputs. To change this, edit configuration in + variant.h. INT from IMU will be driven low after reset. See IMU docs. + +~ D51: 3 TCC (6,4,3 ch.), 4 TC (2 ch.). D21/L21/C21: 3 TCC (4,2,2 ch.), 3 TC (2 ch.). + The D51 adds timers to pins A4, A5, A6, A7, A16, A17, and B2, however, the timers on + B8, B9, B10, and B11 are not present. The C21 adds timers to pins B2, B3, B22, and B23. + +Silkscreen Legend: + Top: A circle around pin is analog function, '~' is timer, small 'I' is interrupt + Bottom: A box around pin means 'Alt' function enabled by default if installed +``` + + +## Board Configuration Notes + +* **Crystals** + * Either the 32.768KHz crystal or the 24MHz crystal can be used. These pins do not route to headers. + * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. + +* **LED (LED_BUILTIN)** + * Bring the pin HIGH to turn the LED on. + * The LED is enabled (solder jumper) by default. + +* **GPIO** + * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. + * When PER_ATTR_DRIVE_STRONG is set for the pin (enabled by default), each pin can source or sink a maximum of: + * **D51:** 8mA high, 8mA low + * **D21:** 7mA high, 10mA low + * **L21:** 5mA high, 6mA low (8 high drive pins: 10mA high, 12mA low) + * **C21:** 6mA high, 10mA low (2 high drive pins (A10, A11): 12mA high, 20mA low) + * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). + +* **Analog Inputs** + * Up to 14 pins can be configured as ADC analog inputs. + * Each pin measures from ground to 3.3 volts by default. + * Each pin provides 10 bits of resolution (1024 values) by default. + * 12-bit resolution supported by using the analogReadResolution() function. + * The upper end of the measurement range can be changed using the analogReference() function. + * A reference voltage can be connected to REFA. In this case, the capacitors should be enabled via solder jumper J33. + * Due to errata with the D51 DAC, J20 is set to route VccL to the MCU REFA pin (the header pin is disconnected). + +* **DAC** + * D21/C21: One 10-bit 350Ksps analog output is available on pin 2. + * D51/L21: Two 12-bit 1Msps analog outputs are available on pins 2 and 5. + * Due to errata with the D51 DAC, J20 is set to route VccL to the MCU REFA pin (the header pin is disconnected). + +* **PWM** + * Up to 14 pins can be configured as PWM outputs (17 for D51, 18 for C21). + * Each pin provides 8 bits of resolution (256 values) by default. + * 12-bit resolution supported by using the analogWriteResolution() function. + +* **External Interrupts** + * Up to 14 pins can be configured with external interrupts. + +* **SERCOM** + * 6 SERCOM are available. + * Up to 3 UART instances (two for D51). More in a future release. + * Up to 2 SPI instances. + * Up to 2 WIRE (I2C) instances. + * The WIRE pullup resistors are enabled by default. + + + +## PinDescription table format + +### Note that in 1.6.18-beta-b1 a new compact table format was added. +The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE +to use a more compact format that uses only 4 bytes per pin (currently only available +for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used +(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to +pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC +column. Note that external libraries that reference the PinDescription table directly (uncommon) +will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which +is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. + +### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. +MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. +If using board variant files with the old format, the new core will still read the +table the old way, losing any new features introduced by the new column. Additionally, +new definitions have been added for D51, L21, and C21 support. + +### Each pin can have multiple functions. +The PinDescription table describes how each of the pins can be used by the Arduino +core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, +communications, etc.), and the PinDescription table configures which functions can +be used for each pin. This table is mainly accessed by the pinPeripheral function in +wiring_private.c, which is used to attach a pin to a particular peripheral function. +The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), +analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to +verify that the pin can perform the function requested, and to configure the pin for +that function. Most of the contents of pinMode() are now in pinPeripheral(). + +### Pin Mapping +There are different ways that pins can be mapped. Typically, there is no relation +between the arduino pin number used, and the actual port pin designator. Thus, the +pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, +a cross reference table is needed to find the arduino pin number. However, this results +in the least amount of space used by the table. Another method, used by default by the +MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino +pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins +are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added +for pins that are used for other purposes or for pins that do not exist (especially the +D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp +from the MT-D11 variant. The Xeno combines both methods, using the actual port pin +designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then +using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be +used, leaving the other pin for some number above 31. + +**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** + +### Port +This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### Pin +This is the pin (bit) within the port. Valid values are 0-31. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetPortPin() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column +using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, +use SetPortPin(NOT_A_PORT, 0). + +### PinType +This indicates what peripheral function the pin can be attached to. In most cases, +this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute +field. It can also be set to a specific peripheral. In this case, any attempt to +configure the pin (using pinPeripheral or pinMode) as anything else will fail (and +pinPeripheral will return -1). This can be used to prevent accidental re-configuration +of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin +is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See +WVariant.h for valid entries. These entries are also used as a parameter to +pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function +now calls pinPeripheral() with the desired mode. Note that this field is not used to +select between the different peripherals possible with each of the SERCOM and TIMER +functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE +is defined, PinType is not used (the pin is treated as PIO_MULTI). + +### PeripheralAttribute +This is an 8-bit bitfield used for various peripheral configuration. It is primarily +used to select between the different peripherals possible with each of the SERCOM and +TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four +pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on +the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. +Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the +pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, +buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are +two) is also selected here. Note that the D51 adds a third timer attribute and +requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. + +### PinAttribute +This is a 32-bit bitfield used to list all of the valid peripheral functions that a +pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain +attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL +includes all of the GPIO functions, while PIN_ATTR_TIMER includes both +PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). +PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for +limiting a pin to only input related functions or output functions. This allows a pin +to have a more flexible configuration, while restricting the direction (ie: to avoid +contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### TCChannel +This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available +on multiple pins. In general, only one pin should be configured in the pinDescription +table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column +to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on +the D21). See WVariant.h for valid entries. + +### ADCChannelNumber +This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC +instances, which are selected in the PeripheralAttribute column. See WVariant.h for +valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### ExtInt +This is the interrupt (if any) assigned to the pin. Some interrupt numbers are +available on multiple pins. In general, only one pin should be configured in the +pinDescription table per interrupt number. Thus, for example, if an interrupt was +needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid +entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetExtIntADC() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined +into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, +ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). + +### GCLKCCL +This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support +the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, +L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/Generic_xx1G/debug_scripts/SAMC21G15A.gdb b/variants/Generic_xx1G/debug_scripts/SAMC21G15A.gdb new file mode 100644 index 000000000..3ad8f1526 --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMC21G15A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g15" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAMC21G16A.gdb b/variants/Generic_xx1G/debug_scripts/SAMC21G16A.gdb new file mode 100644 index 000000000..a2f40259f --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMC21G16A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g16" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAMC21G17A.gdb b/variants/Generic_xx1G/debug_scripts/SAMC21G17A.gdb new file mode 100644 index 000000000..3405d43eb --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMC21G17A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g17" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAMC21G18A.gdb b/variants/Generic_xx1G/debug_scripts/SAMC21G18A.gdb new file mode 100644 index 000000000..c338879ed --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMC21G18A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21g18" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAMD21G15A.gdb b/variants/Generic_xx1G/debug_scripts/SAMD21G15A.gdb new file mode 100644 index 000000000..3b079860c --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMD21G15A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g15" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAMD21G16A.gdb b/variants/Generic_xx1G/debug_scripts/SAMD21G16A.gdb new file mode 100644 index 000000000..de6b1df1b --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMD21G16A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g16" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAMD21G17A.gdb b/variants/Generic_xx1G/debug_scripts/SAMD21G17A.gdb new file mode 100644 index 000000000..efbcb5d1e --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMD21G17A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g17" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAMD21G18A.gdb b/variants/Generic_xx1G/debug_scripts/SAMD21G18A.gdb new file mode 100644 index 000000000..a1740ee9e --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMD21G18A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21g18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAMD51G18A.gdb b/variants/Generic_xx1G/debug_scripts/SAMD51G18A.gdb new file mode 100644 index 000000000..d3863803b --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMD51G18A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51g18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAMD51G19A.gdb b/variants/Generic_xx1G/debug_scripts/SAMD51G19A.gdb new file mode 100644 index 000000000..214337590 --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAMD51G19A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51g19" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAML21G16B.gdb b/variants/Generic_xx1G/debug_scripts/SAML21G16B.gdb new file mode 100644 index 000000000..d1eadc93e --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAML21G16B.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21g16" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAML21G17B.gdb b/variants/Generic_xx1G/debug_scripts/SAML21G17B.gdb new file mode 100644 index 000000000..d306158c2 --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAML21G17B.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21g17" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/debug_scripts/SAML21G18B.gdb b/variants/Generic_xx1G/debug_scripts/SAML21G18B.gdb new file mode 100644 index 000000000..37ff5f4b6 --- /dev/null +++ b/variants/Generic_xx1G/debug_scripts/SAML21G18B.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21g18" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld new file mode 100644 index 000000000..90d7f473d --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00020000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld new file mode 100644 index 000000000..74b6b298c --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld new file mode 100644 index 000000000..9030f5437 --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00008000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld new file mode 100644 index 000000000..3f276ac1d --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00010000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld new file mode 100644 index 000000000..73ff15c35 --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld new file mode 100644 index 000000000..4f7c9f2e5 --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00080000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld new file mode 100644 index 000000000..4b2f64bca --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00020000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld new file mode 100644 index 000000000..b446667fd --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld new file mode 100644 index 000000000..f60a390ee --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00008000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld new file mode 100644 index 000000000..3b999367f --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00010000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld new file mode 100644 index 000000000..31ec8580e --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld new file mode 100644 index 000000000..e2cbcadc2 --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00080000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_128KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld rename to variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_128KB.ld index 74945d7da..f8ecfac5e 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_128KB.ld +++ b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_128KB.ld @@ -1,215 +1,214 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00020000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00020000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_256KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld rename to variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_256KB.ld index 81adfe22d..4bb2f0121 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_256KB.ld +++ b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_256KB.ld @@ -1,215 +1,214 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_32KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld rename to variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_32KB.ld index eb557284d..805682b86 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_32KB.ld +++ b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_32KB.ld @@ -1,215 +1,214 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_64KB.ld similarity index 95% rename from variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld rename to variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_64KB.ld index c053d998b..e1d7956f4 100644 --- a/variants/Generic_D21E/linker_scripts/gcc/No_Bootloader/flash_64KB.ld +++ b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_64KB.ld @@ -1,215 +1,214 @@ -/* - Copyright (c) 2014-2015 Arduino LLC. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ - -/* Linker script to configure memory regions. - * Need modifying for a specific board. - * FLASH.ORIGIN: starting address of flash - * FLASH.LENGTH: length of flash - * RAM.ORIGIN: starting address of RAM bank 0 - * RAM.LENGTH: length of RAM bank 0 - */ -MEMORY -{ - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000 - RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * Reset_Handler : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __copy_table_start__ - * __copy_table_end__ - * __zero_table_start__ - * __zero_table_end__ - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - * __ram_end__ - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .text : - { - __text_start__ = .; - - KEEP(*(.isr_vector)) - *(.text*) - - KEEP(*(.init)) - KEEP(*(.fini)) - - /* .ctors */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - - /* .dtors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.rodata*) - - KEEP(*(.eh_frame*)) - } > FLASH - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > FLASH - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > FLASH - __exidx_end = .; - - /* To copy multiple ROM to RAM sections, - * uncomment .copy.table section and, - * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ - /* - .copy.table : - { - . = ALIGN(4); - __copy_table_start__ = .; - LONG (__etext) - LONG (__data_start__) - LONG (__data_end__ - __data_start__) - LONG (__etext2) - LONG (__data2_start__) - LONG (__data2_end__ - __data2_start__) - __copy_table_end__ = .; - } > FLASH - */ - - /* To clear multiple BSS sections, - * uncomment .zero.table section and, - * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ - /* - .zero.table : - { - . = ALIGN(4); - __zero_table_start__ = .; - LONG (__bss_start__) - LONG (__bss_end__ - __bss_start__) - LONG (__bss2_start__) - LONG (__bss2_end__ - __bss2_start__) - __zero_table_end__ = .; - } > FLASH - */ - - __etext = .; - - .data : AT (__etext) - { - __data_start__ = .; - *(vtable) - *(.ramfunc*) - *(.data*) - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - KEEP(*(SORT(.fini_array.*))) - KEEP(*(.fini_array)) - PROVIDE_HIDDEN (__fini_array_end = .); - - KEEP(*(.jcr*)) - . = ALIGN(16); - /* All data end */ - __data_end__ = .; - - } > RAM - - .bss : - { - . = ALIGN(4); - __bss_start__ = .; - *(.bss*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (COPY): - { - __end__ = .; - PROVIDE(end = .); - *(.heap*) - __HeapLimit = .; - } > RAM - - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - *(.stack*) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") -} +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld new file mode 100644 index 000000000..21cabbc46 --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld new file mode 100644 index 000000000..8379fbb7c --- /dev/null +++ b/variants/Generic_xx1G/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg new file mode 100644 index 000000000..1046f03ea --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21g15 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg new file mode 100644 index 000000000..faae84294 --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21g16 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg new file mode 100644 index 000000000..87f099244 --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21g17 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg new file mode 100644 index 000000000..0753f2a87 --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21g18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg new file mode 100644 index 000000000..a0d461b94 --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21g15 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg new file mode 100644 index 000000000..f2f31cae1 --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21g16 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg new file mode 100644 index 000000000..69046b18b --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21g17 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg new file mode 100644 index 000000000..5f813005e --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21g18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg new file mode 100644 index 000000000..2b93c5a15 --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd51g18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg new file mode 100644 index 000000000..a633ed10a --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd51g19 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg b/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg new file mode 100644 index 000000000..a3f520918 --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21g16 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg b/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg new file mode 100644 index 000000000..d049721ed --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21g17 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg b/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg new file mode 100644 index 000000000..64e6cb3dd --- /dev/null +++ b/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21g18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_xx1G/pins_arduino.h b/variants/Generic_xx1G/pins_arduino.h new file mode 100644 index 000000000..36ab06c77 --- /dev/null +++ b/variants/Generic_xx1G/pins_arduino.h @@ -0,0 +1,21 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// API compatibility +#include "variant.h" + diff --git a/variants/Generic_xx1G/variant.cpp b/variants/Generic_xx1G/variant.cpp new file mode 100644 index 000000000..09aab1e7a --- /dev/null +++ b/variants/Generic_xx1G/variant.cpp @@ -0,0 +1,365 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 3 February 2018 by Justin Mattair + * for MattairTech boards (www.mattairtech.com) + * + * See README.md for documentation and pin mapping information + */ + + +#include "variant.h" + +/* + * Pins descriptions + */ +const PinDescription g_APinDescription[]= +{ +#if (SAMD51) + // 0..11 - Analog capable pins + { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_8, GCLK_CCL_NONE }, + { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_9, GCLK_CCL_NONE }, + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH0, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH1, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#if defined (VIN_5V_REGULATOR_INSTALLED) + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_TIMER), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#else + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH0, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#endif + { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH1, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_11, GCLK_CCL_NONE }, + + // 12..23 - Digital functions + { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH2, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, + { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH3, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, + { PORTB, 10, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, + { PORTB, 11, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, +#if defined (BATTERY_CHARGER_INSTALLED) + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, +#else + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, +#endif + { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, + { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH0, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH1, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH2, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT2|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH3, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 - Digital functions + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 - Digital functions / Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO + + // 32..35 - Digital functions +#if defined (IMU_INSTALLED) + { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 +#else + { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 +#endif + { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // 33 + { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH2, ADC_Channel14, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 34, LED + { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel15, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 35 + +#elif (SAMD21) + // 0..11 - Analog capable pins + { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, + { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, ADC_Channel3, EXTERNAL_INT_9, GCLK_CCL_NONE }, + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#if defined (VIN_5V_REGULATOR_INSTALLED) + { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#else + { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#endif + { PORTA, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel16, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel17, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, + + // 12..23 - Digital functions + { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, + { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, + { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, + { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, +#if defined (BATTERY_CHARGER_INSTALLED) + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, +#else + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, +#endif + { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, + { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM|PIN_ATTR_EXTINT), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 - Digital functions + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 - Digital functions / Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO + + // 32..35 - Digital functions +#if defined (IMU_INSTALLED) + { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 +#else + { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 +#endif + { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // 33 + { PORTB, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 34, LED + { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 35 + +#elif (SAML21) + // 0..11 - Analog capable pins + { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH0, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, + { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH1, ADC_Channel3, EXTERNAL_INT_9, GCLK_CCL_NONE }, + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#if defined (VIN_5V_REGULATOR_INSTALLED) + { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#else + { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#endif + { PORTA, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel16, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel17, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, + + // 12..23 - Digital functions + { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, + { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, + { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, + { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, +#if defined (BATTERY_CHARGER_INSTALLED) + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, +#else + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, +#endif + { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, + { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 - Digital functions + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 - Digital functions / Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO + + // 32..35 - Digital functions +#if defined (IMU_INSTALLED) + { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 +#else + { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 +#endif + { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // 33 + { PORTB, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 34, LED + { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 35 + +#elif (SAMC21) + // 0..11 - Analog capable pins + { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH0, ADC_Channel4, EXTERNAL_INT_8, GCLK_CCL_NONE }, + { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH1, ADC_Channel5, EXTERNAL_INT_9, GCLK_CCL_NONE }, + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#if defined (VIN_5V_REGULATOR_INSTALLED) + { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#else + { PORTA, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, +#endif + { PORTA, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_11, GCLK_CCL_NONE }, + + // 12..23 - Digital functions + { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, + { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, + { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_10, GCLK_CCL_NONE }, + { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, +#if defined (BATTERY_CHARGER_INSTALLED) + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, +#else + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_2, GCLK_CCL_NONE }, +#endif + { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_3, GCLK_CCL_NONE }, + { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 - Digital functions + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 - Digital functions / Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO + + // 32..35 - Digital functions +#if defined (IMU_INSTALLED) + { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_INPUT|PIN_ATTR_INPUT_PULLUP|PIN_ATTR_INPUT_PULLDOWN|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 +#else + { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_6, GCLK_CCL_NONE }, // 32 +#endif + { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_7, GCLK_CCL_NONE }, // 33 + { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 34, LED + { PORTB, 3, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 35 + +#else + #error "variant.cpp: Unsupported chip" +#endif +} ; + +#if (SAMD21) +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5 } ; +#elif (SAML21) +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC0, TC1, TC4 } ; +#elif (SAMC21) +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC0, TC1, TC2, TC3, TC4 } ; +#elif (SAMD51) +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC0, TC1, TC2, TC3 } ; +#endif + +// Multi-serial objects instantiation +SERCOM sercom0( SERCOM0 ) ; +SERCOM sercom1( SERCOM1 ) ; +SERCOM sercom2( SERCOM2 ) ; +SERCOM sercom3( SERCOM3 ) ; +SERCOM sercom4( SERCOM4 ) ; +SERCOM sercom5( SERCOM5 ) ; + +#if defined(ONE_UART) || defined(TWO_UART) || defined(THREE_UART) +Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; + + #if (SAMD51) + void SERCOM4_0_Handler(void) { + Serial1.dataRegisterEmptyHandler(); + } + + void SERCOM4_2_Handler(void) { + Serial1.availableDataHandler(); + } + + void SERCOM4_3_Handler(void) { + Serial1.errorHandler(); + } + #else + void SERCOM4_Handler() { + Serial1.IrqHandler(); + } + #endif +#endif + +#if defined(TWO_UART) || defined(THREE_UART) +Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; + + #if (SAMD51) + void SERCOM2_0_Handler(void) { + Serial2.dataRegisterEmptyHandler(); + } + + void SERCOM2_2_Handler(void) { + Serial2.availableDataHandler(); + } + + void SERCOM2_3_Handler(void) { + Serial2.errorHandler(); + } + #else + void SERCOM2_Handler() { + Serial2.IrqHandler(); + } + #endif +#endif + +#if defined(THREE_UART) +Uart Serial3( SERCOM_INSTANCE_SERIAL3, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX ) ; + + #if (SAMD51) + void SERCOM3_0_Handler(void) { + Serial3.dataRegisterEmptyHandler(); + } + + void SERCOM3_2_Handler(void) { + Serial3.availableDataHandler(); + } + + void SERCOM3_3_Handler(void) { + Serial3.errorHandler(); + } + #else + void SERCOM3_Handler() { + Serial3.IrqHandler(); + } + #endif +#endif diff --git a/variants/Generic_xx1G/variant.h b/variants/Generic_xx1G/variant.h new file mode 100644 index 000000000..8e60381c0 --- /dev/null +++ b/variants/Generic_xx1G/variant.h @@ -0,0 +1,477 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 29 January 2018 by Justin Mattair + * for MattairTech boards (www.mattairtech.com) + * + * See README.md for documentation and pin mapping information + */ + +#ifndef _VARIANT_GENERIC_XX1G_ +#define _VARIANT_GENERIC_XX1G_ + +/* The definitions here need the MattairTech SAMD core >=1.6.8. + * The format is different than the stock Arduino SAMD core, + * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. + */ +#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10608 + +/*---------------------------------------------------------------------------- + * Board/Clock Configuration + *----------------------------------------------------------------------------*/ + +/* Master clock frequency (also Fcpu frequency). With the D51, this can be + * either 120000000ul or 48000000ul (selected in the menu). See README.md. + */ +#define VARIANT_MCK (F_CPU) + +/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ + * must also be defined with the external crystal frequency in Hertz. + */ +#define HS_CRYSTAL_FREQUENCY_HERTZ 24000000UL + +/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL + * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in + * a more accurate 48MHz output frequency at the expense of increased jitter. + */ +//#define PLL_FRACTIONAL_ENABLED + +/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal + * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being + * multiplied by the PLL. This will result in a faster lock time for the PLL, + * however, it will also result in a less accurate PLL output frequency if the + * crystal is not divisible (without remainder) by 1MHz. In this case, define + * PLL_FRACTIONAL_ENABLED as well. + */ +//#define PLL_FAST_STARTUP + +/* The fine calibration value for DFLL open-loop mode is defined here. + * The coarse calibration value is loaded from NVM OTP (factory calibration values). + */ +#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) + +/* Define CORTEX_M_CACHE_ENABLED to enable the Cortex M cache (D51 only). + */ +#define CORTEX_M_CACHE_ENABLED + +/* When the battery charger (CHG) is installed, the charge status is available on pin 18 (A18, STA), + * which drives low (open-drain) when the battery is charging. Defining BATTERY_CHARGER_INSTALLED + * will prevent pin A18 from being configured as an output, thus avoiding contention. + */ +#define BATTERY_CHARGER_INSTALLED + +/* When the accelerometer/gyroscope/magnetometer (IMU) is installed, all three interrupt outputs + * are tied together and connected to pin 32 (B22, INT), which by default drives low in a push-pull, + * active-high configuration until it is configured otherwise (to open-drain, active-low for example). + * Defining IMU_INSTALLED will prevent pin B22 from being configured as an output, thus avoiding + * contention. + */ +#define IMU_INSTALLED + +/* When the Vin regulator (5V) is installed, an analog comparator (Rev B only) is used to drive the Vbus + * ideal diode enable pin (EN) low, which disconnects Vbus from VccH. The Vbus voltage divider, which is + * available on pin 6 (A6, VU), is also connected to the same enable pin. Defining VIN_5V_REGULATOR_INSTALLED + * will prevent pin A6 from being configured as an output, thus avoiding contention. + */ +#define VIN_5V_REGULATOR_INSTALLED + + +/*---------------------------------------------------------------------------- + * Headers + *----------------------------------------------------------------------------*/ + +#include "WVariant.h" +#include "sam.h" + +#ifdef __cplusplus +#include "SERCOM.h" +#include "Uart.h" +#endif // __cplusplus + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/*---------------------------------------------------------------------------- + * Pins + *----------------------------------------------------------------------------*/ + +// Number of pins defined in PinDescription array +#define NUM_PIN_DESCRIPTION_ENTRIES (36u) + +#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES +#define NUM_DIGITAL_PINS PINS_COUNT +#define NUM_ANALOG_INPUTS (14u) + +#if (SAMD21 || SAMC21) +#define NUM_ANALOG_OUTPUTS (1u) +#elif (SAMD51 || SAML21) +#define NUM_ANALOG_OUTPUTS (2u) +#else +#error "variant.h: Unsupported chip" +#endif + +#define analogInputToDigitalPin(p) (p) + +#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) ) +#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin ) +//#define analogInPinToBit(P) ( ) +#define portOutputRegister(port) ( &(port->OUT.reg) ) +#define portInputRegister(port) ( &(port->IN.reg) ) +#define portModeRegister(port) ( &(port->DIR.reg) ) +#define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) + +/* + * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD + * architecture. If you need to check if a pin supports PWM you must + * use digitalPinHasPWM(..). + * + * https://github.com/arduino/Arduino/issues/1833 + */ +// #define digitalPinToTimer(P) + +/* LEDs + * None of these defines are currently used by the core. + * The Xeno Mini onboard LED is on pin 34. + * The RX and TX LEDs are not present. + * You may optionally add them to any free pins. + */ +#define PIN_LED_13 (34u) +#define PIN_LED_RXL (20u) +#define PIN_LED_TXL (21u) +#define PIN_LED PIN_LED_13 +#define PIN_LED2 PIN_LED_RXL +#define PIN_LED3 PIN_LED_TXL +#define LED_BUILTIN PIN_LED_13 + + +/* + * Analog pins + */ +#define PIN_A0 (0ul) +#define PIN_A1 (1ul) +#define PIN_A2 (2ul) +#define PIN_A3 (3ul) +#define PIN_A4 (4ul) +#define PIN_A5 (5ul) +#define PIN_A6 (6ul) +#define PIN_A7 (7ul) +#define PIN_A8 (8ul) +#define PIN_A9 (9ul) +#define PIN_A10 (10ul) +#define PIN_A11 (11ul) +#define PIN_A34 (34ul) +#define PIN_A35 (35ul) +#define PIN_DAC0 (2ul) +#if (SAMD51 || SAML21) +#define PIN_DAC1 (5ul) +#endif + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; +static const uint8_t A8 = PIN_A8; +static const uint8_t A9 = PIN_A9; +static const uint8_t A10 = PIN_A10; +static const uint8_t A11 = PIN_A11; +static const uint8_t A34 = PIN_A34; +static const uint8_t A35 = PIN_A35; +static const uint8_t DAC0 = PIN_DAC0; +#if (SAMD51 || SAML21) +static const uint8_t DAC1 = PIN_DAC1; +#endif + +#define ADC_RESOLUTION 12 + +// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 + +/* Set default analog voltage reference */ +#define VARIANT_AR_DEFAULT AR_DEFAULT + +/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ +#define REFA_PIN (3ul) +#define REFB_PIN (4ul) +#if (SAMD51) +#define REFC_PIN (6ul) +#endif + + +// The ATN pin may be used in the future as the first SPI chip select. +// On boards that do not have the Arduino physical form factor, it can to set to any free pin. +#define PIN_ATN (27ul) +static const uint8_t ATN = PIN_ATN; + + +/* + * Serial interfaces + */ +#if (defined(THREE_UART) && SAMD51) + #error "variant.h: Only two UARTs are available with the D51. Please choose a TWO_UART_* option" +#endif + +// Serial1 +#define PIN_SERIAL1_TX (0ul) +#define PIN_SERIAL1_RX (1ul) +#define PAD_SERIAL1_TX (UART_TX_PAD_0) +#define PAD_SERIAL1_RX (SERCOM_RX_PAD_1) + +#define SERCOM_INSTANCE_SERIAL1 &sercom4 + +// Serial2 +#define PIN_SERIAL2_TX (12u) +#define PIN_SERIAL2_RX (13u) +#define PAD_SERIAL2_TX (UART_TX_PAD_0) +#define PAD_SERIAL2_RX (SERCOM_RX_PAD_1) + +#define SERCOM_INSTANCE_SERIAL2 &sercom2 + +// Serial3 (a third serial is not available with the D51 on this board) +#define PIN_SERIAL3_TX (18ul) +#define PIN_SERIAL3_RX (19ul) +#define PAD_SERIAL3_TX (UART_TX_PAD_2) +#define PAD_SERIAL3_RX (SERCOM_RX_PAD_3) + +#define SERCOM_INSTANCE_SERIAL3 &sercom3 + + +/* + * SPI Interfaces + */ +#if defined(TWO_SPI) +#define SPI_INTERFACES_COUNT 2 +#elif defined(THREE_SPI) +#define SPI_INTERFACES_COUNT 3 +#else +#define SPI_INTERFACES_COUNT 1 +#endif + +#define PIN_SPI_MISO (9u) +#define PIN_SPI_MOSI (8u) +#define PIN_SPI_SCK (11u) +#define PIN_SPI_SS (10u) +#define PERIPH_SPI sercom0 +#define PAD_SPI_TX SPI_PAD_0_SCK_3 +#define PAD_SPI_RX SERCOM_RX_PAD_1 + +static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. +static const uint8_t MOSI = PIN_SPI_MOSI ; +static const uint8_t MISO = PIN_SPI_MISO ; +static const uint8_t SCK = PIN_SPI_SCK ; + +#if (SAMD51) +#define PIN_SPI1_MISO (21u) +#define PIN_SPI1_MOSI (23u) +#define PIN_SPI1_SCK (22u) +#define PIN_SPI1_SS (20u) +#define PAD_SPI1_TX SPI_PAD_0_SCK_1 +#define PAD_SPI1_RX SERCOM_RX_PAD_3 +#else +#define PIN_SPI1_MISO (21u) +#define PIN_SPI1_MOSI (22u) +#define PIN_SPI1_SCK (23u) +#define PIN_SPI1_SS (20u) +#define PAD_SPI1_TX SPI_PAD_0_SCK_1 +#define PAD_SPI1_RX SERCOM_RX_PAD_3 +#endif +#define PERIPH_SPI1 sercom5 + +static const uint8_t SS1 = PIN_SPI1_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. +static const uint8_t MOSI1 = PIN_SPI1_MOSI ; +static const uint8_t MISO1 = PIN_SPI1_MISO ; +static const uint8_t SCK1 = PIN_SPI1_SCK ; + + +/* + * Wire Interfaces + */ +#if defined(TWO_WIRE) +#define WIRE_INTERFACES_COUNT 2 +#elif defined(THREE_WIRE) +#define WIRE_INTERFACES_COUNT 3 +#else +#define WIRE_INTERFACES_COUNT 1 +#endif + +#define PIN_WIRE_SDA (16u) +#define PIN_WIRE_SCL (17u) +#define PERIPH_WIRE sercom1 +#if (SAMD51) + #define WIRE_STOP_DETECTED_HANDLER SERCOM1_0_Handler + #define WIRE_ADDRESS_MATCH_HANDLER SERCOM1_1_Handler + #define WIRE_DATA_READY_HANDLER SERCOM1_2_Handler +#else + #define WIRE_IT_HANDLER SERCOM1_Handler +#endif + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +#define PIN_WIRE1_SDA (22u) +#define PIN_WIRE1_SCL (23u) +#define PERIPH_WIRE1 sercom5 +#if (SAMD51) + #define WIRE1_STOP_DETECTED_HANDLER SERCOM5_0_Handler + #define WIRE1_ADDRESS_MATCH_HANDLER SERCOM5_1_Handler + #define WIRE1_DATA_READY_HANDLER SERCOM5_2_Handler +#else + #define WIRE1_IT_HANDLER SERCOM5_Handler +#endif + +static const uint8_t SDA1 = PIN_WIRE1_SDA; +static const uint8_t SCL1 = PIN_WIRE1_SCL; + + +/* + * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to + * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. + */ +#define PIN_USB_DM (24ul) +#define PIN_USB_DP (25ul) +//#define PIN_USB_HOST_ENABLE (19ul) +#define PIN_USB_HOST_ENABLE_VALUE 0 + +/* + * I2S Interfaces + * SAMD51, PDM, and MCLK support will be added hopefully March 2018 + */ + +#if (SAMD51) +// On the SAMD51, device 0 is TX only using SDO (PIN_I2S_SD), and device 1 is RX only using SDI (PIN_I2S1_SD) +#define I2S_INTERFACES_COUNT 2 +#define I2S_DEVICE 0 +#define I2S1_DEVICE 1 +#define I2S_CLOCK_GENERATOR 7 +#define I2S1_CLOCK_GENERATOR 7 +// TX +#define PIN_I2S_MCK (8u) +#define PIN_I2S_SCK (10u) +#define PIN_I2S_FS (9u) +#define PIN_I2S_SD (11u) // SDO (TX) +// RX (must use clock 0) +#define PIN_I2S1_MCK (8u) +#define PIN_I2S1_SCK (10u) +#define PIN_I2S1_FS (9u) +#define PIN_I2S1_SD (14u) // SDI (RX) + +#else +#define I2S_INTERFACES_COUNT 1 +#define I2S_DEVICE 0 +//#define I2S1_DEVICE 1 +#define I2S_CLOCK_GENERATOR 7 +//#define I2S1_CLOCK_GENERATOR 8 +//#define PIN_I2S_MCK (9u) +#define PIN_I2S_SCK (20u) +#define PIN_I2S_FS (21u) +#define PIN_I2S_SD (19u) +//#define PIN_I2S1_MCK (10u) +//#define PIN_I2S1_SCK (11u) +//#define PIN_I2S1_SD (8u) +#endif + +#ifdef __cplusplus +} +#endif + + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus + +/* ========================= + * ===== SERCOM DEFINITION + * ========================= +*/ +extern SERCOM sercom0; +extern SERCOM sercom1; +extern SERCOM sercom2; +extern SERCOM sercom3; +extern SERCOM sercom4; +extern SERCOM sercom5; + +extern Uart Serial1; +extern Uart Serial2; +#if (SAMD21 || SAMC21 || SAML21) +extern Uart Serial3; +#endif + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#if (!SAMC21) + #define SERIAL_PORT_USBVIRTUAL SerialUSB +#endif +// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). +// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. +// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. +// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get +// the USB Host debugging output. +#if (SAMC21) + #define SERIAL_PORT_MONITOR Serial2 +#else + #define SERIAL_PORT_MONITOR Serial1 +#endif + +// Serial has no physical pins broken out, so it's not listed as HARDWARE port +#if (SAMC21) + #define SERIAL_PORT_HARDWARE Serial2 + #define SERIAL_PORT_HARDWARE_OPEN Serial2 +#else + #define SERIAL_PORT_HARDWARE Serial1 + #define SERIAL_PORT_HARDWARE_OPEN Serial1 +#endif + +// The Xeno does not have the EDBG support chip, which provides a USB-UART bridge +// accessible using Serial (the Arduino serial monitor is normally connected to this). +// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. +// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. +// Remember to use while(!Serial); to wait for a connection before Serial printing. +#if (SAMC21) + #define Serial Serial1 +#else + // When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. + #if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) + #define Serial SerialUSB + #else + #define Serial Serial1 + #endif +#endif + +#endif /* _VARIANT_GENERIC_XX1G_ */ diff --git a/variants/Generic_xx1J/README.md b/variants/Generic_xx1J/README.md new file mode 100644 index 000000000..13325052a --- /dev/null +++ b/variants/Generic_xx1J/README.md @@ -0,0 +1,263 @@ +# MattairTech Xeno (ATSAMD51J/ATSAMD21J/ATSAML21J/ATSAMC21J) + +``` +============== MattairTech Xeno (ATSAMD51J/ATSAMD21J/ATSAML21J/ATSAMC21J) =============== +Alt COM PWM Analog INT Arduino* Arduino* INT Analog PWM COM Alt +========================================================================================= + ------------------- +INT1: | no / B3 | 49 I O VBAT / SDCD+ (SD) +MOTOR_ERROR/IMU_INT/AUX_SW_ERROR | external --- B5 | 48 I INT1+ + | pin \ B4 | 47 3SEN+ (3.3Vsw) +XBDS (XBEE) O 0 | B0 RST | BOOT +MECS+ (MEM) O 1 | B1 A31 | 31 RX1 IO (PROG) / XBDO+ (XBEE) +DAC0 O I 2 | A2 A30 | 30 CLK+ (PROG) +REFA* O 3 | A3 A28(D21/C21)| 28 SHCS (SPI) +3SVO (3.3Vsw) / REFB O 4 | A4 A27 | 27 I INT2 (XBEE, I2C) +DAC1* O 5 | A5 X34 (B2)| 34 O TC~ LED+ / XBRT (XBEE) +CMVO (CUR) O 6 | B6 X33(B16)| 33 I INT0+ / BTN +ASEN+ (HOST) O 7 | B7 X32(B17)| 32 I TC~ MOPS+ (MOTOR) + TX3 O I 8 | B8 A23 | 23 TC~ + RX3 O I 9 | B9 A22 | 22 TC~ +VHDV (VccH) MOSI1 O I 10 | A10 A21 | 21 TC~ +VBDV+ (Vbus) SCK1 O I 11 | A11 A20 | 20 I TC~ +XBCT (XBEE) SDA1/MISO1 TCC~ I 12 | A12 A19 | 19 TC~ CMRI (CUR) + SCL1/SS1 TCC~ I 13 | A13 A18 | 18 TC~ TX1 XBDI+ (XBEE) +HSEN (HOST) TC~ I 14 | B14 A17 | 17 SCL SCL+ (I2C) +BKFS+ (BUCK) TC~ 15 | B15 A16 | 16 SDA SDA+ (I2C) + | Vaux 3.3V | +USB D- (+) / CAN TX | A24 _____ VccL | ! VccL is 3.3V by default. +USB D+ (+) / CAN RX | A25 | | VccH | DO NOT exceed 3.6V on VccL or + | Gnd | USB | Gnd | any IO pin with the D51, D21, + USB: D51/D21/L21 only ------------------- or L21 installed. 5V allowed + CAN: D51/C21 only ONLY with the C21 installed. + 1------------------- By default, VccH is 5V. +MISO+ (SD, MEM, SPI) 43 (S43) | B30 Vcon | +SCK+ (SD, MEM, SPI) 44 (S44) | B23 SPI B22 | 45 (S45) MOSI+ (SD, MEM, SPI) +SHCS(SPI) / SDCS+(SD) 28/46 (S46) | A28(B31) Gnd | + ------------------- + + 1------------------- +L0+ (LVL) TX2 O I 35 (L35) | A6 A7 | 36 (L36) I O RX2 L1+ (LVL) +L2+ (LVL) TCC~ O NMI 37 (L37) | A8 LEVEL A9 | 38 (L38) O TCC~ L3+ (LVL) + | VccH SHIFT VccH | + | Gnd Gnd | +B1+ (MOTOR) TCC~ 39 (M39) | B10 B11 | 40 (M40) TCC~ B2+ (MOTOR) +A1+ (MOTOR) TCC~ 41 (M41) | B12 MOTOR B13 | 42 (M42) TCC~ A2+ (MOTOR) + | Vmotor Gnd | + ------------------- + +* Most pins can be used for more than one function. The same port pin number printed on + the board is also used in Arduino (without the 'A') for all of the Arduino functions. + DAC1 is present only on the D51 and L21. With the D51, REFA should be tied to VccL. + ++ This alternate function is enabled by default if installed. Thus, the associated header + pin cannot be used unless a solder jumper is available to disable the function. + +~ D21/L21/C21: 3 TCC (4,2,2 ch.), 5 TC (2 ch.). D51: 5 TCC (6,4,3,2,2 ch.), 6 TC (2 ch.). + The D51 adds timers to pins A10, A11, A30, A31, B30, B31, A6, A7, A16, A17, B8, and B9, + however, the timer on pin B17 is not present. + +I For the D51, the interrupt on pin A27 is moved to pin B15. + +* The D51 SERCOM configuration is different for UART and SPI. Third UART not available. + TX1=8, RX1=9, TX2=4, RX2=5, MOSI=23, MISO=21, SCK=22, MOSI1=38, MISO1=11, SCK1=37. + +Silkscreen Legend: + Top: A circle around pin is analog function, '~' is timer, small 'I' is interrupt + Bottom: A box around pin means 'Other' function enabled by default depending on variant +``` + + +## Board Configuration Notes + +* **Crystals** + * Either the 32.768KHz crystal or the 16MHz crystal can be used. These pins do not route to headers. + * The bootloader does not use an external crystal by default. Double-tap the reset button to enter manually. + +* **LED (LED_BUILTIN)** + * Bring the pin HIGH to turn the LED on. + * The LED is enabled (solder jumper) by default. + +* **Button (BUTTON_BUILTIN)** + * Button is connected to the Reset pin by default, but can be connected to pin 33 (B16) via solder jumper J2. + * Pressing the button will bring the pin LOW. The pullup must be enabled first. + * A debouncing capacitor is connected, so delay reading the pin at least 10ms after turning on the pullup. + +* **GPIO** + * All pins (including analog) support INPUT, OUTPUT, INPUT_PULLUP, and INPUT_PULLDOWN. + * When PER_ATTR_DRIVE_STRONG is set for the pin (enabled by default), each pin can source or sink a maximum of: + * **D21:** 7mA high, 10mA low + * **L21:** 5mA high, 6mA low (8 high drive pins: 10mA high, 12mA low) + * **C21:** 6mA high, 10mA low (2 high drive pins (A10, A11): 12mA high, 20mA low) + * **D51:** 8mA high, 8mA low + * Internal pull-up and pull-down resistors of 20-60 Kohms (40Kohm typ., disconnected by default). + +* **Analog Inputs** + * Up to 18 pins can be configured as ADC analog inputs. + * Each pin measures from ground to 3.3 volts by default. + * Each pin provides 10 bits of resolution (1024 values) by default. + * 12-bit resolution supported by using the analogReadResolution() function. + * The upper end of the measurement range can be changed using the analogReference() function. + * A reference voltage can be connected to REFA. In this case, the capacitors should be enabled via solder jumper J33. + +* **DAC** + * D21/C21: One 10-bit 350Ksps analog output is available on pin 2. + * L21/D51: Two 12-bit 1Msps analog outputs are available on pins 2 and 5. + +* **PWM** + * Up to 18 pins can be configured as PWM outputs (29 for D51). + * Each pin provides 8 bits of resolution (256 values) by default. + * 12-bit resolution supported by using the analogWriteResolution() function. + +* **External Interrupts** + * Up to 16 pins can be configured with external interrupts. + +* **SERCOM** + * 6 SERCOM are available. + * Up to 3 UART instances (two for D51). More in a future release. + * Up to 2 SPI instances. + * Up to 2 WIRE (I2C) instances. + * The WIRE pullup resistors are enabled by default. + +* **Special Notes for D51** + * Due to errata with the D51 DAC, VccL must be routed to the REFA pin with an external jumper wire. + * In order to use the SPI bus (Micro SD, optional memory device, SPI mode of Xbee radio): + * Needed because SERCOM5 on the D51 must use IOSET2. + * Solder a jumper wire between A21 and B30 (S43, pin 1 of the SPI header, MISO). + * Solder a jumper wire between A23 and B22 (S45, pin 4 of the SPI header, MOSI). + * Solder a jumper wire between A22 and B23 (S44, pin 3 of the SPI header, SCK). + * B22, B23, and B30 cannot be used for other purposes (leave floating) + + * In order to use the Xbee radio UART interface (use SPI mode to avoid this fix): + * Needed because D51 UART transmit data pinout options (TXPO) do not include TX on pad 2. + * Solder a jumper wire between B8 (SERCOM4, TX pad 0) and A18 (XBDI). Solder a jumper wire between B9 (SERCOM4, RX pad 1) and A31 (XBDO). + * A18 and A31 cannot be used for other purposes (leave floating) + + + +## PinDescription table format + +### Note that in 1.6.18-beta-b1 a new compact table format was added. +The standard PinDescription table uses 12 bytes per pin. Define PIN_DESCRIPTION_TABLE_SIMPLE +to use a more compact format that uses only 4 bytes per pin (currently only available +for the D11 chips). In this case, the PinType, PinAttribute, and GCLKCCL columns are not used +(they are not required). Additionally, the SetPortPin() and SetExtIntADC() macros are used to +pack Port and Pin into the PortPin column, and ExtInt and ADCChannelNumber into the ExtIntADC +column. Note that external libraries that reference the PinDescription table directly (uncommon) +will no longer work. This define can be combined with the PIN_MAP_COMPACT define, which +is available in variant.h of the D11 variants. This can save from 10's to over 200 bytes. + +### Note that a new column (GCLKCCL) was added for 1.6.8-beta-b0. +MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE in variant.h is used to track versions. +If using board variant files with the old format, the new core will still read the +table the old way, losing any new features introduced by the new column. Additionally, +new definitions have been added for D51, L21, and C21 support. + +### Each pin can have multiple functions. +The PinDescription table describes how each of the pins can be used by the Arduino +core. Each pin can have multiple functions (ie: ADC input, digital output, PWM, +communications, etc.), and the PinDescription table configures which functions can +be used for each pin. This table is mainly accessed by the pinPeripheral function in +wiring_private.c, which is used to attach a pin to a particular peripheral function. +The communications drivers (ie: SPI, I2C, and UART), analogRead(), analogWrite(), +analogReference(), attachInterrupt(), and pinMode() all call pinPeripheral() to +verify that the pin can perform the function requested, and to configure the pin for +that function. Most of the contents of pinMode() are now in pinPeripheral(). + +### Pin Mapping +There are different ways that pins can be mapped. Typically, there is no relation +between the arduino pin number used, and the actual port pin designator. Thus, the +pcb must be printed with the arduino numbering, otherwise, if the port pin is printed, +a cross reference table is needed to find the arduino pin number. However, this results +in the least amount of space used by the table. Another method, used by default by the +MT-D21E and MT-D11, maps Arduino pin numbers to the actual port pin number (ie: Arduino +pin 28 = Port A28). This works well when there is only one port (or if the PORTB pins +are used for onboard functions and not broken out). PIO_NOT_A_PIN entries must be added +for pins that are used for other purposes or for pins that do not exist (especially the +D11), so some FLASH space may be wasted. For an example of both types, see variant.cpp +from the MT-D11 variant. The Xeno combines both methods, using the actual port pin +designators from both PORTA and PORTB for arduino numbers 0-31 (ie: B1=1, A2=2), then +using arduino numbering only above 31. For 0-31 only one pin from PORTA or PORTB can be +used, leaving the other pin for some number above 31. + +**See [WVariant.h](https://github.com/mattairtech/ArduinoCore-samd/tree/master/cores/arduino/WVariant.h) for the definitions used in the table.** + +### Port +This is the port (ie: PORTA). Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### Pin +This is the pin (bit) within the port. Valid values are 0-31. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetPortPin() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, Port and Pin are combined into one column +using the SetPortPin() packing macro: SetPortPin(PORTA, 2). If the pin is not usable, +use SetPortPin(NOT_A_PORT, 0). + +### PinType +This indicates what peripheral function the pin can be attached to. In most cases, +this is PIO_MULTI, which means that the pin can be anything listed in the PinAttribute +field. It can also be set to a specific peripheral. In this case, any attempt to +configure the pin (using pinPeripheral or pinMode) as anything else will fail (and +pinPeripheral will return -1). This can be used to prevent accidental re-configuration +of a pin that is configured for only one function (ie: USB D- and D+ pins). If a pin +is not used or does not exist, PIO_NOT_A_PIN must be entered in this field. See +WVariant.h for valid entries. These entries are also used as a parameter to +pinPeripheral() with the exception of PIO_NOT_A_PIN and PIO_MULTI. The pinMode function +now calls pinPeripheral() with the desired mode. Note that this field is not used to +select between the different peripherals possible with each of the SERCOM and TIMER +functions. PeripheralAttribute is now used for this. When PIN_DESCRIPTION_TABLE_SIMPLE +is defined, PinType is not used (the pin is treated as PIO_MULTI). + +### PeripheralAttribute +This is an 8-bit bitfield used for various peripheral configuration. It is primarily +used to select between the different peripherals possible with each of the SERCOM and +TIMER functions. TIMER pins are individual, while SERCOM uses a group of two to four +pins. This group of pins can span both peripherals. For example, pin 19 (SPI1 SCK) on +the MT-D21E uses PER_ATTR_SERCOM_ALT while pin 22 (SPI1 MISO) uses PER_ATTR_SERCOM_STD. +Both TIMER and SERCOM can exist for each pin. This bitfield is also used to set the +pin drive strength and the input buffer configuration (ie: totem-pole, open-drain, +buskeeper, etc.). Starting with 1.6.8, the ADC instance on the D51 and C21 (there are +two) is also selected here. Note that the D51 adds a third timer attribute and +requires consultation of the datasheet IOSET tables. See WVariant.h for valid entries. + +### PinAttribute +This is a 32-bit bitfield used to list all of the valid peripheral functions that a +pin can attach to. This includes GPIO functions like PIN_ATTR_OUTPUT. Certain +attributes are shorthand for a combination of other attributes. PIN_ATTR_DIGITAL +includes all of the GPIO functions, while PIN_ATTR_TIMER includes both +PIN_ATTR_TIMER_PWM and PIN_ATTR_TIMER_CAPTURE (capture is not used yet). +PIN_ATTR_ANALOG is an alias to PIN_ATTR_ANALOG_ADC. This bitfield is useful for +limiting a pin to only input related functions or output functions. This allows a pin +to have a more flexible configuration, while restricting the direction (ie: to avoid +contention). See WVariant.h for valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### TCChannel +This is the TC/TCC channel (if any) assigned to the pin. Some TC channels are available +on multiple pins. In general, only one pin should be configured in the pinDescription +table per TC channel. Starting with 1.6.8, the timer type is now encoded in this column +to support the D51, L21 and C21, which use TC numbers starting at 0 (rather than 3 as on +the D21). See WVariant.h for valid entries. + +### ADCChannelNumber +This is the ADC channel (if any) assigned to the pin. The D51 and C21 each have two ADC +instances, which are selected in the PeripheralAttribute column. See WVariant.h for +valid entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### ExtInt +This is the interrupt (if any) assigned to the pin. Some interrupt numbers are +available on multiple pins. In general, only one pin should be configured in the +pinDescription table per interrupt number. Thus, for example, if an interrupt was +needed on pin 2, EXTERNAL_INT_2 can be moved from pin 18. See WVariant.h for valid +entries. Not used with PIN_DESCRIPTION_TABLE_SIMPLE. + +### SetExtIntADC() +When PIN_DESCRIPTION_TABLE_SIMPLE is defined, ExtInt and ADCChannelNumber are combined +into one column using the SetExtIntADC() packing macro: SetExtIntADC(EXTERNAL_INT_4, +ADC_Channel2). If the pin is not usable, use SetExtIntADC(EXTERNAL_INT_NONE, No_ADC_Channel). + +### GCLKCCL +This column was added in 1.6.8-beta-b0. It is not yet used. It will eventually support +the Analog Comparators (AC), the Configurable Custom Logic (CCL) peripherals of the D51, +L21 and C21, and the GCLK outputs (inputs) of all of the MCUs. Not used with +PIN_DESCRIPTION_TABLE_SIMPLE. diff --git a/variants/Generic_xx1J/debug_scripts/SAMC21J15A.gdb b/variants/Generic_xx1J/debug_scripts/SAMC21J15A.gdb new file mode 100644 index 000000000..f24fcc094 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMC21J15A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21j15" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMC21J16A.gdb b/variants/Generic_xx1J/debug_scripts/SAMC21J16A.gdb new file mode 100644 index 000000000..2f3ae4e2e --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMC21J16A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21j16" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMC21J17A.gdb b/variants/Generic_xx1J/debug_scripts/SAMC21J17A.gdb new file mode 100644 index 000000000..d3973c1e9 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMC21J17A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21j17" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMC21J18A.gdb b/variants/Generic_xx1J/debug_scripts/SAMC21J18A.gdb new file mode 100644 index 000000000..5ac5ede3b --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMC21J18A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samc21j18" -f target/at91samcXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMD21J15A.gdb b/variants/Generic_xx1J/debug_scripts/SAMD21J15A.gdb new file mode 100644 index 000000000..398b3f7fb --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMD21J15A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21j15" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMD21J16A.gdb b/variants/Generic_xx1J/debug_scripts/SAMD21J16A.gdb new file mode 100644 index 000000000..7f6ec62f8 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMD21J16A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21j16" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMD21J17A.gdb b/variants/Generic_xx1J/debug_scripts/SAMD21J17A.gdb new file mode 100644 index 000000000..43d597c33 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMD21J17A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21j17" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMD21J18A.gdb b/variants/Generic_xx1J/debug_scripts/SAMD21J18A.gdb new file mode 100644 index 000000000..7a7cc3a36 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMD21J18A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd21j18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMD51J18A.gdb b/variants/Generic_xx1J/debug_scripts/SAMD51J18A.gdb new file mode 100644 index 000000000..27e79bcc6 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMD51J18A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51j18" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMD51J19A.gdb b/variants/Generic_xx1J/debug_scripts/SAMD51J19A.gdb new file mode 100644 index 000000000..ecc334955 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMD51J19A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51j19" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAMD51J20A.gdb b/variants/Generic_xx1J/debug_scripts/SAMD51J20A.gdb new file mode 100644 index 000000000..d693f22e2 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAMD51J20A.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91samd51j20" -f target/at91samdXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAML21J16B.gdb b/variants/Generic_xx1J/debug_scripts/SAML21J16B.gdb new file mode 100644 index 000000000..efcfa87ec --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAML21J16B.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21j16" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAML21J17B.gdb b/variants/Generic_xx1J/debug_scripts/SAML21J17B.gdb new file mode 100644 index 000000000..bcfbb4629 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAML21J17B.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21j17" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/debug_scripts/SAML21J18B.gdb b/variants/Generic_xx1J/debug_scripts/SAML21J18B.gdb new file mode 100644 index 000000000..4dc17da41 --- /dev/null +++ b/variants/Generic_xx1J/debug_scripts/SAML21J18B.gdb @@ -0,0 +1,31 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +# Define 'reset' command +define reset + +info reg + +break main + +# End of 'reset' command +end + +target remote | openocd -c "interface cmsis-dap" -c "set CHIPNAME at91saml21j18" -f target/at91samlXX.cfg -c "gdb_port pipe; log_output openocd.log" diff --git a/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld new file mode 100644 index 000000000..90d7f473d --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_128KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00020000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld new file mode 100644 index 000000000..74b6b298c --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_256KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld new file mode 100644 index 000000000..9030f5437 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_32KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00008000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld new file mode 100644 index 000000000..3f276ac1d --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_64KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00010000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_1MB.ld b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_1MB.ld new file mode 100644 index 000000000..cdfaf8470 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_1MB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00100000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld new file mode 100644 index 000000000..73ff15c35 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_256KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00040000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld new file mode 100644 index 000000000..4f7c9f2e5 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/16KB_Bootloader/flash_m4f_512KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x4000, LENGTH = 0x00080000-0x4000 /* First 16KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x4000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld new file mode 100644 index 000000000..4b2f64bca --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_128KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00020000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld new file mode 100644 index 000000000..b446667fd --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_256KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld new file mode 100644 index 000000000..f60a390ee --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_32KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00008000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld new file mode 100644 index 000000000..3b999367f --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_64KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00010000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_1MB.ld b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_1MB.ld new file mode 100644 index 000000000..105d2866e --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_1MB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00100000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld new file mode 100644 index 000000000..31ec8580e --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_256KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00040000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld new file mode 100644 index 000000000..e2cbcadc2 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/8KB_Bootloader/flash_m4f_512KB.ld @@ -0,0 +1,217 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000+0x2000, LENGTH = 0x00080000-0x2000 /* First 8KB used by bootloader */ + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + + KEEP(*(.sketch_boot)) + + . = ALIGN(0x2000); + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_128KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_128KB.ld new file mode 100644 index 000000000..f8ecfac5e --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_128KB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00020000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00004000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_256KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_256KB.ld new file mode 100644 index 000000000..4bb2f0121 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_256KB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_32KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_32KB.ld new file mode 100644 index 000000000..805682b86 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_32KB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00008000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00001000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_64KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_64KB.ld new file mode 100644 index 000000000..e1d7956f4 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_64KB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00002000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_1MB.ld b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_1MB.ld new file mode 100644 index 000000000..39b6b1204 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_1MB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld new file mode 100644 index 000000000..21cabbc46 --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_256KB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00020000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld new file mode 100644 index 000000000..8379fbb7c --- /dev/null +++ b/variants/Generic_xx1J/linker_scripts/gcc/No_Bootloader/flash_m4f_512KB.ld @@ -0,0 +1,214 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* Linker script to configure memory regions. + * Need modifying for a specific board. + * FLASH.ORIGIN: starting address of flash + * FLASH.LENGTH: length of flash + * RAM.ORIGIN: starting address of RAM bank 0 + * RAM.LENGTH: length of RAM bank 0 + */ +MEMORY +{ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 + RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00030000 +} + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __copy_table_start__ + * __copy_table_end__ + * __zero_table_start__ + * __zero_table_end__ + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + * __ram_end__ + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .text : + { + __text_start__ = .; + KEEP(*(.isr_vector)) + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + __exidx_start = .; + .ARM.exidx : + { + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + } > FLASH + __exidx_end = .; + + /* To copy multiple ROM to RAM sections, + * uncomment .copy.table section and, + * define __STARTUP_COPY_MULTIPLE in startup_ARMCMx.S */ + /* + .copy.table : + { + . = ALIGN(4); + __copy_table_start__ = .; + LONG (__etext) + LONG (__data_start__) + LONG (__data_end__ - __data_start__) + LONG (__etext2) + LONG (__data2_start__) + LONG (__data2_end__ - __data2_start__) + __copy_table_end__ = .; + } > FLASH + */ + + /* To clear multiple BSS sections, + * uncomment .zero.table section and, + * define __STARTUP_CLEAR_BSS_MULTIPLE in startup_ARMCMx.S */ + /* + .zero.table : + { + . = ALIGN(4); + __zero_table_start__ = .; + LONG (__bss_start__) + LONG (__bss_end__ - __bss_start__) + LONG (__bss2_start__) + LONG (__bss2_end__ - __bss2_start__) + __zero_table_end__ = .; + } > FLASH + */ + + __etext = .; + + .data : AT (__etext) + { + __data_start__ = .; + *(vtable) + *(.ramfunc*) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + KEEP(*(.jcr*)) + . = ALIGN(16); + /* All data end */ + __data_end__ = .; + + } > RAM + + .bss : + { + . = ALIGN(4); + __bss_start__ = .; + *(.bss*) + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + } > RAM + + .heap (COPY): + { + __end__ = .; + PROVIDE(end = .); + *(.heap*) + __HeapLimit = .; + } > RAM + + /* .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later */ + .stack_dummy (COPY): + { + *(.stack*) + } > RAM + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ORIGIN(RAM) + LENGTH(RAM) ; + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + PROVIDE(__stack = __StackTop); + + __ram_end__ = ORIGIN(RAM) + LENGTH(RAM) -1 ; + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") +} diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg new file mode 100644 index 000000000..301d5a6a3 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21j15 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg new file mode 100644 index 000000000..3987667bf --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21j16 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg new file mode 100644 index 000000000..7b9a31761 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21j17 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg new file mode 100644 index 000000000..d3bb003e1 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samc21j18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samcXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg new file mode 100644 index 000000000..f29c2f30e --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21j15 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg new file mode 100644 index 000000000..20af5e781 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21j16 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg new file mode 100644 index 000000000..e6cdfc819 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21j17 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg new file mode 100644 index 000000000..575bf3e30 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd21j18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg new file mode 100644 index 000000000..e9c345e37 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd51j18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg new file mode 100644 index 000000000..91d1742e7 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd51j19 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg new file mode 100644 index 000000000..27a498f76 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91samd51j20 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samdXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg b/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg new file mode 100644 index 000000000..ea27f6731 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21j16 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg b/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg new file mode 100644 index 000000000..800bf825e --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21j17 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg b/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg new file mode 100644 index 000000000..733028407 --- /dev/null +++ b/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg @@ -0,0 +1,30 @@ +# +# Arduino Zero OpenOCD script. +# +# Copyright (c) 2014-2015 Arduino LLC. All right reserved. +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +source [find interface/cmsis-dap.cfg] + +# chip name +set CHIPNAME at91saml21j18 +set ENDIAN little + +# choose a port here +set telnet_port 0 + +source [find target/at91samlXX.cfg] diff --git a/variants/Generic_xx1J/pins_arduino.h b/variants/Generic_xx1J/pins_arduino.h new file mode 100644 index 000000000..36ab06c77 --- /dev/null +++ b/variants/Generic_xx1J/pins_arduino.h @@ -0,0 +1,21 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// API compatibility +#include "variant.h" + diff --git a/variants/Generic_xx1J/variant.cpp b/variants/Generic_xx1J/variant.cpp new file mode 100644 index 000000000..063a887b2 --- /dev/null +++ b/variants/Generic_xx1J/variant.cpp @@ -0,0 +1,403 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 29 January 2018 by Justin Mattair + * for MattairTech boards (www.mattairtech.com) + * + * See README.md for documentation and pin mapping information + */ + + +#include "variant.h" + +/* + * Pins descriptions + */ +const PinDescription g_APinDescription[]= +{ +#if (SAMD51) + // 0..11 - Analog capable pins + { PORTB, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel12, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel13, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH0, ADC_Channel0, EXTERNAL_INT_8, GCLK_CCL_NONE }, + { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC4_CH1, ADC_Channel1, EXTERNAL_INT_9, GCLK_CCL_NONE }, + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH2, ADC_Channel10, EXTERNAL_INT_10, GCLK_CCL_NONE }, + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH3, ADC_Channel11, EXTERNAL_INT_11, GCLK_CCL_NONE }, + + // 12..Digital functions + { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, + { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, + { PORTB, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, + { PORTB, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH4, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH6, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH7, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 - Digital functions + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO + + // 32..34 - X pins + { PORTB, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // X32 + { PORTB, 16, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // X33 + { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC2_CH2, ADC_Channel14, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // X34, LED + + // 35..38 - Level Shifter Header + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH0, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // L35 + { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC1_CH1, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // L36 + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC0_CH0, ADC_Channel2, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // L37 + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC0_CH1, ADC_Channel3, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // L38 + + // 39..42 - Motor Controller Header + { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M39 + { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M40 + { PORTB, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC3_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M41 + { PORTB, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M42 + + // 43..46 - SPI Header + { PORTB, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S43 + { PORTB, 23, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S44 + { PORTB, 22, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S45 + { PORTB, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S46 + + // 47..49 - No header pins + { PORTB, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 47 + { PORTB, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, // 48 + { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel15, EXTERNAL_INT_3, GCLK_CCL_NONE }, // 49 + +#elif (SAMD21) + // 0..11 - Analog capable pins + { PORTB, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel14, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel15, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, + { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_9, GCLK_CCL_NONE }, + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_10, GCLK_CCL_NONE }, + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, + + // 12..Digital functions + { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, + { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, + { PORTB, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC5_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, + { PORTB, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC5_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_COM), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC7_CH0, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC7_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 - Digital functions + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO + + // 32..34 - X pins + { PORTB, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC6_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // X32 + { PORTB, 16, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // X33 + { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC6_CH0, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // X34, LED + + // 35..38 - Level Shifter Header + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // L35 + { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // L36 + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TCC1_CH2, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // L37 + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TCC1_CH3, ADC_Channel17, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // L38 + + // 39..42 - Motor Controller Header + { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M39 + { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M40 + { PORTB, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M41 + { PORTB, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M42 + + // 43..46 - SPI Header + { PORTB, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S43 + { PORTB, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S44 + { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S45 + { PORTB, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S46 + + // 47..49 - No header pins + { PORTB, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 47 + { PORTB, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, // 48 + { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_3, GCLK_CCL_NONE }, // 49 + +#elif (SAML21) + // 0..11 - Analog capable pins + { PORTB, 0, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 1, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 6, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel14, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 7, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel15, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel2, EXTERNAL_INT_8, GCLK_CCL_NONE }, + { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_9, GCLK_CCL_NONE }, + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel18, EXTERNAL_INT_10, GCLK_CCL_NONE }, + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel19, EXTERNAL_INT_11, GCLK_CCL_NONE }, + + // 12..Digital functions + { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, + { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, + { PORTB, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, + { PORTB, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 - Digital functions + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO + + // 32..34 - X pins + { PORTB, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // X32 + { PORTB, 16, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // X33 + { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC2_CH0, ADC_Channel10, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // X34, LED + + // 35..38 - Level Shifter Header + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // L35 + { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // L36 + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH2, ADC_Channel16, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // L37 + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH3, ADC_Channel17, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // L38 + + // 39..42 - Motor Controller Header + { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M39 + { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M40 + { PORTB, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M41 + { PORTB, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M42 + + // 43..46 - SPI Header + { PORTB, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S43 + { PORTB, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S44 + { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S45 + { PORTB, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S46 + + // 47..49 - No header pins + { PORTB, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 47 + { PORTB, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, // 48 + { PORTB, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_3, GCLK_CCL_NONE }, // 49 + +#elif (SAMC21) + // 0..11 - Analog capable pins + { PORTB, 0, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 1, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 2, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DAC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel0, EXTERNAL_INT_2, GCLK_CCL_NONE }, + { PORTA, 3, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel1, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_REF|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel8, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL), NOT_ON_TIMER, ADC_Channel9, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTB, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel4, EXTERNAL_INT_8, GCLK_CCL_NONE }, + { PORTB, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel5, EXTERNAL_INT_9, GCLK_CCL_NONE }, + { PORTA, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel10, EXTERNAL_INT_10, GCLK_CCL_NONE }, + { PORTA, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel11, EXTERNAL_INT_11, GCLK_CCL_NONE }, + + // 12..Digital functions + { PORTA, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH0, No_ADC_Channel, EXTERNAL_INT_12, GCLK_CCL_NONE }, + { PORTA, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC2_CH1, No_ADC_Channel, EXTERNAL_INT_13, GCLK_CCL_NONE }, + { PORTB, 14, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT|PIN_ATTR_COM), TC1_CH0, No_ADC_Channel, EXTERNAL_INT_14, GCLK_CCL_NONE }, + { PORTB, 15, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_COM), TC1_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 16, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 18, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC4_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 19, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC4_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 20, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TC3_CH0, No_ADC_Channel, EXTERNAL_INT_4, GCLK_CCL_NONE }, + { PORTA, 21, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TC3_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH0, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { PORTA, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC0_CH1, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + + // 24..26 - USB_NEGATIVE and USB_POSITIVE, pin 26 does not exist + { PORTA, 24, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DM + { PORTA, 25, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_COM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // USB/DP + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 27..29 - Digital functions + { PORTA, 27, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_15, GCLK_CCL_NONE }, + { PORTA, 28, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, + { NOT_A_PORT, 0, PIO_NOT_A_PIN, PER_ATTR_NONE, PIN_ATTR_NONE, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // Unused + + // 30..31 Digital functions / Debug interface (SWD CLK and SWD IO) + { PORTA, 30, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD CLK + { PORTA, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // SWD IO + + // 32..34 - X pins + { PORTB, 17, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_EXTINT), TC2_CH1, No_ADC_Channel, EXTERNAL_INT_1, GCLK_CCL_NONE }, // X32 + { PORTB, 16, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_0, GCLK_CCL_NONE }, // X33 + { PORTB, 2, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_STD|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TC2_CH0, ADC_Channel2, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // X34, LED + + // 35..38 - Level Shifter Header + { PORTA, 6, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel6, EXTERNAL_INT_6, GCLK_CCL_NONE }, // L35 + { PORTA, 7, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel7, EXTERNAL_INT_7, GCLK_CCL_NONE }, // L36 + { PORTA, 8, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM|PIN_ATTR_EXTINT), TCC1_CH2, ADC_Channel10, EXTERNAL_INT_NMI, GCLK_CCL_NONE }, // L37 + { PORTA, 9, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT|PER_ATTR_SERCOM_STD|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_TIMER|PIN_ATTR_SERCOM), TCC1_CH3, ADC_Channel11, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // L38 + + // 39..42 - Motor Controller Header + { PORTB, 10, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH4, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M39 + { PORTB, 11, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH5, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M40 + { PORTB, 12, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH6, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M41 + { PORTB, 13, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_TIMER_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), TCC0_CH7, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // M42 + + // 43..46 - SPI Header + { PORTB, 30, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S43 + { PORTB, 23, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S44 + { PORTB, 22, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S45 + { PORTB, 31, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_SERCOM_ALT), (PIN_ATTR_DIGITAL|PIN_ATTR_SERCOM), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // S46 + + // 47..49 - No header pins + { PORTB, 4, PIO_MULTI, PER_ATTR_DRIVE_STRONG, PIN_ATTR_DIGITAL, NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_NONE, GCLK_CCL_NONE }, // 47 + { PORTB, 5, PIO_MULTI, PER_ATTR_DRIVE_STRONG, (PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, No_ADC_Channel, EXTERNAL_INT_5, GCLK_CCL_NONE }, // 48 + { PORTB, 3, PIO_MULTI, (PER_ATTR_DRIVE_STRONG|PER_ATTR_ADC_ALT), (PIN_ATTR_ADC|PIN_ATTR_DIGITAL|PIN_ATTR_EXTINT), NOT_ON_TIMER, ADC_Channel3, EXTERNAL_INT_3, GCLK_CCL_NONE }, // 49 + +#else + #error "variant.cpp: Unsupported chip" +#endif +} ; + +#if (SAMD21) +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC3, TC4, TC5, TC6, TC7 } ; +#elif (SAMC21 || SAML21) +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TC0, TC1, TC2, TC3, TC4 } ; +#elif (SAMD51) +const void* g_apTCInstances[TCC_INST_NUM+TC_INST_NUM]={ TCC0, TCC1, TCC2, TCC3, TCC4, TC0, TC1, TC2, TC3, TC4, TC5 } ; +#endif + +// Multi-serial objects instantiation +SERCOM sercom0( SERCOM0 ) ; +SERCOM sercom1( SERCOM1 ) ; +SERCOM sercom2( SERCOM2 ) ; +SERCOM sercom3( SERCOM3 ) ; +SERCOM sercom4( SERCOM4 ) ; +SERCOM sercom5( SERCOM5 ) ; + +#if defined(ONE_UART) || defined(TWO_UART) || defined(THREE_UART) +Uart Serial1( SERCOM_INSTANCE_SERIAL1, PIN_SERIAL1_RX, PIN_SERIAL1_TX, PAD_SERIAL1_RX, PAD_SERIAL1_TX ) ; + + #if (SAMD51) + void SERCOM4_0_Handler(void) { + Serial1.dataRegisterEmptyHandler(); + } + + void SERCOM4_2_Handler(void) { + Serial1.availableDataHandler(); + } + + void SERCOM4_3_Handler(void) { + Serial1.errorHandler(); + } + #else + void SERCOM1_Handler() { + Serial1.IrqHandler(); + } + #endif +#endif + +#if defined(TWO_UART) || defined(THREE_UART) +Uart Serial2( SERCOM_INSTANCE_SERIAL2, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX ) ; + + #if (SAMD51) + void SERCOM0_0_Handler(void) { + Serial2.dataRegisterEmptyHandler(); + } + + void SERCOM0_2_Handler(void) { + Serial2.availableDataHandler(); + } + + void SERCOM0_3_Handler(void) { + Serial2.errorHandler(); + } + #else + void SERCOM0_Handler() { + Serial2.IrqHandler(); + } + #endif +#endif + +#if defined(THREE_UART) +Uart Serial3( SERCOM_INSTANCE_SERIAL3, PIN_SERIAL3_RX, PIN_SERIAL3_TX, PAD_SERIAL3_RX, PAD_SERIAL3_TX ) ; + + #if (SAMD51) + void SERCOM4_0_Handler(void) { + Serial3.dataRegisterEmptyHandler(); + } + + void SERCOM4_2_Handler(void) { + Serial3.availableDataHandler(); + } + + void SERCOM4_3_Handler(void) { + Serial3.errorHandler(); + } + #else + void SERCOM4_Handler() { + Serial3.IrqHandler(); + } + #endif +#endif diff --git a/variants/Generic_xx1J/variant.h b/variants/Generic_xx1J/variant.h new file mode 100644 index 000000000..fb70d5f72 --- /dev/null +++ b/variants/Generic_xx1J/variant.h @@ -0,0 +1,501 @@ +/* + Copyright (c) 2014-2015 Arduino LLC. All right reserved. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Modified 29 January 2018 by Justin Mattair + * for MattairTech boards (www.mattairtech.com) + * + * See README.md for documentation and pin mapping information + */ + +#ifndef _VARIANT_GENERIC_XX1J_ +#define _VARIANT_GENERIC_XX1J_ + +/* The definitions here need the MattairTech SAMD core >=1.6.8. + * The format is different than the stock Arduino SAMD core, + * which uses ARDUINO_SAMD_VARIANT_COMPLIANCE instead. + */ +#define MATTAIRTECH_ARDUINO_SAMD_VARIANT_COMPLIANCE 10608 + +/*---------------------------------------------------------------------------- + * Clock Configuration + *----------------------------------------------------------------------------*/ + +/* Master clock frequency (also Fcpu frequency). With the D51, this can be + * either 120000000ul or 48000000ul (selected in the menu). See README.md. + */ +#define VARIANT_MCK (F_CPU) + +/* If CLOCKCONFIG_HS_CRYSTAL is defined, then HS_CRYSTAL_FREQUENCY_HERTZ + * must also be defined with the external crystal frequency in Hertz. + */ +#define HS_CRYSTAL_FREQUENCY_HERTZ 16000000UL + +/* If the PLL is used (CLOCKCONFIG_32768HZ_CRYSTAL, or CLOCKCONFIG_HS_CRYSTAL + * defined), then PLL_FRACTIONAL_ENABLED can be defined, which will result in + * a more accurate 48MHz output frequency at the expense of increased jitter. + */ +//#define PLL_FRACTIONAL_ENABLED + +/* If both PLL_FAST_STARTUP and CLOCKCONFIG_HS_CRYSTAL are defined, the crystal + * will be divided down to 1MHz - 2MHz, rather than 32KHz - 64KHz, before being + * multiplied by the PLL. This will result in a faster lock time for the PLL, + * however, it will also result in a less accurate PLL output frequency if the + * crystal is not divisible (without remainder) by 1MHz. In this case, define + * PLL_FRACTIONAL_ENABLED as well. + */ +//#define PLL_FAST_STARTUP + +/* The fine calibration value for DFLL open-loop mode is defined here. + * The coarse calibration value is loaded from NVM OTP (factory calibration values). + */ +#define NVM_SW_CALIB_DFLL48M_FINE_VAL (512) + +/* Define CORTEX_M_CACHE_ENABLED to enable the Cortex M cache (D51 only). + */ +#define CORTEX_M_CACHE_ENABLED + +/*---------------------------------------------------------------------------- + * Headers + *----------------------------------------------------------------------------*/ + +#include "WVariant.h" +#include "sam.h" + +#ifdef __cplusplus +#include "SERCOM.h" +#include "Uart.h" +#endif // __cplusplus + +#ifdef __cplusplus +extern "C" +{ +#endif // __cplusplus + +/*---------------------------------------------------------------------------- + * Pins + *----------------------------------------------------------------------------*/ + +// Number of pins defined in PinDescription array +#define NUM_PIN_DESCRIPTION_ENTRIES (50u) + +#define PINS_COUNT NUM_PIN_DESCRIPTION_ENTRIES +#define NUM_DIGITAL_PINS PINS_COUNT +#define NUM_ANALOG_INPUTS (18u) + +#if (SAMD21 || SAMC21) +#define NUM_ANALOG_OUTPUTS (1u) +#elif (SAMD51 || SAML21) +#define NUM_ANALOG_OUTPUTS (2u) +#else +#error "variant.h: Unsupported chip" +#endif + +#define analogInputToDigitalPin(p) (p) + +#define digitalPinToPort(P) ( &(PORT->Group[g_APinDescription[P].ulPort]) ) +#define digitalPinToBitMask(P) ( 1 << g_APinDescription[P].ulPin ) +//#define analogInPinToBit(P) ( ) +#define portOutputRegister(port) ( &(port->OUT.reg) ) +#define portInputRegister(port) ( &(port->IN.reg) ) +#define portModeRegister(port) ( &(port->DIR.reg) ) +#define digitalPinHasPWM(P) ( (g_APinDescription[P].ulPinAttribute & PIN_ATTR_TIMER_PWM) == PIN_ATTR_TIMER_PWM ) + +/* + * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD + * architecture. If you need to check if a pin supports PWM you must + * use digitalPinHasPWM(..). + * + * https://github.com/arduino/Arduino/issues/1833 + */ +// #define digitalPinToTimer(P) + +/* LEDs + * None of these defines are currently used by the core. + * The Xeno onboard LED is on pin 34. + * The RX and TX LEDs are not present. + * You may optionally add them to any free pins. + */ +#define PIN_LED_13 (34u) +#define PIN_LED_RXL (22u) +#define PIN_LED_TXL (23u) +#define PIN_LED PIN_LED_13 +#define PIN_LED2 PIN_LED_RXL +#define PIN_LED3 PIN_LED_TXL +#define LED_BUILTIN PIN_LED_13 + +/* Buttons + * Note that Button is connected to Reset by default. + * A solder jumper can be changed to route Button B to pin 33 instead. + * There is a debouncing capacitor connected, so delay reading the pin for + * at least 45ms after turning on the pullup to allow the capacitor to charge. + */ +#define BUTTON (33u) +#define BUTTON_BUILTIN BUTTON + + +/* + * Analog pins + */ +#define PIN_A0 (0ul) +#define PIN_A1 (1ul) +#define PIN_A2 (2ul) +#define PIN_A3 (3ul) +#define PIN_A4 (4ul) +#define PIN_A5 (5ul) +#define PIN_A6 (6ul) +#define PIN_A7 (7ul) +#define PIN_A8 (8ul) +#define PIN_A9 (9ul) +#define PIN_A10 (10ul) +#define PIN_A11 (11ul) +#define PIN_A34 (34ul) +#define PIN_A35 (35ul) +#define PIN_A36 (36ul) +#define PIN_A37 (37ul) +#define PIN_A38 (38ul) +#define PIN_A49 (49ul) +#define PIN_DAC0 (2ul) +#if (SAMD51 || SAML21) +#define PIN_DAC1 (5ul) +#endif + +static const uint8_t A0 = PIN_A0; +static const uint8_t A1 = PIN_A1; +static const uint8_t A2 = PIN_A2; +static const uint8_t A3 = PIN_A3; +static const uint8_t A4 = PIN_A4; +static const uint8_t A5 = PIN_A5; +static const uint8_t A6 = PIN_A6; +static const uint8_t A7 = PIN_A7; +static const uint8_t A8 = PIN_A8; +static const uint8_t A9 = PIN_A9; +static const uint8_t A10 = PIN_A10; +static const uint8_t A11 = PIN_A11; +static const uint8_t A34 = PIN_A34; +static const uint8_t A35 = PIN_A35; +static const uint8_t A36 = PIN_A36; +static const uint8_t A37 = PIN_A37; +static const uint8_t A38 = PIN_A38; +static const uint8_t A49 = PIN_A49; +static const uint8_t DAC0 = PIN_DAC0; +#if (SAMD51 || SAML21) +static const uint8_t DAC1 = PIN_DAC1; +#endif + +#define ADC_RESOLUTION 12 + +// #define REMAP_ANALOG_PIN_ID(pin) if ( pin < A0 ) pin += A0 + +/* Set default analog voltage reference */ +#define VARIANT_AR_DEFAULT AR_DEFAULT + +/* Reference voltage pins (define even if not enabled with PIN_ATTR_REF in the PinDescription table) */ +#define REFA_PIN (3ul) +#define REFB_PIN (4ul) +#if (SAMD51) +#define REFC_PIN (35ul) +#endif + + +// The ATN pin may be used in the future as the first SPI chip select. +// On boards that do not have the Arduino physical form factor, it can to set to any free pin. +#if (SAMD21 || SAMC21) +#define PIN_ATN (28ul) +#elif (SAMD51 || SAML21) +#define PIN_ATN (21ul) +#endif +static const uint8_t ATN = PIN_ATN; + + +/* + * Serial interfaces + */ +#if (defined(THREE_UART) && SAMD51) + #error "variant.h: Only two UARTs are available with the D51. Please choose a TWO_UART_* option" +#endif + +// Serial1 +#if (SAMD51) + #define PIN_SERIAL1_RX (9ul) + #define PIN_SERIAL1_TX (8ul) + #define PAD_SERIAL1_TX (UART_TX_PAD_0) + #define PAD_SERIAL1_RX (SERCOM_RX_PAD_1) + #define SERCOM_INSTANCE_SERIAL1 &sercom4 +#else + #define PIN_SERIAL1_RX (31ul) + #define PIN_SERIAL1_TX (18ul) + #define PAD_SERIAL1_TX (UART_TX_PAD_2) + #define PAD_SERIAL1_RX (SERCOM_RX_PAD_3) + #define SERCOM_INSTANCE_SERIAL1 &sercom1 +#endif + +// Serial2 +#if (SAMD51) + #define PIN_SERIAL2_RX (5ul) + #define PIN_SERIAL2_TX (4ul) + #define PAD_SERIAL2_TX (UART_TX_PAD_0) + #define PAD_SERIAL2_RX (SERCOM_RX_PAD_1) + #define SERCOM_INSTANCE_SERIAL2 &sercom0 +#else + #define PIN_SERIAL2_RX (36ul) + #define PIN_SERIAL2_TX (35ul) + #define PAD_SERIAL2_TX (UART_TX_PAD_2) + #define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) + #define SERCOM_INSTANCE_SERIAL2 &sercom0 +#endif + +// Serial3 (a third serial is not available with the D51 on this board) +#define PIN_SERIAL3_RX (9ul) +#define PIN_SERIAL3_TX (8ul) +#define PAD_SERIAL3_TX (UART_TX_PAD_0) +#define PAD_SERIAL3_RX (SERCOM_RX_PAD_1) + +#define SERCOM_INSTANCE_SERIAL3 &sercom4 + + +/* + * SPI Interfaces + */ +#if defined(TWO_SPI) +#define SPI_INTERFACES_COUNT 2 +#elif defined(THREE_SPI) +#define SPI_INTERFACES_COUNT 3 +#else +#define SPI_INTERFACES_COUNT 1 +#endif + +#if (SAMD51) +#define PIN_SPI_MISO (21u) +#define PIN_SPI_MOSI (23u) +#define PIN_SPI_SCK (22u) +#define PIN_SPI_SS (20u) +#define PAD_SPI_TX SPI_PAD_0_SCK_1 +#define PAD_SPI_RX SERCOM_RX_PAD_3 +#else +#define PIN_SPI_MISO (43u) +#define PIN_SPI_MOSI (45u) +#define PIN_SPI_SCK (44u) +#define PIN_SPI_SS (46u) +#define PAD_SPI_TX SPI_PAD_2_SCK_3 +#define PAD_SPI_RX SERCOM_RX_PAD_0 +#endif +#define PERIPH_SPI sercom5 + +static const uint8_t SS = PIN_SPI_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. +static const uint8_t MOSI = PIN_SPI_MOSI ; +static const uint8_t MISO = PIN_SPI_MISO ; +static const uint8_t SCK = PIN_SPI_SCK ; + +#if (SAMD51) +#define PIN_SPI1_MISO (11u) +#define PIN_SPI1_MOSI (38u) +#define PIN_SPI1_SCK (37u) +#define PIN_SPI1_SS (10u) +#define PAD_SPI1_TX SPI_PAD_0_SCK_1 +#define PAD_SPI1_RX SERCOM_RX_PAD_3 +#else +#define PIN_SPI1_MISO (12u) +#define PIN_SPI1_MOSI (10u) +#define PIN_SPI1_SCK (11u) +#define PIN_SPI1_SS (13u) +#define PAD_SPI1_TX SPI_PAD_2_SCK_3 +#define PAD_SPI1_RX SERCOM_RX_PAD_0 +#endif +#define PERIPH_SPI1 sercom2 + +static const uint8_t SS1 = PIN_SPI1_SS ; // The SERCOM SS PAD is available on this pin but HW SS isn't used. Set here only for reference. +static const uint8_t MOSI1 = PIN_SPI1_MOSI ; +static const uint8_t MISO1 = PIN_SPI1_MISO ; +static const uint8_t SCK1 = PIN_SPI1_SCK ; + + +/* + * Wire Interfaces + */ +#if defined(TWO_WIRE) +#define WIRE_INTERFACES_COUNT 2 +#elif defined(THREE_WIRE) +#define WIRE_INTERFACES_COUNT 3 +#else +#define WIRE_INTERFACES_COUNT 1 +#endif + +#define PIN_WIRE_SDA (16u) +#define PIN_WIRE_SCL (17u) +#if (SAMD51) + #define PERIPH_WIRE sercom1 + #define WIRE_STOP_DETECTED_HANDLER SERCOM1_0_Handler + #define WIRE_ADDRESS_MATCH_HANDLER SERCOM1_1_Handler + #define WIRE_DATA_READY_HANDLER SERCOM1_2_Handler +#else + #define PERIPH_WIRE sercom3 + #define WIRE_IT_HANDLER SERCOM3_Handler +#endif + +static const uint8_t SDA = PIN_WIRE_SDA; +static const uint8_t SCL = PIN_WIRE_SCL; + +#define PIN_WIRE1_SDA (12u) +#define PIN_WIRE1_SCL (13u) +#define PERIPH_WIRE1 sercom2 +#if (SAMD51) + #define WIRE1_STOP_DETECTED_HANDLER SERCOM2_0_Handler + #define WIRE1_ADDRESS_MATCH_HANDLER SERCOM2_1_Handler + #define WIRE1_DATA_READY_HANDLER SERCOM2_2_Handler +#else + #define WIRE1_IT_HANDLER SERCOM2_Handler +#endif + +static const uint8_t SDA1 = PIN_WIRE1_SDA; +static const uint8_t SCL1 = PIN_WIRE1_SCL; + + +/* + * USB - Define PIN_USB_HOST_ENABLE to assert the defined pin to + * PIN_USB_HOST_ENABLE_VALUE during startup. Leave undefined to disable this pin. + */ +#define PIN_USB_DM (24ul) +#define PIN_USB_DP (25ul) +//#define PIN_USB_HOST_ENABLE (14ul) +#define PIN_USB_HOST_ENABLE_VALUE 0 + +/* + * I2S Interfaces + * SAMD51, PDM, and MCLK support will be added hopefully March 2018 + */ + +#if (SAMD51) +// On the SAMD51, device 0 is TX only using SDO (PIN_I2S_SD), and device 1 is RX only using SDI (PIN_I2S1_SD) +#define I2S_INTERFACES_COUNT 2 +#define I2S_DEVICE 0 +#define I2S1_DEVICE 1 +#define I2S_CLOCK_GENERATOR 7 +#define I2S1_CLOCK_GENERATOR 7 +// TX +#define PIN_I2S_MCK (32u) +#define PIN_I2S_SCK (33u) +#define PIN_I2S_FS (20u) +#define PIN_I2S_SD (21u) // SDO (TX) +// RX (must use clock 0) +#define PIN_I2S1_MCK (32u) +#define PIN_I2S1_SCK (33u) +#define PIN_I2S1_FS (20u) +#define PIN_I2S1_SD (22u) // SDI (RX) + +#else +#define I2S_INTERFACES_COUNT 1 +#define I2S_DEVICE 0 +//#define I2S1_DEVICE 1 +#define I2S_CLOCK_GENERATOR 7 +//#define I2S1_CLOCK_GENERATOR 8 +//#define PIN_I2S_MCK (32u) +#define PIN_I2S_SCK (20u) +#define PIN_I2S_FS (21u) +#define PIN_I2S_SD (19u) +//#define PIN_I2S1_MCK (39u) +//#define PIN_I2S1_SCK (40u) +//#define PIN_I2S1_FS (41u) +//#define PIN_I2S1_SD (33u) +#endif + +#ifdef __cplusplus +} +#endif + + +/*---------------------------------------------------------------------------- + * Arduino objects - C++ only + *----------------------------------------------------------------------------*/ + +#ifdef __cplusplus + +/* ========================= + * ===== SERCOM DEFINITION + * ========================= +*/ +extern SERCOM sercom0; +extern SERCOM sercom1; +extern SERCOM sercom2; +extern SERCOM sercom3; +extern SERCOM sercom4; +extern SERCOM sercom5; + +extern Uart Serial1; +extern Uart Serial2; +#if (SAMD21 || SAMC21 || SAML21) +extern Uart Serial3; +#endif + +#endif + +// These serial port names are intended to allow libraries and architecture-neutral +// sketches to automatically default to the correct port name for a particular type +// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN, +// the first hardware serial port whose RX/TX pins are not dedicated to another use. +// +// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor +// +// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial +// +// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library +// +// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins. +// +// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX +// pins are NOT connected to anything by default. +#if (!SAMC21) + #define SERIAL_PORT_USBVIRTUAL SerialUSB +#endif +// SERIAL_PORT_MONITOR seems to be used only by the USB Host library (as of 1.6.5). +// It normally allows debugging output on the USB programming port, while the USB host uses the USB native port. +// The programming port is connected to a hardware UART through a USB-Serial bridge (EDBG chip) on the Zero. +// Boards that do not have the EDBG chip will have to connect a USB-TTL serial adapter to 'Serial' to get +// the USB Host debugging output. +#if (SAMC21) + #define SERIAL_PORT_MONITOR Serial2 +#else + #define SERIAL_PORT_MONITOR Serial1 +#endif + +// Serial has no physical pins broken out, so it's not listed as HARDWARE port +#if (SAMC21) + #define SERIAL_PORT_HARDWARE Serial2 + #define SERIAL_PORT_HARDWARE_OPEN Serial2 +#else + #define SERIAL_PORT_HARDWARE Serial1 + #define SERIAL_PORT_HARDWARE_OPEN Serial1 +#endif + +// The Xeno does not have the EDBG support chip, which provides a USB-UART bridge +// accessible using Serial (the Arduino serial monitor is normally connected to this). +// So, the USB virtual serial port (SerialUSB) must be used to communicate with the host. +// Because most sketches use Serial to print to the monitor, it is aliased to SerialUSB. +// Remember to use while(!Serial); to wait for a connection before Serial printing. +#if (SAMC21) + #define Serial Serial1 +#else + // When USB CDC is enabled, Serial refers to SerialUSB, otherwise it refers to Serial1. + #if defined(CDC_ONLY) || defined(CDC_HID) || defined(WITH_CDC) + #define Serial SerialUSB + #else + #define Serial Serial1 + #endif +#endif + +#endif /* _VARIANT_GENERIC_XX1J_ */ From 78e4d59830363ae47bb85c25324b27174eef19d7 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Sun, 19 Sep 2021 23:56:37 +0200 Subject: [PATCH 11/62] test fix for Atmel CMSIS --- json/package_Fab_SAM_index.json | 68 +++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index af917c613..cd83acee1 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -61,6 +61,74 @@ "version": "1.2.0" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.6.18-alpha2", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha1/Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "checksum": "SHA-256:5745e58fe3d6fc0b47b7f19f241684219e9df623eb6da033d7247e8e244b9bfd", + "size": "357035", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + }, + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.7.0-mattairtech-3" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "arduino", + "name": "CMSIS-Atmel", + "version": "1.2.0" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.0" + } + ] } ], "tools": [ From 0673e5d4bd451726afc58bc263e7e9c6a43567ee Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Sun, 19 Sep 2021 23:59:15 +0200 Subject: [PATCH 12/62] .json formatting --- json/package_Fab_SAM_index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index cd83acee1..0c009ab97 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -95,7 +95,7 @@ }, { "name": "Generic_D51J" - }, + } ], "toolsDependencies": [ { From e3838241bf6adf15819c1b938972fefc50cce576 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 20 Sep 2021 00:08:55 +0200 Subject: [PATCH 13/62] fix version --- json/package_Fab_SAM_index.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 0c009ab97..11a94e27d 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -111,7 +111,7 @@ { "packager": "arduino", "name": "openocd", - "version": "0.9.0-arduino" + "version": "0.10.0-arduino7" }, { "packager": "arduino", @@ -126,7 +126,7 @@ { "packager": "arduino", "name": "arduinoOTA", - "version": "1.2.0" + "version": "1.2.1" } ] } From c94e6b225ed79ff2a7eb6fcaf6be1d57a2242f13 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 20 Sep 2021 00:22:12 +0200 Subject: [PATCH 14/62] fix version --- json/package_Fab_SAM_index.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 11a94e27d..954bf6bd8 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -111,7 +111,7 @@ { "packager": "arduino", "name": "openocd", - "version": "0.10.0-arduino7" + "version": "0.9.0-arduino" }, { "packager": "arduino", From 2a5ab1529bf0f2d68f253667f24d243078bdd0ee Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 20 Sep 2021 01:46:11 +0200 Subject: [PATCH 15/62] Test alpha2 --- .gitignore | 2 ++ boards.txt | 32 +++++++++---------- extras/package_index.json.Release.template | 27 ++++++++++++---- ...Core_for_Arduino-1.6.18-alpha2_index.json} | 14 ++++---- json/package_Fab_SAM_index.json | 8 ++--- platform.txt | 19 +++++++++-- 6 files changed, 66 insertions(+), 36 deletions(-) rename json/{package_Fab_SAM_Core_for_Arduino-1.6.18-alpha1_index.json => package_Fab_SAM_Core_for_Arduino-1.6.18-alpha2_index.json} (74%) diff --git a/.gitignore b/.gitignore index 2ad1d1f84..762d51414 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ *.bz2 bootloaders/*/build/ +extras/* +!extras/package_Fab_SAM_index.json diff --git a/boards.txt b/boards.txt index e5964517b..88a23da29 100644 --- a/boards.txt +++ b/boards.txt @@ -48,7 +48,7 @@ d11c14a.build.variant=Generic_D11C14A d11c14a.build.variant_system_lib= d11c14a.build.vid=0x16D0 d11c14a.upload.protocol=sam-ba -d11c14a.bootloader.tool=arduino:openocd +d11c14a.bootloader.tool=openocd d11c14a.menu.float.default=Print & String use auto-promoted doubles only d11c14a.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d11c14a.menu.float.print=Print uses separate singles and doubles @@ -124,7 +124,7 @@ d11c14a.menu.bootloader.4kb.upload.maximum_size=12288 d11c14a.menu.bootloader.0kb=NO_BOOTLOADER d11c14a.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d11c14a.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d11c14a.menu.bootloader.0kb.upload.tool=arduino:openocd +d11c14a.menu.bootloader.0kb.upload.tool=openocd d11c14a.menu.bootloader.0kb.upload.use_1200bps_touch=false d11c14a.menu.bootloader.0kb.upload.wait_for_upload_port=false d11c14a.menu.bootloader.0kb.upload.native_usb=false @@ -189,7 +189,7 @@ d11d14as.build.variant=Generic_D11D14AS d11d14as.build.variant_system_lib= d11d14as.build.vid=0x16D0 d11d14as.upload.protocol=sam-ba -d11d14as.bootloader.tool=arduino:openocd +d11d14as.bootloader.tool=openocd d11d14as.menu.float.default=Print & String use auto-promoted doubles only d11d14as.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d11d14as.menu.float.print=Print uses separate singles and doubles @@ -265,7 +265,7 @@ d11d14as.menu.bootloader.4kb.upload.maximum_size=12288 d11d14as.menu.bootloader.0kb=NO_BOOTLOADER d11d14as.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d11d14as.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d11d14as.menu.bootloader.0kb.upload.tool=arduino:openocd +d11d14as.menu.bootloader.0kb.upload.tool=openocd d11d14as.menu.bootloader.0kb.upload.use_1200bps_touch=false d11d14as.menu.bootloader.0kb.upload.wait_for_upload_port=false d11d14as.menu.bootloader.0kb.upload.native_usb=false @@ -326,7 +326,7 @@ d11d14am.build.variant=Generic_D11D14AM d11d14am.build.variant_system_lib= d11d14am.build.vid=0x16D0 d11d14am.upload.protocol=sam-ba -d11d14am.bootloader.tool=arduino:openocd +d11d14am.bootloader.tool=openocd d11d14am.menu.float.default=Print & String use auto-promoted doubles only d11d14am.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d11d14am.menu.float.print=Print uses separate singles and doubles @@ -402,7 +402,7 @@ d11d14am.menu.bootloader.4kb.upload.maximum_size=12288 d11d14am.menu.bootloader.0kb=NO_BOOTLOADER d11d14am.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d11d14am.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d11d14am.menu.bootloader.0kb.upload.tool=arduino:openocd +d11d14am.menu.bootloader.0kb.upload.tool=openocd d11d14am.menu.bootloader.0kb.upload.use_1200bps_touch=false d11d14am.menu.bootloader.0kb.upload.wait_for_upload_port=false d11d14am.menu.bootloader.0kb.upload.native_usb=false @@ -463,7 +463,7 @@ x21e.build.variant=Generic_x21E x21e.build.variant_system_lib= x21e.build.vid=0x16D0 x21e.upload.protocol=sam-ba -x21e.bootloader.tool=arduino:openocd +x21e.bootloader.tool=openocd x21e.menu.float.default=Print & String use auto-promoted doubles only x21e.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY x21e.menu.float.print=Print uses separate singles and doubles @@ -613,7 +613,7 @@ x21e.menu.bootloader.16kb.upload.native_usb=true x21e.menu.bootloader.0kb=NO_BOOTLOADER x21e.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ x21e.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -x21e.menu.bootloader.0kb.upload.tool=arduino:openocd +x21e.menu.bootloader.0kb.upload.tool=openocd x21e.menu.bootloader.0kb.upload.use_1200bps_touch=false x21e.menu.bootloader.0kb.upload.wait_for_upload_port=false x21e.menu.bootloader.0kb.upload.native_usb=false @@ -705,7 +705,7 @@ x21g.build.variant=Generic_xx1G x21g.build.variant_system_lib= x21g.build.vid=0x16D0 x21g.upload.protocol=sam-ba -x21g.bootloader.tool=arduino:openocd +x21g.bootloader.tool=openocd x21g.menu.float.default=Print & String use auto-promoted doubles only x21g.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY x21g.menu.float.print=Print uses separate singles and doubles @@ -903,7 +903,7 @@ x21g.menu.bootloader.16kb.upload.native_usb=true x21g.menu.bootloader.0kb=NO_BOOTLOADER x21g.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ x21g.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -x21g.menu.bootloader.0kb.upload.tool=arduino:openocd +x21g.menu.bootloader.0kb.upload.tool=openocd x21g.menu.bootloader.0kb.upload.use_1200bps_touch=false x21g.menu.bootloader.0kb.upload.wait_for_upload_port=false x21g.menu.bootloader.0kb.upload.native_usb=false @@ -987,7 +987,7 @@ x21j.build.variant=Generic_xx1J x21j.build.variant_system_lib= x21j.build.vid=0x16D0 x21j.upload.protocol=sam-ba -x21j.bootloader.tool=arduino:openocd +x21j.bootloader.tool=openocd x21j.menu.float.default=Print & String use auto-promoted doubles only x21j.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY x21j.menu.float.print=Print uses separate singles and doubles @@ -1175,7 +1175,7 @@ x21j.menu.bootloader.16kb.upload.native_usb=true x21j.menu.bootloader.0kb=NO_BOOTLOADER x21j.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ x21j.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -x21j.menu.bootloader.0kb.upload.tool=arduino:openocd +x21j.menu.bootloader.0kb.upload.tool=openocd x21j.menu.bootloader.0kb.upload.use_1200bps_touch=false x21j.menu.bootloader.0kb.upload.wait_for_upload_port=false x21j.menu.bootloader.0kb.upload.native_usb=false @@ -1259,7 +1259,7 @@ d51g.build.variant=Generic_D51G d51g.build.variant_system_lib= d51g.build.vid=0x16D0 d51g.upload.protocol=sam-ba -d51g.bootloader.tool=arduino:openocd +d51g.bootloader.tool=openocd d51g.menu.float.default=Print & String use auto-promoted doubles only d51g.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d51g.menu.float.print=Print uses separate singles and doubles @@ -1377,7 +1377,7 @@ d51g.menu.bootloader.16kb.upload.native_usb=true d51g.menu.bootloader.0kb=NO_BOOTLOADER d51g.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d51g.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d51g.menu.bootloader.0kb.upload.tool=arduino:openocd +d51g.menu.bootloader.0kb.upload.tool=openocd d51g.menu.bootloader.0kb.upload.use_1200bps_touch=false d51g.menu.bootloader.0kb.upload.wait_for_upload_port=false d51g.menu.bootloader.0kb.upload.native_usb=false @@ -1461,7 +1461,7 @@ d51j.build.variant=Generic_xx1J d51j.build.variant_system_lib= d51j.build.vid=0x16D0 d51j.upload.protocol=sam-ba -d51j.bootloader.tool=arduino:openocd +d51j.bootloader.tool=openocd d51j.menu.float.default=Print & String use auto-promoted doubles only d51j.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d51j.menu.float.print=Print uses separate singles and doubles @@ -1599,7 +1599,7 @@ d51j.menu.bootloader.16kb.upload.native_usb=true d51j.menu.bootloader.0kb=NO_BOOTLOADER d51j.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d51j.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d51j.menu.bootloader.0kb.upload.tool=arduino:openocd +d51j.menu.bootloader.0kb.upload.tool=openocd d51j.menu.bootloader.0kb.upload.use_1200bps_touch=false d51j.menu.bootloader.0kb.upload.wait_for_upload_port=false d51j.menu.bootloader.0kb.upload.native_usb=false diff --git a/extras/package_index.json.Release.template b/extras/package_index.json.Release.template index 9e20db109..b5657b459 100644 --- a/extras/package_index.json.Release.template +++ b/extras/package_index.json.Release.template @@ -8,14 +8,29 @@ "checksum": "SHA-256:%%CHECKSUM%%", "size": "%%SIZE%%", "boards": [ - { - "name": "Generic_D21E" - }, { "name": "Generic_D11C14A" }, { "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" } ], "toolsDependencies": [ @@ -40,14 +55,14 @@ "version": "4.5.0" }, { - "packager": "Fab_SAM_Arduino", + "packager": "arduino", "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" + "version": "1.2.0" }, { "packager": "arduino", "name": "arduinoOTA", - "version": "1.2.0" + "version": "1.2.1" } ] } diff --git a/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha1_index.json b/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha2_index.json similarity index 74% rename from json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha1_index.json rename to json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha2_index.json index d1a4345ad..7841e317d 100644 --- a/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha1_index.json +++ b/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha2_index.json @@ -1,12 +1,12 @@ { "name": "Fab SAM core for Arduino", "architecture": "samd", - "version": "1.6.18-alpha1", + "version": "1.6.18-alpha2", "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha1/Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", - "checksum": "SHA-256:5745e58fe3d6fc0b47b7f19f241684219e9df623eb6da033d7247e8e244b9bfd", - "size": "357035", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha2/Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", + "checksum": "SHA-256:8cad6f69b8a5a9508c3ff0f6e64a6d0d12fbad993baa9d1a820de54113f03fb7", + "size": "735460", "boards": [ { "name": "Generic_D21E" @@ -25,7 +25,7 @@ "version": "4.8.3-2014q1" }, { - "packager": "MattairTech_Arduino", + "packager": "Fab_SAM_Arduino", "name": "bossac", "version": "1.7.0-mattairtech-3" }, @@ -40,7 +40,7 @@ "version": "4.5.0" }, { - "packager": "MattairTech_Arduino", + "packager": "Fab_SAM_Arduino", "name": "CMSIS-Atmel", "version": "1.0.0-mattairtech-2" }, diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 954bf6bd8..63e26a047 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -67,10 +67,10 @@ "architecture": "samd", "version": "1.6.18-alpha2", "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha1/Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", - "checksum": "SHA-256:5745e58fe3d6fc0b47b7f19f241684219e9df623eb6da033d7247e8e244b9bfd", - "size": "357035", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha2/Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", + "checksum": "SHA-256:8cad6f69b8a5a9508c3ff0f6e64a6d0d12fbad993baa9d1a820de54113f03fb7", + "size": "735460", "boards": [ { "name": "Generic_D11C14A" diff --git a/platform.txt b/platform.txt index c57a1e254..97f502471 100644 --- a/platform.txt +++ b/platform.txt @@ -18,7 +18,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Fab SAM core for Arduino -version=1.6.18-alpha1 +version=1.6.18-alpha2 # Compile variables # ----------------- @@ -117,8 +117,21 @@ recipe.output.save_file={build.project_name}.{build.variant}.{build.preferred_ou recipe.size.pattern="{compiler.path}{compiler.size.cmd}" -A "{build.path}/{build.project_name}.elf" recipe.size.regex=\.text\s+([0-9]+).* -# Uploader tools -# -------------- +# Debugger configuration (general options) +# ---------------------------------------- +# EXPERIMENTAL feature: +# - this is alpha and may be subject to change without notice +debug.executable={build.path}/{build.project_name}.elf +debug.toolchain=gcc +debug.toolchain.path={runtime.tools.arm-none-eabi-gcc.path}/bin/ +debug.toolchain.prefix=arm-none-eabi- +debug.server=openocd +debug.server.openocd.path={runtime.tools.openocd-0.9.0-arduino.path}/bin/openocd +debug.server.openocd.scripts_dir={runtime.tools.openocd-0.9.0-arduino.path}/share/openocd/scripts/ +debug.server.openocd.script={runtime.platform.path}/variants/{build.variant}/{build.openocdscript} + +# Upload/Debug tools +# ------------------ # # AVRDUDE From d40fa475f677f2902970551debd33ff73f8e6582 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 20 Sep 2021 02:07:15 +0200 Subject: [PATCH 16/62] cleanup .tar.bz2 release --- extras/pack.release.bash | 2 +- ..._Core_for_Arduino-1.6.18-alpha2_index.json | 53 ------------------- json/package_Fab_SAM_index.json | 4 +- 3 files changed, 3 insertions(+), 56 deletions(-) delete mode 100644 json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha2_index.json diff --git a/extras/pack.release.bash b/extras/pack.release.bash index 9e0e98dc1..b948f1d22 100755 --- a/extras/pack.release.bash +++ b/extras/pack.release.bash @@ -27,7 +27,7 @@ FILENAME=Fab_SAM_Core_for_Arduino-$VERSION.tar.bz2 rm -f $FILENAME cd .. -tar --transform "s|$FOLDERNAME|$FOLDERNAME-$VERSION|g" --exclude=extras* --exclude=.git* --exclude=.idea --exclude=json* -cjf $FILENAME $FOLDERNAME +tar --transform "s|$FOLDERNAME|$FOLDERNAME-$VERSION|g" --exclude=extras* --exclude=.git* --exclude=*.tar.bz2 --exclude=.idea --exclude=json* -cjf $FILENAME $FOLDERNAME cd - mv ../$FILENAME . diff --git a/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha2_index.json b/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha2_index.json deleted file mode 100644 index 7841e317d..000000000 --- a/json/package_Fab_SAM_Core_for_Arduino-1.6.18-alpha2_index.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "Fab SAM core for Arduino", - "architecture": "samd", - "version": "1.6.18-alpha2", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha2/Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", - "checksum": "SHA-256:8cad6f69b8a5a9508c3ff0f6e64a6d0d12fbad993baa9d1a820de54113f03fb7", - "size": "735460", - "boards": [ - { - "name": "Generic_D21E" - }, - { - "name": "Generic_D11C14A" - }, - { - "name": "Generic_D11D14AS" - } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "bossac", - "version": "1.7.0-mattairtech-3" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.0" - } - ] -} diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 63e26a047..2b08b558c 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -69,8 +69,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha2/Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", - "checksum": "SHA-256:8cad6f69b8a5a9508c3ff0f6e64a6d0d12fbad993baa9d1a820de54113f03fb7", - "size": "735460", + "checksum": "SHA-256:76cf96905c6a70090a212f1309014bf4e7e94189d2dc88de90d8b95d1997c500", + "size": "356816", "boards": [ { "name": "Generic_D11C14A" From 882a08e81930004a69a2b6d6c263b718c28ac6d7 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Mon, 20 Sep 2021 02:30:41 +0200 Subject: [PATCH 17/62] fix CMSIS-Atmel --- json/package_Fab_SAM_index.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 2b08b558c..23339812b 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -119,9 +119,9 @@ "version": "4.5.0" }, { - "packager": "arduino", + "packager": "Fab_SAM_Arduino", "name": "CMSIS-Atmel", - "version": "1.2.0" + "version": "1.0.0-mattairtech-2" }, { "packager": "arduino", From 4234d13e2ef4a7d1e287732adf03117f5e1a950a Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Tue, 26 Oct 2021 01:34:13 +0200 Subject: [PATCH 18/62] point to new toolchain URLs --- json/package_Fab_SAM_index.json | 48 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 23339812b..76414f7d6 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -138,31 +138,31 @@ "systems": [ { "host": "i686-mingw32", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "checksum": "SHA-256:ce6ce590c612dc8b18ba52df3903ba3d43416c92ef54538881cc07fdd2ef1f04", - "size": "325719" + "checksum": "SHA-256:88578b925839b0e66dfc61594749683bd70119bfa19906c126fa1c69831d761f", + "size": "326181" }, { "host": "x86_64-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:e0801cd435a0aa08a4ccc1781cdcc1bf9ae92e248888163a1bb4dce20c00bcf9", - "size": "34622" + "checksum": "SHA-256:39a0c3db3373a171711f6ebaa60c6a7318847cdc2db9045965725fd4e5d42b4a", + "size": "37845" }, { "host": "i686-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:edd3bc6fd80641563dc6ca337d695fca25c2d43242172ea0418b678d4dbe0628", - "size": "34628" + "checksum": "SHA-256:e20e87d04793ee65aa175e65eeef5f8c5fc6ff3380e37d411e7e13bcd85977f0", + "size": "40136" }, { "host": "x86_64-apple-darwin", - "url": "https://www.mattairtech.com/software/arduino/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "checksum": "SHA-256:da4d4b04582f92d09e3d48a1ec4d2473b6cd01bba992c0f1f2cd7ee1008f08f8", - "size": "88845" + "checksum": "SHA-256:3e82d78d7be411df5b19ce5d220255c623f5e7c462e65ecd7ec6e586c1bfdd0a", + "size": "30016" } ] }, @@ -172,31 +172,31 @@ "systems": [ { "host": "i686-mingw32", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" + "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", + "size": "1973076" }, { "host": "x86_64-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" + "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", + "size": "1973076" }, { "host": "i686-pc-linux-gnu", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" + "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", + "size": "1973076" }, { "host": "x86_64-apple-darwin", - "url": "https://www.mattairtech.com/software/arduino/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:d10ca2a14c8db5757d2b1b4c1e52473ae5337f0762c6617a6074373f2f44540d", - "size": "2008479" + "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", + "size": "1973076" } ] } From d2c4adeafeedeb974e052f6fb28dbf439f116d9a Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Tue, 26 Oct 2021 02:00:42 +0200 Subject: [PATCH 19/62] Fix error in BOSSAC archive --- json/package_Fab_SAM_index.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 76414f7d6..061708d26 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -140,29 +140,29 @@ "host": "i686-mingw32", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "checksum": "SHA-256:88578b925839b0e66dfc61594749683bd70119bfa19906c126fa1c69831d761f", - "size": "326181" + "checksum": "SHA-256:25ec8b143ab242af6ea91507b233e70fec57cb4f000cd5e1c8a464d12b7dd174", + "size": "326189" }, { "host": "x86_64-pc-linux-gnu", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:39a0c3db3373a171711f6ebaa60c6a7318847cdc2db9045965725fd4e5d42b4a", - "size": "37845" + "checksum": "SHA-256:8ac10489b4264417a34d8b4fb32cd9d0fadf795dced500c03826fd18a04705ff", + "size": "37866" }, { "host": "i686-pc-linux-gnu", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:e20e87d04793ee65aa175e65eeef5f8c5fc6ff3380e37d411e7e13bcd85977f0", - "size": "40136" + "checksum": "SHA-256:7e695c68100d1e6ccb064dba5a01b8f2bd51c3e8d09fc84962349dba534d22bb", + "size": "40156" }, { "host": "x86_64-apple-darwin", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "checksum": "SHA-256:3e82d78d7be411df5b19ce5d220255c623f5e7c462e65ecd7ec6e586c1bfdd0a", - "size": "30016" + "checksum": "SHA-256:a4cde49483e8185875d7a2d45e58d34964499e3ec0453447423a8ef9576c2b78", + "size": "30043" } ] }, From f4cdf998d61fe2c3ee3209f4ea9b754568a9f5ce Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Tue, 26 Oct 2021 02:23:00 +0200 Subject: [PATCH 20/62] Fix archive folder --- json/package_Fab_SAM_index.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 061708d26..34d557f63 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -140,29 +140,29 @@ "host": "i686-mingw32", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "checksum": "SHA-256:25ec8b143ab242af6ea91507b233e70fec57cb4f000cd5e1c8a464d12b7dd174", - "size": "326189" + "checksum": "SHA-256:81e5fc6577135b548b3154035742826e855eba257cc2f4c8f98f32e8f82b8b1e", + "size": "326228" }, { "host": "x86_64-pc-linux-gnu", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:8ac10489b4264417a34d8b4fb32cd9d0fadf795dced500c03826fd18a04705ff", - "size": "37866" + "checksum": "SHA-256:c1156472f375626e6494a06787e1989abdc88cf091b554b45015c4ef698fbcb4", + "size": "37896" }, { "host": "i686-pc-linux-gnu", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:7e695c68100d1e6ccb064dba5a01b8f2bd51c3e8d09fc84962349dba534d22bb", - "size": "40156" + "checksum": "SHA-256:c4e346ce1851c4202111da34db9c47a7f15f15b9a0110040c6d343ca3b0ed8d3", + "size": "40192" }, { "host": "x86_64-apple-darwin", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "checksum": "SHA-256:a4cde49483e8185875d7a2d45e58d34964499e3ec0453447423a8ef9576c2b78", - "size": "30043" + "checksum": "SHA-256:0fe5cc3c8575b6747bae471582791ae36509aef65af156a9cad58b42c2c20200", + "size": "30073" } ] }, From 29d5193574cf539958f0fe8fc84a9639308a566c Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Tue, 26 Oct 2021 03:14:56 +0200 Subject: [PATCH 21/62] Fix CMSIS folders --- json/package_Fab_SAM_index.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 34d557f63..d4028fb7c 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -175,28 +175,28 @@ "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", - "size": "1973076" + "size": "1977965" }, { "host": "x86_64-pc-linux-gnu", "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", - "size": "1973076" + "size": "1977965" }, { "host": "i686-pc-linux-gnu", "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", - "size": "1973076" + "size": "1977965" }, { "host": "x86_64-apple-darwin", "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", - "size": "1973076" + "size": "1977965" } ] } From 7d51171ea98493fc11ed540b3c62f1d29107c63c Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Tue, 26 Oct 2021 03:17:57 +0200 Subject: [PATCH 22/62] Fix CRC for CMSIS --- json/package_Fab_SAM_index.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index d4028fb7c..c74598fc5 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -174,28 +174,28 @@ "host": "i686-mingw32", "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", "size": "1977965" }, { "host": "x86_64-pc-linux-gnu", "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", "size": "1977965" }, { "host": "i686-pc-linux-gnu", "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", "size": "1977965" }, { "host": "x86_64-apple-darwin", "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:05388a646232829451b9ed4149f86d3f5b385818657d153d492dae68a32bf3b5", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", "size": "1977965" } ] From cf408801557795edb68c303872985eff3750427f Mon Sep 17 00:00:00 2001 From: qbolsee Date: Fri, 14 Jan 2022 01:09:27 +0200 Subject: [PATCH 23/62] Update README.md --- README.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7dcbd5cea..0fabbb6dd 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,21 @@ -# MattairTech SAM D|L|C Core for Arduino +# Fab SAM D|L|C Core for Arduino + +This repository is a Fab community fork of the original [MattairTech SAM D|L|C Core](https://github.com/mattairtech/ArduinoCore-samd). + +It offers support for: +- D11C14A / D11C14AM / D11C14AS +- x21E +- x21G +- x21J +- D51G +- D51J + +To install, simply add the following URL to "Additional Boards Manager URLs" in the Arduino IDE: + +https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/json/package_Fab_SAM_index.json + + +# Description The MattairTech SAM D|L|C Core for Arduino is a fork from arduino/ArduinoCore-samd on GitHub, which will be used to maintain Arduino support for MattairTech boards From 6401186e7f1dfa1d035cc542d8b04b427cd2962b Mon Sep 17 00:00:00 2001 From: qbolsee Date: Sun, 13 Mar 2022 20:27:03 +0100 Subject: [PATCH 24/62] Create package.json --- package.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 000000000..c17279ef9 --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "framework-arduino-samd-fabsam", + "version": "1.16.18", + "description": "Arduino Wiring-based Framework for Microchip SAM D microcontrollers", + "keywords": [ + "framework", + "arduino", + "microchip", + "samd" + ], + "repository": { + "type": "git", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam.git" + } +} From 2779c579a8bd8319093a08ad4b401541be8c19a7 Mon Sep 17 00:00:00 2001 From: "quentin.bolsee" Date: Sat, 4 Jun 2022 04:44:56 +0200 Subject: [PATCH 25/62] DigitalWriteFast() and new BOSSA --- cores/arduino/wiring_digital.c | 21 ++++++- cores/arduino/wiring_digital.h | 8 +++ json/package_Fab_SAM_index.json | 102 ++++++++++++++++++++++++++++++++ platform.txt | 4 +- 4 files changed, 132 insertions(+), 3 deletions(-) diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index ac59c16f0..8f80e87af 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -30,6 +30,26 @@ void pinMode( uint32_t ulPin, uint32_t ulMode ) pinPeripheral(ulPin, ulMode); } +inline __attribute__((always_inline)) void digitalWriteFast( uint32_t ulPin, uint32_t ulVal ) +{ +#if defined(_VARIANT_GENERIC_D11C14A_) || defined(_VARIANT_GENERIC_D11D14AM_) || defined(_VARIANT_GENERIC_D11D14AS_) || defined(_VARIANT_GENERIC_XX1E_) + // Only PORT A + if ( ulVal == HIGH ) { + PORT_IOBUS->Group[PORTA].OUTSET.reg = (1ul << ulPin); + } else { + PORT_IOBUS->Group[PORTA].OUTCLR.reg = (1ul << ulPin); + } +#else + uint8_t pinPort = GetPort(ulPin); + uint8_t pinNum = GetPin(ulPin); + if ( ulVal == HIGH ) { + PORT_IOBUS->Group[pinPort].OUTSET.reg = (1ul << pinNum) ; + } else { + PORT_IOBUS->Group[pinPort].OUTCLR.reg = (1ul << pinNum) ; + } +#endif +} + void digitalWrite( uint32_t ulPin, uint32_t ulVal ) { uint8_t pinPort = GetPort(ulPin); @@ -106,4 +126,3 @@ int digitalRead( uint32_t ulPin ) #ifdef __cplusplus } #endif - diff --git a/cores/arduino/wiring_digital.h b/cores/arduino/wiring_digital.h index 9895390f2..cbcb07c7e 100644 --- a/cores/arduino/wiring_digital.h +++ b/cores/arduino/wiring_digital.h @@ -33,6 +33,14 @@ */ extern void pinMode( uint32_t dwPin, uint32_t dwMode ) ; +/** + * \brief Write a HIGH or a LOW value to a digital pin but faster. Requires the pin number to be a constant + * + * \param dwPin the pin number + * \param dwVal HIGH or LOW + */ +extern void digitalWriteFast(uint32_t dwPin, uint32_t dwVal); + /** * \brief Write a HIGH or a LOW value to a digital pin. * diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index c74598fc5..b2f27e663 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -129,6 +129,74 @@ "version": "1.2.1" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.7.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.7.0/Fab_SAM_Core_for_Arduino-1.7.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.7.0.tar.bz2", + "checksum": "SHA-256:84e5d6919fdea31c5a56420d9a8d8a0347196675f4b7b96b0e99c20bdfecae57", + "size": "356441", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.8.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] } ], "tools": [ @@ -166,6 +234,40 @@ } ] }, + { + "name": "bossac", + "version": "1.8.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-windows.tar.gz", + "archiveFileName": "bossac-1.8.0-windows.tar.gz", + "checksum": "SHA-256:c2dee790792eb9d38fe716903798e18c91bd25b6718e89d8b177ebe4e5a55034", + "size": "347551" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.8.0-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:432faadba16b959013aa2905e69a94470b84ade4becffd92b39dcadff283ed3b", + "size": "38161" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-i686-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.8.0-i686-linux-gnu.tar.gz", + "checksum": "SHA-256:52d7e66d4880eeb4868f77b38ae676a5715cf7e192a1a7f6d74c867aaa3eefca", + "size": "40405" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-mac-os.tar.gz", + "archiveFileName": "bossac-1.8.0-mac-os.tar.gz", + "checksum": "SHA-256:fc2baa24fac7f41303ac2952c92704f23129e26090b048e693e0d202a1bbf613", + "size": "30052" + } + ] + }, { "name": "CMSIS-Atmel", "version": "1.0.0-mattairtech-2", diff --git a/platform.txt b/platform.txt index 97f502471..550c321d4 100644 --- a/platform.txt +++ b/platform.txt @@ -18,7 +18,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Fab SAM core for Arduino -version=1.6.18-alpha2 +version=1.7.0 # Compile variables # ----------------- @@ -150,7 +150,7 @@ tools.avrdude_remote.upload.pattern="openocd --version 2>&1 | grep 2016 && if op # # BOSSA # -tools.bossac.path={runtime.tools.bossac-1.7.0-mattairtech-3.path} +tools.bossac.path={runtime.tools.bossac-1.8.0.path} tools.bossac.cmd=bossac tools.bossac.cmd.windows=bossac.exe From 7a1a18967059c58e93a2f76fa8571bfffbfda52c Mon Sep 17 00:00:00 2001 From: Quentin B Date: Wed, 12 Oct 2022 23:24:29 -0400 Subject: [PATCH 26/62] bossac in bin folder --- json/package_Fab_SAM_experimental.json | 410 +++++++++++++++++++++++++ platform.txt | 8 +- 2 files changed, 414 insertions(+), 4 deletions(-) create mode 100644 json/package_Fab_SAM_experimental.json diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json new file mode 100644 index 000000000..8724dcaf4 --- /dev/null +++ b/json/package_Fab_SAM_experimental.json @@ -0,0 +1,410 @@ +{ + "packages": [ + { + "name": "Fab_SAM_Arduino", + "maintainer": "Fab Foundation", + "websiteURL": "https://github.com/qbolsee/ArduinoCore-fab-sam", + "email": "", + "help": { + "online": "" + }, + "platforms": [ + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.6.18-alpha1", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha1/Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "checksum": "SHA-256:5745e58fe3d6fc0b47b7f19f241684219e9df623eb6da033d7247e8e244b9bfd", + "size": "357035", + "boards": [ + { + "name": "Generic_D21E" + }, + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.7.0-mattairtech-3" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.0" + } + ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.6.18-alpha2", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha2/Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", + "checksum": "SHA-256:76cf96905c6a70090a212f1309014bf4e7e94189d2dc88de90d8b95d1997c500", + "size": "356816", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.7.0-mattairtech-3" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.7.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.7.0/Fab_SAM_Core_for_Arduino-1.7.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.7.0.tar.bz2", + "checksum": "SHA-256:84e5d6919fdea31c5a56420d9a8d8a0347196675f4b7b96b0e99c20bdfecae57", + "size": "356441", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.8.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.8.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.8.0/Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", + "checksum": "SHA-256:8176e8931d31c066609835e6e4e2424abbc551bb90f2338761243f9886db8e18", + "size": "356241", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] + } + ], + "tools": [ + { + "name": "bossac", + "version": "1.7.0-mattairtech-3", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-mingw32.tar.gz", + "checksum": "SHA-256:81e5fc6577135b548b3154035742826e855eba257cc2f4c8f98f32e8f82b8b1e", + "size": "326228" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:c1156472f375626e6494a06787e1989abdc88cf091b554b45015c4ef698fbcb4", + "size": "37896" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", + "checksum": "SHA-256:c4e346ce1851c4202111da34db9c47a7f15f15b9a0110040c6d343ca3b0ed8d3", + "size": "40192" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", + "checksum": "SHA-256:0fe5cc3c8575b6747bae471582791ae36509aef65af156a9cad58b42c2c20200", + "size": "30073" + } + ] + }, + { + "name": "bossac", + "version": "1.8.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-windows.tar.gz", + "archiveFileName": "bossac-1.8.0-windows.tar.gz", + "checksum": "SHA-256:c2dee790792eb9d38fe716903798e18c91bd25b6718e89d8b177ebe4e5a55034", + "size": "347551" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.8.0-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:432faadba16b959013aa2905e69a94470b84ade4becffd92b39dcadff283ed3b", + "size": "38161" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-i686-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.8.0-i686-linux-gnu.tar.gz", + "checksum": "SHA-256:52d7e66d4880eeb4868f77b38ae676a5715cf7e192a1a7f6d74c867aaa3eefca", + "size": "40405" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-mac-os.tar.gz", + "archiveFileName": "bossac-1.8.0-mac-os.tar.gz", + "checksum": "SHA-256:fc2baa24fac7f41303ac2952c92704f23129e26090b048e693e0d202a1bbf613", + "size": "30052" + } + ] + }, + { + "name": "bossac", + "version": "1.9.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-windows.tar.gz", + "archiveFileName": "bossac-1.9.0-windows.tar.gz", + "checksum": "SHA-256:35f78edef212b454bc87370972faf1695e602e9e7e86abad47b0a9faaa92d07a", + "size": "347581" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.9.0-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:ac701046115603d032be1fc35714a344367dec6e1c972c4af4ce325919d217a1", + "size": "38193" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-i686-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.9.0-i686-linux-gnu.tar.gz", + "checksum": "SHA-256:1e7ea6af7d6490b4dd1c67a93547b0547f740919d99b963df4e8c8c8c7fec86d", + "size": "40438" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-mac-os.tar.gz", + "archiveFileName": "bossac-1.9.0-mac-os.tar.gz", + "checksum": "SHA-256:038a1fb354fe46cd70838e1893ef900b13c9c8c16c06c82d2bf4208e6cc1c098", + "size": "30090" + } + ] + }, + { + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", + "size": "1977965" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", + "size": "1977965" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", + "size": "1977965" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", + "size": "1977965" + } + ] + } + ] + } + ] +} diff --git a/platform.txt b/platform.txt index 550c321d4..a3ca0a29a 100644 --- a/platform.txt +++ b/platform.txt @@ -18,7 +18,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Fab SAM core for Arduino -version=1.7.0 +version=1.8.0 # Compile variables # ----------------- @@ -150,9 +150,9 @@ tools.avrdude_remote.upload.pattern="openocd --version 2>&1 | grep 2016 && if op # # BOSSA # -tools.bossac.path={runtime.tools.bossac-1.8.0.path} -tools.bossac.cmd=bossac -tools.bossac.cmd.windows=bossac.exe +tools.bossac.path={runtime.tools.bossac-1.9.0.path} +tools.bossac.cmd=bin/bossac +tools.bossac.cmd.windows=bin/bossac.exe tools.bossac.upload.params.verbose=-i -d tools.bossac.upload.params.quiet= From c02dc86e01e59ce983d0cb7a9647e043abd25774 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Thu, 13 Oct 2022 00:03:17 -0400 Subject: [PATCH 27/62] update bossac --- json/package_Fab_SAM_experimental.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 8724dcaf4..6390178d8 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -344,29 +344,29 @@ "host": "i686-mingw32", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-windows.tar.gz", "archiveFileName": "bossac-1.9.0-windows.tar.gz", - "checksum": "SHA-256:35f78edef212b454bc87370972faf1695e602e9e7e86abad47b0a9faaa92d07a", - "size": "347581" + "checksum": "SHA-256:6df8e700d3bf35ff994faf740eca4b1e664a4f1734826a69b345fdf92af314f4", + "size": "348546" }, { "host": "x86_64-pc-linux-gnu", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-x86_64-linux-gnu.tar.gz", "archiveFileName": "bossac-1.9.0-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:ac701046115603d032be1fc35714a344367dec6e1c972c4af4ce325919d217a1", - "size": "38193" + "checksum": "SHA-256:52a5e35958017c79c869607e6ba8721fb192bb837de4651eb18bbee8f3459940", + "size": "39119" }, { "host": "i686-pc-linux-gnu", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-i686-linux-gnu.tar.gz", "archiveFileName": "bossac-1.9.0-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:1e7ea6af7d6490b4dd1c67a93547b0547f740919d99b963df4e8c8c8c7fec86d", - "size": "40438" + "checksum": "SHA-256:e4a3a8a36333f9b2b66ffd2d1b0f49c8c1d2375c74ead3c2da3129e3e4c1e346", + "size": "41362" }, { "host": "x86_64-apple-darwin", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-mac-os.tar.gz", "archiveFileName": "bossac-1.9.0-mac-os.tar.gz", - "checksum": "SHA-256:038a1fb354fe46cd70838e1893ef900b13c9c8c16c06c82d2bf4208e6cc1c098", - "size": "30090" + "checksum": "SHA-256:18fb50f2384a2bdf9363b11ee2daad1bace1586b39c7439158ab1be7a61556fe", + "size": "31023" } ] }, From 8c714ccb6ad5b9e4374a9a7321058f7ad593b48a Mon Sep 17 00:00:00 2001 From: Quentin B Date: Thu, 13 Oct 2022 00:31:28 -0400 Subject: [PATCH 28/62] try something --- json/package_Fab_SAM_experimental.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 6390178d8..e3d416d6f 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -344,8 +344,8 @@ "host": "i686-mingw32", "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-windows.tar.gz", "archiveFileName": "bossac-1.9.0-windows.tar.gz", - "checksum": "SHA-256:6df8e700d3bf35ff994faf740eca4b1e664a4f1734826a69b345fdf92af314f4", - "size": "348546" + "checksum": "SHA-256:a4ee6d91bf103c876d019b8f09e735f264dcb0cb64c97f80227ea88aaa1f3aae", + "size": "348553" }, { "host": "x86_64-pc-linux-gnu", From 870b3c0cce4d3dc4ca4852ad2c53f704c31ca335 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Thu, 13 Oct 2022 14:12:22 -0400 Subject: [PATCH 29/62] new bossac archives --- json/package_Fab_SAM_experimental.json | 32 +++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index e3d416d6f..8b636f29c 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -342,31 +342,31 @@ "systems": [ { "host": "i686-mingw32", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-windows.tar.gz", - "archiveFileName": "bossac-1.9.0-windows.tar.gz", - "checksum": "SHA-256:a4ee6d91bf103c876d019b8f09e735f264dcb0cb64c97f80227ea88aaa1f3aae", - "size": "348553" + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-windows.zip", + "archiveFileName": "bossac-1.9.0-windows.zip", + "checksum": "SHA-256:1677e81bde9c105399f18e8db59089a2464085c4bb250baaefad13a939330b14", + "size": "347565" }, { "host": "x86_64-pc-linux-gnu", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.9.0-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:52a5e35958017c79c869607e6ba8721fb192bb837de4651eb18bbee8f3459940", - "size": "39119" + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-x86_64-linux-gnu.tar.bz2", + "archiveFileName": "bossac-1.9.0-x86_64-linux-gnu.tar.bz2", + "checksum": "SHA-256:b55a88b5b431ac7d5367ede0a8a5cbded2ad9f6c5ecede906dacfbb52578f428", + "size": "38374" }, { "host": "i686-pc-linux-gnu", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-i686-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.9.0-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:e4a3a8a36333f9b2b66ffd2d1b0f49c8c1d2375c74ead3c2da3129e3e4c1e346", - "size": "41362" + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-i686-linux-gnu.tar.bz2", + "archiveFileName": "bossac-1.9.0-i686-linux-gnu.tar.bz2", + "checksum": "SHA-256:4f7553978ef4d8e9cbdafd4badf598cdc9332753cf6c3d67c65633e6640783f8", + "size": "40871" }, { "host": "x86_64-apple-darwin", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-mac-os.tar.gz", - "archiveFileName": "bossac-1.9.0-mac-os.tar.gz", - "checksum": "SHA-256:18fb50f2384a2bdf9363b11ee2daad1bace1586b39c7439158ab1be7a61556fe", - "size": "31023" + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-mac-os.tar.bz2", + "archiveFileName": "bossac-1.9.0-mac-os.tar.bz2", + "checksum": "SHA-256:cfead2275d1509ab8122d2dc5e4e899d3dac41e8937d46248f271fa6dcc18f73", + "size": "31120" } ] }, From 80ad62ac5a63d683361c0e951490d6927a95fbb6 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Thu, 13 Oct 2022 14:17:27 -0400 Subject: [PATCH 30/62] restore bossac path --- json/package_Fab_SAM_experimental.json | 4 ++-- platform.txt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 8b636f29c..30dbafb49 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -205,8 +205,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.8.0/Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", - "checksum": "SHA-256:8176e8931d31c066609835e6e4e2424abbc551bb90f2338761243f9886db8e18", - "size": "356241", + "checksum": "SHA-256:a674d92cbd7544bd087b540ca1708633840104c2cd1f1940fda20e4c88f30bd9", + "size": "356161", "boards": [ { "name": "Generic_D11C14A" diff --git a/platform.txt b/platform.txt index a3ca0a29a..8deae8792 100644 --- a/platform.txt +++ b/platform.txt @@ -151,8 +151,8 @@ tools.avrdude_remote.upload.pattern="openocd --version 2>&1 | grep 2016 && if op # BOSSA # tools.bossac.path={runtime.tools.bossac-1.9.0.path} -tools.bossac.cmd=bin/bossac -tools.bossac.cmd.windows=bin/bossac.exe +tools.bossac.cmd=bossac +tools.bossac.cmd.windows=bossac.exe tools.bossac.upload.params.verbose=-i -d tools.bossac.upload.params.quiet= From 1df218d1b6fec95b19af7782427488a443426149 Mon Sep 17 00:00:00 2001 From: qbolsee Date: Thu, 13 Oct 2022 17:25:47 -0400 Subject: [PATCH 31/62] Update package_Fab_SAM_index.json --- json/package_Fab_SAM_index.json | 102 ++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index b2f27e663..30dbafb49 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -197,6 +197,74 @@ "version": "1.2.1" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.8.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.8.0/Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", + "checksum": "SHA-256:a674d92cbd7544bd087b540ca1708633840104c2cd1f1940fda20e4c88f30bd9", + "size": "356161", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] } ], "tools": [ @@ -268,6 +336,40 @@ } ] }, + { + "name": "bossac", + "version": "1.9.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-windows.zip", + "archiveFileName": "bossac-1.9.0-windows.zip", + "checksum": "SHA-256:1677e81bde9c105399f18e8db59089a2464085c4bb250baaefad13a939330b14", + "size": "347565" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-x86_64-linux-gnu.tar.bz2", + "archiveFileName": "bossac-1.9.0-x86_64-linux-gnu.tar.bz2", + "checksum": "SHA-256:b55a88b5b431ac7d5367ede0a8a5cbded2ad9f6c5ecede906dacfbb52578f428", + "size": "38374" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-i686-linux-gnu.tar.bz2", + "archiveFileName": "bossac-1.9.0-i686-linux-gnu.tar.bz2", + "checksum": "SHA-256:4f7553978ef4d8e9cbdafd4badf598cdc9332753cf6c3d67c65633e6640783f8", + "size": "40871" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-mac-os.tar.bz2", + "archiveFileName": "bossac-1.9.0-mac-os.tar.bz2", + "checksum": "SHA-256:cfead2275d1509ab8122d2dc5e4e899d3dac41e8937d46248f271fa6dcc18f73", + "size": "31120" + } + ] + }, { "name": "CMSIS-Atmel", "version": "1.0.0-mattairtech-2", From 13c73c084c147897321d2c727650f6d1241042dd Mon Sep 17 00:00:00 2001 From: Quentin B Date: Wed, 19 Oct 2022 16:26:32 -0400 Subject: [PATCH 32/62] test new compiler --- json/package_Fab_SAM_experimental.json | 68 ++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 30dbafb49..376efa7d4 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -265,6 +265,74 @@ "version": "1.2.1" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.9.0-Jakey", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.8.0/Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", + "checksum": "SHA-256:a674d92cbd7544bd087b540ca1708633840104c2cd1f1940fda20e4c88f30bd9", + "size": "356161", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] } ], "tools": [ From 95c9f8f0009a8d949fc3eaeb284dc2b1cce4ed6a Mon Sep 17 00:00:00 2001 From: qbolsee Date: Mon, 24 Oct 2022 17:07:58 -0400 Subject: [PATCH 33/62] Update README.md --- variants/Generic_D11C14A/README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/variants/Generic_D11C14A/README.md b/variants/Generic_D11C14A/README.md index 258263d9d..41ed69155 100644 --- a/variants/Generic_D11C14A/README.md +++ b/variants/Generic_D11C14A/README.md @@ -1,17 +1,17 @@ # Generic ATsamD11C14A ``` -====================================== ATsamD11C14A ===================================== -Other COM PWM Analog INT Arduino* Arduino* INT Analog PWM COM Other -========================================================================================= +====================================== ATsamD11C14A ========================================= +Other COM PWM Analog INT Arduino* Arduino* INT Analog PWM COM Other +============================================================================================= 1------------------- - SCK*/RX2 TCC01 * * 5 | A5 A4 | 4 * * TCC00 MOSI*/TX2 REF - MOSI* TCC02 * 8 | A8 (XIN) A2 | 2 * * DAC + SCK*/RX2 TCC01 * * 5 | A5 A4 | 4 * * TCC00 MOSI*/TX2 REF + MOSI* TCC02 * 8 | A8 (XIN) A2 | 2 * * DAC SCK* TCC03 * 9 | A9 (XOUT) Vdd | SDA/MISO* TC10 * NMI 14 | A14 Gnd | SCL/SS* TC11 * * 15 | A15 A25 | 25 USB/DP BOOT 28 | A28/RST A24 | 24 USB/DM -SWDCLK TX1/MISO* 30 | A30 A31 | 31 * RX1/SS* SWDIO +SWDCLK TX1/MISO* 30 | A30 A31 | 31 * RX1/SS* SWDIO ------------------- * Most pins can be used for more than one function. When using PIN_MAP_STANDARD, the port From 5b8e06643f8beb8f4b7e9a08caf2f40b1206d3d5 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Wed, 2 Nov 2022 08:40:01 -0400 Subject: [PATCH 34/62] improve openocd --- boards.txt | 53 ++++++++++++----- extras/package_index.json.Release.template | 8 +-- json/package_Fab_SAM_experimental.json | 68 ++++++++++++++++++++++ platform.txt | 22 ++++--- programmers.txt | 13 +---- 5 files changed, 125 insertions(+), 39 deletions(-) diff --git a/boards.txt b/boards.txt index 88a23da29..de1cc1bdc 100644 --- a/boards.txt +++ b/boards.txt @@ -48,7 +48,7 @@ d11c14a.build.variant=Generic_D11C14A d11c14a.build.variant_system_lib= d11c14a.build.vid=0x16D0 d11c14a.upload.protocol=sam-ba -d11c14a.bootloader.tool=openocd +d11c14a.bootloader.tool=openocd-withbootsize d11c14a.menu.float.default=Print & String use auto-promoted doubles only d11c14a.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d11c14a.menu.float.print=Print uses separate singles and doubles @@ -121,14 +121,16 @@ d11c14a.menu.bootloader.4kb.upload.use_1200bps_touch=true d11c14a.menu.bootloader.4kb.upload.wait_for_upload_port=true d11c14a.menu.bootloader.4kb.upload.native_usb=true d11c14a.menu.bootloader.4kb.upload.maximum_size=12288 +d11c14a.menu.bootloader.4kb.upload.offset=0x1000 d11c14a.menu.bootloader.0kb=NO_BOOTLOADER d11c14a.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d11c14a.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d11c14a.menu.bootloader.0kb.upload.tool=openocd +d11c14a.menu.bootloader.0kb.upload.tool=openocd-withbootsize d11c14a.menu.bootloader.0kb.upload.use_1200bps_touch=false d11c14a.menu.bootloader.0kb.upload.wait_for_upload_port=false d11c14a.menu.bootloader.0kb.upload.native_usb=false d11c14a.menu.bootloader.0kb.upload.maximum_size=16384 +d11c14a.menu.bootloader.0kb.upload.offset=0x0000 d11c14a.menu.serial.one_uart=ONE_UART_ONE_WIRE_NO_SPI d11c14a.menu.serial.one_uart.build.serialcom_uart=ONE_UART d11c14a.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -189,7 +191,7 @@ d11d14as.build.variant=Generic_D11D14AS d11d14as.build.variant_system_lib= d11d14as.build.vid=0x16D0 d11d14as.upload.protocol=sam-ba -d11d14as.bootloader.tool=openocd +d11d14as.bootloader.tool=openocd-withbootsize d11d14as.menu.float.default=Print & String use auto-promoted doubles only d11d14as.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d11d14as.menu.float.print=Print uses separate singles and doubles @@ -262,14 +264,16 @@ d11d14as.menu.bootloader.4kb.upload.use_1200bps_touch=true d11d14as.menu.bootloader.4kb.upload.wait_for_upload_port=true d11d14as.menu.bootloader.4kb.upload.native_usb=true d11d14as.menu.bootloader.4kb.upload.maximum_size=12288 +d11d14as.menu.bootloader.4kb.upload.offset=0x1000 d11d14as.menu.bootloader.0kb=NO_BOOTLOADER d11d14as.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d11d14as.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d11d14as.menu.bootloader.0kb.upload.tool=openocd +d11d14as.menu.bootloader.0kb.upload.tool=openocd-withbootsize d11d14as.menu.bootloader.0kb.upload.use_1200bps_touch=false d11d14as.menu.bootloader.0kb.upload.wait_for_upload_port=false d11d14as.menu.bootloader.0kb.upload.native_usb=false d11d14as.menu.bootloader.0kb.upload.maximum_size=16384 +d11d14as.menu.bootloader.0kb.upload.offset=0x0000 d11d14as.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI d11d14as.menu.serial.one_uart.build.serialcom_uart=ONE_UART d11d14as.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -326,7 +330,7 @@ d11d14am.build.variant=Generic_D11D14AM d11d14am.build.variant_system_lib= d11d14am.build.vid=0x16D0 d11d14am.upload.protocol=sam-ba -d11d14am.bootloader.tool=openocd +d11d14am.bootloader.tool=openocd-withbootsize d11d14am.menu.float.default=Print & String use auto-promoted doubles only d11d14am.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d11d14am.menu.float.print=Print uses separate singles and doubles @@ -399,14 +403,16 @@ d11d14am.menu.bootloader.4kb.upload.use_1200bps_touch=true d11d14am.menu.bootloader.4kb.upload.wait_for_upload_port=true d11d14am.menu.bootloader.4kb.upload.native_usb=true d11d14am.menu.bootloader.4kb.upload.maximum_size=12288 +d11d14am.menu.bootloader.4kb.upload.offset=0x1000 d11d14am.menu.bootloader.0kb=NO_BOOTLOADER d11d14am.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d11d14am.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d11d14am.menu.bootloader.0kb.upload.tool=openocd +d11d14am.menu.bootloader.0kb.upload.tool=openocd-withbootsize d11d14am.menu.bootloader.0kb.upload.use_1200bps_touch=false d11d14am.menu.bootloader.0kb.upload.wait_for_upload_port=false d11d14am.menu.bootloader.0kb.upload.native_usb=false d11d14am.menu.bootloader.0kb.upload.maximum_size=16384 +d11d14am.menu.bootloader.0kb.upload.offset=0x0000 d11d14am.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI d11d14am.menu.serial.one_uart.build.serialcom_uart=ONE_UART d11d14am.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -463,7 +469,7 @@ x21e.build.variant=Generic_x21E x21e.build.variant_system_lib= x21e.build.vid=0x16D0 x21e.upload.protocol=sam-ba -x21e.bootloader.tool=openocd +x21e.bootloader.tool=openocd-withbootsize x21e.menu.float.default=Print & String use auto-promoted doubles only x21e.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY x21e.menu.float.print=Print uses separate singles and doubles @@ -603,6 +609,7 @@ x21e.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac x21e.menu.bootloader.8kb.upload.use_1200bps_touch=true x21e.menu.bootloader.8kb.upload.wait_for_upload_port=true x21e.menu.bootloader.8kb.upload.native_usb=true +x21e.menu.bootloader.8kb.upload.offset=0x2000 x21e.menu.bootloader.16kb=16KB_BOOTLOADER x21e.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ x21e.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -610,13 +617,15 @@ x21e.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac x21e.menu.bootloader.16kb.upload.use_1200bps_touch=true x21e.menu.bootloader.16kb.upload.wait_for_upload_port=true x21e.menu.bootloader.16kb.upload.native_usb=true +x21e.menu.bootloader.16kb.upload.offset=0x4000 x21e.menu.bootloader.0kb=NO_BOOTLOADER x21e.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ x21e.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -x21e.menu.bootloader.0kb.upload.tool=openocd +x21e.menu.bootloader.0kb.upload.tool=openocd-withbootsize x21e.menu.bootloader.0kb.upload.use_1200bps_touch=false x21e.menu.bootloader.0kb.upload.wait_for_upload_port=false x21e.menu.bootloader.0kb.upload.native_usb=false +x21e.menu.bootloader.0kb.upload.offset=0x0000 x21e.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI x21e.menu.serial.one_uart.build.serialcom_uart=ONE_UART x21e.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -705,7 +714,7 @@ x21g.build.variant=Generic_xx1G x21g.build.variant_system_lib= x21g.build.vid=0x16D0 x21g.upload.protocol=sam-ba -x21g.bootloader.tool=openocd +x21g.bootloader.tool=openocd-withbootsize x21g.menu.float.default=Print & String use auto-promoted doubles only x21g.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY x21g.menu.float.print=Print uses separate singles and doubles @@ -893,6 +902,7 @@ x21g.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac x21g.menu.bootloader.8kb.upload.use_1200bps_touch=true x21g.menu.bootloader.8kb.upload.wait_for_upload_port=true x21g.menu.bootloader.8kb.upload.native_usb=true +x21g.menu.bootloader.8kb.upload.offset=0x2000 x21g.menu.bootloader.16kb=16KB_BOOTLOADER x21g.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ x21g.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -900,13 +910,15 @@ x21g.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac x21g.menu.bootloader.16kb.upload.use_1200bps_touch=true x21g.menu.bootloader.16kb.upload.wait_for_upload_port=true x21g.menu.bootloader.16kb.upload.native_usb=true +x21g.menu.bootloader.16kb.upload.offset=0x4000 x21g.menu.bootloader.0kb=NO_BOOTLOADER x21g.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ x21g.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -x21g.menu.bootloader.0kb.upload.tool=openocd +x21g.menu.bootloader.0kb.upload.tool=openocd-withbootsize x21g.menu.bootloader.0kb.upload.use_1200bps_touch=false x21g.menu.bootloader.0kb.upload.wait_for_upload_port=false x21g.menu.bootloader.0kb.upload.native_usb=false +x21g.menu.bootloader.0kb.upload.offset=0x0000 x21g.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI x21g.menu.serial.one_uart.build.serialcom_uart=ONE_UART x21g.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -987,7 +999,7 @@ x21j.build.variant=Generic_xx1J x21j.build.variant_system_lib= x21j.build.vid=0x16D0 x21j.upload.protocol=sam-ba -x21j.bootloader.tool=openocd +x21j.bootloader.tool=openocd-withbootsize x21j.menu.float.default=Print & String use auto-promoted doubles only x21j.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY x21j.menu.float.print=Print uses separate singles and doubles @@ -1165,6 +1177,7 @@ x21j.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac x21j.menu.bootloader.8kb.upload.use_1200bps_touch=true x21j.menu.bootloader.8kb.upload.wait_for_upload_port=true x21j.menu.bootloader.8kb.upload.native_usb=true +x21j.menu.bootloader.8kb.upload.offset=0x2000 x21j.menu.bootloader.16kb=16KB_BOOTLOADER x21j.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ x21j.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -1172,13 +1185,15 @@ x21j.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac x21j.menu.bootloader.16kb.upload.use_1200bps_touch=true x21j.menu.bootloader.16kb.upload.wait_for_upload_port=true x21j.menu.bootloader.16kb.upload.native_usb=true +x21j.menu.bootloader.16kb.upload.offset=0x4000 x21j.menu.bootloader.0kb=NO_BOOTLOADER x21j.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ x21j.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -x21j.menu.bootloader.0kb.upload.tool=openocd +x21j.menu.bootloader.0kb.upload.tool=openocd-withbootsize x21j.menu.bootloader.0kb.upload.use_1200bps_touch=false x21j.menu.bootloader.0kb.upload.wait_for_upload_port=false x21j.menu.bootloader.0kb.upload.native_usb=false +x21j.menu.bootloader.0kb.upload.offset=0x0000 x21j.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI x21j.menu.serial.one_uart.build.serialcom_uart=ONE_UART x21j.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -1259,7 +1274,7 @@ d51g.build.variant=Generic_D51G d51g.build.variant_system_lib= d51g.build.vid=0x16D0 d51g.upload.protocol=sam-ba -d51g.bootloader.tool=openocd +d51g.bootloader.tool=openocd-withbootsize d51g.menu.float.default=Print & String use auto-promoted doubles only d51g.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d51g.menu.float.print=Print uses separate singles and doubles @@ -1367,6 +1382,7 @@ d51g.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac d51g.menu.bootloader.8kb.upload.use_1200bps_touch=true d51g.menu.bootloader.8kb.upload.wait_for_upload_port=true d51g.menu.bootloader.8kb.upload.native_usb=true +d51g.menu.bootloader.8kb.upload.offset=0x2000 d51g.menu.bootloader.16kb=16KB_BOOTLOADER d51g.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ d51g.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -1374,13 +1390,15 @@ d51g.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac d51g.menu.bootloader.16kb.upload.use_1200bps_touch=true d51g.menu.bootloader.16kb.upload.wait_for_upload_port=true d51g.menu.bootloader.16kb.upload.native_usb=true +d51g.menu.bootloader.16kb.upload.offset=0x4000 d51g.menu.bootloader.0kb=NO_BOOTLOADER d51g.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d51g.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d51g.menu.bootloader.0kb.upload.tool=openocd +d51g.menu.bootloader.0kb.upload.tool=openocd-withbootsize d51g.menu.bootloader.0kb.upload.use_1200bps_touch=false d51g.menu.bootloader.0kb.upload.wait_for_upload_port=false d51g.menu.bootloader.0kb.upload.native_usb=false +d51g.menu.bootloader.0kb.upload.offset=0x0000 d51g.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI d51g.menu.serial.one_uart.build.serialcom_uart=ONE_UART d51g.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -1461,7 +1479,7 @@ d51j.build.variant=Generic_xx1J d51j.build.variant_system_lib= d51j.build.vid=0x16D0 d51j.upload.protocol=sam-ba -d51j.bootloader.tool=openocd +d51j.bootloader.tool=openocd-withbootsize d51j.menu.float.default=Print & String use auto-promoted doubles only d51j.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d51j.menu.float.print=Print uses separate singles and doubles @@ -1589,6 +1607,7 @@ d51j.menu.bootloader.8kb.upload.tool=Fab_SAM_Arduino:bossac d51j.menu.bootloader.8kb.upload.use_1200bps_touch=true d51j.menu.bootloader.8kb.upload.wait_for_upload_port=true d51j.menu.bootloader.8kb.upload.native_usb=true +d51j.menu.bootloader.8kb.upload.offset=0x2000 d51j.menu.bootloader.16kb=16KB_BOOTLOADER d51j.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ d51j.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -1596,13 +1615,15 @@ d51j.menu.bootloader.16kb.upload.tool=Fab_SAM_Arduino:bossac d51j.menu.bootloader.16kb.upload.use_1200bps_touch=true d51j.menu.bootloader.16kb.upload.wait_for_upload_port=true d51j.menu.bootloader.16kb.upload.native_usb=true +d51j.menu.bootloader.16kb.upload.offset=0x4000 d51j.menu.bootloader.0kb=NO_BOOTLOADER d51j.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d51j.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d51j.menu.bootloader.0kb.upload.tool=openocd +d51j.menu.bootloader.0kb.upload.tool=openocd-withbootsize d51j.menu.bootloader.0kb.upload.use_1200bps_touch=false d51j.menu.bootloader.0kb.upload.wait_for_upload_port=false d51j.menu.bootloader.0kb.upload.native_usb=false +d51j.menu.bootloader.0kb.upload.offset=0x0000 d51j.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI d51j.menu.serial.one_uart.build.serialcom_uart=ONE_UART d51j.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE diff --git a/extras/package_index.json.Release.template b/extras/package_index.json.Release.template index b5657b459..e91b498d7 100644 --- a/extras/package_index.json.Release.template +++ b/extras/package_index.json.Release.template @@ -37,12 +37,12 @@ { "packager": "arduino", "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" + "version": "7-2017q4" }, { "packager": "Fab_SAM_Arduino", "name": "bossac", - "version": "1.7.0-mattairtech-3" + "version": "1.9.0" }, { "packager": "arduino", @@ -55,9 +55,9 @@ "version": "4.5.0" }, { - "packager": "arduino", + "packager": "Fab_SAM_Arduino", "name": "CMSIS-Atmel", - "version": "1.2.0" + "version": "1.0.0-mattairtech-2" }, { "packager": "arduino", diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 376efa7d4..229e9e3ae 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -333,6 +333,74 @@ "version": "1.2.1" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.9.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "checksum": "SHA-256:952054d14b347ad2ad062a59db01e3c46645384b9985b044cc324cfd21048b3f", + "size": "356549", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] } ], "tools": [ diff --git a/platform.txt b/platform.txt index 8deae8792..6404c8717 100644 --- a/platform.txt +++ b/platform.txt @@ -18,7 +18,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Fab SAM core for Arduino -version=1.8.0 +version=1.9.0 # Compile variables # ----------------- @@ -173,7 +173,8 @@ tools.openocd.cmd.windows=bin/openocd.exe tools.openocd.upload.params.verbose=-d2 tools.openocd.upload.params.quiet=-d0 -tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.bin}} verify reset 0x2000; shutdown" +# tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.bin}} verify reset 0x2000; shutdown" +tools.openocd.upload.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; program {{{build.path}/{build.project_name}.bin}} verify reset; shutdown" tools.openocd.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA tools.openocd.upload.network_pattern={network_cmd} -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -b @@ -181,15 +182,16 @@ tools.openocd.upload.network_pattern={network_cmd} -address {serial.port} -port # Program flashes the binary at 0x0000, so use the linker script without_bootloader tools.openocd.program.params.verbose=-d2 tools.openocd.program.params.quiet=-d0 -tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.elf}} verify reset; shutdown" +# tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.elf}} verify reset; shutdown" +tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; program {{{build.path}/{build.project_name}.bin}} verify reset; shutdown" tools.openocd.erase.params.verbose=-d2 tools.openocd.erase.params.quiet=-d0 -tools.openocd.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd chip-erase; shutdown" +tools.openocd.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd chip-erase; shutdown" tools.openocd.bootloader.params.verbose=-d2 tools.openocd.bootloader.params.quiet=-d0 -tools.openocd.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd bootloader 0; program {{{runtime.platform.path}/bootloaders/{bootloader.file}}} verify reset; shutdown" +tools.openocd.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd chip-erase; at91samd bootloader 0; program {{{runtime.platform.path}/bootloaders/{bootloader.file}}} verify reset; shutdown" # # OpenOCD sketch upload - version with configurable bootloader size @@ -200,19 +202,21 @@ tools.openocd-withbootsize.path={runtime.tools.openocd-0.9.0-arduino.path} tools.openocd-withbootsize.cmd=bin/openocd tools.openocd-withbootsize.cmd.windows=bin/openocd.exe +# "upload" tools.openocd-withbootsize.upload.params.verbose=-d2 tools.openocd-withbootsize.upload.params.quiet=-d0 -tools.openocd-withbootsize.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.bin}} verify reset {bootloader.size}; shutdown" +tools.openocd-withbootsize.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; program {{{build.path}/{build.project_name}.bin}} verify reset {upload.offset}; shutdown" # Program flashes the binary at 0x0000, so use the linker script without_bootloader +# "upload using programmer" tools.openocd-withbootsize.program.params.verbose=-d2 tools.openocd-withbootsize.program.params.quiet=-d0 -tools.openocd-withbootsize.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.elf}} verify reset; shutdown" +tools.openocd-withbootsize.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; program {{{build.path}/{build.project_name}.bin}} verify reset {upload.offset}; shutdown" tools.openocd-withbootsize.erase.params.verbose=-d2 tools.openocd-withbootsize.erase.params.quiet=-d0 -tools.openocd-withbootsize.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd chip-erase; shutdown" +tools.openocd-withbootsize.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd chip-erase; shutdown" tools.openocd-withbootsize.bootloader.params.verbose=-d2 tools.openocd-withbootsize.bootloader.params.quiet=-d0 -tools.openocd-withbootsize.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; halt; at91samd bootloader 0; program {{{runtime.platform.path}/bootloaders/{bootloader.file}}} verify reset; shutdown" +tools.openocd-withbootsize.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd chip-erase; at91samd bootloader 0; program {{{runtime.platform.path}/bootloaders/{bootloader.file}}} verify reset; shutdown" diff --git a/programmers.txt b/programmers.txt index fd7471b7d..4bf42b694 100644 --- a/programmers.txt +++ b/programmers.txt @@ -14,23 +14,16 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -edbg.name=Atmel EDBG +edbg.name=CMSIS-DAP edbg.communication=USB edbg.protocol= edbg.program.protocol= -edbg.program.tool=openocd +edbg.program.tool=openocd-withbootsize edbg.program.extra_params= atmel_ice.name=Atmel-ICE atmel_ice.communication=USB atmel_ice.protocol= atmel_ice.program.protocol= -atmel_ice.program.tool=openocd +atmel_ice.program.tool=openocd-withbootsize atmel_ice.program.extra_params= - -sam_ice.name=Atmel SAM-ICE -sam_ice.communication=USB -sam_ice.protocol= -sam_ice.program.protocol= -sam_ice.program.tool=openocd -sam_ice.program.extra_params= From 1b8aa94c0ca4f555d76c792e1786c97ccc35850d Mon Sep 17 00:00:00 2001 From: qbolsee Date: Wed, 2 Nov 2022 13:29:57 -0400 Subject: [PATCH 35/62] Update README.md --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 0fabbb6dd..81c0304be 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,12 @@ # Fab SAM D|L|C Core for Arduino +## Quitck installation guide + +You can find a guide here: +https://gitlab.cba.mit.edu/quentinbolsee/Arduino-SAM-tutorial/ + +## Summary + This repository is a Fab community fork of the original [MattairTech SAM D|L|C Core](https://github.com/mattairtech/ArduinoCore-samd). It offers support for: From bbdbdd3138dec23e8d381826fbd3829c2ec5c1e4 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Wed, 2 Nov 2022 08:52:17 -0400 Subject: [PATCH 36/62] version 1.9.0 --- json/package_Fab_SAM_index.json | 68 +++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 30dbafb49..2ddc31870 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -265,6 +265,74 @@ "version": "1.2.1" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.9.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "checksum": "SHA-256:952054d14b347ad2ad062a59db01e3c46645384b9985b044cc324cfd21048b3f", + "size": "356549", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] } ], "tools": [ From 61b5bed49b8c938fab20a0ac4a26c20f247a65e8 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Wed, 2 Nov 2022 13:30:14 -0400 Subject: [PATCH 37/62] fix openocd script --- ..._Fab_SAM_Core_for_Arduino-1.9.0_index.json | 68 +++++++++++++++++++ json/package_Fab_SAM_experimental.json | 4 +- .../openocd_scripts/SAMD11C14A.cfg | 1 + .../openocd_scripts/SAMD11D14AM.cfg | 1 + .../openocd_scripts/SAMD11D14AS.cfg | 1 + .../openocd_scripts/SAMC21E15A.cfg | 1 + .../openocd_scripts/SAMC21E16A.cfg | 1 + .../openocd_scripts/SAMC21E17A.cfg | 1 + .../openocd_scripts/SAMC21E18A.cfg | 1 + .../openocd_scripts/SAMD21E15A.cfg | 1 + .../openocd_scripts/SAMD21E16A.cfg | 1 + .../openocd_scripts/SAMD21E17A.cfg | 1 + .../openocd_scripts/SAMD21E18A.cfg | 1 + .../openocd_scripts/SAML21E15B.cfg | 1 + .../openocd_scripts/SAML21E16B.cfg | 1 + .../openocd_scripts/SAML21E17B.cfg | 1 + .../openocd_scripts/SAML21E18B.cfg | 1 + .../openocd_scripts/SAMC21G15A.cfg | 1 + .../openocd_scripts/SAMC21G16A.cfg | 1 + .../openocd_scripts/SAMC21G17A.cfg | 1 + .../openocd_scripts/SAMC21G18A.cfg | 1 + .../openocd_scripts/SAMD21G15A.cfg | 1 + .../openocd_scripts/SAMD21G16A.cfg | 1 + .../openocd_scripts/SAMD21G17A.cfg | 1 + .../openocd_scripts/SAMD21G18A.cfg | 1 + .../openocd_scripts/SAMD51G18A.cfg | 1 + .../openocd_scripts/SAMD51G19A.cfg | 1 + .../openocd_scripts/SAML21G16B.cfg | 1 + .../openocd_scripts/SAML21G17B.cfg | 1 + .../openocd_scripts/SAML21G18B.cfg | 1 + .../openocd_scripts/SAMC21J15A.cfg | 1 + .../openocd_scripts/SAMC21J16A.cfg | 1 + .../openocd_scripts/SAMC21J17A.cfg | 1 + .../openocd_scripts/SAMC21J18A.cfg | 1 + .../openocd_scripts/SAMD21J15A.cfg | 1 + .../openocd_scripts/SAMD21J16A.cfg | 1 + .../openocd_scripts/SAMD21J17A.cfg | 1 + .../openocd_scripts/SAMD21J18A.cfg | 1 + .../openocd_scripts/SAMD51J18A.cfg | 1 + .../openocd_scripts/SAMD51J19A.cfg | 1 + .../openocd_scripts/SAMD51J20A.cfg | 1 + .../openocd_scripts/SAML21J16B.cfg | 1 + .../openocd_scripts/SAML21J17B.cfg | 1 + .../openocd_scripts/SAML21J18B.cfg | 1 + 44 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json diff --git a/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json b/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json new file mode 100644 index 000000000..f83730ba7 --- /dev/null +++ b/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json @@ -0,0 +1,68 @@ +{ + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.9.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "checksum": "SHA-256:1f70c64241f5e8ad3f53b02652aa3ce87e6e46bf8faa9917435cee4dbc780a54", + "size": "356897", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] +} diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 229e9e3ae..c2de6c7c0 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -341,8 +341,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "checksum": "SHA-256:952054d14b347ad2ad062a59db01e3c46645384b9985b044cc324cfd21048b3f", - "size": "356549", + "checksum": "SHA-256:1f70c64241f5e8ad3f53b02652aa3ce87e6e46bf8faa9917435cee4dbc780a54", + "size": "356897", "boards": [ { "name": "Generic_D11C14A" diff --git a/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg b/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg index 5c39d8b33..240d38f5c 100644 --- a/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg +++ b/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg b/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg index b5ae3e4b1..3b62d7b06 100644 --- a/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg +++ b/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg b/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg index b4d7e4ccd..0b44a062e 100644 --- a/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg +++ b/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg index cf2cb9240..c18d2c713 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg index 912dcafec..7faa299ff 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg index f2820ad5f..584cbfac5 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg index 472f4a01e..34c9aca97 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg index 18bc87761..556a0eb84 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg index 73b23ab66..babff71a1 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg index 0d6dc227b..43102bcca 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg index d8c4945b0..10ba94d19 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg index cee3c424f..0a3f7ca54 100644 --- a/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg index 55ecc9013..5ab0a6edd 100644 --- a/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg index 6597381e9..35583e4a9 100644 --- a/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg index c8035b01e..727130ade 100644 --- a/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg index 1046f03ea..1619e7fe6 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg index faae84294..761741652 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg index 87f099244..708eb98b0 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg index 0753f2a87..cf20979ba 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg index a0d461b94..dc295e1f0 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg index f2f31cae1..2385e2391 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg index 69046b18b..dbf162ffc 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg index 5f813005e..ede0a68e0 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg index 2b93c5a15..5e5938a2b 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg index a633ed10a..299f53383 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg b/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg index a3f520918..d3c7a0aca 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg b/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg index d049721ed..f1bea2f7f 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg b/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg index 64e6cb3dd..c6231a481 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg index 301d5a6a3..9dbe2b491 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg index 3987667bf..fafc98fa0 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg index 7b9a31761..94e9892d3 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg index d3bb003e1..9a4d51384 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg index f29c2f30e..dc58b7d91 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg index 20af5e781..99afc4133 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg index e6cdfc819..0a1fdc2a3 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg index 575bf3e30..83b2f2c9f 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg index e9c345e37..c4a3744ed 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg index 91d1742e7..e3141c2d1 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg index 27a498f76..148841122 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg b/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg index ea27f6731..514ddb657 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg b/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg index 800bf825e..1a196ea11 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg b/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg index 733028407..df9877060 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg @@ -28,3 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] +reset_config srst_nogate connect_deassert_srst From 148aecbc8afbd9996fe5cd228d27179f90b7ab4d Mon Sep 17 00:00:00 2001 From: Quentin B Date: Wed, 2 Nov 2022 13:37:40 -0400 Subject: [PATCH 38/62] fix CRC --- json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json | 4 ++-- json/package_Fab_SAM_experimental.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json b/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json index f83730ba7..29884bae2 100644 --- a/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json +++ b/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json @@ -5,8 +5,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "checksum": "SHA-256:1f70c64241f5e8ad3f53b02652aa3ce87e6e46bf8faa9917435cee4dbc780a54", - "size": "356897", + "checksum": "SHA-256:f038520e059002b40622bac8ead9d91e401cf775e2b1ad763412a230a41bebe3", + "size": "356933", "boards": [ { "name": "Generic_D11C14A" diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index c2de6c7c0..fdc380b48 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -341,8 +341,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "checksum": "SHA-256:1f70c64241f5e8ad3f53b02652aa3ce87e6e46bf8faa9917435cee4dbc780a54", - "size": "356897", + "checksum": "SHA-256:f038520e059002b40622bac8ead9d91e401cf775e2b1ad763412a230a41bebe3", + "size": "356933", "boards": [ { "name": "Generic_D11C14A" From d1a6b7c1194270bde5111c396e9ed9f9b8719f8a Mon Sep 17 00:00:00 2001 From: qbolsee Date: Wed, 2 Nov 2022 14:02:14 -0400 Subject: [PATCH 39/62] Update package_Fab_SAM_index.json --- json/package_Fab_SAM_index.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 2ddc31870..ed8feab59 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -273,8 +273,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "checksum": "SHA-256:952054d14b347ad2ad062a59db01e3c46645384b9985b044cc324cfd21048b3f", - "size": "356549", + "checksum": "SHA-256:f038520e059002b40622bac8ead9d91e401cf775e2b1ad763412a230a41bebe3", + "size": "356933", "boards": [ { "name": "Generic_D11C14A" From 9fb92263aa3830edb6db4b681f2f696532fbd1d4 Mon Sep 17 00:00:00 2001 From: Quentin Bolsee Date: Mon, 7 Nov 2022 23:58:36 -0500 Subject: [PATCH 40/62] test release --- json/package_Fab_SAM_experimental.json | 68 ++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index fdc380b48..761321177 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -401,6 +401,74 @@ "version": "1.2.1" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.10.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "checksum": "SHA-256:f038520e059002b40622bac8ead9d91e401cf775e2b1ad763412a230a41bebe3", + "size": "356933", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.10.0-arduino7" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] } ], "tools": [ From 55ae867b55cf1e2ff11ee4dd944362ff97b3aa32 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Tue, 8 Nov 2022 00:55:09 -0500 Subject: [PATCH 41/62] new openocd version --- json/package_Fab_SAM_index.json | 1024 +++++++++-------- platform.txt | 14 +- .../openocd_scripts/SAMD11C14A.cfg | 2 +- .../openocd_scripts/SAMD11D14AM.cfg | 2 +- .../openocd_scripts/SAMD11D14AS.cfg | 2 +- .../openocd_scripts/SAMC21E15A.cfg | 2 +- .../openocd_scripts/SAMC21E16A.cfg | 2 +- .../openocd_scripts/SAMC21E17A.cfg | 2 +- .../openocd_scripts/SAMC21E18A.cfg | 2 +- .../openocd_scripts/SAMD21E15A.cfg | 2 +- .../openocd_scripts/SAMD21E16A.cfg | 2 +- .../openocd_scripts/SAMD21E17A.cfg | 2 +- .../openocd_scripts/SAMD21E18A.cfg | 2 +- .../openocd_scripts/SAML21E15B.cfg | 2 +- .../openocd_scripts/SAML21E16B.cfg | 2 +- .../openocd_scripts/SAML21E17B.cfg | 2 +- .../openocd_scripts/SAML21E18B.cfg | 2 +- .../openocd_scripts/SAMC21G15A.cfg | 2 +- .../openocd_scripts/SAMC21G16A.cfg | 2 +- .../openocd_scripts/SAMC21G17A.cfg | 2 +- .../openocd_scripts/SAMC21G18A.cfg | 2 +- .../openocd_scripts/SAMD21G15A.cfg | 2 +- .../openocd_scripts/SAMD21G16A.cfg | 2 +- .../openocd_scripts/SAMD21G17A.cfg | 2 +- .../openocd_scripts/SAMD21G18A.cfg | 2 +- .../openocd_scripts/SAMD51G18A.cfg | 2 +- .../openocd_scripts/SAMD51G19A.cfg | 2 +- .../openocd_scripts/SAML21G16B.cfg | 2 +- .../openocd_scripts/SAML21G17B.cfg | 2 +- .../openocd_scripts/SAML21G18B.cfg | 2 +- .../openocd_scripts/SAMC21J15A.cfg | 2 +- .../openocd_scripts/SAMC21J16A.cfg | 2 +- .../openocd_scripts/SAMC21J17A.cfg | 2 +- .../openocd_scripts/SAMC21J18A.cfg | 2 +- .../openocd_scripts/SAMD21J15A.cfg | 2 +- .../openocd_scripts/SAMD21J16A.cfg | 2 +- .../openocd_scripts/SAMD21J17A.cfg | 2 +- .../openocd_scripts/SAMD21J18A.cfg | 2 +- .../openocd_scripts/SAMD51J18A.cfg | 2 +- .../openocd_scripts/SAMD51J19A.cfg | 2 +- .../openocd_scripts/SAMD51J20A.cfg | 2 +- .../openocd_scripts/SAML21J16B.cfg | 2 +- .../openocd_scripts/SAML21J17B.cfg | 2 +- .../openocd_scripts/SAML21J18B.cfg | 2 +- 44 files changed, 595 insertions(+), 527 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index ed8feab59..13e60374e 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -1,478 +1,546 @@ -{ - "packages": [ - { - "name": "Fab_SAM_Arduino", - "maintainer": "Fab Foundation", - "websiteURL": "https://github.com/qbolsee/ArduinoCore-fab-sam", - "email": "", - "help": { - "online": "" - }, - "platforms": [ - { - "name": "Fab SAM core for Arduino", - "architecture": "samd", - "version": "1.6.18-alpha1", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha1/Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", - "checksum": "SHA-256:5745e58fe3d6fc0b47b7f19f241684219e9df623eb6da033d7247e8e244b9bfd", - "size": "357035", - "boards": [ - { - "name": "Generic_D21E" - }, - { - "name": "Generic_D11C14A" - }, - { - "name": "Generic_D11D14AS" - } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "bossac", - "version": "1.7.0-mattairtech-3" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.0" - } - ] - }, - { - "name": "Fab SAM core for Arduino", - "architecture": "samd", - "version": "1.6.18-alpha2", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha2/Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", - "checksum": "SHA-256:76cf96905c6a70090a212f1309014bf4e7e94189d2dc88de90d8b95d1997c500", - "size": "356816", - "boards": [ - { - "name": "Generic_D11C14A" - }, - { - "name": "Generic_D11D14AS" - }, - { - "name": "Generic_D11D14AM" - }, - { - "name": "Generic_x21E" - }, - { - "name": "Generic_x21G" - }, - { - "name": "Generic_x21J" - }, - { - "name": "Generic_D51G" - }, - { - "name": "Generic_D51J" - } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "bossac", - "version": "1.7.0-mattairtech-3" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.1" - } - ] - }, - { - "name": "Fab SAM core for Arduino", - "architecture": "samd", - "version": "1.7.0", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.7.0/Fab_SAM_Core_for_Arduino-1.7.0.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.7.0.tar.bz2", - "checksum": "SHA-256:84e5d6919fdea31c5a56420d9a8d8a0347196675f4b7b96b0e99c20bdfecae57", - "size": "356441", - "boards": [ - { - "name": "Generic_D11C14A" - }, - { - "name": "Generic_D11D14AS" - }, - { - "name": "Generic_D11D14AM" - }, - { - "name": "Generic_x21E" - }, - { - "name": "Generic_x21G" - }, - { - "name": "Generic_x21J" - }, - { - "name": "Generic_D51G" - }, - { - "name": "Generic_D51J" - } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "bossac", - "version": "1.8.0" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.1" - } - ] - }, - { - "name": "Fab SAM core for Arduino", - "architecture": "samd", - "version": "1.8.0", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.8.0/Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", - "checksum": "SHA-256:a674d92cbd7544bd087b540ca1708633840104c2cd1f1940fda20e4c88f30bd9", - "size": "356161", - "boards": [ - { - "name": "Generic_D11C14A" - }, - { - "name": "Generic_D11D14AS" - }, - { - "name": "Generic_D11D14AM" - }, - { - "name": "Generic_x21E" - }, - { - "name": "Generic_x21G" - }, - { - "name": "Generic_x21J" - }, - { - "name": "Generic_D51G" - }, - { - "name": "Generic_D51J" - } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "4.8.3-2014q1" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "bossac", - "version": "1.9.0" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.1" - } - ] - }, - { - "name": "Fab SAM core for Arduino", - "architecture": "samd", - "version": "1.9.0", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "checksum": "SHA-256:f038520e059002b40622bac8ead9d91e401cf775e2b1ad763412a230a41bebe3", - "size": "356933", - "boards": [ - { - "name": "Generic_D11C14A" - }, - { - "name": "Generic_D11D14AS" - }, - { - "name": "Generic_D11D14AM" - }, - { - "name": "Generic_x21E" - }, - { - "name": "Generic_x21G" - }, - { - "name": "Generic_x21J" - }, - { - "name": "Generic_D51G" - }, - { - "name": "Generic_D51J" - } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "7-2017q4" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "bossac", - "version": "1.9.0" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.1" - } - ] - } - ], - "tools": [ - { - "name": "bossac", - "version": "1.7.0-mattairtech-3", - "systems": [ - { - "host": "i686-mingw32", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-mingw32.tar.gz", - "checksum": "SHA-256:81e5fc6577135b548b3154035742826e855eba257cc2f4c8f98f32e8f82b8b1e", - "size": "326228" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:c1156472f375626e6494a06787e1989abdc88cf091b554b45015c4ef698fbcb4", - "size": "37896" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:c4e346ce1851c4202111da34db9c47a7f15f15b9a0110040c6d343ca3b0ed8d3", - "size": "40192" - }, - { - "host": "x86_64-apple-darwin", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", - "checksum": "SHA-256:0fe5cc3c8575b6747bae471582791ae36509aef65af156a9cad58b42c2c20200", - "size": "30073" - } - ] - }, - { - "name": "bossac", - "version": "1.8.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-windows.tar.gz", - "archiveFileName": "bossac-1.8.0-windows.tar.gz", - "checksum": "SHA-256:c2dee790792eb9d38fe716903798e18c91bd25b6718e89d8b177ebe4e5a55034", - "size": "347551" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-x86_64-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.8.0-x86_64-linux-gnu.tar.gz", - "checksum": "SHA-256:432faadba16b959013aa2905e69a94470b84ade4becffd92b39dcadff283ed3b", - "size": "38161" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-i686-linux-gnu.tar.gz", - "archiveFileName": "bossac-1.8.0-i686-linux-gnu.tar.gz", - "checksum": "SHA-256:52d7e66d4880eeb4868f77b38ae676a5715cf7e192a1a7f6d74c867aaa3eefca", - "size": "40405" - }, - { - "host": "x86_64-apple-darwin", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-mac-os.tar.gz", - "archiveFileName": "bossac-1.8.0-mac-os.tar.gz", - "checksum": "SHA-256:fc2baa24fac7f41303ac2952c92704f23129e26090b048e693e0d202a1bbf613", - "size": "30052" - } - ] - }, - { - "name": "bossac", - "version": "1.9.0", - "systems": [ - { - "host": "i686-mingw32", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-windows.zip", - "archiveFileName": "bossac-1.9.0-windows.zip", - "checksum": "SHA-256:1677e81bde9c105399f18e8db59089a2464085c4bb250baaefad13a939330b14", - "size": "347565" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-x86_64-linux-gnu.tar.bz2", - "archiveFileName": "bossac-1.9.0-x86_64-linux-gnu.tar.bz2", - "checksum": "SHA-256:b55a88b5b431ac7d5367ede0a8a5cbded2ad9f6c5ecede906dacfbb52578f428", - "size": "38374" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-i686-linux-gnu.tar.bz2", - "archiveFileName": "bossac-1.9.0-i686-linux-gnu.tar.bz2", - "checksum": "SHA-256:4f7553978ef4d8e9cbdafd4badf598cdc9332753cf6c3d67c65633e6640783f8", - "size": "40871" - }, - { - "host": "x86_64-apple-darwin", - "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-mac-os.tar.bz2", - "archiveFileName": "bossac-1.9.0-mac-os.tar.bz2", - "checksum": "SHA-256:cfead2275d1509ab8122d2dc5e4e899d3dac41e8937d46248f271fa6dcc18f73", - "size": "31120" - } - ] - }, - { - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2", - "systems": [ - { - "host": "i686-mingw32", - "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", - "size": "1977965" - }, - { - "host": "x86_64-pc-linux-gnu", - "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", - "size": "1977965" - }, - { - "host": "i686-pc-linux-gnu", - "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", - "size": "1977965" - }, - { - "host": "x86_64-apple-darwin", - "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", - "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", - "size": "1977965" - } - ] - } - ] - } - ] -} +{ + "packages": [ + { + "name": "Fab_SAM_Arduino", + "maintainer": "Fab Foundation", + "websiteURL": "https://github.com/qbolsee/ArduinoCore-fab-sam", + "email": "", + "help": { + "online": "" + }, + "platforms": [ + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.6.18-alpha1", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha1/Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha1.tar.bz2", + "checksum": "SHA-256:5745e58fe3d6fc0b47b7f19f241684219e9df623eb6da033d7247e8e244b9bfd", + "size": "357035", + "boards": [ + { + "name": "Generic_D21E" + }, + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.7.0-mattairtech-3" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.0" + } + ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.6.18-alpha2", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.6.18-alpha2/Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.6.18-alpha2.tar.bz2", + "checksum": "SHA-256:76cf96905c6a70090a212f1309014bf4e7e94189d2dc88de90d8b95d1997c500", + "size": "356816", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.7.0-mattairtech-3" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.7.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.7.0/Fab_SAM_Core_for_Arduino-1.7.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.7.0.tar.bz2", + "checksum": "SHA-256:84e5d6919fdea31c5a56420d9a8d8a0347196675f4b7b96b0e99c20bdfecae57", + "size": "356441", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.8.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.8.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.8.0/Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.8.0.tar.bz2", + "checksum": "SHA-256:a674d92cbd7544bd087b540ca1708633840104c2cd1f1940fda20e4c88f30bd9", + "size": "356161", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "4.8.3-2014q1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.9.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", + "checksum": "SHA-256:f038520e059002b40622bac8ead9d91e401cf775e2b1ad763412a230a41bebe3", + "size": "356933", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.10.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.10.0/Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", + "checksum": "SHA-256:3add820b25f856f7158020da57a977c9b1b6829c9b5727ae024e8a25d8dba517", + "size": "356735", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.10.0-arduino7" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] + } + ], + "tools": [ + { + "name": "bossac", + "version": "1.7.0-mattairtech-3", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-mingw32.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-mingw32.tar.gz", + "checksum": "SHA-256:81e5fc6577135b548b3154035742826e855eba257cc2f4c8f98f32e8f82b8b1e", + "size": "326228" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:c1156472f375626e6494a06787e1989abdc88cf091b554b45015c4ef698fbcb4", + "size": "37896" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-i686-linux-gnu.tar.gz", + "checksum": "SHA-256:c4e346ce1851c4202111da34db9c47a7f15f15b9a0110040c6d343ca3b0ed8d3", + "size": "40192" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.7.0-mattairtech-3/bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", + "archiveFileName": "bossac-1.7.0-mattairtech-3-x86_64-apple-darwin.tar.gz", + "checksum": "SHA-256:0fe5cc3c8575b6747bae471582791ae36509aef65af156a9cad58b42c2c20200", + "size": "30073" + } + ] + }, + { + "name": "bossac", + "version": "1.8.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-windows.tar.gz", + "archiveFileName": "bossac-1.8.0-windows.tar.gz", + "checksum": "SHA-256:c2dee790792eb9d38fe716903798e18c91bd25b6718e89d8b177ebe4e5a55034", + "size": "347551" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-x86_64-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.8.0-x86_64-linux-gnu.tar.gz", + "checksum": "SHA-256:432faadba16b959013aa2905e69a94470b84ade4becffd92b39dcadff283ed3b", + "size": "38161" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-i686-linux-gnu.tar.gz", + "archiveFileName": "bossac-1.8.0-i686-linux-gnu.tar.gz", + "checksum": "SHA-256:52d7e66d4880eeb4868f77b38ae676a5715cf7e192a1a7f6d74c867aaa3eefca", + "size": "40405" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.8.0/bossac-1.8.0-mac-os.tar.gz", + "archiveFileName": "bossac-1.8.0-mac-os.tar.gz", + "checksum": "SHA-256:fc2baa24fac7f41303ac2952c92704f23129e26090b048e693e0d202a1bbf613", + "size": "30052" + } + ] + }, + { + "name": "bossac", + "version": "1.9.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-windows.zip", + "archiveFileName": "bossac-1.9.0-windows.zip", + "checksum": "SHA-256:1677e81bde9c105399f18e8db59089a2464085c4bb250baaefad13a939330b14", + "size": "347565" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-x86_64-linux-gnu.tar.bz2", + "archiveFileName": "bossac-1.9.0-x86_64-linux-gnu.tar.bz2", + "checksum": "SHA-256:b55a88b5b431ac7d5367ede0a8a5cbded2ad9f6c5ecede906dacfbb52578f428", + "size": "38374" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-i686-linux-gnu.tar.bz2", + "archiveFileName": "bossac-1.9.0-i686-linux-gnu.tar.bz2", + "checksum": "SHA-256:4f7553978ef4d8e9cbdafd4badf598cdc9332753cf6c3d67c65633e6640783f8", + "size": "40871" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/BOSSA/releases/download/1.9.0/bossac-1.9.0-mac-os.tar.bz2", + "archiveFileName": "bossac-1.9.0-mac-os.tar.bz2", + "checksum": "SHA-256:cfead2275d1509ab8122d2dc5e4e899d3dac41e8937d46248f271fa6dcc18f73", + "size": "31120" + } + ] + }, + { + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", + "size": "1977965" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", + "size": "1977965" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", + "size": "1977965" + }, + { + "host": "x86_64-apple-darwin", + "url": "https://github.com/qbolsee/CMSIS-Atmel/releases/download/CMSIS-Atmel-1.0.0-mattairtech-2/CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "archiveFileName": "CMSIS-Atmel-1.0.0-mattairtech-2.tar.gz", + "checksum": "SHA-256:6d592de468028e76c085a7a416939a39389a06f3f03331cdc04a50e443ea4e9a", + "size": "1977965" + } + ] + } + ] + } + ] +} diff --git a/platform.txt b/platform.txt index 6404c8717..1708bfad3 100644 --- a/platform.txt +++ b/platform.txt @@ -18,7 +18,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Fab SAM core for Arduino -version=1.9.0 +version=1.10.0 # Compile variables # ----------------- @@ -126,8 +126,8 @@ debug.toolchain=gcc debug.toolchain.path={runtime.tools.arm-none-eabi-gcc.path}/bin/ debug.toolchain.prefix=arm-none-eabi- debug.server=openocd -debug.server.openocd.path={runtime.tools.openocd-0.9.0-arduino.path}/bin/openocd -debug.server.openocd.scripts_dir={runtime.tools.openocd-0.9.0-arduino.path}/share/openocd/scripts/ +debug.server.openocd.path={runtime.tools.openocd-0.10.0-arduino7.path}/bin/openocd +debug.server.openocd.scripts_dir={runtime.tools.openocd-0.10.0-arduino7.path}/share/openocd/scripts/ debug.server.openocd.script={runtime.platform.path}/variants/{build.variant}/{build.openocdscript} # Upload/Debug tools @@ -167,7 +167,7 @@ tools.bossac.upload.network_pattern="{network_cmd}" -address {serial.port} -port # OpenOCD sketch upload # -tools.openocd.path={runtime.tools.openocd-0.9.0-arduino.path} +tools.openocd.path={runtime.tools.openocd-0.10.0-arduino7.path} tools.openocd.cmd=bin/openocd tools.openocd.cmd.windows=bin/openocd.exe @@ -191,14 +191,14 @@ tools.openocd.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share tools.openocd.bootloader.params.verbose=-d2 tools.openocd.bootloader.params.quiet=-d0 -tools.openocd.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd chip-erase; at91samd bootloader 0; program {{{runtime.platform.path}/bootloaders/{bootloader.file}}} verify reset; shutdown" +tools.openocd.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd bootloader 0; program {{runtime.platform.path}/bootloaders/{bootloader.file}} verify reset; shutdown" # # OpenOCD sketch upload - version with configurable bootloader size # FIXME: this programmer is a workaround for default options being overwritten by uploadUsingPreferences # -tools.openocd-withbootsize.path={runtime.tools.openocd-0.9.0-arduino.path} +tools.openocd-withbootsize.path={runtime.tools.openocd-0.10.0-arduino7.path} tools.openocd-withbootsize.cmd=bin/openocd tools.openocd-withbootsize.cmd.windows=bin/openocd.exe @@ -219,4 +219,4 @@ tools.openocd-withbootsize.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s tools.openocd-withbootsize.bootloader.params.verbose=-d2 tools.openocd-withbootsize.bootloader.params.quiet=-d0 -tools.openocd-withbootsize.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd chip-erase; at91samd bootloader 0; program {{{runtime.platform.path}/bootloaders/{bootloader.file}}} verify reset; shutdown" +tools.openocd-withbootsize.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd bootloader 0; program {{runtime.platform.path}/bootloaders/{bootloader.file}} verify reset; shutdown" diff --git a/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg b/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg index 240d38f5c..9bac13dd7 100644 --- a/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg +++ b/variants/Generic_D11C14A/openocd_scripts/SAMD11C14A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg b/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg index 3b62d7b06..318192046 100644 --- a/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg +++ b/variants/Generic_D11D14AM/openocd_scripts/SAMD11D14AM.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg b/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg index 0b44a062e..aa4a7ddc3 100644 --- a/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg +++ b/variants/Generic_D11D14AS/openocd_scripts/SAMD11D14AS.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg index c18d2c713..f8735b0d8 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E15A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg index 7faa299ff..66eca2d01 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E16A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg index 584cbfac5..4b281baad 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E17A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg b/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg index 34c9aca97..f17e5e204 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMC21E18A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg index 556a0eb84..b1d60ed49 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E15A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg index babff71a1..a0d3361e7 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E16A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg index 43102bcca..17eaa210b 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E17A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg b/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg index 10ba94d19..2b202d5f2 100644 --- a/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAMD21E18A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg index 0a3f7ca54..c9409ec7c 100644 --- a/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E15B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg index 5ab0a6edd..574bc5657 100644 --- a/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E16B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg index 35583e4a9..4882342cc 100644 --- a/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E17B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg b/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg index 727130ade..35f330027 100644 --- a/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg +++ b/variants/Generic_x21E/openocd_scripts/SAML21E18B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg index 1619e7fe6..af3d1e7e2 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G15A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg index 761741652..bfda61376 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G16A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg index 708eb98b0..55a0d25f3 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G17A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg index cf20979ba..e05b8ced6 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMC21G18A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg index dc295e1f0..05376d7a5 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G15A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg index 2385e2391..5bb93dfe9 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G16A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg index dbf162ffc..48340cf57 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G17A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg index ede0a68e0..414a4d105 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD21G18A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg index 5e5938a2b..d3b384a2b 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD51G18A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg b/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg index 299f53383..6ab148837 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAMD51G19A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg b/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg index d3c7a0aca..1b102d3c6 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAML21G16B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg b/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg index f1bea2f7f..863a8cf9c 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAML21G17B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg b/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg index c6231a481..2d6f0ebec 100644 --- a/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg +++ b/variants/Generic_xx1G/openocd_scripts/SAML21G18B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg index 9dbe2b491..ad5659ba3 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J15A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg index fafc98fa0..5ec605772 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J16A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg index 94e9892d3..29c3aa951 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J17A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg index 9a4d51384..2c325ae14 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMC21J18A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samcXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg index dc58b7d91..300a9ec68 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J15A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg index 99afc4133..1f263b016 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J16A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg index 0a1fdc2a3..ec50fd472 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J17A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg index 83b2f2c9f..7b29af39e 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD21J18A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg index c4a3744ed..005594f4c 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD51J18A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg index e3141c2d1..1f3feda9d 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD51J19A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg b/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg index 148841122..92c1632e6 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAMD51J20A.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samdXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg b/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg index 514ddb657..d421aa756 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAML21J16B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg b/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg index 1a196ea11..74c5bfc75 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAML21J17B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst diff --git a/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg b/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg index df9877060..783bb363a 100644 --- a/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg +++ b/variants/Generic_xx1J/openocd_scripts/SAML21J18B.cfg @@ -28,4 +28,4 @@ set ENDIAN little set telnet_port 0 source [find target/at91samlXX.cfg] -reset_config srst_nogate connect_deassert_srst +reset_config srst_nogate connect_assert_srst From bcabbef6f7718ac45def04d2943198d96fd80b27 Mon Sep 17 00:00:00 2001 From: Quentin Bolsee Date: Tue, 8 Nov 2022 01:09:52 -0500 Subject: [PATCH 42/62] 1.10.0 not ready --- json/package_Fab_SAM_index.json | 68 --------------------------------- 1 file changed, 68 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 13e60374e..1c6de3b25 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -333,74 +333,6 @@ "version": "1.2.1" } ] - }, - { - "name": "Fab SAM core for Arduino", - "architecture": "samd", - "version": "1.10.0", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.10.0/Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", - "checksum": "SHA-256:3add820b25f856f7158020da57a977c9b1b6829c9b5727ae024e8a25d8dba517", - "size": "356735", - "boards": [ - { - "name": "Generic_D11C14A" - }, - { - "name": "Generic_D11D14AS" - }, - { - "name": "Generic_D11D14AM" - }, - { - "name": "Generic_x21E" - }, - { - "name": "Generic_x21G" - }, - { - "name": "Generic_x21J" - }, - { - "name": "Generic_D51G" - }, - { - "name": "Generic_D51J" - } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "7-2017q4" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "bossac", - "version": "1.9.0" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.10.0-arduino7" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.1" - } - ] } ], "tools": [ From 7ed6ebf5d10352d933df4086fcd5572542466901 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Wed, 9 Nov 2022 12:50:11 -0500 Subject: [PATCH 43/62] test edbg --- json/package_Fab_SAM_experimental.json | 18 ++++++++++++++++++ tools/edbg/edbg-0.50.0-win32.tar.gz | Bin 0 -> 147999 bytes 2 files changed, 18 insertions(+) create mode 100644 tools/edbg/edbg-0.50.0-win32.tar.gz diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 761321177..544969ea5 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -467,11 +467,29 @@ "packager": "arduino", "name": "arduinoOTA", "version": "1.2.1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "edbg", + "version": "0.50.0" } ] } ], "tools": [ + { + "name": "edbg", + "version": "0.50.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-win32.tar.gz", + "archiveFileName": "edbg-0.50.0-win32.tar.gz", + "checksum": "SHA-256:1611c24dcd9a49ebc7e704369d7ed3a70750eb1b7c3282443c4026b8f737a015", + "size": "147999" + }, + ] + }, { "name": "bossac", "version": "1.7.0-mattairtech-3", diff --git a/tools/edbg/edbg-0.50.0-win32.tar.gz b/tools/edbg/edbg-0.50.0-win32.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..73bde71ee86651a55c950cb1e27c83158fa6fe76 GIT binary patch literal 147999 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

li{I{N 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�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 Date: Wed, 9 Nov 2022 12:51:51 -0500 Subject: [PATCH 44/62] json fix --- json/package_Fab_SAM_experimental.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 544969ea5..ed73ddb6c 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -487,7 +487,7 @@ "archiveFileName": "edbg-0.50.0-win32.tar.gz", "checksum": "SHA-256:1611c24dcd9a49ebc7e704369d7ed3a70750eb1b7c3282443c4026b8f737a015", "size": "147999" - }, + } ] }, { From 4c69db271b07dc02a7f39f215b5aed0978112a8d Mon Sep 17 00:00:00 2001 From: Quentin B Date: Wed, 9 Nov 2022 13:20:22 -0500 Subject: [PATCH 45/62] edbg for all --- json/package_Fab_SAM_experimental.json | 21 ++++++++++++++++++ .../edbg-0.50.0-i386-apple-darwin11.tar.gz | Bin 0 -> 42954 bytes tools/edbg/edbg-0.50.0-i686-linux.tar.gz | Bin 0 -> 52855 bytes tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz | Bin 0 -> 52856 bytes 4 files changed, 21 insertions(+) create mode 100644 tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.gz create mode 100644 tools/edbg/edbg-0.50.0-i686-linux.tar.gz create mode 100644 tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index ed73ddb6c..28bd6dfa8 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -487,6 +487,27 @@ "archiveFileName": "edbg-0.50.0-win32.tar.gz", "checksum": "SHA-256:1611c24dcd9a49ebc7e704369d7ed3a70750eb1b7c3282443c4026b8f737a015", "size": "147999" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz", + "archiveFileName": "edbg-0.50.0-x86_64-linux.tar.gz", + "checksum": "SHA-256:fac7b291b82f64fc594aa7e26e5932a821238a685e21c6b34f3ccb6a562d2a3e", + "size": "52856" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-i686-linux.tar.gz", + "archiveFileName": "edbg-0.50.0-i686-linux.tar.gz", + "checksum": "SHA-256:3b88ed2bc426104bc2b8ce3bd4f9c3bfdfe44d16cf8b9bbe500dffbf80ee384b", + "size": "52855" + }, + { + "host": "i386-apple-darwin11", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.gz", + "archiveFileName": "edbg-0.50.0-i386-apple-darwin11.tar.gz", + "checksum": "SHA-256:e84b4b5f06c12756bde29255ee8bd99a35dd5363f560e4823e7119147d486937", + "size": "42954" } ] }, diff --git a/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.gz b/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7f950b8977f97c9e81e08537a7faa903d5a68d73 GIT binary patch literal 42954 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 b%;$jvsgO~Q|4;a?t#|SK8cra(4IuhIj3^x& literal 0 HcmV?d00001 diff --git a/tools/edbg/edbg-0.50.0-i686-linux.tar.gz b/tools/edbg/edbg-0.50.0-i686-linux.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..22d2517adb4434f71ef64671ded8f2df1c978771 GIT binary patch literal 52855 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 Vby}x&TBrYa`Wq3}CFcMz0s!LG&-MTS literal 0 HcmV?d00001 diff --git a/tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz b/tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..df134cd946e46cbe5cd3e2de3ac49e8dd9a6ec44 GIT binary patch literal 52856 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 Date: Wed, 9 Nov 2022 13:37:16 -0500 Subject: [PATCH 46/62] edbg release --- json/package_Fab_SAM_experimental.json | 32 +++++++++--------- .../edbg-0.50.0-i386-apple-darwin11.tar.gz | Bin 42954 -> 0 bytes tools/edbg/edbg-0.50.0-i686-linux.tar.gz | Bin 52855 -> 0 bytes tools/edbg/edbg-0.50.0-win32.tar.gz | Bin 147999 -> 0 bytes tools/edbg/edbg-0.50.0-win32.zip | Bin 0 -> 148852 bytes tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz | Bin 52856 -> 0 bytes 6 files changed, 16 insertions(+), 16 deletions(-) delete mode 100644 tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.gz delete mode 100644 tools/edbg/edbg-0.50.0-i686-linux.tar.gz delete mode 100644 tools/edbg/edbg-0.50.0-win32.tar.gz create mode 100644 tools/edbg/edbg-0.50.0-win32.zip delete mode 100644 tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 28bd6dfa8..8c9cb0c87 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -483,31 +483,31 @@ "systems": [ { "host": "i686-mingw32", - "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-win32.tar.gz", - "archiveFileName": "edbg-0.50.0-win32.tar.gz", - "checksum": "SHA-256:1611c24dcd9a49ebc7e704369d7ed3a70750eb1b7c3282443c4026b8f737a015", - "size": "147999" + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-win32.zip", + "archiveFileName": "edbg-0.50.0-win32.zip", + "checksum": "SHA-256:c26c964c0635363ce3b947cf0b8995be33455d09cc42e506609ba65d97eb9a24", + "size": "148852" }, { "host": "x86_64-pc-linux-gnu", - "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz", - "archiveFileName": "edbg-0.50.0-x86_64-linux.tar.gz", - "checksum": "SHA-256:fac7b291b82f64fc594aa7e26e5932a821238a685e21c6b34f3ccb6a562d2a3e", - "size": "52856" + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-x86_64-linux.tar.bz2", + "archiveFileName": "edbg-0.50.0-x86_64-linux.tar.bz2", + "checksum": "SHA-256:822936e2472a3ff70d00eb2eae5ccf0938ae078ccf8dcefb48bec570559b2c9f", + "size": "53577" }, { "host": "i686-pc-linux-gnu", - "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-i686-linux.tar.gz", - "archiveFileName": "edbg-0.50.0-i686-linux.tar.gz", - "checksum": "SHA-256:3b88ed2bc426104bc2b8ce3bd4f9c3bfdfe44d16cf8b9bbe500dffbf80ee384b", - "size": "52855" + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-i686-linux.tar.bz2", + "archiveFileName": "edbg-0.50.0-i686-linux.tar.bz2", + "checksum": "SHA-256:7c6547be1a5c651865243ab835564b5b71b7d5cab6d6cbf782ef5170e350adad", + "size": "53558" }, { "host": "i386-apple-darwin11", - "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.gz", - "archiveFileName": "edbg-0.50.0-i386-apple-darwin11.tar.gz", - "checksum": "SHA-256:e84b4b5f06c12756bde29255ee8bd99a35dd5363f560e4823e7119147d486937", - "size": "42954" + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.bz2", + "archiveFileName": "edbg-0.50.0-i386-apple-darwin11.tar.bz2", + "checksum": "SHA-256:f5797dc582f625a7d82e9e73cf4311be50998acf601aa3e9251c23e4bee025e4", + "size": "44141" } ] }, diff --git a/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.gz b/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.gz deleted file mode 100644 index 7f950b8977f97c9e81e08537a7faa903d5a68d73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42954 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 b%;$jvsgO~Q|4;a?t#|SK8cra(4IuhIj3^x& diff --git a/tools/edbg/edbg-0.50.0-i686-linux.tar.gz b/tools/edbg/edbg-0.50.0-i686-linux.tar.gz deleted file mode 100644 index 22d2517adb4434f71ef64671ded8f2df1c978771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52855 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 Vby}x&TBrYa`Wq3}CFcMz0s!LG&-MTS diff --git a/tools/edbg/edbg-0.50.0-win32.tar.gz b/tools/edbg/edbg-0.50.0-win32.tar.gz deleted file mode 100644 index 73bde71ee86651a55c950cb1e27c83158fa6fe76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147999 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

      1YdhY+joGS)9QM< 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

      pDe`FF`34zR@^CqOpS~vY9Bk6R(erPzb|N9 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%0DvQ2UMJfv!;$T?)=iATo9 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%0AlTqyi@gLC_P~^Q5$reHZ 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 literal 0 HcmV?d00001 diff --git a/tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz b/tools/edbg/edbg-0.50.0-x86_64-linux.tar.gz deleted file mode 100644 index df134cd946e46cbe5cd3e2de3ac49e8dd9a6ec44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52856 zcmYgXby$<{_of?03ere-cZ?JyMG=se?v!p&N?KZJ1?iS%n?sMPgS-dcO!a@1>gZ_6p*iUaJ7yI;!ygRW#WCRu}9mTH#G;yZnT2qlq zi)h}xmar0IZy^>kTSv3%VdaQhCpi`#YOnlIVqUnd1;RIHDl2ty=qzCvgAf4QU z48Dmc7EOHJ*juOkR281`U|4~t`Wpyq5!!u@E*byjnmqAfbNOOs63=3^Y8LPLm4~+5 zWuUS);_W(=w6n#`Sz?>grJiJ7mYw>ZXqQywIWfQJP>jtKeP&FVYg?Tg zI1N0Q*ycfmFJSR!!c80FePx<(<9LR5v$r@6V?3Lgf*}B})ho>q@z0?dZ+G3Y{j05a z-u8?(qz?nfM-eEW%?l_%d~$3xg5!OdnsA||L8s46-3n*wd=TI3g^+-hAi(w^BjQ!; zDPwC8gORE~-FePK$m9%p`!E0KAJfk?4ET~n2Ba*VNOOk`2Y+qvHZ?X6=s!1T?r&7H z)^Z9o?!TSSj#pN0w4cZx%iAhfw&M9SGfU$1gw*NKF~M8;Gp1UdXq|O`j8Fe!YD!bA zwalM|rZ%r!S&s@bwQ6DeKR@Sy{%l7n=5#arlI+>**;-1Bjfscsbd{N zut;=v@u`MX`a|;r$~}+E5s5Uh7Te;I$S%2dN!?7Xu-1|3i>ie^b+ICW%k+ zK9wHNt}%>?It3Rjb=cT^GwqxE#^%YItLjedkAG4+>oomjPKl2#SPrn#2(%l`8#gm% z@qE)TnPRUYHpNHNUYxR{Y~0A|;XS(YKDtx$MsByHy`N~ZM6G|HN4C?rI99BxmHEk3 z2Jb`rn@^c0v}KjK6~Vvx#y;u&uCBaxC4!Xa$d0$m&iVYll@aNE@Cd;l`CAtcr*%MZ zB1pwdUT}JwD?VRn){tdTc>9idS$W-jY`2Q^MmRIytY!=f#m~QR;Fo7ORsY)nG!%kK zUX(B_3;nwN;B$@hj*K+cV=Tbw$FY>8;G*RCv+~cMzqaWaYhMhH7oT7Cx4epPT9fjp zgU%0JN>ZB`KRcjzXYgl$dTc#C#oa<*dp*>YPkAS~g?cJHbl5%4;)Vk8ps!*GN;CmN zJr9(yg1V3wimmXYk0E);E6B)Iq`BHEKHQB&_sg2^=hCboYM8<~57cVw36$@g_Vak; z3DeCHN8U{&NSogJTndVMPW%}V$?z;m*dIN}8vQDN_{-WRXFeM6qYR;3uFS|5@2UDf zzkH?RdzG^e2H4@2!fAjfos1&A<@vi)?x9W1RTOjX`|&NUQ^I=08YJ@p8>DibKWx0_ zI}8`Tm4QCgBa+C+?|VX-kc+%eORW*vK~ylzg-|xPFc9BANA!AxrW|32+CMku;^|Pf zeC(Uot2Yo$L{I5Uxgn$*X?n4g92r{2dnvUSD2vnRS-{$;@pC;0K zx2GoUAvA3t2=zs#=^%pZJVqu6`ScfvbPHwqmks-|0%{n^V+G-MHb{dW#=3wQ%z{S( zhTy{fbg%;CawIAl4|eBR(4iS*J#G>AocWgL4yR>l;}PR5&E4MrP(kpvo@5SOgq#xl zCl4R4aSuNhxhhYO^z-|dv#0$rK6OwrGGcSL7BXc%HlpxvXw*K?PaRqC;TkXWz>;8O-FI9O)POU*9x_yfozit7^xA5y)ii$S89?b0f%>2>8|fOXimPFIoP-WRS-e z@}3?&;sxl^xJC>sLYVIXtNh4^y-y#}45E^GGzd@mAECuPb}B-~5`kj;vdiwkq%R0c zM4~@l(&5HF6?$s)3mb`kSJpWb8v_<7=G+6>YxC!~W=I^_|DoTZ@vql&|4}5N9?_2X z;NuB|<|6Z(VS{v#&qnw7K6V2=DD$z}o|_?fj2c>uq5=d9& zb4KJ2b(jI+DBJ5bG3SN{=Zi}N(#T*U9gKSFc=1Ex#=8nLf|fgajEBMCVR&Sw*r$N7;oa`RS6$DHWf)L^Dd+Fl%mK)K^COEJ z{}zPRkt2f-7vGA`?)ce0LHYS`jWT&IqK4&BSuoFYIktSXq|Z0Px2UH?o`{;bUGDB0 zrhgs0*}6i5)JIiQLV^DYmgttanO`98!{<^&s}@hDioL>UaYq(4=M zi1s)G5>%aU|MExvrvwAeMVH(r{Eup1wm8}H zvD{e4Bg{2i!`+@CPk0$9?^f4t-0s5~@G+be)CWm-1}q5gzkCM&^2u=^jj1(I=3_qS zo}2EY`hrNegU5v*u=8KsKDLnZrCk43-q?+aU9}kUxG9o&O`dk^BI?M79F-1{wSCzxgHr z?L$&_6=nR9t7I^hM}=dBnj#k%uSNb76Fl}W;?qYtmV1C)`NzA*O3%{%HJ<#}BSqyR z&pS0&F=~o};*gD?d?oidbBVVfwc8bO-j#`*O6Gj`fIP;z9>RZkn*XOl8suQh3Ov9l_x_8H$|4>77lsr=EYj`2pmy@ z#4{ub8GNpXA@u<}RP&nQKjC&Gg^NTc=)W-oKuXLXALjcH8M8mny+e^_N)YXKBvSSH z%D0b)kxpq4ZAa=dN)78{Mr19IGc9`fu~1OjKS_8jAPn$iUmRoqgTnjt@Nvdc!OR~S zh6+DH^1u}9iUCIb&+{hLuE*_Jb2lRWpD&Q@rqgH-$aE74d`^!6QL2svJ*P+0dH)j8 z!_VSoaqe-dG2Gq*Qd&h1VfDv@&1fG0TU7EeYyOtNBOxIDX>?6FY&gy~K-m8#v{5fe zd>ehuz+7<-GYGqtDDNq;H!qa!*IYOvN(N)~g3VO*^yGCHJxul->$I(T?=AxJ961c| z&t2V*T-uJ;fJH(4(6g({z_^D(|DWMN`HRbNn#`#SyqhNT>7}01Nq^z_@tZw=%n-iq z`yLvseSb_OCHzN0I^z{{-JB=rb3`$1XdOw{H1ee#ZUqxIxu`clCNNLSl|;hY&S%TN z*eCv)@sAbLL%&m9tYybj0XC(Eo5TyoC6= z9&C9T4(MQe4)lX?TUMf+FaZQ^8C!0R1rOH16_%9)R}(VcEpYLEDzrHc2C)B+{Hqr2 z0|P9Xi=R{tE#{v19j+j%dk;|K7%E$SA1sXOVm`mQ-;e6%ifzRYI}d@}qm0(!StQLC z#Twyzx!aKKt6NjS58W5|>sc z#7<%~+nXdoseN)vvvCfw@u zxB!~!&s`%`fS@%)-O}#EL=tam8KuMJL~W$Ec<1hnM0t;>C$I(Kr)yAFfw<}8{r4cCnX1t^ieJ{bByxxJHO#l~micG0#ryYyO5bLS1zA(nyj*@IQ{V^M zNRI<>$eDZGcFK=Q&YVyZa+y`MR724Q4#{hDAH3HG?fW3CyR=LLGbg_I+;WO%0mv(9 z=a(iAavd!jgB-3L$FDn#&nDw;I6^8nI^&Xbm-T`wHxvVGudBN zH5Ug~%XjKE*R9^u6{_u5DrUiz#{B08g080fGgd2iA~p28vzwiF63u*P2cFIF)0oN! zON5!M*Lh@MCfb22@~Ua0s{Ixv{&FC0t!|ES8_jY6d!n|+Y3U-526dZ00-@b zUFZj23Rm&2*nWTry(y=wUJe#?5gfdE$sZknJB?qMhkeEKqf|+j;vn{AQe+#!0smaj zRrDSDj~k^6_xRZ^Q=aHHe)3 z%X#)zq16v#;(gjtVwqPfq48q#uAqY@5rqjlB2&ky*EadyOJ_Z`f%m~T*OuaK?(WRF zgYM%O8NrY>O>v*PhrQIEvg0GVW2LV*St`c{`Gkq2>~}Q@$FcA}|LH;1uUmw!=bg;Q zTjE2*$j^9`*~AsS=C=EN+s>L#ytM0A5;9HMY@K|LyO#VP%<4UU1WjdL)7aaObhtNP zU?Chl&xv*k#T&iXv*!Nd`{~?PWpgfqHE+S}M~2%I28ifRUqDQ`9|L%N6@|o*M}+Hl z)$E5?RutrVaUWGERaA6^`8hpx$-^zqUX|=cco-R!RsMCQ968pvU42E2Dazep>+r%h z0Egdthu0=_Tv&MbuVnOh9mvfCd=(^TEMb>tx07v`=a2luXQ!R{l4T=tUB}BL;;czZ zBi)@VaZ`Phe=}Rm>TL@uvldmjEz7-VqJAPv}<@_oGq1 zd`+(r%?SO-X%e-HLZweM(1nGQQmmyas8bbRHk_4HL-t4Y9bFrS0-tn^_|iy{6qYj{ zi^|uA$UiaEtgsNe88EehlgV`j{YAW3bjCII7?Hy0+wX!I!RTCBCLzOy8DTt<`f96;)+)U4m3&@v)|c>8 zHj|?o(fC_p>P?+{>~FCNDK+^$DWUn6q{)VIK(LrRDxeuSMlqD|zL&_$%G=0RwT(!tt@2 z0z}1uza5UlzNxmL92 zfsFbmuoyO+ll|x$gXXg6-YUeTgH_+@X2mdnYo25gXPP#IbM~7=EhOhfliTx|gPto( z-wC`64IyZ<8L76PI35#MH5?OL$(S0MZ;Bs6(#u#G;&+tg*JN|HyfPh{_tN#p{lmO=zTCK+oVQO_= z1Xz9l846Sg(@1ayFX#9T-T~`(d`t^L%+aq#YmC2sRsesxq~qmrgbwk!2_|kJK@bsk`cQZ-1Rz<(rB$O@- zucoUA=pgx}_av}?EWcJ-N31kK+ndI*BKg%R4r#vuig{jQI41S6B`bCI;H0VG=u>^vx(q94bZU25@&wO}{{}U5-YrL7A8<>xm&|t643J=9bXj7c z$q-8Rk5gPQhkifnf%=!E-h<_V!MNr;br&GX2>EY^OwVAa*fG4HB!VT5rZgiu;$R70 zGOrM7G}u=MZ2*D*>LV0P2r1icXf*h*X4okdlQ_vhj^zRWDjA-d_$@TKM2BJu@TR0$ zu90LMU^rN0EXTHTe0)A_wfBr38zS>eZTm|!HVI@o`I2hI1Va_;;mZVy`-J+7oN(JP zT(7PTi7(s|>#T&AH!ENpzvsg{c_HYfsK#{-Y{uG(_gF8(Z{mY-+40lz(?&Zp9t64< zqfnbnCDVTz8VebaT4N86wwhWcRG9gRP0A+IiY+IHU5|XWp!Hy7Z4f&S+>CLe;_mz0 zBo-3b?nJ?TIb_sor{G+FPoh;Gcqwq2?htr(rN0?4$Uz7iCwgD#kqd$@iKr5Nt*_C< zF;qPt2nL--Z`GIk7hY?wrRSSJInbUsh5G%LmFRC>fn?RMl()KKCZSvyI8>%cSLG~j zwRGxl#&K0#M1i43>7oVYEV7cvl$+=61-gd>B>b-?*Rx3IzflRhXA^)4(%PK+Ednem zIG8m>ui4rZuy|-f-*JoORrT76&1R(d;558(7W56nR%pkRcHnfOpZ z_@Sib-T{qct_J*Cc4oQYwMQ|?)XXCI)<$RZPXC-0qb@krlu-%Lco6YIIWg8X*Z}V6 zpDz6y@@wwt>w}7#1LvIJSw|fMr>k4O>(P~&x%c3!!-!;jc)6?>Fb3Z`xPWz%jvOB_ z_L|ywYX-fP6s^eZ=RmN*xkvqulf7)k61Anb{{2$?wJGOVZUFa$*6iP>SetscCd3L0 zA<>|OlXD79u9xI%ewn15mUvM{&_OmKXHs5t7ua7+Lfu|)5S8|a+6xXa#vce2Y9=f? zkG>F;o&?e&i4Gy_!p${#YlqU7QT`$B))sh5_&e$YUi3mJcS%`OHX(Ik5E+S_#mn>P z8?{u(AM_=9PYptV9LP)6FQFDn`(Cp?L?nv9{u{l-i>N;{n9{P;9D_PeLDj!JpR`A* zMmj@Tsq&X_f35LTi4}fEePJQON_4De!K7`Wd5O*j<(sLwuXuZ=s?VlbP6C(uw2?B$ zkRAs8q+u4Mff5Dr$kG!C%*0M4<)a`^i@LQG)5(1_6-m=;NlOX&RQRIZlg~s zs)3*6g58W&Lf=2vHD2uc*7b_)expCXkxlIEw_<3W9+2m1h_7r~b&015^3(xlu|2@0 z9$Tw7bMTw4jzz0=u!R8RzeWGo!wgrDk3=M^tQ!FLRJ`RT9!>NV6Nvf##gY<9J>MHJ$*hX&(@6PX`^--kSFp+;9BeES6K<%A*j@#ANe0T%=tz~E9_*4 z-tSVybv#c9&22lEs=YtT=I6Z4H6$tVEp_NF;y+Y;dGF%dPUPMvbc4#rb1c0nB+H1^ zda1GO5D>USZ~ReiD9VDC3QIx#i*%0wkJns5TrDF@B!6a0L`Lfr?3M5hyFSLpg^h#w zk#aRll%u23WrKMk4nB9o z9TJObuVr6+TQuFF)jWYG81XZ_RM-V`%h!x$Uoj)?nOIls@Dra9ae2&D9MpJVkh*=jzaI{74nXUXL;C?uJ14m@wzsdVwP6k z;jZl>wCS(X*Y?i}VJ5+*XlE#n&+(l2HwZGe%z3v#Nn4>~Ul73=`8;H0FGkz;M)K^a z!9Vs`1NRd$_Z*C;4*y`uMk?1x7v9X_lXl9d-HSiMN-QNDg}5J%rhH*tg5X@E)f&F}6nIAt;c)GLK~JfKUUQ`CDGG$uacW2}+$x>`p<~tnkv#@J!^P#5%VSSZr)(@0S?z z<2*#_@p-I6#3!*LT>!U7aZRrHoh5JTOR4y*F&TD9LIe5 zN)hj}uV#&c%?Vki+ddJ@#xVkYi)On>!$Q7F>$1!4?@t+XW=lI=NhL^6jvu4hnkrol z+o)=wg$K0MRgxG$gvS>QsOJ!RPJU#-e(dakr%*SXb%n))1_AI{nQcQ;k#K*H?BO4> zmf9N4${9#yll~=2K^_9!Re$F!0fyRE1h#?SI=SoLE-VB5E5FZ)fLU)+)lH}~-r9JV z=3I3!)svbILdp2(GUn!nZYm>H3-)VvBQNy#EDQxy_X-Td)neQ)xF9GcpN2}xbh zDJ5%kO@ePsqB#jq`aogGSD`C^@>ROM$Wa>%q0S(y7@4MbV*S{UdGVdKen)h^aeyFYO4?9L3jH#vZgJbiPqg;wlJ zp1y5^;ATUg(%wetnH3Mr3H8Zo@hj$#7yF`0u?uyWqqa;f) zg0Va0*@F`Vo1)VR42a|}(z>%9M|m1J?G?{1*(Gd8Rx^jo=NU#d zi>-d33Mvi-B#atb@D;*?C(6YrSV~_81D%ID8=V-0Qz<)vz8*M|s0T7pq z-=$OoYW#SKk=p8HYlcZ8uy``0GOO=(gjg-EytXkH!1!t zD=#;T&h89Dr2&oWqh?plfTC&U7;0PzRH(sMWWRkQT^JwUeyXFlBuK#CzqXK0Zva+4Z4wS6r|KE5pUyXT67`>RSt+ z=NJO7F*BkN)ps&k=?7rVA9|CTFznBeKgfdZsjvHgbAS!TC=7+ z_cW4w;gUr`hXhHoFDeg>X{0Rz?bQOefG?_iHyh@t%rgrq{ol99E)wB{Cl~4*Y3>{< zaP5FeLIdaeR-)3_C;#Z5$rk6a*v1N<{!W-el)yP9v}9YXM?ywi{o1}b1%W>H-X0~e z&WDVdH|nW^mLbpyLJm%f@9@_u<+rZRC~znH*n<*xZiJPU0=^a`E9UU<2U*5Sg0Ax5 z6aG?lBj&_i){%j;4)&+x4VfC7w^kzye$_XLyIJjZcX5Nluc#)b9lL;7-~o(}U#OhQ zJfHH6^w4#n@g}&oUEpyni9Jh(?th8>4s8@BGSC{KVh3-tH(IaSuN1H=`MV1j{N0j^ zkyZoO>Rum^8MRAG2@Hbo7j7{Fa_audrmjvh+0$&_q6V%o%C=db@nR$ex{h(txfzC$ zulyuh|K@p}pv?80kFa8R>8f|UB?0qVK>ugFc&fATky^n8!TVq(@pV)oDXl)2y)WSK zcwGjpylZ)GpPdhNPV>so(*9n#q_L46FUcpv>D@wo26*U8*T3>ImPG4n@*1hy5$g_W zDJze-MsKNZ-NlkczdU3sSX=lo*x}C4XVEZ3m`$*JUl6P`lwoY}fa)OsviLWNbrR9i z0E@G~!Po*j4a*q3gTi<-DO!Y-^Kj=}x~JxVL%-n@(`=ssdb+gyu39hyf#2jSLKV#q zb+!gg#1>^>dAG9F(;&V@;>~dGF|7Ay$BOM(gy>v+mj>Q2uR?E6g)VftH+Dbm(j;nQRmo9 z{f_4+!#UQ@fI2+8{9|s$LjBDz8o+WN=2bzr_WV@+Bd63Phg96=Zgei& zHA(A$x7Vdhw?Ks?GqeCP-`)G{X*)%cj}Rhlp4?~*UZwz>&7}Ef6|;NsHvCMi?(wm) z^nhO`6{tytMpnN1*d+clMu-i+!*r=bZ|fesi`G;}8ipV;;wQ_L?y5J~G@*+-+Si7O z&qM5deLK)LgI`ORgM7Nczw$i}6Rt;rRVjnD-6`_Z-$QZtoVY3{m{Uc{JVaTe>-@_i zSs~`!OD8xVdi4$VTCGEpX8cv`Od=Y-rHwvx$F6R?SigCjOE@>Yw@wrwHz}Jlr4&;3 zJYT_bwOnT>NuuJ?kiXK*nqt*fNme~5)0W9b>+(7ubs+xClfjgjKxiiwxxf+snSeeP0I za$!XR!}@OzmCY7xnQ3=HRs2NF93y5uf|2?)>kr{rD_hJ z^uK*~+2V?wxnG$<`D#V>*VVMjumW(Hu2U=>VcOy|zv&^}X3vMP-mUn&@|M9&XGVlA zGhZY_Hp*^H$k-VcYn>J1_i81|ESZ0x3Su!Al)pjW(nIen+5>gYHEkHAH*gE`2~_O9 z0oObA_jOQPn*51hih?=RcA8qwzMDEJldEYq$iHrII_P*PL_w59E2@zF9Xl!{&gQPx zKN%I=2`M(J`YAr7UjZ5sq_0BVx*0xD6kTIK;6Pr_$-k?yL(4f);lYjFJ=%MHey zmd*?HDvAIo5A|3+A!f9I1CNu=pDywRvM2JAzgW?{cvlOP; zFG*H<#u&g43u!Gt^|4=4B7W_MHJ`qO^{D=u*uXS@m~Pj|JI8$r16N~yLY$%|u@{cM z_WZFwDAh-;_Ni0BuOb|JF%6g8iP&zi^D)6PgyS7YfCzP-=+w6hM`MLU#{c#-6ynBoS2zbMW4*N%4n$PG?(0j?K4L;pF6`7)8O$vAu za4GdQCQ+5x04EY_bcUC6ofllHo-|HihkYWaF~<(ahkdRJ;Nt%>qGN4K$f*a2-|JCE z)eu{yM!Cjot#|z>Swy+IfH=R-OqGqrX6fbX(fx$j9UzTIru zacrmP_0UP3p)>pD-JY?tYcL1z`*&E>0?wSt5r%5~& zb-o?>dvo`_7GNtSmicbTlBy~%9p>E!^>>jhdTo{>Su_PqrJYP?n$Jrv62vr88mfv8 z<%4fsA%4k%cgsikpXOJTyPg`8huWv)F(w>-JM*OmA!9Jayti1^Reu4d~f);CCSM6=cdxew=W-~tAC}8&2 z)DA2XH+YK^KHiAzaSvP{UM~23%qY02qN%M;qeyxvhW)+%hG62*3iv7jWZgv#Af#;( z;_+%usELYIi7O$QNF39*OW%=?Y|yqMoS5%^14XG)Cp=P(Y0$SH;xf}3p29%Sd5T`u z;6VL$Crvs>;nzt?z~h6Y$MM2lcOt?GrgFbEg%u=5|^Lp8BJ9Pn03$NY%a`) zw%`<6D%#y|xpV7T=x_gxIAaJW(evS537L-__|iY5 z6+R2c05p2|Vx*&V2u3Q=YPxrRI-#yEIC`-=dH{q1sd7j(YsjV!1s()AJIyp}1}_CI z@024Oe#tkWK#A_v|LQJHDoh%0c9|0s@GX8_pdPE2js~bto9t|2D^*6h{S2ES$U_-V zD0Ub62rrg~o&Y-RKCcEOsd@6^=s{sL!}R=db9~mG!Y2Ha-5t2Lw-V@IU`%5p(kK*t z&eJ^wDIM$fxRNUrSSVK533ZX8X{RareZRbhe;q1~Xmp>aZf(mpgk@y9_A?XMWBkHd z;Hy!zV8u?T{6ZRYBCMBxkQdgKA&1+a9O3FtmHBxzT7leT$WfLA|C`e7hqojAyi}H6 zNmuitKqDW(=HVCD(g6K;G=Ij9e>yt4D515awa6w)_XKX#B;(eKx*807_(x!1_rgLq)IAJtcw6udSF|^QA!v_zAqK~g9I;N;m;v6Fwr4f>O;&de zLm@|bPNhGXy%tt-Sm|umTk9j${;D(quE|aLbNt=(m?N(IOtTS<+V#FWzxk{q65m2m{omUB|qHUoV z(!7y1h-WQj^O~moK@t%>lSya8?7b>rUU`9T-QIJGn!Ls@?=l_%Y@>MA_=gkr#`%<2)w$i|=`ysyQRVfM@xU07;l zU_6Y=$aSXX6p3N|%hakpHs*H`R<}3nz%_z#IShbmMbK;M$N~uJdlZFe;%T)YdyX~V z4QnM-hy`ji&b&HRuD%xC<-WHhm=p3;nni?0dY_ zJ1;LzDb_C)YmgT1vh31Im=5#u4(D-@R{i9x^+19RUu#kH!cHC<*69b21zsZ=sUW&P z3(Jy5fje(CGdGR}JH?)2WyHPx8rUXw?7LZiu~yK(5@vlIv{F0zISUV$o8tgS1x8)N zdo1$($IT1fByw|=xLsToC1Y~J50-Ubi}H2iLexBdWEO=QlRw}NNNr zwQT>%@spVxw27m_h)Is_0^Ta-JRX}`nL>B^oV;%i%0U(Dq9I@7WW8;gh}1N!&76Gcl27qaSqbJ0|s*^rStl z&(rBMV~sbPCML0g4+Y~7>ndl(J8_$DxV9((Q`DId6&wwK9lJ$ug)#Cgi(=`G>T=Ty;kvEucDm0K6;dPfVCiH!fl--%m%Ss}e3 zgBxSO=wNkA0BBo~hi5K)2pXnwCQ98F3X;}{6kS#OUa=I%M3i7v7!w(`6!mAD@WfK6 znSzB%Rw$Yw3+uw)gPSN<_TJdcE~$9*Jw`Gy-Y5?LNoMQG>Sko4Y~) zg`Bp&z2m<)_OxcW+anZF)ev4OuMeYov^zM`z(rb{-PgbC$^<-6-)M?1jg-?qxZ6nn zrpk8Avy7*8;S+h@WeN5#5n%x@y4P?6;%7mTww;CGwO7s$%xZ)!G<=}FQ*d_OOWs>DLrH|jJ&*AId zwK|Hv#F|qTif;&|&6N%_BUliKnr8xnb{zHh8eG~_4&G`iRFL{O4#!%1=`w}TN`-5p zwiISE-7t=43iH)6z_^ndvuNbIBA{cx)=@w8f@u!}fx?PS!cHRa8XQ__M>|XS-AmDV z)j?j#&?MnaVm8Y7<^0^#lJPJjv2|F}hZo82MMg6DnyZlX0|cT0zWOHq&Z*lUL3i*} zhW^*3ry+G{>kxx^y$m26i!JT7d+acU48MvJpqn!-@&$Lu6_@f$UVzK@ZSkKKHogom z$*|s#EO={?*oc=H1wm|uw}@vAhHs4F=7$;%uvXRmC5I%K7K^|jT!+-}(7Oi1=;i`c zF+&=I;TYjUlOj*q&JljerHe*W@#YZq`&kkrP+$&(Ds#kC=k9LH8R+Z`93$Zz7u&ZKy^(w~P| zmSAr}7CZzcYZj@>#PNfFHvREIe~U+2?fT{flAH^;{<(#n1(@TWf7<}oR@2z?P@c_b4Z8$0X;hjN~gu>KH{yK^{p%} zByIe4Rx`zAmCo~K-;f&~cDfCLYX2>19{!@c+iY~^(%Igea@V7WK+!KEa2LfotLbUu_p?DL9+UBWCfhadRZfX~S8wm@yO4jN)^iy$19uR8tGQ4>+ zAyQbzyA+7jtK~?Uc~#+1HSgV9rySSRMIfe0<~t8N+La?%lFxZ+Q8(F7^$;aYH40hm z{Rcsm2y8J_Vsbu)2barl1>Tx?p^=)pl)16r2al9avw{{!wj{A{1kSa5e9IRqUnb*t z_UCBA;xQ>1Cz*8x&LVNwCLQZ*v#f$HEl^+$0C=`OeyHCo1R5+ij0J?Yfx?&w#{@(R z45-9q&tj}6h1rLJ@=@O=scD8tguM$111ZJtB=OweJ~Xn>Xsah+8lZeM=G8*ULTdnX zf|#*({HF?I_JPmHTk;aKoQN$6;m?#)JyLNHwBfhwm}(iQ?>!End)p{kyiZJV2FqBi zx!cI&48Nt}w|;`-sa!IwOPurvVM3I;oT!|v_2^xm<7pX$1x%r4JdizY?NNs(x1)t&{W-pYz)f{j+F?5kGkO*&WhDrX{q3>FQ4o6nbA zGGwi{Jp*fZauRA9^iQtm5(sLl@#~DL6+7-ai0Dl&s*OeOp+_@{j9blToRi55uWA~6 zwBJX2z$mz3=B5;{I!7S3WzR?yuyt|*R;dr2{ksj#(6k$!K1z}|YiH(oa0)#IEDn5q zK%uj>>LI&K#Olfenmhzrcvsc6am`anPH4IpX4t}wWsbi$uR928$iD0)96xY-F!kSI zT*12_5t8~X9=)N!{@W)c^S3Bu`Kd(j*O}e-8Mbp$Ld2-5HnuV+=ouWEN+nOd4a=m` zK5bKP;Wap8)7~BBn8Fz3D_YyAxuf)a!tKMKR#bc-Js>E{=~V-2>;O(fjc<`R*auY+ zmhc5aP4z#Y z8k|fniWsEcZiKQD+aPLVgZ`&M2-p+NeWN{vLrb zh)xJk3kJ!eHqHTv);HZ@Nyxt(|RQNji} z{6;?xrX4h}#XO(qIv*8A73=%xy?{xuiwoG~zIyqZ**<YKFmIHArKcuR8|o@sf%Y?}Xr9Y{6e zy(RadCr3{`xYl;96I`F)L-uqYVhAV7h5=^dYLY@!_FR%ZE|SF-BBF1OC(_K&9iin? zuD+u)Ya`lqVlqrouVN_Z&67qbsJsW?2PgHBt>|WO)o%5cQcjRC^K3}foPseAMn7(3 z%TjTSMZyCWU0^54Yo7pTHt0h%xfVg4V^FDy20ao6j~&cq8d(P(ote+feWpDJqt4MT zIK##h+^om{u#Jf?eQDi zWyWunp%Tm~^-7|ZjYc{y_Mk)0&6CUA%&m8ZkvCfHJfv{<#iO!0&P!cmAzE_FxGDaWTa(zKVIZ+ z#?<*dAR%FB)i7iVnZrcUJb(xU0}a8a|=Tx``UHZGI4m-qpJ={&8n z-G?Ic`4?_C6~p{uj(kUSxks%X zaTkszl2TWuWO`@VlGtZfF3`XuviM3g=tkB@eREWEr9M5)Y`w=ZE4w%wq1vp$+ZPw~ zoD5~5vWc30|djIK+Irs;N2nD&Gh$x(em*weJGFr{rntrj$Ei6<~n8<$e$ zv_8ya1?67NFJQSPSq8IcR~$2cTSj~gDVm%NiQtWt#T-AZ1oP*?6A9mK>dZr5`)yNJ zqu02SekuOD3K}lEM)_f_C&WMR4v_8ImHsx~f%W#qTqK5WhKBO+k6doZiS}jl`Pw@~ z!kn0%`JrPKoGyuQS@|TSwx&_#xB>ZfmW8Z)1OnZ$_bmYCxOro`YS-Q%)oL2-c{?Xo zT(#J0x>-3h&n4lse52E$x|QkN%971+o>%pw9I8D^^Fa_@;Q83825w;(&jsC2JQ(&B znfZIsSaqp;7uv6@Z0a9#jF!}@8gQp6YzKR#=cDC)5n&;iix?O{|9A2n!mHq12NRbM=dmUP_Ptu1NT@2pH|bT3c4!Hg@_CrOo_zCz$#@w}YnlI1Aa ziALuos0Q_ih!<4y5!SkjWRD~B0;}=Ws>q$hJ~?lg5{$3y1TzJqI@|aqzEr^<0xsx9 zh_7Cit;dme`2KbAsEJIusl z_P9>ugqCs+N5ZdXWZk`S=4D2W+)*O;n;NfPk|#_7Mun31W$TI7hoCvP zzKXZ>z!d$NJ2jl-f!lSeMZ{QgxtvgP3KbqEA7qgi^en~I7l=IfD(xg^p^b!*kft)l zH7EcFv$QlAd2n4bKe_y*<6$zRvH}4QPRKxJJ+?OmqaOe>w*Z*5Ir_1S!uGyT7Q+On zl=FHfNHXb7@m5GHxC+8vP`{>^yz_^Y%pGJmke|3Cv}sRHCDC95t}Jf<4cZOL?uV9; zmW}s^VcFH*{B~C#$ne7}^m4?S0KtW?^u{%noFbHVyn;)1wc&z;yynDFP||2;Nh8YTREXwHw=0jlJa+axEU-XIWEvl(QSR9>upHKLPB< zK$^t!vXq2fdAVJNZBk(!MIz>Ct9UykJN0|l8#A}ZASBa_#{d{Yyz~v(K|Hgh1G{P?cI#$B%2Oz##hanz9VzHrd^xy z&X=ZY<@&Lezc_|Jlca5ZI9*W;aqBd5_|B}KWCI`c^p;$cGe ze&As8l``PbSdLf6+R*i!Ch=7^oz24u@3&Cicl}0qZ%oBSI-oxn=)2N8+g*=`Vlj5U zR#;6zTk-W{C^K@qeWhK8s52~*IJ1(E6@+Y9%*vtVz5Q4IRt75{?}(VY@MiitQ~PUpTI#d`Y;|k^-T&E|48!U+E`hT) zeze!;c}qM-ioI!-xI;k3+_YbD`(&FQG738&<5td;z-{Y{(JwG+5XlN-_lok^7KZV| zdpw>s8V61d=xw1~LMbwG!HG(Yh_69)I46K+BltrCl$e@)tl^4FK~w^b|Q zpOxb~F+6{qun*N(RD%yfFx0?$X-8K_S7L=1?L??G?x&I`r2`OD4ypWQXvpEmu_4v> zeOSl349CVmjmOwrJ-^2Xu#B#rzra&E)XecXxB-do&Jp11eGb{0g7EzraGDVp3+^oA zs`^xbE%Ll|(OJTx=A2OYH8NM*wPZhW05OZO_h%xll3lKjv&P_kRq^8?m;g0m{5C$N zct6Urzv*Zzejg&|KBR>!=b3OJcc&opj|M|C-dJXy7dDRVMZ5EW_0@4J&s6ARg&8g zkM8ojIPU%a6WtHp{wwiO*Q_TtV8<`eyPS2J6(9vE!wnw_A1G<~(XJp0nEdT!R=JbM<>&bqz$Cbar8^VgH95j0pt^ym z9PT!Y=Z7E-Wdw^6QlOA+96XUtK%qZIv+${^0e9Fji65=q1@LNJUy2R(2B3w!?NAGE z9bc_e)NxszqK*qOD%FoD$lh9c@1y#G_B?3eZN#2;oS-AGAKW0uKk^Eg_3Z&Q>h}R| z8s(37yCl+^UIHMt6&$4T?zwuQJ(TH;ZyxE-X%^h(GF%zSa9BFv8=GqBeTYmxH9qb0 zXCn#y$Hw3dbK}!#F>e46OL(sq-w0hklDsam;8vGm1(so8<+}*>QA*%`ySvK}c(k0A z-tR~3#Ysd<$LY#^L&+2H&U{#-AbfEkbzv3uxTsRf@)~+No&VPj@OB_syMnJ2oy4;iesb zTzDG#vios8zf*W}2hPHKm`n69LFkEBoWQUiYjt{pOZMZL30$RlU3t@SqmI0=0{;GG z;?Hm90z(oY-4b%xgzhKdidDEhvf1u(REL6vYB)lC_DHCTcw0L?qr&UW03e^=1cq=~ zcf5OMfY7{yoMdRMA+rAq01*U8VsD)8vHOBX<$;8zZ|-Wk5Vxps!}{ zP1?ai_8d2ySjaS!-IWjp)^qxByhGpcGz2g`1W0fWg**rWSW$w9W|y^g@MqG-)!)SK{2Ub=m3urKzpN4^VQg7AGUt(@r1^&git^EsyYhef_)xDOA)s1ft z5d->yxWQI737v!n=JIiX(vV$LFF~mPFk)&VTpa`8iEoTMWLz8r*&_F0?K=zzz5#^k zove$yYS`jkHhL13KcK0q1+-;1Q0V81*$&Tfe-wqfI&Og{&EdE|jEjxrb`6aq+|}_D zMDLjsqU-n`c``m3DiRzB1UKXIg!L<&wF%LL_6$ho>R1T>4s}O&hcfPhmI40ol|$M( z9pd6ArLxvBKKTrpQpVTOv70PVHyvRM)U2(9$7*p_bP61*Mc=~AaJ+D<{QMa7wRTms ze*>Yc$B+ zc;|ab*TEMR`c)ApG>AH(Di1VAyr;KqKeX$!Ajhc(s2|$@2QmbiJ|ra#{9fgU2H`So z5YdstbMZ}o(im)damNAl)-M^$yZH1-j~|i5?~c(9@yAvmjewUL=P2w4bdO(BaEf82 zd#}uxlzVK(_4h#T9?ytVJiS@iczIiR=A~zC|a&%3m(uzu+EM{8vD$9H!v$ zsQlM7j+rBp3-gkZpsxkO5w)zv0z)}VIWAF?q^p9OdA-dpV@?>0mH=_jI zXgY%G0oidXc``0$t#$cDBEu`d8u@~Sjc>s_P>bEha?FQihqw&Q2!bg9y*Dd<5-oAbA*{d_#O*gO zD?%kUtcO_KkvV}n!&>^3MXqrgLy)Tp$oS-7i0KS3)7X+Yh!GJr^_Q=|20^>+vbt>0 za3{obkKTDb>353tTH4!O^Ou;Mb^6B3EsFV?m)=C6H^#&0(PDqCRQt!|g;DCi{WO?% zAe$@r=fVE;ny&s@YTP>7T!uq~nVrNJo6GMK_c{8nL`ijV0#2Vynxc_2`^xtgIfj>uAW>X*>1z12&xC9;VgMFKDmhU zxA+CZpA*P!Ljx}C-h}p(zS`|FygP`n2UUG<5Y?tMsj3~{97Hsxe3HmnFme`4ILjZz zIP2mHo`FT~DIU)xG!3KMjn3s%2|3Dv206glvoIJqsGu+Hk#;36u{d9c_6GyK$2Iy{ zb7O#H2Xw)Kw2W6I4RXzQf&v9KtwlNOf`3n@Ej3nd(`g!g<1|q(b%t+~DRY^UGJgVo zsm`!InKo-=iwNJ$m~nT>Nk-eW#}&K?9*{E>{@EKafqs(td#Vxx8lNL2ihApuRg@FYD-X&lqa#h%qF`Xqg=}yU~dfvg?7j+o61F z_qOT5+s6H~Z(w@v{5!xA0aoS*{%2}m${R|KP|G5vTTRoI9HFb1%K6z=iDcsw8-2`2 zT!wFLs8o*ZF<)USIwA(pd-l(hnG}=(0|lP*9k3CV=~WvsLBBwz$jt$e$8wh4%YR(B zbp!L~cWPi*fjn_N^C9`1lWaCs<7+)C$VLW>(Kc5%13cn-R0kVbk2>j?fG;<%#cLm6 zqI72w*>~fAwz>!2LGA~lh2R3z`3C`qEuL4fe`KCg4I2`FsfxGIm${Q9~t)}=(eHlJN5b#IqHcv z;dmh(_OUg4evR+!gTe4Q-k-1cxn8RDm+h{O(-J{6hLl8{WQ3Vr9Y??uPW)`{&pc%Q zWxxOoQ_A-0EA6b+=h_jul!YL2C(Pbb-SH`fc)19zV+8~ z<1hcg*Hr)7&b=8`bWsf|o$&E`(cXaGz3~OryHwsoHm^dh&K;q`&^_SN#GRY-4ypU> zXV4z9HNRAs*=*CHOXOaI&6OPaTV;}aem9PN?&_5A+Ga=@yv_>M5iI-pbHEI+boq}( z-va03Tk~^=oSzO~NPcf#0X7PLs|TE3l=~OEasK#MNu|o)C2io2|L$qkY`lE8@;-m> z`rjAI^}jFZ`a^=a{^#p{FGc&s;s&pY?#AA~+T#&!TdP=f82W``(P7{hibaQ>SbTy% zRQ>LC@MME0ey4EDI^?1wcM;bP@j!0^N0th=o19ns8O!zpxwv~v&cr3^OHSJ}t8tBU zIXOB*F1H6GTKgv&(O(UAO%1*vRvapn?IK$uxFw`F^Qq>}xKTGBz4$FC|73g}JpT3N z()ls6$biSF+!M`uVaYmKyUhEXwhN*HAfEdJ5INxbL9Isk>oeN^WS!xXaOyLbCY0e1 ziFn+EwNjcZ2;n@{5A zOyfLiIAY2E*ZE~CwcWbM=Xq9{KbTI&B|HBob;Ex8jOqC{(x1Nll&*Vj3&L0x#42>u z1Cg)C;rJUVj=wXn{M+&OOB{dSE+^yfZ@X0EZx9_a%R{{F#$2MYRW>@MgW8HvSyZB06RY?oXutgnG2#W2#4F zcMyk1tVbx+qZ?Vz{A~`_Zdd76J1XLp~0b%xcw|hKsO(h@r9t^iXrLrn>RqykX{=-Ql z){7sLZDTTAxjzHZs;UDBdqib$7E|WUu#;jj@~GQw)Q)j}^mUj70bE zS7FRNwFZa5c2LvKAK@?vPtX>E@grQ4KLKN)w0l zQ-Lae1TA=q%b~|*b-o(6z9sXp=_C34o67f{4@EnPv6UaPVQG1VYzbY9TYCgQ_d{~N zl_Yr^%d7syz;91>XxIpj~&D; zWBU)OB{@gaUH_nsbiaPU(!mgfx73^y2ekgNI8qt<#FEiz7!F?j=<^ud5*!eV<|!Gs z1QTNY<##{eeN^aQ1=z^oG^)a@MvdKe$owhQcoZZXkA{7y=syp9AeVC##Bz8Yx$Aa9 zO^)I`L?>}Py8UwN^AMeI*B_4>G`{+Qul-qi8lv4o`aO{Ve4|u46fpod{BUoPo)q}- z1B{CFgkc|u{N9AoUhlJW1|6jo_kBRm84!F3!*51{B%h4*$PZ9W&hf`Lk$uT$&@a?W zbbftbMyK{YO2=6fY6r)A(cfHRDOd72oA9+BAGYqOV&@)|oBHefk`>t3`{E!Gvlas3 zaVW>_^mN4q_+Vq%AGjXmUX8j@-4F~uUxzH{M4AS)iB|V3W)AmEk$wJWp%Sugy-DKO z0?|s!Zzsm@R*i(cSzez@YbZXa6091b_LGo^)Fe6DBF_p9K!w$xr6$LY zAW{LJy@&fhH2w1|Jso;c?O&j?7BGlVGvWEKz#I?A0yAIU-P3AOy!HHI)6pG;rFhNU1G?<9~h$?_j><5QE5(jfb~OM>fPQrTAg<**SIjxUV_F*Wqr9;QwA5 z1OHk1dii}g?)Q|&eLQlZ2Pr4Iqa(m{_1Qv){r20*xbVjc`u)o)9QJp@uzzmh7BcMH z$X*9o<;xI7CS2Og*2#U3`(IY8zuzUz*RH>-n6I6Emz4f|A2urW{P91W*I4?3xc&bo zuqw=YQ#`Nn);r|9#)lWkc?~?RQF^kOzfk>q03O!xcibZ#*0_Zp)_`Ike4L$T=(J5b z=OCWfNPWE3c@1u}{Jh4A-u`sb0mk`oZ|`}HAA5VxYy8|>I zYwUYRG30K4M=|sK{2d?XHCk4y&TGUx#%dV7^`FjbXvOmyAH9R;HMGj}8su;WaWaS@ zd~vmSK%?t6sh#OLjYr;=&T0JmoY+u!AAzuAmBO9)Yqg?or&cTK_WkNs=QPZ#z5L_& zVi3odm;Y=vzTmAG7Jsg>;d^?Yi(G$FCAOv_TRm6FOA@xeEvnOKc;ah8h2nKwnaNld zMmDD4(UA-gCqPC~2tM|skLB=~N*|Y)=)KOY8E~hGG{Z+*}&^Z9b+8ITZYyv7=JE&`Ee2B%L?456>m`t4S z9*;uTq1%QiNejP%N5_OZ!=n&#X`HprkO@x#6z+f1`@Nj_82}bO0{vg3cl<&06la#FNlW9!6mPyu&TF_A1Z)kHI1%!8;3vJi zVbOeYXJh$dyy0~YZVSw%=R4f-BTK}C*4s7$Jl!K7FSpX0e$La{kn?tS_j3)1X`mQB zIY8(HgHq#d9`SozAeqwmPkZ8>F!#ISH^Rf#p;({EZ^-KN5`cxDUia3A$XhsyyB>QK z_o3kTJ3^hOZ#afns=lH^)s);;8b5-R(1l09EP$lo z3_4e#EdPjB=T9|zu z+ABe9uhMt}){?npy?ZdXtY;7Emc>DsZY*0YRX5@_d3E>DqI=SK+a|d_3Y+m&7e}l8d%5dYcpn;A3;c_| z+hg}p-_2#1PM-pdWge+66JM3rr5CNsm+SF_BT8@92IA|9-!7K?y-7t1e@~vTYqDTinXJg=<#&W#1P+Sk#`l}>H%_}(nBxL*g zE_b<9ZbwDAbuY=vEt$_`S2hSYqRn)?wUrV!h5;Lmy=31TB0RpkfFPqp9>F;aZDGf4 z#Pg4sZXrzN_ofMfzkP{jmpHcsJlZnDd(@c{vlkJALzM?#$DLx+YugLI# z8bVQbA?l>`-7$B3Zwe3elBDq4DEz{w0MAn#eqr+i@{QC52I}7sr@U6coM8*WDX$M` zHD3psV+hU0*FN>NKSJh% zM#m-1J*xcz4u{iEM=ACT6vNKK7sdU8-#(P~3*PBQhMi}-DVGi2`urdF3smoS*jzC) zx)I+XosjF2)lJ+mxc4*VhJn>xhHV~@Y=QZ2OjsVdq9aH;k0~2ZY?>=lIK01_c%yWa-IT85OA%A<4QVNE-_Lt%Y5VoX`d8d<(T{g zJ^w}*)TLChFSK5N7uPpBzo1y(2!4TxXZGD}ePh^eU*jW8PlfbF(*1*_xZW&GeGTgJ|^@Dc8KbkLLj7jpDuoEYbfz_g}LQhcX^jQ-o4Aa(qwZj zJPPffBNA}jg{vh2IPf)Bp9&NX;(G(!Tu)cw_Z1$`!1o=2xDsM4n~yVryEW62w*_E3 zeFM3-e!!pqhDNtybilp025bw$=qDImm_I3%Mpr#2wUe*{=lSI6sTJaR_{U*b!tDTD zOK$v=t^)%+2Fh%_S-g)3T%%ml>e`RM-aYF1Pv-~1T^-lniN`-S-AR`AHs6Uy(D3Ak zKX$5=3kH0!R=2dT7TO!jV4jb60b8q2>Apg7*xdMNdVBM; zsF7shS6G3)d`C{D7%zi(<1mkMw2}4~$~_DG*!mS2Z8wM`8%XR_PIJf*_8}04hT|Zvl`n+-t{rxVe(+D@$&T!Q zGoH+T=Kpp)d3!Y-Pv(C>%*9mdVJ&#?AI6gh|MPg#>jT+%a(W1%*?+ZqJdxY)iBBu+ z_pql4JD0jJ`|Yl2!+wLo{uC^@aLlDJ*uhUL40cPU!eF1T6b*I>T7S-@ZxD_y_juxO z)(3PlmUH4M)($g?L4IQnq`li`W45iSBdmk&UtCd}rz%k|YwUGavkJC9Fj9RH5I)01&{+iW^I6}&6^ z&TRa{nWR0(1F$hlJa^6Z*IKNCxxfis|0j zpB(6ozh@57dcCEpDNI~X$4_Hj>rB5J>xmyx$n2#SpkPcOsyRuD>l ziQ8+h37`Z4`*9vx{v$_jC}bDbbbb>J%@Zq$-q~m1{W-XPir-?SjW}Q#>FW3J-Ei8+KsOhQbaXzJ|b<@=Z301hUa^(A}B zcthB&U8>^$i=~YJl0j^2LFQyVe}$XfOMv?Gu7l41pyxMsAezE$?u^Ry6Ps|cbPH*^ z0JIQmyz4<*^`)%##NUi_V<#@vFoE3bR`{EQy-sR=4HCbd7_Y>foLj2!H$BCq{ED}w z-a}IDTB`In)9K*#sS7tNXm?sIJ=Y2^E+vOiFwLT`wH|zzgoA&DMP9g2vQ%7WAnfJ1 zRQ!%{iTwJ}b!+Mm7t?-t`Ypx&9^>au89yE2IZEQlU%}D)gd@CB?!3#((XTGLE)LbRo4Lv<*K*@fd`(p-br}I=wnZj<1|s+Ha$jXV)Oi9(`;t{>s zNjc%}{kC-9KlnqT>ha+5PUsHBl#$F`$~)0TUFs6mz3Fv{aP5b>LK`Q7e5wBvs`h_) z$^QvO|0nc+?*F{P{GT_e|5HN!pH(XVC-i^l|GX*pf2`F1dF3Ddp9-b_Q$g72+fnp? zHnlZ>eYQySWv)I-=C5zg1$XG1#R_+*ZHys{@kPT3Qhe=P<0E=C*KAog! zC`K!!s79(h>6RCk5GzmmQh0 z(YyW*VKfb&Hor#41ybLwW$g4E*xLjId{l-D$;NX0FroF*PMxvrC_a%xhw{9i&rw>eVw`PdtTdPk82~(iZWcSBhvrHa|ZbwhnDsRj|7faYy3K3Vd zPIwyPR(G;~TNx5??hHWS{5gu|nl%UCzWA$TgHSw|++3q`^kke_Nx!~a;-)qE)k&7b zhp1je#CHQ8p!c7wgno8r$e_TYy+)$!5DS4f|p zIfW#@Z>3xg!bA{g;|z~tJQdeFQZrABuS|fIR9vzhfwH}>TM$8xldrpPOUvetf z{}8rhv8*l7`@BPOvOB8_C;YycdhVoNKOtM^Xub9=R@7_zVsd_t zJg;9Qj>9$j)VM!O-fJvleyper=9zT;|0PfwmvCyl;=U~O52PM0H)33wZf|Z;_YbR~O-=RbqJAA_c<>7l{mKzohVMa!Td=jw>bn=D7^dhxk*S zfGP30uA16?Ey4h02|bi0bdgHXy(F_+ehT_m783eq=0%ZyMo8j*4_$mL$Id<9!-~TF zo?LokAjl+lrOIAAJ-P+{~}lUwTTOOr|! zIybyj*{%;Pl#e%23$YK;*J8;M+N2ukeNe4 z*!GW#t~1`D9KDp>tEuBkexgYRVv^xcq3MNr@m3Q?jZ4LMoXacdtoqW9(2~xVc9=?f z5u@b2>9H3cLYYuQ@0)xV=jBtM7qgfgxMuMl?Lk8U+_YV|IM%x!Ncsz5;t?!sH#n=? z@Eb#d5lR&TQOgJxyQ1&`FY@%qlOh6-Hwe%0;<3LY5@H@k=SexXDRWGba=h~-`=H#b zOMI=T)B7p6;dub&YnasEN=o5R3ah5!S(MZGsu0W{mXlHJPkixXC)7LhX;96x#$~r_ z*sUz*bCJH)74`~VL4BF6Zw!1I*Ebdl&KnwXLZkCEBDIdsk+;egwIo&Er!kh*LJ9D^ z>OPI*0SMP3>;&zIx6=$KSExU~WGu%6TTn}rbQK-lUx?0S9|9n4m;4YgzrGSb9$$mk z*$g9>+KdThU*`_m%MrjNyyd1IT+-VEiA#!aqlJPm+Bpy%)h^uv$%Qt<1M!NRWW4mI z4}~DUG1DXS^J3nePHy^KMEbF@yd(KyVf^3Oq#m829^`5sZ~A8-J-HIIaVQ?{dVjQh zJVjq1g}(&u0Dp*_TO+TFgfF`0!5hz)pQS>&BZm;*_N>RVk$$(UWBznpB|3*^bRuw5 zjNI00EQ`j&;*o#aGsgtjT~Bb9OU@d9Va{lB!;NuSB%VagJWAg2iN6zwHr>qlbSL3O zRT@aOV4T&sUVjIE{@`^)q}7*R)66+et|0!!DMX>4ML*q3UUIZ&?zij4a0eO!w65fU z>IR)PZU?(GvjKF&OLyTK8~>~G*M-)&oh2inPCrtCHR0C4gHr!bb#>bvfJ^bGg^YCa zw#!ydPp%)d^VPxw&y$aB8Otx>@c=y4NNJWICCc|DCAktvZtOtCG-8@0Ce8C+G2wkv zASTeDx@2;(l(VKo4xb!Eq=d_vL`t~J^()Y9>L~FilhYU`C&x%8qhCQfc<-%e1g?(Y z^cR>p3aSa92Z7W|AhqxTdnTC|U$q}-u(wMN6$zpz4MO?=#N!wO8PZCkZG3is>Zm@M zFI(Lsstz>dv`Y?ZsxHBLFV7Y($$LHX90*5_TYW@6U_nTN8K|Q8dI98 zZ}^wS+YNZosyrV(rQ8;D`t!`)WfJM;lq7=H>>eQe=@hH^F#1@7#IaYnwpgnFB76yT z;ev^1|9f7E!Xv$?tDyTSly)H*{}v;w$G4&#u~(ng+jRrY!V0H2C|(1fNBHZq$5VE+ zq?#Um#DPQSA_K>l#E9RYj^pD~V#^>iLXpJBhEfr6lJJWym_WMsd~>L9uT+srEXj45 z-R*UB6o6ipXyS}kxC66>vaCVEd8vpom^JM(84m?JjwUXs#DkTz?d21&`J8+LR^yd1 z5xKBsky6l{@RU?Y^FoE{J-vuJFZU1_B)&%@Op+4UEL3QC79?)G55MU%V|eTPsHwh* z3kzuqjk8;-a0(bDSeFyEyH}@FyBW)6YS(4Chu(k=k|l~~gAgiqKd4_gQNN*AiTZ_m zD=sRcP*p0`{c{xhWtN!_mzriiJ9+69WrPb*b)?{TV}0m3~} z&ZP?!O4PGdL=*#JTd}0&VG?5e0;=U>h?b9@Lf@+;+Ki*dW{I?A0qXgY6j!Gd*YE&) zbpvQR-XGt`9$@biYHzpC5lF8)4quAi8TONf8)Uq^u~4LR`U#Oqy#7n5SSVBI03k&x zaoZEj_P|IKXEU4ds0EB8M(w7{`2N@z964mN9s=}& zZ^jqM$O?4WQaZyc)g;)VU;LFt=X4wwE;MH0k^SC~MT7k={MJj0PT@=Di)uODWU$X! zxb-=1Ki=JU6C~Pp5zipNE%JW~35_S%^__6a}Z~2=4jA1P&Ewpy2 zh72}nXUym7SqFh|SEjc~J7r>%P6n{gCcQiro3y+hoAg0Q9Xri4Ozb{KUz}j>Ui=7)+&A<2K+hM8_NsT-628r*T@@cD55bwC+J{R^>ygA>4m>D zpk97huPIoUGZ3XuHz9)4F*?ElhzdWW5G2~dHiYe&%C5Hp-cYzEVWoqt&TCEEU`R<5 zUd)iz%P{&>27NuBEmeGza0bWuX|nmF z()DadmMw_yIdu@OUyiXaI)j&V!j#qz{)UGtzWzZzN>K&yu_p3)SpEurPc{L+C!1D% zCDhLU29L9+z&{HLjUDjf(dxPYh%LdgjU7_WVGvnHzBS!pwAl=i=U0))L~}GmUL#+f z?vQ1+LFAn(h*a3j8e@kta~VM_HLoDy3iI0}e8s#DJ1IZktR<2&cE~f2Hg<5Bvy2_) zn;o@!v)0(*ZSxK?ZWMf6Ps8;MG~9}-LZrQn9X>Q4Box<~Pm*wp`63E=_+*8$J~&xy ztn5b=%6bnV1j`hKvfhNSE&$u4*T|H$=~0EUoCwZjn*WT<|&w5gt?baX6w3MMspug=;`=Jym~tP5wXIKN#fItNeVr^52^N@ zEb8f&T-4K&RroCw)E2p_E!u&aHK|6poTS{pkiB7_b(L7u5(v~r#ASF0pyaMwE59Q- z>ZDb3tXc?gj6#P}-_(K5JH<~99CP%)T!UL)j?w&a?*|Gx-;j2yiTyK^WgqtL)V2k5 z)4EpKON`~kbeAMt`mzKV?mc@rnG``$_52a&1MpzrkK|NW1>^wRenR_63KhCOQIz9d z6BVuVD@28JlN2iS9m0N`get_5^NLi3))XjI=)H+#msV7vmnJGy$R%Nk3e887Pfk+V zJHK3+{$M$Jpe`iLP;h9)tf`Y)=}+WDh5p<&(W^fpQf;Frh)?%UQ0Pw+M1@NeMg5sS zjp|S1V4RzLYxO-JCi=qvO;#kqV9{@k%j^_x>VgZfa1@a39?AV7l*5zIkcsoTObXKo zk0NYureXv9#&pF7__^td4e;X--8K#@acCMlwEXxO@QhN@(nqozM+TzTd^6VMLJq!t z(rj}N@>rc$w8kfYFyPV=?)Od^L)c3LW4+Zz-tBJY66*A3Vxalogzv}GgVHG7ujzAV zGXBwLGd_P#pL^i*yYyL)&o7Uc98F<4JPR*P@cJbS#*43Yg<-T{JW&NSwHy`rXq`Dr8@Q; zCq_vf@4)DIsg6b|O6tfVf%ZUveDv2_(HxjU2){mr_775Q(#k8lWrm`%Up*u$Fsbav z4=F19x`ZW_twfS253RkfDweyPmNMcALkFSicU1;{hQ$i084- z(`RxX`_E=S@jUhwcoYsiOF!sV!O5H$V|fdD0*iLwh{K!#>HJnCVM&+)tTcAJ#@4}; zEhiV@w@EboIjixt9rzr|Ex5J1B@A-BHG<@@&xRZi&~vZVErEb|l_Ks(L^s7t7SOa> zo3XrG3*Ejq}rM+HUEIoistVjVM+6ML6Q+;)b{0_Dc<%^kn8bJ%1PhP>5v`29csg?PhH^F z!C!!lZ*Vr~$X(F5bTgdDMmG;v78{J~ckqS>tHI;D3~s(3SCVF3bQ15kaQN36em(~i za9*fB8(J-dJAdoS8#+KrzUS8fPcA<@H^k~r)>I2RerMy0H`p!BHog&eQYh4UgDej$ zq(xTF^>~_A32||)&SRwr(e zFYML{dt(vf5gaVs5=VEa${r_^h@JQ~^RA#LxRhAgpRTElBjHYx>>-luykPE6O2BWq zHO7+LPG1{Nb`Rgg0L!Wo(&F$7Yqj`Q#tpW(EOXF;_wW|ATS)?8JLPTmaJE~9Uod6- z7Ivxt{C;3upUbq%I|Mhuz&d!Cw8V-maTyju5&bJNN}!JFm054JU_j+_3W9 zj(}ADJE0x2kDn&7^GN}KtQ&^X0;C;~XW}R_9FXCFd|!_Ijuf3_0+x^>$|MLt#8g@? zVI@8yb&vUuV)>*9p(z&KA!beMgr%6k^*EAPHw?dZ*F$&_se-myoyR=V`E%Ujgyy)> zmo{8UEWK6~G*EGJimivV`g*;I3`+_hH9VA9XZ~-y>p`I$=<$a0TXC}-nz5oAZo9g( z%%Ly_VPD>=vFl4=PH%UQHV46IREN8^cnQY!zT}&b6~{F6-5=cG)Y|ox{CR8~+%IGa zocI<1N*V95UxsgTC*!vbEc-20P5r#~#b#W8IJxYou^jj5A?1oH=idRwa@^l6t1>44 zp6J%!VvVadF2j#K+B0{#=Yl~=4GQDG=D)4Js;&N8@BBsQJf(B~-Og%UvBP;)13^vl zoxdiOw&+UUu#%Am3UIvTPSe^m_e18eFni|r#`UAa!m57>Xt&RurgK*5aT|Cg1)d0P zw-285VOVzciSTxNfPsZhYIoh`TnnB#JoBChUx|LM#(4w!Sk;|1wz!?dT%@Pc_un13 zVPq_SnRM}P-I~za(?*b4_X}h`vBSi^dtQ@MiQlyhAm1`RX)`8oZ@kX*A))M&<8F~} ztMi)HSoQ{Fwvv^p#>3KnW-U1cIZH;W`k{p7 zJAviKH1B(l12A6@Sts+HG&_fzzyM(Te%FD?SJElzU3FHIe7VbT z7~xxrhGaT_05q!~e%;X>zY9_ezsBGZivuv(+=v_U z_>MAwYYp$iznt(J)++w^X6&|*CFVKIQrL&8GVZ6l3{wH*ir)fBNV$-x5FqX}4Su1r zTOacA$nvVWITpO81hBn^;9Ca7{J!ugIu{)iAiXX2g5xHuas4G=ppw3T_FfV0u%FS8 z5BGL~G|=I#ac8W?;RliQ3}9`7&HHsysa?NH0mkz{=1of#>(MI^J{sVSgMGg*X?-Zw z9e+1|pK)voe;5V$7k;AjI(`l|48ZBBkvGUOvG00;%&Kqb99{8lO444b_`z;m>a}{p zj^iegJ?^KH-_>8sP_|zU=RIdg_C>h={{H*>@9)3A|Nj2_`|t0+zyJRJ`}^p?_ov~sTvkS5uS{;pXzSp~>B%F_qBnlzhF*z?c ze`Z7^tDjs(GaMPy)Pj=1GqRXGNIWBaeRWV=zZWm=R?4D9i@Ozv#a)U+aff2X-3k%mIMbi!lh+- zd%%jHKg%Dg`UOWk)17F(_-IE)y_$-uea-du%X@6x_;ci+$>jjuFE!gz-A;$WuQ=Ty z=W+?({$9UZt9++l@w8C+ilh@FRRPjk48gY{I*2L zN(Dg62R=X+5iv25uc zH`tOX(vnWdxZ9Zvv&BmQ09Cf}><@8rBeo=n3pr#4=<%igd^&?UYLn{WD$Bf$8 zlDILa;bMH-?a73)#xB!hH4*6(Z%}=#iNfyPheF3j_joaX(=egm5FbfoP93CkXG~9V zMR*S`aUa-Cjtd+R=hh*1)7b#+&qFe}9Sr=H{Wa=9j6@83U-Y~+xwI{nT=E9^yUbh0 zh@4L;7du6LD(!~Xr!`e$NT^LQx+U1BQjN<(c zEve>-O2W)Blqe)5udRu~Cn;rzSb7MYmj3+v@s*C?9P ziswXCRoOq{NgIi?6AxrPXZN)q)3TA0FqWJ3!n%6M9|72*W2pk5W5&o068 zb7B?uiAV&^`o)c^=JU~>l8)%vyw|bV_PKz70x9L6TKGX2s|~}f9+yS-bXkJ zAq$cM+2Y&;9XLEp;%J1zoA`K3O-|8o&`%J}m6Vm+j+G{rZTr}DbS)JnWjaW_1my~N z%s@N_* z=3p?o{lAr>Bg+Sx^jDUb?uJ|Lc!DvlOTeebGK2&^ z@1QDFXI}XNCaYADj@}+0_9=_$H>DEGk=6ONNJBFYd0WX0TSSU(Bn6F`Jf^w3*z`Nt1#-tg+fOl)^pww7 zEW{$*Y~g<*t}_wORgAjq^aLO=hUU=@n})rllmqBFhqraNbYifLSAQ8vE{}ux+ zH1N2l>f!m~D!XDXgSL&|u?c=BR2TxOGYNl>h_QdQBwLhwjF&0V^WTyp` z9=*}fXE)W`0L;pQ_m6|wN;zYJzoIbzkh~CHl5WPzy9C=xX}*abjc_Dn89-0S{$Z`w z$XHTT60feL&V-C#BDyfPC+t50>ja@OU$W^PmJ;*~=jCTyUD1mHIpZ|Kj^@~1qPWps z;eN%9cDT~}YCWxQY4;}+i4p@Q8S~MzBtWSV0*p%8iprp)Lg>-$D28yWgLNl~>juw6 z$m0-MBu^zD#g;$kS@R}9L1uIFi_<1$LKHb`@LyPeQ2E(f&Z`cmkKm4pmhq}t zu1;g_>Yo-No_qN~qt;AuH}J^XclB3($9)oXuB8m>FNr2OJ|2tTa}1MAe){iCUi>SS zSN#+5l6;hvL+09bum2@9Ad4lW_x-Q-a;9o+Jb<{!`BV^-7cx5aAN+1js;-bjlCa9! z>PI?8*8{tlC?8je?_azoqCkg~CnmgCzSll|QAy(OK$qe8g~4s5z=xaB`IN28({xSH zd0gDtMOVPck(F7X%Yx7FqM5U=bGQIqK|l9nBlXwMQwit5Aot+D7fP+tq~`(^d9T2k zA9oo`R*f%I;uR~FtDx)6S(&59YYpo2ry+mPB2#Pk=Fv9V&eX=MM`5k|u#MxYICT&2 ze%4eUAMt&BJ^(Cjy0q{;Ca07$@rSU-XL-}3_nIpQ1MTG`(-KEn50KAO=ZhrB#K5Kj zi2gagW8(rjsO#hb*U03CO~4emc~Dx;A|CP&as)+IY1GDl73bV*wAf07{sx7wT`$Fy zO`%s;CgDH6w!gn>^!^v{d>I#oKWRUy*6}J6d|MFfK)vXieQo8Y(S6>^*&&gpjl8ub z4uq73C6Ui>wtnu6`qr}5F-X+Zxkj=;{nXXf`{%-ZdU#pGHju*o?npuJ;+6KgCgaX= zx%#o^A`>!0ZA#Qtvm6>@7WAmOS;Cs;F|cx%?;5~zJm|ln@(lDE#Fe;xX7acPtzP97 z`rDOS4GA{SK%1Q;mtxUvC$UWVf`_fnLD<5N6{Q=E8^A*(V9*o{bFFds@WmBXO!(#N zVPfWaaC;incmKyThn3=_`>D>mrmacnN-MRKL)#?+@U@;=<^k`~;ZxsLf_`n@RtLMo zSyt=2Pc7cD;H8}b?7WSK;ly(VO9c}liQOcJ+y}J)`w3CtW6;(1Y)}45NEa7G@$@__ z-}Mea|XU!^k7pu*YU|XT65{o6VizcJWis=y#<8^+vg3aqMP(xK>es(|ZpgLe zL3=aF<~qfU8R(sPFAnmq75gh#R37*}WNr%I?c0z{i#W;s-*0cJw;oRR>RW5^{ry&6 z?Y_2BJ)KY7j2v$HLG7QzpYhq1#N5D1Z22&L@vTRzWmger6aJmNgskA4#uoGGZLR^0 z1pG4Q9~QU&$hNci>bpzAkDC7-v{P$zyZ7?(y?^ZNQuok6sS#-fLZ0W;U%==2XS=)? zIrkR_>e{DKxYKIFB22I_TE6?BKqu%9HC)X`!=CC(k=fIT(dOFY>R~=f@WaZs{0xca zPp-hbMeQ}g^BDj8n_HjFPj&*g)myh!TMt{Z61O+U&I`e9oy%6j`L3j?^)dm^w@Pdm zY;CPuOZR7+2E;lZ&u#<04}Q)w84th=NK^Gz;ns`E-Oy>F8Nd2p34x0wybv+y{VsaG z@U7wzzFyB|h%8^9-@=l6T>D{60Z*cmQQRkqm-br|kQJBct8aUU$iqRJ3Yx39+4JXS zw@V7C!>?2c;#*uEIKuavt1&=5ZnHV=PAT`#?Y^pY$D(ML*>IPoSo-w9cH*KVwlWIQnYAL3f9<;r-t7-=7q zcf3@m_<6Nr&HUqg?)GgHW8AmgsUZ9Hvtp~~15ND~Wx2<{4ba~Pfv1~-X*ZcoAaCGc zo<1YgaMtmueQ1IbHK+3E+th|GaY40_|5Rgh0}I#r`Gl*g9girpWEIr2EgLm7Iq^Iqv%! zN5zBj+ixCfZ#I<8u~IqJsB_Ts(|Fhfxdd~oGv<1&cRK*NZM~A513YY^uI`6bWzr}0 zNw-8C;&(UwwhxE4HtJjvBbz}&Y|?5cOBN+X&(05}o4|@F77m7Tjmsj75(_0$r+l{u zqf6@dD&pC`LSP~eWX6ZwfDjRA!nvS6TJz9kH&ED?GfTqXz{OS*(U6^!b#!KmT>!C6 z7AZs^ zVQe|5&3~@1GB(#3<{T@w%zE#}o0|l-jh96%1eY^0&D&?-Tx=J;`-^Ogy>aQ^EzR|}QCS1+pXLQ_OK;g4Ly-Mo~%qk=Iozb}(<=c8` zJ{iIRoQB4QH|8z=>MuTSTjQD^5#Am_{ZiWpzm1`3 zz01`qAm#34Dg4_h&HNoFTXkR(iRl2Qefn+(#|q*}sZe@$}Xiqzc(O zDt}(eiQ{~ZmDLiF6h$6OU5SdQGc=7cw0nO0l{6VIlr?Q?&S{oJ|7+LrJ6856(#r4R zlhJ(NeO3~2G&Z_!ZJAu;tj|5ERk_oVfANy5p+{fl8C!Mkz8@#;N zL1WW{;t9X~s_!!42lAF%o-}6`0d28gq@seU6l#RYFHO;!D~)O!ynV&Y)7cpSz(`7; z5G&`{{0OVW8vERm1&V9TZ*G-z64#i9z8h{o`i)%HPnoQr@>o}MvEExT2VsXBS_^Yr z{~-2Lj}x?W9X7lyvsQ^;e169!j-M%x-)EPa0QkGcJD5AgYjDs0KFWd6=D$ERV`ZJ9 zv*IyN%2nLcF#j~Je8$FBU0c=E(?FOGe-~q2%#wG&@Q{{K6_|Oop)srl%!L}}G3#co zF$Sn-WZ2$FjEpO5OH4#JWR970SfM7DVd*KJ1yRujeB+O4_+QxM=iwFke?pLr=hOJ{ zZN}UQTj7GfJbKdc1*9KK=Ta*9rNldBGegHkY$(Ux z5Nlu!sK?P1pWt1H-LH==B19wXo~fU2lns|q0rx>v6>n_|Ht81WV&@-o5&zhXhD$=6Mir|NyF1b}maQzqkFraXZpJ$0voFPtQZeH6d6-9;a zk=J0I)uIYVyMNc}x7=j*=6sr*f2w`b35U30YCFCEY$TOi-`r1Cj5v2}N>n*<)trS! zi)b~*+$CQG1bmsf8)BAuVb;S`T)Ld0@@W3)R%QL@BjT3Sn+PgS`VHkaY@~ZU^WD7Y`kmFm$;Wnw#hn+V>S#;0biurw+LZ=J{ z?~TF;8D_yt<=-Z>-lWdqyxsV2?dh0WuvV?r%*oK9%ff^67MXr%WT~i&<~vu15H`=; z30yS3J#aWkmgS-^*ZoefOMdK9!A~fgDX*sRHQLGMV?;AR*pbbBNpHWZdQ{Vw&9d6Q znU0}U7NMS%u$~pGo)xLS0y?M1U>dLD3wW{rzhRU0sayAUajMG2+UxCuo-%K)q=lGD z34Z+;9Zd{kbWH3tQ~l287<_$fU*9TSfWA%g*xLu+=eb|++s*zc3JlLG$Z^rpxJob4 z9v6!2eBsL3sUE|5NDUj&GvGR)HRYA*@+)YiT^@=*^W<7SF(qE;W-keNRC*xJyWn8i zFw*L1E%GccT6tl1cLK&45C-YgsY_}$z-#Nh6T^E*)trb5{cW98UB}DII)-c?opnvX zMOIEnM?XICIX$bE*>y~F)ADy$glvp8UqJr5JumCjx$P0d?k|^o$#?x%WIx^I`{6fp z#H9$|@MQ9*M5xKHGQL-v56E8_v~+5qbKazDT#-zFx1ccWMNPIGWNrMA;+McLFHxSmo~9o_mp00DJ*dJh zz48v;L}}{afVt~#W~^`JT_1E+S40~|K;p{GPw!zVc|L_d-$}ku7uk*IpJ=4Zz`uNQ z8m{u%?DK6g&;{{tX7Aj|fs_4QO!LMxWtYZ6iNr~sldfH5YJBS?e`Z1soL1-nS>%7k zkn_fjBMNeklFl#*zpLxYh6r;Rc?MXq2Nk*=3-IChUvRCl2f~O;1Zqu zlfgw&%a@@htWRELnN!C_{O4+bfZ$=$}UeS;GY?4rW~ee%JEMhiCE(pN3a0Uy55|57Y~i-Zy#Zt~S3h^cBH+j?h~2tX)}{!ADZD6#2nD%+ zcb7_iwMJ3(DB1h{<$nF&Bw<4%U7l>}rM>k*YVmUXq-q0)4h>bmW$9`$z@sBC9(&T0 z(r~@|DG8H7+>Q$wI`IzH_~%_v9HLG58Y12a2iYI5z)p<#0C`Sfvtp4E*}+GA;nn1j z%AOPP%MU1KAf&zrlD8yB>Ju|x(k0vXGYGD~Mb6xQjJhb-++TjlpSL02KiXG+J2PQt zBgAXX22-VSo}C$+nnpfLG2zG77$YW%8G@*4*sknKT`k!>ZNAjqCcczjH%6wCLmQ5}Oht%x%1uG!oQMjue3`UMrUvX4&WiZvJcQq}ON#zp^g z?T^OiE;%~p^q+x?(|dXz%M(h5I4Kk>0ZruY3a0LQ8C~{dtBO8cY95glerB@3P|dM4 zg#_PYQ#`sDmcoS~-XB@QjxJKJHDv^?mTf5~4lMhWp>*b?@+h_Pu@f4*dAM%1oi=i4 z?sFx-Vs_)uD>j+E@ZC4tan~+)!6l<|A#c~7Y~^!Z z-ZaQw&1aXjn+TfI2~h-u>Mf2DYcPl{=et}vh1MbV`{RVTUj0Bsr#r1Bo-vNjFw{0kt0jTWbSY1c5y4TEB~{IPS$gR);5W1z3k;Tt!3 zKg+U_m;-@cOOx+4jWMbP%dj{{9{${$U9mh9L`YuYh{v0L=7f>ASks!c5w;kWH1Uz# zI%ii!(%EP`L~sJ0k_Pw|s1b}mM{ckpDrwe3Eof%L@K$jwP$D#Gld0i^O5r7T0wXBI z^D+qZq}%ZN(J&t9#Qy9FV_L98=yU%&zKTb)Tf1kl4-;4x5Y@Z zfa)bNy?fU@yC$B;jG;o?BqLPZIKoHS-^58ZgN0FfaqD}^(?tP6Ev+Hz$G|w7qDsQ; zZ{7$s!@0cj9j9?RzPPIDq4HjInp5FbWyN zsJ`-G(Nu83ce$vu3d$o*~v-(w}! zA;l>xG)x$UG-5GX{nEauaHPm|O8OCer!~g5V2{A`DCnkP|ABoSnw*RNNPxHFg^^2* zEZ%_(z6qm-^JIW#fgIsTQx%9bFJsV*u)hGf=8AYlrVY+#!|(q#)GHVfsc!E&n1u+8 zj^bWNxnqlZk~YA!AdXlkJZ>eZ`T7MpLRaH!Ah;3)pwh6zIP*&eM&NQXQ};K!%yMC1 zXGw`}pk5o{!Ho{=8EzHe-Sm{qMuP)A5?;5Cuph4Q7x{%G;*NkSoB&igvVnUSf(8k% zdo)b4ql<9NkGiI*@<&|7?=Q=e%(D#zAzeq+QT2;qmR4irCt#;$gvc34FhV1Jb;XKk7<{5bOAzb za?tf%%ppuS#p8lxFzxWY2a<9-y6ahpEA@>D-9`+U_=AKi z5>$4>k>`R@_buX+3=$P4X0cEg-~1tR7M3PdVpOQtWJJl|Qt{aRd^;Iz(=kYpW|U7# zSpUZyH|Eo>9d3-*Qxc8?#`4q>%C|wJNpeC&2SS;CS`ACZP?H~^D5)1@&L-bgzD)vR zMDA{!Z(_KE!hF4>Z}3di6209f-5MB7UjiXiYFin0_k`rG1!NrQ1pT@$$ zEd3DLq*#hG?-JT%B`Xq+%&^YdYl6P+`9^RvZeXHu;nnGiD6Y+k>jGnY36WEOPz}7x zY5Bt0;!8KCc20}g!ObC+`T;rAt7pHOX=w(}c|bM_HAPkABa$~k`}8QB(j4KW>jBv;?1ObaQa`x!?;jUBG&X)dmkKSrD* zW#gJFVHinTj3DS$eEopzgxyOe``3!7WaQGI%zOs{yR#zV4#5DacU0>dn*4E}57GPv z@t*mB&lAlijUwR*zYVR|?@PVC$f*t8sSVbt4ex2O+PsR9;;)*<&C*XLP0JY$GDx34 zKLp>L`xL>dkUId|Rw>w$O_+aih2BEX7d5vW3)ItVIq21%RcIWk=sInCDUm@Hz{8)C zX9dgQ6360so_grc4f^`3kb2$T1b~}2mkZ4{E25zMAWyd()d=DR%{JOws<)U)7+fg6 z$$fidvfE1pZa*uKwgp1toIl`w)ko07s-tK-77(NVQ>})FX@>P=`RVJm2f2LMVHIvn z-M8$j-%U=;OaY4N3w5#}ouj4GmJ_55ma6l)ZzhP}4<+xz;(2I)saFdWGSZt9`H289 zlFDWC)zD_M?x`xCC4CTe+!O;oWrc-S;%F_Q?i3>Suqhh)Kqm$w2h5X7-=7(^acg4L z(S%Y;N`6*6*0OH|GZ-k8ns#R2W10JZdFDSMTZ~I@M7^$w?7A{Q-=HLC$Jjwf3`Pmu zH7tVe6a_XN*x~$9V6;h~`LHqmC*yX8W_H207sh(0!FHa{crM`wlkKshJr@C&^3^$` zS*+1pt{K!jSN#o$+ThwK=l!N|uCmG>)QUIbUDi|#SAJ<{lenRn%AnN89FZdxzu}$PF z+zqLK3u|<OFfQ0@)$r!)GD~)5y|r3oEX ztr2q(=3PT?t`Nrj~^x&OPFv}I&< zwpAWoCD@n=Hs??KM5b0L6#OgX3!!}t;;U_84WqKRkY>YxDa`zfVxykmcq=U8RHcQKB)(vFGh#peuKAgwAGp zZsCogUc+br-|YI@TWi{@yx-}yKWxiEoF~-2BRxM5&ON(HCd0|Zm$K4|dz_ep3`>7a z)zTz~KH)zG^mciD`%@eJqC(fv!aiG>oil%ve7|~~{6$nG4^j5g2O+_YIEl%?RzC^B ziNDuYStRH8JJC9`mGq?;D{m1T-^$P~6Eg8#7@`wuuS@3LLKuP(DmU*v{;)*#lsqeQ zmRsn;0Q8yu>~f+m(01=1bCyne+`U&u3C7u=5$USdGu@FkC`+SOuL_Q7hbH$HN4lymF8a9hmL^LzlG+D(yL#0 z-K_Bq#XQ#u5%MW?YhV>+M94T~1-mW$Dfy1S8;(c`)LGlDbk{vW;sZvU^GHsa2 zYAj+Y(75p(hE={^A4$F3y`I;f?$g{_+Vgr7AH?doE2^0pMMwI(AcxM=o`}GmaK(v| zWZ`K!#ZJb)H4sk-0#5H4f*xIhpOSr)Rt)8L=I>OWv47J#hb}r|kCI3s5TkKNY1N{I znI@zdGtIK?!X#Hul3P?)TDx1q?$38Bdeja}A@i>yqaegLhDR|pJW>y(X{A=#D?V5-+qmB>D#x#k|$OQXT%ye0j2;k zmUoMorQUcSt|v>(qC!-|)BOon5r+$GbE1JkiXyVIObNdynXi8xVQ*UaH<`r*5kCsZlzfm8r^=;o{1cLDm?bbNG8ZmgaA#3rj89nXW>SJ49++@e zhVDoU^BUc{*gBC4=MwJ~=s@!H#&Hxci9))b3*TCTcQuqdyWkQjP=Ac6`8O^pj%R*BFz(%-(I@<(4c^$PJE_E> z_+-rAZxNSq+D=k~rP7FJ4@f<4N1@d7II0i6(;mi^?P)?uOG~Yv`e{0vP)}qw)l|PZ zA8Vz+Ri*+5&yuM@v{|>8PEsQ+!|uGVUSHju<3~I~tHp(zJK~b5PRl9cEtCUXjYMdi z2M4H<43~NU2#tvU7;`v+P|Y0>&ibuIzdt^oAxNlaW>&!v*;UYF9^Vag=SRV2oH)lz zZ#drRqdvZWH8FF%Wy$+>K4!pAY2Pirxz{)I=C@gFH|CeOAJ6J*0HOG~1^<%DWGWFP z2)11vWZOUcHJ}uWBT0P?LeFzuN4B0+9vGl%}tg4tDcJRqW}rjSFk;(dk}>VD933M{}d?T)KJ zm#4j%eFhS?oJv7WwqM?DNiF>x^po{`Q^6Bfx= z>ZZI6`8Lv6S{+Wur zW2hVu|2&1RTPGI!VbuIDlM13Ynt8w*$ze-Rklwr$Z%T{!g<m%PiawQx8-S|) z@5-J56jt3V@1QZR4_8Fq34T&i%pJI$O9+w?zR;MX)O+sV_K~^vN)`-k8R64lTMDR4 zy7MqnESDG5TkAN~bIX7GaItXcFV;G`%6yA=-0G2W?t=FBw!L~SXq)m@HMA>X0YShF zO@_=4u?orD5tczYJ9T|-7jK``RfYP=?vUjiVYS}`0Y6|;6li%CqzpX8FXnd(`hi>w z!h7t|ZOH)~1qe|-l4ke4v)oI0aUE@R?-@y}EEefRIc-#~q^QLu@=-kY6?!uxzz+7k zNL_8qaLp<(DgJCZtMcbOBl*F+eB{PjlEP16d)z%GpY>t;p0}MEnVfNR5A)T><6k4W znWddqOz5=#HA|9RVP@L%psf1G0B!i`Md_hj+CT~J^)Dyk#O1Pwr2i0U5|KN_?3OJP zsfxgy*eOm&sdns>JMZb;N8Y8t((7fkIFG_^M*rdPciy)(&P;3%M(3W+qO@B_>w;jlvA0rIqWezJBYE)YQ7(Lzjh zgF~@kC0Nu|{UKHTTVxf3u39@&tbx^7TPBh44_ryQJ0W^I)H*x4IuKRBYXerT?xIFM z?Re6+SJuEXEb5|uAH5y5itG0}kWO8QJ>ZoJAR!e=UD#h*0md%}<5z<5%fKtFP#wUl zCcw0?0)~WH%K&>S2Wymre|>(@*;%UuyOx95RF$DjtWXbDs4d_X6%d?-1*^ge`4|~u z8tM9RCtq`CrVRX}B3PeZ>`iSP=O|G2mxUuWl1 zd*_@rFb@m(DRM@4r?d<#{NEFGasLe9s+j+{yg#cP{7?bTV1>dN0sw+Lu;61oqqnmR z&#naPYCX@^MPY&TBa?J?lFGn*I*>G0C_kXbFmgs~r?wK@ckAWKNs~65kaKz^7Xvbh zgxA~9h0p+cG)fu*LjbQ*0Mp8TeBJ*z!&ma13ud{>VeOKSzK(GK3 zA2UKCBS_A}2|>z{M>-IEUEe}1kW{2#Ib^N8KRiSd{7ec}ti0FX)oA$~!qC&M`^jdZQ;&uvJ*e$d_tC z4V+-DNKi&X(iBdxVdQ01zhh$tMAYDs7H3m4^0K0TtGr)6#QX(XiOENQQ z7NhtPiVS$9N;z04yBP~6`{o@RxUe=^s(I*0QZcH3Tl?6hmg4#fI=s=7>tTSUYFsVP zx*)6!d#e>f>(f1Z|<)%iItqtU!c^I4n2}NOT}Ftbv7CTxDP;(pOis zWp(}C5ZxWo3UH|o1OxEu1Awozt)hN>{T&J<^tXX%;To=yA&OyKc{Q2&gdo|UzzIiTneN}#S2l#Tpc?W7lx`OquNB$!M`pXJR1wDK^(BBoTxIsS;id)zmJhug3 z5s4G6Z31EX(efTU3ON~je85}Nb*g|eV`OGH}^_@xX^ z77Hj9mZZJYPH;|P&!$BxmJqp3JLky?MFHetYwg}Jh>0pukXH51q=9dX{##<&J1M{f z9N1U<*L{d!5SVEsJIg#eiSB? zSW^fV?)jKuHo`I93wA>@W8XP}!pU=KA1qgZxym24ceXUIO7(Yu+B+{oAQn;=8}Lt7 zxN!j_s2T#t;b&dA2+@obECYv>gI`&@7|l%JB1Fi{5Lk^B;@I;^LOHNCusQIDY%noe z(v<#^S!w^;_2QlO?t+eQH5RZQ5TXqA1egwFyy*(>qn^>9FpCLk$bj!zc1B|wF(D?A z=ueDrqb!!d;9t=sG7LS^k?4qx{QO^QWF&m^DZH!pUB*-K7N<1(NOx|<3Jne9Zc zSMSIftF`(C-F%{U!3-gdvn4`>pycSdJJpEq$R+ z-ZQi-m|%5F27Qah6&Nx1s5VxbQ_Lk^9RVEO)+WyYd%k(?B$SBkYiDE#1hDx4!YiA# zaDX=WQiM|E(U;dV&D@=RyP9VXP;X+A=6?dj!@PlZfY(}LeBsol*bQNZyz{2U30|lH z6k{OnAxvU&_c|aS%#>#X2-(%udjnj!9@4GRYQf>!Y&@8ezMAw}Rb=R*GZ=fQp(l^^ z@sB>(>SI}WIsbLH!2J=nN}i-5-g+4{4zh zYi4jPDX$;Y>?^ z9iiKFT{EZMB(aN!=O*$=vv2mEHl7Z`kYF%rSY@ycw1Im^aQMgp9KVWzDw!xH*10Hd5Cvfb%iWv;eGdqv0;3c1?+0<>uapT z%VJ$rc@a0ZYneKEhHNsiVd`@QIb-#=?6{TW8CUaL4y0b+#@b`X^855L`K#*v#ln_M3&fI~(Q&62tU?GX`?&5P?FQHMdW6iaw_Mu}V8 zpB;y;);}2zUHB=ZM3e^$gZ)q5{7%F^<_2Qpy<+Mdxuu`&{}PNIf?l11C$DusRGf0b zX3;9DA-LF8J@2h-y(M0j#2?>bKlh{awy|bsO!Uv@8jub`oMs@PoNpPFhT^1w9N27z z2BZBITky*+{yDz=3me4O?WIZd(0B`%mR=-jBhK*`=T%)_^r*0f-|j^X>DS*nuu~27 ze&Fkk#^~P;JP^TV*sp z!mc^64C?n<7s~%4F1W?CPBR6|_yTm;tc`e9IYUt9p4ab^(v_~lR*wF~SMZT)J&D*m8Q`N%3h zM>L*eT6)z<3Ux_6^1kR!MAQm~-dTVjbiux8W`$pqXl6`>>Fe%tVo-u9>@4qMZBFcX zL>$Q|-Gb}|!u89yvB?6%E7lp}Uxnn&R6$j^!d;{LA9c$jK$F{3tdJ2L&K`8uS8wj% ze|G6--_S=r9L3v*kBKUdAr9O@jzMQ7S5v^6Q@Wp8@}(5vK*{6v!D^)<&p{U$feJ`3 zqbIaj!|Fto+ZR=3t9Rba?i}*{+fu8}ADOqfOFR%FG!l)Q3%~-p0|0DB7O0!t7OF51 zN4}c4gR3ke!Vwu&zD?N_kGFvSW>Yr;{R99u#W7u-D+py$^c>94`)sb=tRs=Z`e@yF zYe<=Kd&CP_t8iB#TmKU#O-TCtYhOFw`0Wf2H>o3+9JhWOYt<27> zF}^0L^41Z9rw^;oZLadgXa_+r`A6A)_rca+2D7f`iO2ajpSu zHB52tnfqf)xohS7j5Yd|cOQ*s^wx~retvRx9lAR&X7!6bTmIc$4aL7ES~f9S38NnL zLT7;O`g4g6?Vp#nLR!*xMXr*nOj9Y_91?0I6XS3Tf^G`R!A$3X~|b= z8+S*cDV9^Oykf3yIpL(_VVf3-jSN~@_(Zm&H{NOm)O$H!QITra4tjxaa5zts+NgSB z`WT*vmnK#|uxfS2ot>ip?J{eCIc*pl6VH*phQHXI72BebtcizxNN?Mx9hWk;16(S+ zJ!7jG@V5BknHytTJ|E}qsMp5;imX0sY0%&4InQXLdiN_esV&jCZ$8eSt%k4i`DYv6 zOQ!!ji?it@-Ztynzfaf8IKdAg$&GC;<(VF|X^p;|(&?pe5PW2yb~Cw^$p|D|O-^dd zBmdO^-1V>egtzNot-^rr7UYf5SXqyD>Z)OJlrng7MS$kYtkusDFtijj z9?g)!JBv4*r@z{$j3>6|+a{MHhpeX4US&F?&&p4|4Tn~TigvY)Tj7iluE`nK1|{?j zd9yednhbhve(~z8^V-!r@89-feKrKtH04_c#GH+tHz~KroQ+O)r|q-X$b?KEE51bc zz3A?xv~hO-C?+}Js!;)rZ$HAMUg5y-UoW@3ZuL-p9r8NVyN~LVdw$=d(#_g!uw@G{ zb~1C@FpA)^I4LCk(Y~hzZ~SluJ|r5XP|6J0Y{5KwJ*8T!R+~L~p4CAK8B3U26(yXr z<&)-$VAh(2qq^JQJuzqZH##?{Za-fU^)6Onv!=UG?Y^%nP9$zYCL5f)Po4h8%s3Am zFlB)8zM1i|S!L=`x>3gUx`p{YSnoh6cvkYvXsO7Ui_pM-ty&o<1viz}zE^O_>)-yJ z&pySr@;cax6P&Qv+JKF^&-)m6&TwJ0KD6BzoIZmE$p38`^GvJJfT}jO<*2pF)0lth z{cq^lqr$75=_LnNk}4Adw6&A<_Uxff5KT=!Xky+Y*WpJu@whYN7LI+lMt$CFyP62KSY#i_)>C?`z)b+^fxen7 z^B%sT5EIHu)V8Md7$K;EPRYpaT=+=_wo91o#bWx<`Fs}@_&GPX?C|f@LJUG(eWehl zV_f!bD}r)X;)BT@M~u;G&B4+wADMy`E*;QFxX6hfLs&vvR3a*1!ISe@F4hP2yMoPq zM@MB*t4q%|BgpmvF-I+>+>jxGW0a;F+$3jYi4I&ymAC5a!@PTVP9AW2+d;)XkS6z1 zY-k(TY_6?M{P7dTEyy0(bPEkiU$_M&N{GAZ1P;09m%6n;2g#6v7BKOxy|;zQlk9eT zqWW@ks3b<`M^GDH-9NFw-Z;|M_=^EZS1<`OAg!>12u zO7Ihug`-gTI!FF7@zt(#;7s#$rc7=>pgx!6PtNPtyM5%3dr#JtswVl|c&kk&7P}Hv zk7GKz?cjtg+k}rz+Lg1y2EX0TiF+a6EaT4KY(JleZu6nD9QPGub8@ya)U*523TjS~ z;2#tWY@j}UJYTQjM8tv!EG4n7M7##0ftVt$XUZYe1kxvEBYl0esxvvi$Ooqrietfx z@vfP{P85ODb|=`n_a4IGSq;Io7lqZ9;3ul|`~;^!zgpaNi=Y{@H09FdA^&8H)w-~&V^_MX${ih5b z^$v}@8GJK?H#7f-y-vsNZG)etHsFR(){j^_<}-M(2%oLwr!#{$RMPlX#(xh6uVQ>I zV(DYr@DB&K0iO`c?5C<lC(1%8Pon%hPc>hZ-$(_lH%!N zatT_LU0etf%$_{8B*zCdv!Ep3A%{O&l3na*155x}h1iP4&@3d%8Y(x7#B%dN>^T{k z+1|Y5H4hSPOHd;LY$nn7a>sWG*DtOT9loUB|eiQ{PVem_+J-fFTI4g5H=*O(yNPGC$VM(J$rB23wtcqBY6iXj%9X%#p zidt>9QQXvm0!LB7tjW-qW{MpuH=jf&&nn2uh9-}*NJ7B>XZ7hlEy~M8Nxod-)3V_I zKD~3I=gx&BIe8hy(JJ-@9M-7BMu!_QoM1n&uXb~VHp|tju zXeBQD$Rt^5H!HyggoI>zx_f3i=@`43%E*udcapB4dE}Q^~JNy8C0XGO$wyWE& z?h%M18Y>%5dt7$8s{Fa!<8mX@y?v|U#II|RlT3p2GRILDd6IznS4)`w{!9RipoGU! zDDil^2f$p_px&ajA6XVL{OxS*ZMD37-1wmymw67-Q0Y-(ppz+E_<(G|GDyIvbcwMV zkjl&^G{exkhZO=~I#Zx*7J_Lg=5dHKb{ds1ZSK8ucs7>fhj*ofCkH@7A@6?h@bK*9 z*!@NY1VPdLhmYj=fob6Z=uO@~JwG};mFM^Fy*s{;7l%iuV{A2vCjnqaqo5p~tGWz) z7|#63!NL90lcQs~vMJ2^GtC8xGz$mCpnL|^nPyiS z?8$&Rw?B?CN>E@pNyHS)SjS~M_3Hp8bTg@zptqC_1nn0T4^mbRkS%KH5tx_g3o$DK zZCmKBmn1cwtOIti-qxHlKg+8miVC+KDg6o@sG9YxO+AGc`^Kx53W*U^osH_UxD;_7 z)X55ikHaLgT4*)i!%ZbxTPazzkQl2YL4Ji_&xdRZM_FkEsm5_wCH+zsi?UHJuA1`2;4pArD~eS6&l=H7@B~Ws|^sR6Kwu` z?Xl<%J6ltoX0XBP8(oJ>t<|AqCWx)7U^3IYPW-PwShHspxOG6}9PT-~touFF4l1g9 zPNy1P0scTd3Sp`t7M4{G@S|{oSMAcgx!_q}YclzSjQU;ekO2tpW zcUx^O*facFQ2_^~w+w(?z@S@Ac-1n+EvAQtqw+a@Qd{*xcv)UY-Yjc8+$Vr*u(XOM zO`L?cU)2(N~jCp_h^du6U%KQEe_mo0M;U;Cun&|3pdL7$NdyMhK3gMJzZx>R@oK*B@d zgvmbeGVDJjyw3{XkWus&#lcd}BNF-Pkk^F1LyG7rUY7DrR{tt{zQgD#u9ouGS^W+6 ze8T7{{`Qj<{d4;F;qQ-U&vK%tI9~z3 z-k5T_M~usl#{a3IKQhl0mrOa`V}|rM2I%n^%E)TJ{UOEVbYB}KuK&*%{pLq*evQfh z8q2?A^b`+G`8DAtPX7&~r?}}he)=E!|CZBF-Td~C!}OHCWAt>cgmNA}&gJ)maPgy! z*EYF)+pWLJ=znJPbPkO253jiOdH=sMdW!$1{N}4}eQv+_dnLv+l9=gy+SV7N!TMKO zj>q9&wCL$P-2T6$|I_eK^liMgq5u62;iOI09vPW ze>!h>(;S5So&gT$ACIlt^zAu|U(ERcc3%PK|HeqSMf7xTZNrS?t8Lc+IQ=W8e}2US z(Z9vYM+5oL)q`7x{;K%_7VkZLY1GG`7esH0s Date: Wed, 9 Nov 2022 17:53:56 -0500 Subject: [PATCH 47/62] push edbg for linux and mac --- .gitignore | 2 -- .../edbg-0.50.0-i386-apple-darwin11.tar.bz2 | Bin 0 -> 44141 bytes tools/edbg/edbg-0.50.0-i686-linux.tar.bz2 | Bin 0 -> 53558 bytes tools/edbg/edbg-0.50.0-x86_64-linux.tar.bz2 | Bin 0 -> 53577 bytes 4 files changed, 2 deletions(-) create mode 100644 tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.bz2 create mode 100644 tools/edbg/edbg-0.50.0-i686-linux.tar.bz2 create mode 100644 tools/edbg/edbg-0.50.0-x86_64-linux.tar.bz2 diff --git a/.gitignore b/.gitignore index 762d51414..c75242137 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ -*.bz2 - bootloaders/*/build/ extras/* !extras/package_Fab_SAM_index.json diff --git a/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.bz2 b/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..1664e1bb5ec813031b6a9d96c31ce8994a2e6002 GIT binary patch literal 44141 zcmV)UK(N0;T4*^jL0KkKSz5nxy#RMUfB*mg|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0 z|NsC0|Nr2i9{7AOCggjXXS2QQd+qiez4NJjT*?ZP&yjOMx_qclX)3((# z02_B_)m?JwjZ&y6r?wv9z&!U#=%RqDv`>RmyWPG4^V@y*-uQiQt@od7+sAzwA2(fE zI0?zF;jet)$YLKHHx0-m}rK zr_dhk`|KFmyQ6g7?(W`hZhBLfT;Af{+q1!PeY=qL*R;*Z`f0vxn$C06y>|9 zeH`}4?e`na6+X1@dyYM;lf8$Kch|eKee)^u9qu}nKAoR$cyD)i)}8C?lS{t$UlY%T zT6?8!5(#QK-Evw^uaVWJcbl_O`>`b(6Ce?qi7L5PgC_Ur=}*SiZt?1P$be&h$BVUurfI3Prqp=So}SCH_sxZ{k2c-2hhlKS{Q`)A}L>^5>Y6H_j5|D|KVKOJ`Xq5aDDeWevo{cq6 z6niRZk5kH@k};;H43zx}Jk>u&l=SqcsPc~^)jw3tPtl1op3*1jqMlP~dXH*PQ`Bkb zN9iZ&H8f<+H1#rMW|BQa)Ok+`(t3?F^*ViasCV+qh(?A*tlMuj|A*PhfC!oKU4KI(4LJj)X7iNDde6_HldM)Jx^2A(0V7R^kma1 z;*UmAl=U{gAN9t(Rh8SITO?fb3z=R1|A~wN-?%qJVi++v@JC&XTWK^@Vm@XIQV&AA zhHyd60bKl-I23=BpzpE(CHOpdJSGsVM(Dn?u_}?>pvWO0&^55Li-lrG^*c+y;O!H2 zdaT4+mJBG-Rb9!n=l}JX5o!R%fHaXLT^WsmmwWs5Ej@swgsjYj?l&ugSiwYv7&Mw; zZe{=$Ffw54G|^_6LQNSgNU}An_MCqICb0N$B$NrXV!=U}@LGmKD@swVZPSZR;Oz8) z#rYOb{*z%L-YY7wBLtEs>$Fpak_QnyS`!T~JLu(y^=#4W#xi3eGc7|v$soj{a0S^~ zlgnic&fyOw!EexWE>bRkCFb^V3p18>^xyIssTB1Ap1 zk~=lKUB2gc^vSZo?2{PlP#`b`k=!8$Mrj6sZ7668%lfj_-fn3nD*3HJmMyajY~Oa5 z4i=r<0^DV7NnWUUteR39b7@C<{3kDC3IusXUTFiZm?cJo_&wbMAEwCz7(he=%%;eC z4$^@n;uwo+Ff#E0$BG5~1?D20U8>XzP+WKfg+r~1g^>YQe+2_qs*>w$2y#~njCYw0 z-Qm?5Ndr^}>&Mwq`<-Fj4A@pfMg-S@I)Q;TNJF~p%Zi3iCj%rrz{plZar3P{p_5PW z- zA_y}Tra*WcOLE8!zIL;m#9ao(LfUgk%Ua7_wQ9Gr50|`bYWw?iO{=gB%}Iz`O7mf15IG z{&rjw0Z;*sA(a;z<<068XYUmae#^l%XgaUR^gt`=P!K`5a1a3PdU>kw;b7u_))4np zG&|7`dnBQUm7$mBm@ezDw*9M>1<+hPX})wce5Ef&z}*jM(mC&onCtL*eg(8-Uh5eY< z4z^tMYOb-g(bB`~Rv;0A^SL{ZAF?)**uL{r?}C7A`G2duU~aJfpC7Lok*}PS!`v`= zDO^SRq4<4hc#2Z)6L*BDZ+|^#-pT#%8h60xP)3@7$;1K4%T;ZY(GB1Z&#{D z^_~k|&2ood)yYFV4u5HXFyS7dSFlmsY@Lv4o?wc4H9#PZLKOxAFq5i~umJ^<2r@

      5frs!fg9*WUVCNbq1PX+Jxg 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 literal 0 HcmV?d00001 diff --git a/tools/edbg/edbg-0.50.0-i686-linux.tar.bz2 b/tools/edbg/edbg-0.50.0-i686-linux.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..cbf05108f38534f72a0c7dda7ddbfdfddaa214ab GIT binary patch literal 53558 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�q%{I243OdhaMPS1xV`kiL8|_GCklI7u zZo)Ob#Qg|ps&Ey{4~yyH@1%fu$Jzx@Ba z{X3WY_!){E7s+k(k5d_u)hNCI&8M0;R}V)$Z+z?Q_;trL916hjWZ=ZL<~0mxx(4Nx zy_7pA<`-w+>Zrk5cs>HHY}W#^r>0i$Lj!-5Xg^(C%KTMA99>wY!|kepLg1%NmgfNG z@T5YhKV0{e*DItAuE%dOD8E_Dr?~48>H2lNn4#K|dDT}|fO&iVk_YiP`rI{t#PxWZ z;K#+tVcOtL7M!brAoxK9{z4TFY3&B4B_?I4uSIG|B>|}aDqN1ti$NENMg}-wTWKBi zU`?(D_haMuu}2EFPO(muXYUW`zZYNAZQ{C^yryAHmerLWL`SDNFw2~51rsFDz-7n$% z70w}_pPfs-c-{{6bfM;{hQgFQN=dZNg}#GzIu^&X^^)lsK3_`D$Htkv!^A9$kq2UJ z5*J=-Gzp%+BSsFSn*{I!Tred-5X2AwfQLi(lHjvekc`lWeYh0j${JD~y7$C~TMsNA zZ#eI6*^FkZ-cQAUjA3V|+k!m;v_BaHXd`FvHO#l)%-k$}aIIKdl_wI^PsSL<~V>}0~?h7yG0(-qT(nmGP4NYHAFWbA1SiW&0v9v7Xig|$j{)l zW;vtAdB!(JIx}{9$p`kc@ttVZq>d=mt56*2V<&r{Teg60C+qtK)C;bJ$7tpQ%o#8} zSLvqsZ387b(E=Z}pZhP4~mlWZ(UtZf?Fl$ERlNcVNel%R7~0M^tCXJdfdYN)gkB0QL~tHwAGIsPRq z1+Li_A3;qC0|HS`7USD|7|drI$pFmbv10f^NT_p8>tb#Wcs13m_f!Ku6xXH0?H}a7U6vEh4Rx5xurseeygk=7#LHBS9hybAd8nKml{bz1?nZ}sH z0fz}Z&hw{IGTi|)t<&^d9lua9TzqRh$|lg+YuX~^m72d=C)2CIxt`uN?pVl#n9YO3 zQm^)fK`JS`qbwCA2v?BO5oYNUKVNDVEk?X{*M7j-(ZrSwWgp*s>NHA%xtgkijH;r# zJfwR63?|ksWugTh$XrKb_E1!~0xa!Dh>(E?kT@R~wS>O%D(HVMlOtKf)IKK^`B?B7 zf{@bg8^)QnUub5I1|SB*K;tzh-@YqZ8BL z8KgQ&bajxm3TU2U92y-`R#Y8R)suD!)3X^jj`%{u1ZHS6#;zI@pD)?Gd2m# z;_&R!D_5q8FDAVLy}iC%r7tsoqhpCh5~L)4&7(N1+;_0Oh-;MP>pKIhqsw&P`x+ZR znhvBSg~Tkgp9j8PsxIYWOEf4v4C|w8VIPsFbo~~ghmCu=azC-tm7@| zfL}fmS!WjRweL$0)9v}ScTC1syUSH%EO^k_4^+)5QWf~_0u<0vNJY({-0Cf0Dh~pK zAyaZ2$Xtk%$mf7!?hF}&_mD^?MCSb?CWG1q-pMHP-EF;CH8PpkkB$r9bkbv;D|Vs4 z*2Ta+MZ@GGA@X>s7f2w=5`fWrRH^mI0)sonX%!=Ez2)y4EVe^$;?_`P{5nW)rnjAU za~MC_HWW~|y`qVqj9jqCN^y|`>R}soy($;&8Vr;`H*ntAR&BOuGt(;b2K#BA2F2y~ zqN5exwNr_n*{>!q%s_eBuww8Ayu!!+H1kAmq_`Oll38PFsK^Zs#Z{jM>#UJAKQ_1! zck54d?IbP;LI}bEfQr>piBDSupI2Wk&(#0{M!O!yJGzX!ur_p$CeSNf_t25Z|F`o* zf8UE;7tN^8GqLSpyYg`E`2O-!7k-AgynGO!i4g%pW_1Q;U>O7$1D&5si6B~?=l36* zS*@eY)|GL4?*f`Aw|s8S97tzB1UA?+4c8 zU>&YfrJaeN^3b;%dNcW-pU~opBnS^$o)iG)fD%$!vI=;Q1 zi5sQEM7bCJ$ljQM8HghgCti7@?HR@xM&QdjWNa8Ly39LWMt37YdY^q=nu&qT<8@!> zz43VcjZ=w_8H-l@?}C*lPL{ovDNk0D6#IFQoUOLoCqHf`^SvN?WGw)QYjElf|BPqP z$wz0kRNdi-;-A%Li$!vB^iz=dmD-o%KG?Uk_w^L&8CqWI-#B~5 zi<(Gk24IlQw;|h@n9%BA6k(ICe6@3Db(msC1U0I`mB!Y{X&_;khLWL(E$OhLV95Zg zpReP`hqF|}>ZY)P)YGQb2b!OV@!D+|oS|8k$+Lw4!7#?3Z_NOo9TjYwxp`{4!E7zSj4%oY9aUb=pwluGAX`<*uA;1I356jkE%GV++Dif&;mh z2vJ>ya3CgW{W_ag$ay(P8nXmv{{6fpfT5Ype2GeiK+UhCB1moJ^nHBh!1zDk$B}8E z_Wz@?oWS=zj1pp%mvLlTofqlDhYjo(Z(+mN=j$|jvEQ>AsgDs*!gnZ8X50{L^CdAX zB{Ja7uK%Oh=T(*%G}`JND@BL$xbqGxmzjDRs&Y}twXHiGKGXR}hlUu&GmG(huZ7@*Ju0pJTHX$V13sj#%YJ+y!&pu1JFT_si-no%AD_6 zqPQ@v1Pns_O`l{@v)UU^qv<)`#HyWGSM}R;x9gSwtGQz=p?vb1K`&0jlEbV)N=?Ez zacb&fMuzpaQO%kp?jwZ6zY|sF9?WCv<&t7~DXe%>DhyC(0>;2++Vv)4*aF}N$PJ)* z5ut-3fifUcH&HDZwV6!~4S?yGC2w7rrDueCL?IXqwUkT~BxSJyoSG1@N@g$3kSS7z zh8Wka7|1WAU3jp}x{@c}@a~s9T8?JqVxrlJB1*Ir8oSC7gC5AqjD%qmBiN_|ZH=Qv zcx-HJY@XW*kXt6z-0F-NDlMy{4L>7?)Qe&6V2gZZ$1!>^0}P;EhTmzsYQOi}i}?uuj+KWcw<#c7u1j z8un8a9(XjhM4EmbigiI^dhp!qQGm|b3lDRSi>}rR8jw(8&%EGw zupw*)cnFAO3ZGOE| zG81A=pF}V83GTC znzwv>CDE0I2G$E07%z)fp&PiCk$hgHFtPXSlxaBP|b_d&ESFuoPGCXIUWfTIo*gIJmIzEIkp(q z^*kd%)Tjdng8>o9&~LcqaxmY2FCVVBDCGf&O$dP^MV zX{6Ev(=^ROMitH@+Nl}}X_#LgKF>4TA1zX(qZ^J_UuAC{dK()XZ0wIFHVszlu7>6NpZA>V&U#K)OZMwaw(|^;Wi?I8!Hk(vpy5N8Clq8=ict;O(~_Cw z;(C4N**;J*K1ma=-;eg`5G(%9KBXPgiR{&mC+PgRvkql(<&llE)39RHtr`qQH;xRWP=)d!)tYldG*T}y&t_^|!z;GQf>aYIKtooP z3bdXkECGc~0I)JM2TPN(QlHZJzUr_vc&4+liR5jz#S9rv)Ipk*QK6C8YAw${f;{*@ z3EyCZyYp_@U6dt?TkM!6)RFWo6t}cgM9+AdG7t@(SGn7=&hIq?X-2TO9a;-;0|CQQ zv0|p3qJu+g7K{j{R+^kovE6o^hK(iRm0Y^X3m-ckT%u@QIifA1O(e`W0O~OdBS)i! zT35lG`wd86Cd@32Ns*>g#``u~$;U8+!oVR66`3I-no!yf{iLX945_^#CrUPY$avXR zNf&^<1f&(ni+8a-Y=v4DIs;4?6>3G{OflF1U;~MXU6KJxDcM;}g(TX`xI;k1g<~nk zH4e{w=J<(dcN)9m=!h)L+bckWkkA-f5v1WZ>P;d&hOpS$d7>L*V`D(UjBPOuv7|AB zVg|-E17MnKHbdk!DHF7il*A&2gsWkUCJPd8Cng&XQw1&cIs9hU-`>yhNQ_D_%915yaK1wS7&kpAQd(jA#@7$IZG) zF%70{R@}hQMk=A zCz!t-iIC(V4Yn)q^*%{}cBG!+y%rF?eoJ;$mhl7w*_n*Zjkl>}C}#o|)__JSq{O)LH1jyv>P-O= zm+i6p>fg(RjcXi@RS)S=wHfkx$S8MrJ5SX=(dv2!d4Vej;RdqcIo z+H086w)LSd-A7U5RoAlaOez*cr}gCd-COND#AHwsgeYa~8HLnBP{7b-Z~Olt^Lihj zvBTeLytx9znieC00?l1&#pHzZA9-xvYkfDSx*XP|alx_2nuJqnn$xWcR!xnb>1r_* z5(P7yfwTk+7%{dnriL|0*ImLw$VQN{s~X1#q7qaglexnDK4-}B|3?9MaBTX?9KZGK zwA^j~7K)M-0}brSipN+#H^2XVvD5ne31Gc#meogTn;&*D>rLo_yfjzpa$%|v*wER6 zQY@iGl%ZK#6}HVqIhN+=p_t?%db2~_8W_M41W^pxnRF7G>e`H4`(5VoX9J9eizR0r z11{{#I-;7g`=?)Pr~YoD#k&|@Es&r$VIX^?8@D9yPDmG&G@DePjjAZesZ&=!n%~n! zW3UPmq)r5=r+rQVb*bt!=f9JmpPb#WI%ZQnDjhb&S&BdEI5f(MUGMdp5aQU{efp3%kwj5q3dwo7Ldi=BJ&0SE>Q#aJMarmos2q8oV#&lbhn@-EJkiy;QlSRAH zCKs>5FSI<&yzg)D^jjFxMP25A#>shK_2{}yom|<%I@R%U7b`hF=c2#`P>N}lQUF%@BXJx++_Y#>A0gA}?I`QtpFPRf!7rfRqTs9=Q8 zmW1yFl7NE-oX0K&_aR6G_L%mSXu6%La|B?>^wF^~gD)$^X!=TdN+S>DstkV36gQjH(x!P{#uU#j!G$wl z_F+uvcac-Z(Y<=PRZZI~xo=g+?FD8vTa4@{kP8d|W<2i~I2Vz%>EIX|r%c9PWeD5; z{Y4fa#`OSs5x_0OJNQODyz~WpoG_k-y3{`Bhq%V+Z}!`sX~@4QJe!07=c%bkX*+UA z%lEPA1HZQ7Bn`Fg1R;CK0{!)%m{q8&y6aFzdDk0yJFme80XD_|hn5xa_)7k>Qi>0X zLo6VSjEv1JaoIs|#@Lc(rm;{;Drf~S!bP1J-B25s3ewiC3{RT@Fhr{vM{c*3z>S+@ zLDrj$o@(B81-pNTq@Nyd+BhO042VHG{Kaks2S9a4iOK6QMJCydp?q$jj7uc3Cw_s^YTK zXFS$RI7ocnGo*zFG8N9km@SIj#Kw?Tg2Lb;q*PiUf^~zmg*pnufpQh8)VKF&28SdJ z#)GmkHMHs#tQo^Lb$A)DlpZRQGAwLnCZp^~Z2xme(?Z}Y?6A36KJUc&K4K-v56S<= z{k2h55Q8v)feVa>sGvm<%x=(=5K@RqcXugBdq!aU=CWC;*_&p~8a8O!)0Fi%-!*^X zfD+Ac7V%Cd_L5xdL`?S590_VgovcBFu)+kA$Qq1j_Lqqj+jtYIw?*o+Qh7`#nB(Pt zcxo(ZK8YPjq0{OM^JgchF1n_*j+Z#48e0bln*xVYpp&M}AX7$u337xYl2THMgAzt& z3S<=)mQ5&C+F|ZSQmqDtZf5}tspo!vzj!Yf*8QL7{2D7~A)0Tc*?GGws*px|NZe{U zVW*gep|-|7ghH3Cl0B1~JSxxg+43q|Pw4X1Ue9%INiSrK{0|P?~+US@8L(Z zu`#GtsR=5;R}c`cg~5NKUCrw;w*|NumRlz=EQ^JX$=EjCUM9;fw&~`QN-06qLX`(i zHptb4++>VnNn;ckL=!M%4LN2L-6#!U!3_<6HO^{wi-2CbBK||KeC=f)@l~c9d~6|r z6(9(cn=nL!0G><`9;%HisF0ac+6b7;8Q!fEoN6z1%`Gm`4q^e}yqPSOBIV)}=vykH z-h?G&v0}!4HTKX*N@+AerxlxlHGO3$eQHt)u!K}{xacCxK*!N=A;lTgjPkY}t5ct# z6m*9Z7cSIA%@L3Vj_UajHWt`r|q5|H@9SKX`mV%BLrX}Jua8UBaZJ;iBwW(K_ zNnWJZOCuJHD9i&LQAH~919o3bY)z|{VM5;7T~st3hoDr!umeLrJvYfPtZdZ6wAw?l+VNYiM}R%q2bi;5tJad8DJa>`~DJMTq$23RIx| ztZWs74xKTvwlTD|bczRTWNI;qm?C1x$f9Hzxf**i2E`@Ly6`U&RHlCyMyD{^+78@T zxElGJeZti&S)?&4lOc;s2*$!&Eg-#CHBbWqiya~?-rBs2!BmAASPSj4jWiHjFjcCv zE*JI6^7hl5Aen6>Haai`v#hhtfYk9UY710?H%%y1MuH-OqD*9=p)l39zs$ns4eD3l zSY2N!{`>Ln$3S1fkVW%@Wcj0(m8*@jHN(KI7O=l+A)rl3C6JvGs8EasW@j3r0iI*; zmota@YE|WDUotj$E4THO`zrg5!{IrG%BH3&MOy1ONBvLXuUrBFrOQXbE^|R4_V6HQ&nHC)%pVa1t_Jd zZ?67X)MFV>SkDRX5F0j-Pe@ALoa)uxk2SY?hfp~ik~&2VvJELCsHG@G+p2>NSVp?+ z=_AezS`*)16`~2CX1Xn_eeKr5x)!U|Xj!`L+>PSc)YDaL>}Am1^<`%{&d35o0`ZM* z^#vGKLnKhH1#S_H`pLs#knzc9U0N)%^+H~}e&V>qfX061q?-zpQbT(QYCw%pn6?6j zu^4%h8H#2aLli68;kh=%C`YK+fyLw(41q{>+M%B-2Ebh6aeOU5U&`}&oW@Y~&V|g5 z0s(e}@Oy?_+H*Bn^K_C(WahG5neb-^6-XHbsDosxbX(g#8>z1KVmI15KsPpIb<#ci z?x-astTGV@<>_^_U)bX({A()il9Tia{YIcV1RU4H7cVh+R}g%6`YZUUU@vVPo5u7O z`}-kwsxo73&j0KAXQM|lgd|83Iv!24CT}9C{mVF zY(cyEC?QFbqL2{R3`I+hPJwvy#&WbsCKxhd)$bt>9S` zZ{$cuYZXd{n{7co@_5*Q#+hM+E{(CdLv}YIC|h`=&e0X_7)ymTCbe11FwQMLM)on% znvsAUFq;?%`$+tu5& zvAgOF=MR_EY_lU>>fWX07{ck8UJ65EU;^WBG_6>NXB1E)n|pZk_ul6DPp_?>Ut5q0 z7;PSbQJx1w?;`Qo|1UkVu70x!Jx>C2+&P24fTvFQ-0CJ?%aM%dWOHxO$&SNjTRs6{ zAo{zL78|(SrNB#eg4oj$BwV=(FZ^bW(MM`-ImPzw(15^dFKJ!^+6_cV$8D4@b~&vj zJclj26`>f5vaGgCnXEH|R>1eFhMQTbcar9fwC$PR%Gk)n(0UCE1rU;uEhtE4hz|J3 z3|B%G2nJ!RvPp52g@ZWD!~+^={8u*Womt9sDgQOqVRn_VVJIV1SB%4G%^vyY4UA*; z>quo)`%YfBqQ6C*79VHQPj*hmMA)M%py_zQLY{1UUMGO7r$$5prUhF86R~O`NCw0M z2v7R_n-vWLkN{**cDu9ZH-V)MXCrH!YA-yCTwhxmG4-s)b^fPl9|Ui`wVpO@n~>n(yw+(Otc&km!1`v~hP|=7(8ve8 zO&Lg!Q1UOKO8$O^LP*vQE;6yfSZB4CXxIS3tc)lZnDllF`Z*ScqkSc!3J!x?`}+?+ zbIWY@ui4*H^7L)$m-Nb8Jh7bV@s^M3AkXq2vR!EQD7RBZu`!zk-h_nrZB#p7S}R4C z%}wDyIW0$~V@?6jYyJmd2~aJ@{RoBf@-j=K`a%N?>0V(%41t9!ND(we&#pt6tcw;b zhC`5sgG1f3v5c>_)JD;0?o}T!Ms2{^h=xNbjE9F%AcC8qCT5JTp^*rsm}?rFHQ~GG zX5(|4Uk(NNJqtR#1+%#8;D~}ynzUUfaKCz5S??2a-LCEHVdKAN>uou_-0O&`30DyR zVU{CV0SKVwJBo{Y7^!PSy*q<<-JdLE&j4X$LMinnu5P>_6qdl48p%>|!oZ^|Bz2xJ zUrGSHfVdscA98hXDG#0TZtblfRqkeGOWZX}){`DR=@?h9+Tm8q32oYMei;bb${AW3 z8X6iJ8X6iJ8W;K+9Ji&ulXq?z(~T&YXl@KTwx?65mC#IAkpiOt^RG%7nTw&*%Dqv= zEinP?KR@KZonlBq7^}24n)x93I+zEM)*#T~Xy4l)xV2FbL7SsAATa>U$toyYqb_f@ zrEX4+UkQa11ZMtb6a%@GLW09U(m`GH-e@R*eL4b8zU8;|X5HB&C$T&`mi`BD#vd80 zt0X%@i0D9vNkKb6pf`kjPiYBCi!vrgu^aluLe6V>FuzWQ3|fMH;bov#dqE# zH?~T~J=bH-nf*$Dddqq=kDsWPMmkTqXv)cTSVsIG1}pu-TOj*Vh_k|?(so*r6m#1% ziSV5GxbLwK)zcq?hXM!0dng>u7YXsP^&a0f;v3&Zgt=KpC#8d7R+ZSX9cZ@u=hpuu zdx-1qz3YDz%I0tHp`gX-+#UbD)y%xTT{GT2H&glkym>o@UxiLKbM(+N@F|_=311ew zT(xv)jDZnG0K=JE%oqKBM{c@$_r9}3abne`G{!NFF@qXujX%Cpf1tDrTRKGW9MCu8 zGFb(Dlx>i~ntZiA7^=Ic!N27(=#T_a0Ei>ck0N{{e08*v>9{|+Un|}I^-XsY?IUAq z|4)}m5ua0A>enTUQ>EKaU#N9YPfIxLpYIZkesbOg2azsqsE@y$mF-Dkx{9JBQ649m z2f)pb_cIXNFTW$NKf>|mbU58}NUgRFw+JlTdCqOHp61yF6FZsyaaBjM2`rJ4Fy2;OL9DD{oM8DmFa^^3JO}bwB!< z+x}ZutIN@_st_%*uOMRZ0g`^-RH{hki7bdrd@~AxMHYVk+7)UweAkYF{N9eyuY#m|&LiD1CDSlRzstJQGqvYkc@Di4wLX>6oLVdG&>nW?IN`@w7FBjSK@xc~%qU)3 z2QWII9i9Gf`YZJAQ+^+Q8QZ-j4FA1(h+mH~ujH`UoAQXb$)E_cAqdabNf*$2=6~s; z2RzdF?N>9NfqqjZKn4!L>b;&Z^6eAWz&=aqcP4^{jgbw>3g#|@!o&y>ZEz5> zQIvm@GSq!h!CU6C1ph?lDr35Rq=BfSv+IuvLm5QiBs8J6WU`*lyl+|c>{*RfU83z| zqZ2(qP5B{b0YV62do<@UM+xBi*~;uJ`@T=s?P#a-b1MM>a|AKMF4ge_ybuFpywcIn z-s2bEvC^&YG9}7dZ}0EP)Ngn$dxu83WCWR-3~fz3Z3S*Z1B&+%Ny^(a=<4;*zW?pH z%w?Fs!B8S9=&GGa7$q&7SUL7>J+;amWC4Aj^nMI3yZo*%Z=H+UZhp7n05lh~<<58{ zSmLpEnMga6U;AeJMf+Fh@BVE=t=L%_*jPdxLI?+-LH}!}P@pi@8B9zAqhY4PV4>Xw z@}}M>xAuAoX?51jd%gGX)%GvX6HEAhFH}WV0hK=jcqoX-X-Zl76ts&B+P+s`IhCDD zRJ2W`jR)w{^Gryc&G&yDz0UB*e*jP3(?a(-8{9p?hso>naB*$7%x%XMVVn_Brux|e zjNgosaY;ZnhCZpDqVc^<`X1&Qj;3fDW=^{)762KJlBkKZBXhg)yhd#x6wBh71vrZq zgNc%HQ$@Aw2z*)er+SKb|##_gX*)s7| z75O&N>@8uRv#Gr^*g zhO{fU^yWsQplrnB2{r^P?A-&*!p3-_3oi2GQaDtJQ*~t$rbx71YS$hh;tZNb-c^n*Y%R~4v&-D=I1lR4pkMN zb3IXRgHSnSV&aTEI=(_^R~u+Ao`=(U{#C7xU1u?R&z~HAcRP*4wR*{otjfwn&})V! z38RyVEf-iC{T zHh^>J9h5-QWIDedlOfWP(Qdf9-X1mPkJf?BVK!V&4sSi(I_Hkv z{P=8bCX%W+h;h`u# z!ge!vzMA9r$ukESDE|-aOXg68i%Nt*&F1Y(@=Ikkokt2hb(ztL49}y|Z%@0dJOAEB z(X`dFvtT?B%0*V&p!W*U?7bIr@qXm<>hZq)xjSdVI*jjS0R9TYx4$djXa9d`-ru)! z4I7l4cQGzjHbo<8uwdG4_@{PG)tACSrtyR}B#t~I_dKf@c372$Fsk+xRiiO<^Kmfq z+HlA&m*UJ=zeVV8o|+vD$_#`UHhJlUiMk!3hP%U})9x@*m48oBtVK$Tql66$eLvu$ z6zJ*QjN?^SLCo8=be8f>jZ=}cWN>rDzn!JLVbE@4FY&2`aGVFuTMU%)tt102-G>L$ z*-RiHk~IhyZo`-NF%L~oZSiuah0zDFZvfuP=%Eh(1_Wk&3J-!I&0$zp=bD!t{4y*LfFu48e zGa2!j+jUT}x;Ek=yfO-h>^)#d$Y8zGRLIP~qbTzMC(wrF{79+Qa^)TTo`|naWwItD z00g(G$^7;oJLrE8GpNp7r>mAJ==Z@eX@g7{!KMsN3>YymXCiLYMc6deKsMU!*$11# z?fLG5%kZyzT^FrK(DQl>JjUX3?3<}hpye^i!nUbX!smRExbs$D+lu|#$1haK`5L#Q zl?lU|dbP2RpX1kogCm)Ysd5r=yTeh_Fvz$zfuj|6;?7~5qua`%1GQ0L(Zc+GYNJb>in^wy5DZYudQ{ zeLSbpq0{ix?B_Q5D_z&|L~>mSaRP2kttUm3?LAn@@D`qlZ`kj5GI@Us*lA+Xm&{L$ zG1N>}d#5`9c?j{c$l&M^`s!w?sOEoJCocC3#s>v~_unjeItZ)NQ-Ry=Ara74w&4_O zFjOEqnYct;7%Z@~8z%%LOn?D^AGh`6>+w3B2zr-jOF})^*V>r(9=7Qr`S{iLT!Job zng#|w1Xgb@Z84CaZfhNT!@$7QM&bC9+DHmmX4}X+W=sal8NgT}Dl221)G!}Y2;63t zY7Pz`d$)I#oQZ?}FKY8>`IFqw!cpgj{QCqnK*j{tRl?dtsK@SJYykAJ&~Pd8V-9FHr=qNGAV@1_Ka zhIMf3wKYIA4&mEW5il~lFwBBGTDh)fc7lp)2mhuTUoKP6P!sP7eMy)GW(>iaPz^8a zJ@ku`_FS5*{e4l?q{*fN0g@5|M-dxLAO#ADyqJeQFX%W&H7>4!Na{m8N#u2z%IYWk@c*OangvniwO}ssZ+57O4;?do>}% zA;auXmdS`Yz7|F$c!-qx%>Wa@QB2DJqU?WNhc&Rgr`zr;l%3UnyYhXUjdDI1H+(f} z6-TN=P4gu}i^$xf1TYUKG8LTrw@ZKS>LRTz-DGl)t>IpwyIg6wGrhH#&HC&|JAn&! zdtep@3>j$~$55ftuI`Xh zwYR%^h9^%0yC}#N4${&a>FL>xQ4{`W~+bkcNj4z1}}D#7Ki> zoR{DU0S!?5lAA+7=tAr07YRNgj2~Y~5ncOuz73Q|mg!6WLGCuRklfE}I=;zi!xz#T znH)fz9hL28BXBd0bXNGzd_Ax9+Vyi^Yi+G&W5?ad!#zRN$-rz}g`c0l?NC&z#vKKq zwB&Yk&m1VP6sO-D^8sx%3>v%#qK^jEMnN$>M%@3S(^r3O4@15ngZ%ba_?LS9DmU!tut5x&6hYDl zlZ1uy0giC<3^$5{>b*X3pH91+XS!>jXyW<)F3LyTXxeBB^L43}MRJL2*X(=0KJ5F2 z=fz~%Ga~>`Y0~Quqm=xxDn5@SS%xvxfehOa-vpJWW( z-K@rGC`+}4*JiI9BhmR{qH$b_Co?df<9DbZPOgs4F8=<2|AaPYbZNfKs2X?r$#I&Q z&Bc754)b9d(8a&#zUSCc55C6D>i?@*t8mk#g$=hCZ2kr>BXjtFe9{()>)OdNCY2j~kKaB@uvPT%nb*sJsVEp|Y^?7Yr-jA0?Tcy}_7E%K5E2w5 z2c7Os9v^rmkjcW+rM%YG1W6#hj(RVZQlS zh(0HZid5B&VOnbc&7}v2wM9H+FRmP&3Jc*-Y@X;4fP4j-h_?XIk^i69`O};0e4YR5 zqZ;}joyE`x7CX!8u>wnAP!1XeFkS@wvmr)9mcrucmdFJbOA(0DYO0znhEj1BT}LAP z3~K6}bT({c<>O`HW##8Vot<9OS77FB>2e^0k_#DCY$)6`vV zEbluVS+im&pOG%om@qYh{rPqUUk0FxsB;_F(>uUYtREJ*(crfzV!C z;xsT1@dj35>m((36=ZRW&Y_D4H>-_rkx(5qbivc8`*!Wyw{G2uF~o_;L?#8(;UN@y zD@|G<;U|w6R~xG)%79ZebSUmT{__n*zTd0(`+nx8sGanvF|@aC#fugxSg|7AyLRo! zf#C2y(L0@XE!z8xGKUWanW?dKM4M5?n%2*#_M-zaqM6*TQ(RL@Y;0@~xXq zbZ!%PpbSilB+N*%5GfA>W7|ov!=yj3#JWPj;E+%z&gF`%uXjw?Hk)l`-Gif^bb{1~ zLz`gRO~7%`5@5j@nHihcLY-k^w{_}QnM%Gs9lBN&#)9|lDTH8^Ko};)i1qIZ%G7i? z{R*Y`x>Q9IS_r~@h|@y_vZMpWL5-vE3Z%&d5f*6x7%|K;5>$@Vl$4av^0c(IH8nLg zHC>Lq?1nAt6`Xw#@2CoxGYh1AB7!t^KgGbSyR`P9#eV69n)A7-Qzjv)^uAJmO*Y$Mi*e6ai5|vMh=ylk#gT(bDY{anwb(=qWGG zxBZ$79tr(1wl;Q6{8n1BB#7Ltk5?&JE<$NRHF?_zZuTPw98Nl|hPLa2cRypapNW>ny!X+Du@~%ormuUhKRMOXa)s+f51ZX8|28@Q`iy8BTdV zG`_J#QQ8XVIvV31pIly;W;i%DUf9~@?~9flNmh24TFfXwN}*Jx0ZOW>s;a7}hLu%S zR+^~#r_Bj($QRaO!IABd3dFpIp_KRMC~dUH3}80cHc(kMX5i0)mW!WP<6WfJA7%*? z$w&0v35v!X76;{P_B2?)fr#iE_Yiz0f*2s17rbDV479{l*uft^Xi4JSSKPzqxqIBn zBX-7y+h_PV(aESPXe`kL(oiy7jB>S+`yRq=no8R_g+gi4+a4y0eqTv|lU}befklJ3 zR+*KCCHJ{(skg8(LZuX_W<*3;l);jV)WQQrN@`AYD=E$<U^`42U>_<(W*tKux7yU%G^UW z!uh%>Sz`kE?I;vx5sZbk)3GKWq6B($YA5c6R~xH9og@r;o_Eh?yl{yTA(CDj8ype7)!&A zq$^8wLh^4f&c*H8LrNtXz%rtWX#UA81^HAp7<-+M^1qwfk@5O=En|xpoYC3uj&F|_ z$+<>%$cyFj`2jreFN6kk8|mtf=$OG9cR;%XHHlHQMUw6|s{xOnTqIr&?xItCVw8*Z z?^@-b3VdJPDSS&ys5r;MoqGYf1zpT((5KdE|GMg~`LNKi6c+V@x21o7_G4#^{_DON z?3N+^8qQ`6!Zzb5V)0JYhy|?W<;Bv{wWXz{H%m)POISn(^KdbU!I_#yp~wa}hB}RB zS>%@R%NN-)9a}e|btQk4966J_^n@KyDl(EcKgtTl9)U$8XN}&NEyOpMv)^ zH_=<^@@)zj%+FaoB7u}Aru}C*@q0UHuCqElD=API?w7bbi|wDf<4%~~kdDAYp@*|T zIM|;oA5GUBG&G(Y8qFbMxv7RVVMW(rs+6w1eI-Nv$adaNhuHdIAePW zD!o)B3}geUeE-l6>XQG=9?h-1&ie18@pzSxquhFQ^9NtU-g#FU$H_311N7KiZhPO+ znfJcKy#^--YNkdt@Md~f93W9|Uc9aBjD|8A$H>7yBjRF^0~{GzGWXx}wpYcM>0rf1&&l<8Q9zK_GVuKu+D+eYu*93um(R_Gk)yLF3KZr!_f z?c0EPY*G$|}0Rg5b%pwJq7c{SL)F<4|3 zL9mBk_5B;C1F4AJzK+&{=6xmO_I4^dW!R3C`sP2b;NviclWPV`VM~x6Ag`PAFw63G zzRwG~slneij**sr14kXDV9|VC-{Os+oDwl25F3sEPU&Q|~=q;b&hqKXnQ$pl~F zffT@mfDp|H%q36xESQD_XdASDigQe)UV{(HlN0;?&ldLICqA~*Yqi?qZI>EX?52aW z2TJn$tu(yp;nT_Aln+kg)H}-GH{|X-K98f1sm66nggC;vkqq@$Hl%ZoN_i?HX7KYm zjb8)ad+ulSyL;q+8^yfE+1Ycy^bcK!S4$~(wimBN_`{?Ai`!|W zbgFRtUtRbre+BdsPwnJ?rsl0$wQAL?R;)H-*|TQLV!Rmo$P7wW$`Uk9&6a4D5^}2O zcX~F@M-!QJ2&AR2d)$10dgY6?`P^T{>v&u4CljrDZZ0k^E-l-)ZsNm>i+c6p^>#Uw zj}sFT!cW8%x)Fx#QpP|~_~AN{ynTb&{uef1dn05gPMtcnYSpR3V#SLVEH#&!@We5* z2br%x-%pXUr$mkl`2)~*RNi^ zc{Xg}Z2pda0?BkyMi&PQAxk*7TC&L%n`!MWs5&h45swGW*$ydx4%>P2XHc(R-Mcny z*|%=pyLD~o&E{v;&7nZCR`UmDiJ#)XCAPR8+1mRn$N ztJ6bZk?dPOt{nQW@EQ?JV?Iaf$jG})OiWBY&CSit?sq$#&y*}i;eq%4KQeDvw?{$; zC6M({pluAB(2@&Y9}%j&yEFKxc+VExIi4<})NMAimk9;meQrO6&+dQLmx^&opQ>a@ zy}K1kc$4R4*H*oH_3OWK<;#~YT#)=5=^I6H1k*j4je>8tx;>+Ikk}GKA6hG(p{OyXvF8w?A@87SM z=3ZW2US3^)(QyZ?$3)XIoZ@LKk=B0_D>GqtV!=~LL3hr}sr6{*GM{GOhuQ1E6&vJF z{p-}N(A-3_*KOKtwp5*ESvYWdLB>s`Wp?t%-gWFx9jOP zcy70!x3W{hiiz1))Gieysv@XRh(J|5&U$+}cli56ApsrKgrwAeZ{9glrAt<=UBtU; z?b$aj-Gl4MqyL^vZ%gOaxz-?jB#8Tqy!IoT4_Ecy`!RyG+H#r)@2JuF zD^1QOF|q79kU^xNAAt#Mn`hEsZfNs1YS>%0;l8=_45-`w+>n*u=#Xz3FQ%BvJ1(-W ziC(eGOSQ@_FaR@K#PfHMoIfEq-PaYn6xdZ7skPqV2~rAnKD)NZ1;y6A9V z!Gi_~7%*Uyg9Zt>EOM6#n?G>TkTfWrH^=_e zUpi}#|7WQIyf-vI_;k!57=WUJ-mv7}=G!MK@>k)El_ZhKfH({l^O5iTPs`u%@cBHl z^IkKvxo>65W53H_yyn*zGi#0>GgOXPgviJl6eM8?BbR<% z>iYwP^uNaO1&`X=!+&dsf9xn)y1S0=@7fI98nJtGaQ#yYB@2t9k0Yza6Nfjw^r&0I zuZCFLJ)g#{TVEbJi{+UG3$DoW=qh9sDki){5UoalPnRcrW@eS*5E?1nMC@ZOozfN^ zI*6}X0?C0o!KorPKcBAdc2nzVY6Kur5>kN;U&FpT+-qws()2evTG~fy(=#)Rvq}_x z7KR=w9CGhRA2Gkwu+4w}^{G0E;vv|TyU1#*r_WN*(hY=tM zd1fY%ElQwQmrGW1hCwGsaI!@+0R~7xAc$;DF(bwArtGzF`UG-PndtO`0qW%Y3_ON z_J2FEvwhaT4JN2=J$|+&|}Noi7AbQ1QxLS^Z9l8`#5jSTsoJG zP^jAUa?_lX96*Rc?|gZowP@`DYe*^ctAhenJZdQuZp(+ZHHWIkFy`SWz+>|Io)vtE zTlplQ^6`XPgD@f6AOC=8D*o?m5R(XD>nyL7rN+oEn00At*wqnlH8Gu(W{cS zOlt_D8JuDi>0~uDstr%^>>|OErNFC&FREO_;9{N4G^M4oxPtW^>V}pj-zr+kB|lK} zR~d(~4wv0cWN|t;e`#;QBe6{Pu9{xlxzPv(hF%)3O~)mR9#vG2tJ+9sv^(U9z1-_CIRP7}9#xwF)bY%urN?3PNa>Yo1Ytjs!}ek$Fan zVH|HN2GHxB5UfxaWl`0mhMC|vgQ1em1<`xQ2~)7X!zlLOZxV=^;z4mzHZrlbY^Gwl zU|$8TSPCL)eVm^x&aFktiOUXDR=jCsa}^riNt*>#Q0idqP@!@tsfzB;y<5VrT1=}z zS1zkMEy<-@Nk6eMbm;sN%VapKvkhA}>{8;|u?hv(8D^!5zKN<@d1$7LAW-jeqamLa z!yWPC`KT%R(xlihLQGofg9|h4fNXa{D_${4hQ~%4^_D_XO_WuQj|zPS*_!W-Bx(Hr z=!y?J4JDfEbAJ>t$J9z&C$M5Y6qFv;qZ!#`B-?1ByR6e5R>~}HY-##6QVq1GOO|jk zN$6hKP{KxiN%DF#-Dcf{rvw<84_0|`{I~c~#R^^`SJ|4Zw$=`#g;K>fhgvReb#Q6w zcTs`O5{!3HERoDZlD*5fF9E(a zyGDC74r6L^@ibC9%o6&Q&KGG+xVol{bx+m8Y7-jYwHknMOy~sLI_l#gB6SI-Yaq#L za&|yDG$>HGmWSFxu6>o#X*O%mtz-~H4q;b8mL|J5!4%b;EuFB|L;K#!?@{ezFuS~M zFySTa7Y(m53X@q7-0sR+`me{A-_s~iAT%q{XsPhbSHZHGQOnc?Hr_y@mWDoU8>NNG zV|%A$k8ce7D~C5~6K+!dIhs`Bt7v-}xW8CcP6_T5Fc1OjkG1{0CvZI!f)YGq~}%k|U~BxOTD?6>mve-VrPJkNRA_q-oP z+F)sKIJVX8n3YF3U$cMro*6Um zhCX^Lu8y9nSmDCJn|VUJ))n5ji<|eXom%R46$Y-dG>RvrF!gWUS<{Nu6ZSM0$L#CL zEhCZKq|{@(+(M!}-NWoMPZ106{D49gK7&Bc{)fH#MT9@yt7Q0 zBMpqyL5VnI75=VkFfgl!=!P!e8xP-8fxuAaD;k-D-yP23aJkl8?p1V`IH$n5n5hB$ z^5C(-0!!aH=`;{7tr(+b$|S_9H0VV5M#TIk%+G&WHr~$5=eVPc`l-e4x(u2z=}CNfl6>#h zg-bAQ)ZjX`)LdF}Q*rw6_I&jL#88mG+FbS1ftg=0J~mHz_xxW1fxTN(>hKN!KZWjh zX8KkVlX2DVw2q98e@U~zG{N1P0dovS%^MV}Z8}7!hjLA!vWmFVOYYIT-faE;M!k*J(?M)Z zH8|*oz%RSaBZ-r&*VL+}p`9y_#Z8ElSq$8aP0q3(iL-R-kP(}c!yjUa!slIDp za^W?acHfA4m_vtko^GUR-kNJL?zPe!jF+|N2u5SeGgOh zdM*yXVA~rxp|V1K8ABT?L^$J4FpZK%MmeicP18;GP8CgKQIFL-x*vy9oMR*-kw9#c zHZ(Y-W)3m11nH+B0;lJ#LZE*RS*7x11558cgf9EX)%i(Z8rIkx z1?RhhVpf>?y>1;)C?#grK!$&sJhQVKLs?+KcWun?PVfL=*yG)UQv%+o=&Zw||7e#M z4>9>3SBFD?$qctg)D3%l#XtoO<~M2V&*|Klv`!nNmbqRSY^F$oUC1*)bKgM)1R?<(aU?8~P$s)wYKJFX zdu<-2t($*R#k=b|&yrz~kz^ZL!vfe$yDyU*3fNld#|&L} zv-VqPR|XG@yN2U@yIx=5`@UPY?>%7K>$YCI0g}@j<&f?@pn_z{9LJ!Mt8(QC5SF@d zfK4~LaFH8+-a-xck%#Nf%?L>%;=8qy<(ho)eq9Sf%V4>8KciHD`)R;2v;y7dd+m0$ zFU`-CTxvh-U!S#Y)$#Bd{g;=;n7x#c0E2fDb<%cVP_bl20uX{LH8Xf*G$9;8fR1Xl zF|rr*F-XQIlJe5SeI-IiOT_KrMO$v0b|ZA zEAm)#2wGKiO&DjIYB?EpibxV(RKUteBJDfar3-Pt)D zPs5IWyECr6<+ZQSn{AiLGuq=*_2c*cshORtIckX*Lx9P~BW-T+cho8)wFWi^qlYV- zch%|CK@I*6t`jb@l{zCo%u}Q?#%3it z?HI%(E6zrJh*1h9OX4M$#a}_P7)OTeDqX7oGnnV<9@K;L{2XXz|ITwUgSSI(JKBy< zW($1#b^kCsYiC=rAn`}|-yZo9<3^E?-mLlSKJK3?Y$qr!&-NA;_=^h*3kwSh%G`c# zACo(FiqCXEG=AMYmXFz}K#3!TA_AJb3)_1;Huos+`CdP|aiKAOZ}jNP`}^MmD1pTf z+46RwnlA#h%(Cz3KPx2z7BTjJxx=KA1MB%OOk~a8<^}>*ZKcN-SUk9rL9%M|DQF0N zFTvcdpSh}#Oyh_Y0Tsd_qp}#<{me*#pBac3uxKc2Zt7_1hJlP+Mi*WW7j3$QIaK&2 z_#sIvk!6;A(i^gQ2WO;cTJZIhdwPw4(?ylY9;+t{w$e>D&+=(!4BH)dK7)}L(C z4~Fw?yO+m2r`OgWHglmdn8>|;+>GXt>0RCzq+;#zcmKT0T_A25=xgQpfjSp(um&L! z*kOL+#;=t6Zk9W!Z0C=~ccyjxVyfM#oTK`CN>Th9m(?O)xvqXLTueu?t%_-IQy|&F zs&GgVwP@{V(UOymiKN*gMx@|!W&g7wxTHgBH8Dk zi@lcnzZh;8w<(FmWOLo&1cV^X8C##BY*pslgo=oY)_)6 z>6CoGKjrV=SLJ^G@fRA;W36(mxYlJc-MFhNon9(zdi^NfW!57Lgu=`|FUf<`<|A&o zALTN9odPr69*s@MsYJT?=qtati*e(5*$rPM-#x;q*t4VcD}n?B`*)3n(mCmzU37(O zF9XuMpKeE7-u2vegRF~d?sBni;gdhM>9(_VraO@KhI~lxAEf^8-_^@@f0v23xWY2c z88MnqxJ%dE98Q4{L7!y!4IUyFH<}ezCa7d*s}NhifBa z^FKc5ei$DFE*d|xbW-(tMdvF?fi(-myU|oA+);m-cLOznAZ?`ud$Mz5fGO ze!V(-fvcuQaZd*`tn)hY&sKv0e(J+{AU9cjkGt<ly2r{4kHcd<{OASbO>nx6u2uxA8NI zCYUdo%go=n67QJX#^s)d$#`0dj0%&_|1|MyADqPqtc+Y-WUoR1PJ36pbcB|EkZ=K> zK(Qa7l6%KfxT?$Nv8SE4o=TPHAYphOS0PO=sm)9ldPC#LYU3vpq}ghCyql~=R+7^- z>cy?^+adDPxxD^HA37{A$_$j8IQhl~s@olBt;uEmoqT1*@we8N{D;&nRTyoPrzSuE zfB=601TWvZZhx-te+7m3@t1#-^=W_0b}zp_{Ru1Lz+1O`4kB+~#OKy3g%VK`l%j`Y zj9=6o#STJpJSYO{?u5gdis{tnC|D=psJ zRel35SzqFQR&;kB=XZ#=)_RRUy)uO8S$mS!RCw8P^3G?K_BQZ-PmIG4p&Yd?3Iyl@_IxRn@YD=rUmVCk!`Fl{cZVchj)qvB=Kl&6;g0QCVnbh*>EH%Bij zoOLaCieqyib2f1bXy$$fq1}2a$lVn+drAc-!qBsF6_MDmv(gdsGqi>BOcU_9=De* zzsqVdz1Vm@dXGJ~pCocnXC(_&S0iaUqigs_Jb9SNU8QhFW-_OUpzLt?dbkTDCV}i|J?Ad^X*|Yb-1hk7ut7S>FK+@Yr~8cZ8XEy zUYWC(Y))l4*gR9S*P6cH1RS}%U6?OLa??D%GG+2W-XCJSk1{!D_o|t9&5jW_9>=&i z+HFoo@9#9><#z7)RnXzjCi>shJc{B$2u}LYq&}l#54L`GnUun^h&MVXxHol?!EMFy zJNe~ymz*pfdr3p&>g5P~vc`nzY?6r0({)eV4eE67G+&FkWd2{dR<-_3G|8{&9f$84(-=E-& z@6vU$yXcFN&-fE*j&;L={%Bg{tzV~qkAvt}VV<3}y1w?#SIzic=T+-_-|Y=ud<@kb gr+@MFf1Q+d-RSVAqX6+5?SKClaz!{$kh+pRGz^67aR2}S literal 0 HcmV?d00001 From 8fed7d42e6c19626b9e4f0853f5b84a9c115b3c6 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Wed, 9 Nov 2022 21:50:31 -0500 Subject: [PATCH 48/62] edbg test --- boards.txt | 102 +++++++++++++++--- extras/pack.release.bash | 2 +- ..._Fab_SAM_Core_for_Arduino-1.9.0_index.json | 68 ------------ json/package_Fab_SAM_experimental.json | 8 +- platform.txt | 68 ++++-------- programmers.txt | 4 +- 6 files changed, 110 insertions(+), 142 deletions(-) delete mode 100644 json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json diff --git a/boards.txt b/boards.txt index de1cc1bdc..8a974977a 100644 --- a/boards.txt +++ b/boards.txt @@ -48,7 +48,7 @@ d11c14a.build.variant=Generic_D11C14A d11c14a.build.variant_system_lib= d11c14a.build.vid=0x16D0 d11c14a.upload.protocol=sam-ba -d11c14a.bootloader.tool=openocd-withbootsize +d11c14a.bootloader.tool=edbg d11c14a.menu.float.default=Print & String use auto-promoted doubles only d11c14a.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d11c14a.menu.float.print=Print uses separate singles and doubles @@ -111,7 +111,7 @@ d11c14a.menu.timer.timer_1465Hz=1465Hz (8-bit) d11c14a.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz d11c14a.build.extra_flags=-D__SAMD11C14A__ {build.usb_flags} -DARM_MATH_CM0PLUS d11c14a.build.ldscript=flash_16KB.ld -d11c14a.build.openocdscript=openocd_scripts/SAMD11C14A.cfg +d11c14a.build.chip=samd11 d11c14a.bootloader.file=zero/binaries/sam_ba_SAMD11C14A.bin d11c14a.menu.bootloader.4kb=4KB_BOOTLOADER d11c14a.menu.bootloader.4kb.build.bootloader_size=__4KB_BOOTLOADER__ @@ -122,15 +122,17 @@ d11c14a.menu.bootloader.4kb.upload.wait_for_upload_port=true d11c14a.menu.bootloader.4kb.upload.native_usb=true d11c14a.menu.bootloader.4kb.upload.maximum_size=12288 d11c14a.menu.bootloader.4kb.upload.offset=0x1000 +d11c14a.menu.bootloader.4kb.upload.erase= d11c14a.menu.bootloader.0kb=NO_BOOTLOADER d11c14a.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d11c14a.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d11c14a.menu.bootloader.0kb.upload.tool=openocd-withbootsize +d11c14a.menu.bootloader.0kb.upload.tool=edbg d11c14a.menu.bootloader.0kb.upload.use_1200bps_touch=false d11c14a.menu.bootloader.0kb.upload.wait_for_upload_port=false d11c14a.menu.bootloader.0kb.upload.native_usb=false d11c14a.menu.bootloader.0kb.upload.maximum_size=16384 d11c14a.menu.bootloader.0kb.upload.offset=0x0000 +d11c14a.menu.bootloader.0kb.upload.erase=-e d11c14a.menu.serial.one_uart=ONE_UART_ONE_WIRE_NO_SPI d11c14a.menu.serial.one_uart.build.serialcom_uart=ONE_UART d11c14a.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -191,7 +193,7 @@ d11d14as.build.variant=Generic_D11D14AS d11d14as.build.variant_system_lib= d11d14as.build.vid=0x16D0 d11d14as.upload.protocol=sam-ba -d11d14as.bootloader.tool=openocd-withbootsize +d11d14as.bootloader.tool=edbg d11d14as.menu.float.default=Print & String use auto-promoted doubles only d11d14as.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d11d14as.menu.float.print=Print uses separate singles and doubles @@ -254,6 +256,7 @@ d11d14as.menu.timer.timer_1465Hz=1465Hz (8-bit) d11d14as.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz d11d14as.build.extra_flags=-D__SAMD11D14AS__ {build.usb_flags} -DARM_MATH_CM0PLUS d11d14as.build.ldscript=flash_16KB.ld +d11d14as.build.chip=samd11 d11d14as.build.openocdscript=openocd_scripts/SAMD11D14AS.cfg d11d14as.bootloader.file=zero/binaries/sam_ba_SAMD11D14AS.bin d11d14as.menu.bootloader.4kb=4KB_BOOTLOADER @@ -265,15 +268,17 @@ d11d14as.menu.bootloader.4kb.upload.wait_for_upload_port=true d11d14as.menu.bootloader.4kb.upload.native_usb=true d11d14as.menu.bootloader.4kb.upload.maximum_size=12288 d11d14as.menu.bootloader.4kb.upload.offset=0x1000 +d11d14as.menu.bootloader.4kb.upload.erase= d11d14as.menu.bootloader.0kb=NO_BOOTLOADER d11d14as.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d11d14as.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d11d14as.menu.bootloader.0kb.upload.tool=openocd-withbootsize +d11d14as.menu.bootloader.0kb.upload.tool=edbg d11d14as.menu.bootloader.0kb.upload.use_1200bps_touch=false d11d14as.menu.bootloader.0kb.upload.wait_for_upload_port=false d11d14as.menu.bootloader.0kb.upload.native_usb=false d11d14as.menu.bootloader.0kb.upload.maximum_size=16384 d11d14as.menu.bootloader.0kb.upload.offset=0x0000 +d11d14as.menu.bootloader.0kb.upload.erase=-e d11d14as.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI d11d14as.menu.serial.one_uart.build.serialcom_uart=ONE_UART d11d14as.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -330,7 +335,7 @@ d11d14am.build.variant=Generic_D11D14AM d11d14am.build.variant_system_lib= d11d14am.build.vid=0x16D0 d11d14am.upload.protocol=sam-ba -d11d14am.bootloader.tool=openocd-withbootsize +d11d14am.bootloader.tool=edbg d11d14am.menu.float.default=Print & String use auto-promoted doubles only d11d14am.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d11d14am.menu.float.print=Print uses separate singles and doubles @@ -393,6 +398,7 @@ d11d14am.menu.timer.timer_1465Hz=1465Hz (8-bit) d11d14am.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz d11d14am.build.extra_flags=-D__SAMD11D14AM__ {build.usb_flags} -DARM_MATH_CM0PLUS d11d14am.build.ldscript=flash_16KB.ld +d11d14am.build.chip=samd11 d11d14am.build.openocdscript=openocd_scripts/SAMD11D14AM.cfg d11d14am.bootloader.file=zero/binaries/sam_ba_SAMD11D14AM.bin d11d14am.menu.bootloader.4kb=4KB_BOOTLOADER @@ -404,15 +410,17 @@ d11d14am.menu.bootloader.4kb.upload.wait_for_upload_port=true d11d14am.menu.bootloader.4kb.upload.native_usb=true d11d14am.menu.bootloader.4kb.upload.maximum_size=12288 d11d14am.menu.bootloader.4kb.upload.offset=0x1000 +d11d14am.menu.bootloader.4kb.upload.erase= d11d14am.menu.bootloader.0kb=NO_BOOTLOADER d11d14am.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d11d14am.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d11d14am.menu.bootloader.0kb.upload.tool=openocd-withbootsize +d11d14am.menu.bootloader.0kb.upload.tool=edbg d11d14am.menu.bootloader.0kb.upload.use_1200bps_touch=false d11d14am.menu.bootloader.0kb.upload.wait_for_upload_port=false d11d14am.menu.bootloader.0kb.upload.native_usb=false d11d14am.menu.bootloader.0kb.upload.maximum_size=16384 d11d14am.menu.bootloader.0kb.upload.offset=0x0000 +d11d14am.menu.bootloader.0kb.upload.erase=-e d11d14am.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI d11d14am.menu.serial.one_uart.build.serialcom_uart=ONE_UART d11d14am.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -469,7 +477,7 @@ x21e.build.variant=Generic_x21E x21e.build.variant_system_lib= x21e.build.vid=0x16D0 x21e.upload.protocol=sam-ba -x21e.bootloader.tool=openocd-withbootsize +x21e.bootloader.tool=edbg x21e.menu.float.default=Print & String use auto-promoted doubles only x21e.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY x21e.menu.float.print=Print uses separate singles and doubles @@ -531,72 +539,84 @@ x21e.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz x21e.menu.timer.timer_1465Hz=1465Hz (8-bit) x21e.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz x21e.menu.cpu.samd21e15a=SAMD21E15A +x21e.menu.cpu.samd21e15a.build.chip=samd21 x21e.menu.cpu.samd21e15a.upload.maximum_size=24576 x21e.menu.cpu.samd21e15a.build.extra_flags=-D__SAMD21E15A__ {build.usb_flags} -DARM_MATH_CM0PLUS x21e.menu.cpu.samd21e15a.build.ldscript=flash_32KB.ld x21e.menu.cpu.samd21e15a.build.openocdscript=openocd_scripts/SAMD21E15A.cfg x21e.menu.cpu.samd21e15a.bootloader.file=zero/binaries/sam_ba_SAMD21E15A.bin x21e.menu.cpu.samd21e16a=SAMD21E16A +x21e.menu.cpu.samd21e16a.build.chip=samd21 x21e.menu.cpu.samd21e16a.upload.maximum_size=57344 x21e.menu.cpu.samd21e16a.build.extra_flags=-D__SAMD21E16A__ {build.usb_flags} -DARM_MATH_CM0PLUS x21e.menu.cpu.samd21e16a.build.ldscript=flash_64KB.ld x21e.menu.cpu.samd21e16a.build.openocdscript=openocd_scripts/SAMD21E16A.cfg x21e.menu.cpu.samd21e16a.bootloader.file=zero/binaries/sam_ba_SAMD21E16A.bin x21e.menu.cpu.samd21e17a=SAMD21E17A +x21e.menu.cpu.samd21e17a.build.chip=samd21 x21e.menu.cpu.samd21e17a.upload.maximum_size=122880 x21e.menu.cpu.samd21e17a.build.extra_flags=-D__SAMD21E17A__ {build.usb_flags} -DARM_MATH_CM0PLUS x21e.menu.cpu.samd21e17a.build.ldscript=flash_128KB.ld x21e.menu.cpu.samd21e17a.build.openocdscript=openocd_scripts/SAMD21E17A.cfg x21e.menu.cpu.samd21e17a.bootloader.file=zero/binaries/sam_ba_SAMD21E17A.bin x21e.menu.cpu.samd21e18a=SAMD21E18A +x21e.menu.cpu.samd21e18a.build.chip=samd21 x21e.menu.cpu.samd21e18a.upload.maximum_size=253952 x21e.menu.cpu.samd21e18a.build.extra_flags=-D__SAMD21E18A__ {build.usb_flags} -DARM_MATH_CM0PLUS x21e.menu.cpu.samd21e18a.build.ldscript=flash_256KB.ld x21e.menu.cpu.samd21e18a.build.openocdscript=openocd_scripts/SAMD21E18A.cfg x21e.menu.cpu.samd21e18a.bootloader.file=zero/binaries/sam_ba_SAMD21E18A.bin x21e.menu.cpu.saml21e15b=SAML21E15B +x21e.menu.cpu.saml21e15b.build.chip=saml21 x21e.menu.cpu.saml21e15b.upload.maximum_size=24576 x21e.menu.cpu.saml21e15b.build.extra_flags=-D__SAML21E15B__ {build.usb_flags} -DARM_MATH_CM0PLUS x21e.menu.cpu.saml21e15b.build.ldscript=flash_32KB.ld x21e.menu.cpu.saml21e15b.build.openocdscript=openocd_scripts/SAML21E15B.cfg x21e.menu.cpu.saml21e15b.bootloader.file=zero/binaries/sam_ba_SAML21E15B.bin x21e.menu.cpu.saml21e16b=SAML21E16B +x21e.menu.cpu.saml21e16b.build.chip=saml21 x21e.menu.cpu.saml21e16b.upload.maximum_size=57344 x21e.menu.cpu.saml21e16b.build.extra_flags=-D__SAML21E16B__ {build.usb_flags} -DARM_MATH_CM0PLUS x21e.menu.cpu.saml21e16b.build.ldscript=flash_64KB.ld x21e.menu.cpu.saml21e16b.build.openocdscript=openocd_scripts/SAML21E16B.cfg x21e.menu.cpu.saml21e16b.bootloader.file=zero/binaries/sam_ba_SAML21E16B.bin x21e.menu.cpu.saml21e17b=SAML21E17B +x21e.menu.cpu.saml21e17b.build.chip=saml21 x21e.menu.cpu.saml21e17b.upload.maximum_size=122880 x21e.menu.cpu.saml21e17b.build.extra_flags=-D__SAML21E17B__ {build.usb_flags} -DARM_MATH_CM0PLUS x21e.menu.cpu.saml21e17b.build.ldscript=flash_128KB.ld x21e.menu.cpu.saml21e17b.build.openocdscript=openocd_scripts/SAML21E17B.cfg x21e.menu.cpu.saml21e17b.bootloader.file=zero/binaries/sam_ba_SAML21E17B.bin x21e.menu.cpu.saml21e18b=SAML21E18B +x21e.menu.cpu.saml21e18b.build.chip=saml21 x21e.menu.cpu.saml21e18b.upload.maximum_size=253952 x21e.menu.cpu.saml21e18b.build.extra_flags=-D__SAML21E18B__ {build.usb_flags} -DARM_MATH_CM0PLUS x21e.menu.cpu.saml21e18b.build.ldscript=flash_256KB.ld x21e.menu.cpu.saml21e18b.build.openocdscript=openocd_scripts/SAML21E18B.cfg x21e.menu.cpu.saml21e18b.bootloader.file=zero/binaries/sam_ba_SAML21E18B.bin x21e.menu.cpu.samc21e15a=SAMC21E15A +x21e.menu.cpu.samc21e15a.build.chip=samc21 x21e.menu.cpu.samc21e15a.upload.maximum_size=24576 x21e.menu.cpu.samc21e15a.build.extra_flags=-D__SAMC21E15A__ -DARM_MATH_CM0PLUS x21e.menu.cpu.samc21e15a.build.ldscript=flash_32KB.ld x21e.menu.cpu.samc21e15a.build.openocdscript=openocd_scripts/SAMC21E15A.cfg x21e.menu.cpu.samc21e15a.bootloader.file=zero/binaries/sam_ba_SAMC21E15A.bin x21e.menu.cpu.samc21e16a=SAMC21E16A +x21e.menu.cpu.samc21e16a.build.chip=samc21 x21e.menu.cpu.samc21e16a.upload.maximum_size=57344 x21e.menu.cpu.samc21e16a.build.extra_flags=-D__SAMC21E16A__ -DARM_MATH_CM0PLUS x21e.menu.cpu.samc21e16a.build.ldscript=flash_64KB.ld x21e.menu.cpu.samc21e16a.build.openocdscript=openocd_scripts/SAMC21E16A.cfg x21e.menu.cpu.samc21e16a.bootloader.file=zero/binaries/sam_ba_SAMC21E16A.bin x21e.menu.cpu.samc21e17a=SAMC21E17A +x21e.menu.cpu.samc21e17a.build.chip=samc21 x21e.menu.cpu.samc21e17a.upload.maximum_size=122880 x21e.menu.cpu.samc21e17a.build.extra_flags=-D__SAMC21E17A__ -DARM_MATH_CM0PLUS x21e.menu.cpu.samc21e17a.build.ldscript=flash_128KB.ld x21e.menu.cpu.samc21e17a.build.openocdscript=openocd_scripts/SAMC21E17A.cfg x21e.menu.cpu.samc21e17a.bootloader.file=zero/binaries/sam_ba_SAMC21E17A.bin x21e.menu.cpu.samc21e18a=SAMC21E18A +x21e.menu.cpu.samc21e18a.build.chip=samc21 x21e.menu.cpu.samc21e18a.upload.maximum_size=253952 x21e.menu.cpu.samc21e18a.build.extra_flags=-D__SAMC21E18A__ -DARM_MATH_CM0PLUS x21e.menu.cpu.samc21e18a.build.ldscript=flash_256KB.ld @@ -610,6 +630,7 @@ x21e.menu.bootloader.8kb.upload.use_1200bps_touch=true x21e.menu.bootloader.8kb.upload.wait_for_upload_port=true x21e.menu.bootloader.8kb.upload.native_usb=true x21e.menu.bootloader.8kb.upload.offset=0x2000 +x21e.menu.bootloader.8kb.upload.erase= x21e.menu.bootloader.16kb=16KB_BOOTLOADER x21e.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ x21e.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -618,14 +639,16 @@ x21e.menu.bootloader.16kb.upload.use_1200bps_touch=true x21e.menu.bootloader.16kb.upload.wait_for_upload_port=true x21e.menu.bootloader.16kb.upload.native_usb=true x21e.menu.bootloader.16kb.upload.offset=0x4000 +x21e.menu.bootloader.16kb.upload.erase= x21e.menu.bootloader.0kb=NO_BOOTLOADER x21e.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ x21e.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -x21e.menu.bootloader.0kb.upload.tool=openocd-withbootsize +x21e.menu.bootloader.0kb.upload.tool=edbg x21e.menu.bootloader.0kb.upload.use_1200bps_touch=false x21e.menu.bootloader.0kb.upload.wait_for_upload_port=false x21e.menu.bootloader.0kb.upload.native_usb=false x21e.menu.bootloader.0kb.upload.offset=0x0000 +x21e.menu.bootloader.0kb.upload.erase=-e x21e.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI x21e.menu.serial.one_uart.build.serialcom_uart=ONE_UART x21e.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -714,7 +737,7 @@ x21g.build.variant=Generic_xx1G x21g.build.variant_system_lib= x21g.build.vid=0x16D0 x21g.upload.protocol=sam-ba -x21g.bootloader.tool=openocd-withbootsize +x21g.bootloader.tool=edbg x21g.menu.float.default=Print & String use auto-promoted doubles only x21g.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY x21g.menu.float.print=Print uses separate singles and doubles @@ -776,6 +799,7 @@ x21g.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz x21g.menu.timer.timer_1465Hz=1465Hz (8-bit) x21g.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz x21g.menu.cpu.samd21g17a=SAMD21G17A +x21g.menu.cpu.samd21g17a.build.chip=samd21 x21g.menu.cpu.samd21g17a.upload.maximum_size=122880 x21g.menu.cpu.samd21g17a.build.mcu=cortex-m0plus x21g.menu.cpu.samd21g17a.build.mathlib=arm_cortexM0l_math @@ -786,6 +810,7 @@ x21g.menu.cpu.samd21g17a.build.ldscript=flash_128KB.ld x21g.menu.cpu.samd21g17a.build.openocdscript=openocd_scripts/SAMD21G17A.cfg x21g.menu.cpu.samd21g17a.bootloader.file=zero/binaries/sam_ba_SAMD21G17A.bin x21g.menu.cpu.samd21g18a=SAMD21G18A +x21g.menu.cpu.samd21g18a.build.chip=samd21 x21g.menu.cpu.samd21g18a.upload.maximum_size=253952 x21g.menu.cpu.samd21g18a.build.mcu=cortex-m0plus x21g.menu.cpu.samd21g18a.build.mathlib=arm_cortexM0l_math @@ -796,6 +821,7 @@ x21g.menu.cpu.samd21g18a.build.ldscript=flash_256KB.ld x21g.menu.cpu.samd21g18a.build.openocdscript=openocd_scripts/SAMD21G18A.cfg x21g.menu.cpu.samd21g18a.bootloader.file=zero/binaries/sam_ba_SAMD21G18A.bin x21g.menu.cpu.samd21g15a=SAMD21G15A +x21g.menu.cpu.samd21g15a.build.chip=samd21 x21g.menu.cpu.samd21g15a.upload.maximum_size=24576 x21g.menu.cpu.samd21g15a.build.mcu=cortex-m0plus x21g.menu.cpu.samd21g15a.build.mathlib=arm_cortexM0l_math @@ -806,6 +832,7 @@ x21g.menu.cpu.samd21g15a.build.ldscript=flash_32KB.ld x21g.menu.cpu.samd21g15a.build.openocdscript=openocd_scripts/SAMD21G15A.cfg x21g.menu.cpu.samd21g15a.bootloader.file=zero/binaries/sam_ba_SAMD21G15A.bin x21g.menu.cpu.samd21g16a=SAMD21G16A +x21g.menu.cpu.samd21g16a.build.chip=samd21 x21g.menu.cpu.samd21g16a.upload.maximum_size=57344 x21g.menu.cpu.samd21g16a.build.mcu=cortex-m0plus x21g.menu.cpu.samd21g16a.build.mathlib=arm_cortexM0l_math @@ -816,6 +843,7 @@ x21g.menu.cpu.samd21g16a.build.ldscript=flash_64KB.ld x21g.menu.cpu.samd21g16a.build.openocdscript=openocd_scripts/SAMD21G16A.cfg x21g.menu.cpu.samd21g16a.bootloader.file=zero/binaries/sam_ba_SAMD21G16A.bin x21g.menu.cpu.saml21g17b=SAML21G17B +x21g.menu.cpu.saml21g17b.build.chip=saml21 x21g.menu.cpu.saml21g17b.upload.maximum_size=122880 x21g.menu.cpu.saml21g17b.build.mcu=cortex-m0plus x21g.menu.cpu.saml21g17b.build.mathlib=arm_cortexM0l_math @@ -826,6 +854,7 @@ x21g.menu.cpu.saml21g17b.build.ldscript=flash_128KB.ld x21g.menu.cpu.saml21g17b.build.openocdscript=openocd_scripts/SAML21G17B.cfg x21g.menu.cpu.saml21g17b.bootloader.file=zero/binaries/sam_ba_SAML21G17B.bin x21g.menu.cpu.saml21g18b=SAML21G18B +x21g.menu.cpu.saml21g18b.build.chip=saml21 x21g.menu.cpu.saml21g18b.upload.maximum_size=253952 x21g.menu.cpu.saml21g18b.build.mcu=cortex-m0plus x21g.menu.cpu.saml21g18b.build.mathlib=arm_cortexM0l_math @@ -836,6 +865,7 @@ x21g.menu.cpu.saml21g18b.build.ldscript=flash_256KB.ld x21g.menu.cpu.saml21g18b.build.openocdscript=openocd_scripts/SAML21G18B.cfg x21g.menu.cpu.saml21g18b.bootloader.file=zero/binaries/sam_ba_SAML21G18B.bin x21g.menu.cpu.saml21g15b=SAML21G15B +x21g.menu.cpu.saml21g15b.build.chip=saml21 x21g.menu.cpu.saml21g15b.upload.maximum_size=24576 x21g.menu.cpu.saml21g15b.build.mcu=cortex-m0plus x21g.menu.cpu.saml21g15b.build.mathlib=arm_cortexM0l_math @@ -846,6 +876,7 @@ x21g.menu.cpu.saml21g15b.build.ldscript=flash_32KB.ld x21g.menu.cpu.saml21g15b.build.openocdscript=openocd_scripts/SAML21G15B.cfg x21g.menu.cpu.saml21g15b.bootloader.file=zero/binaries/sam_ba_SAML21G15B.bin x21g.menu.cpu.saml21g16b=SAML21G16B +x21g.menu.cpu.saml21g16b.build.chip=saml21 x21g.menu.cpu.saml21g16b.upload.maximum_size=57344 x21g.menu.cpu.saml21g16b.build.mcu=cortex-m0plus x21g.menu.cpu.saml21g16b.build.mathlib=arm_cortexM0l_math @@ -856,6 +887,7 @@ x21g.menu.cpu.saml21g16b.build.ldscript=flash_64KB.ld x21g.menu.cpu.saml21g16b.build.openocdscript=openocd_scripts/SAML21G16B.cfg x21g.menu.cpu.saml21g16b.bootloader.file=zero/binaries/sam_ba_SAML21G16B.bin x21g.menu.cpu.samc21g17a=SAMC21G17A +x21g.menu.cpu.samc21g17a.build.chip=samc21 x21g.menu.cpu.samc21g17a.upload.maximum_size=122880 x21g.menu.cpu.samc21g17a.build.mcu=cortex-m0plus x21g.menu.cpu.samc21g17a.build.mathlib=arm_cortexM0l_math @@ -866,6 +898,7 @@ x21g.menu.cpu.samc21g17a.build.ldscript=flash_128KB.ld x21g.menu.cpu.samc21g17a.build.openocdscript=openocd_scripts/SAMC21G17A.cfg x21g.menu.cpu.samc21g17a.bootloader.file=zero/binaries/sam_ba_SAMC21G17A.bin x21g.menu.cpu.samc21g18a=SAMC21G18A +x21g.menu.cpu.samc21g18a.build.chip=samc21 x21g.menu.cpu.samc21g18a.upload.maximum_size=253952 x21g.menu.cpu.samc21g18a.build.mcu=cortex-m0plus x21g.menu.cpu.samc21g18a.build.mathlib=arm_cortexM0l_math @@ -876,6 +909,7 @@ x21g.menu.cpu.samc21g18a.build.ldscript=flash_256KB.ld x21g.menu.cpu.samc21g18a.build.openocdscript=openocd_scripts/SAMC21G18A.cfg x21g.menu.cpu.samc21g18a.bootloader.file=zero/binaries/sam_ba_SAMC21G18A.bin x21g.menu.cpu.samc21g15a=SAMC21G15A +x21g.menu.cpu.samc21g15a.build.chip=samc21 x21g.menu.cpu.samc21g15a.upload.maximum_size=24576 x21g.menu.cpu.samc21g15a.build.mcu=cortex-m0plus x21g.menu.cpu.samc21g15a.build.mathlib=arm_cortexM0l_math @@ -886,6 +920,7 @@ x21g.menu.cpu.samc21g15a.build.ldscript=flash_32KB.ld x21g.menu.cpu.samc21g15a.build.openocdscript=openocd_scripts/SAMC21G15A.cfg x21g.menu.cpu.samc21g15a.bootloader.file=zero/binaries/sam_ba_SAMC21G15A.bin x21g.menu.cpu.samc21g16a=SAMC21G16A +x21g.menu.cpu.samc21g16a.build.chip=samc21 x21g.menu.cpu.samc21g16a.upload.maximum_size=57344 x21g.menu.cpu.samc21g16a.build.mcu=cortex-m0plus x21g.menu.cpu.samc21g16a.build.mathlib=arm_cortexM0l_math @@ -903,6 +938,7 @@ x21g.menu.bootloader.8kb.upload.use_1200bps_touch=true x21g.menu.bootloader.8kb.upload.wait_for_upload_port=true x21g.menu.bootloader.8kb.upload.native_usb=true x21g.menu.bootloader.8kb.upload.offset=0x2000 +x21g.menu.bootloader.8kb.upload.erase= x21g.menu.bootloader.16kb=16KB_BOOTLOADER x21g.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ x21g.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -911,14 +947,16 @@ x21g.menu.bootloader.16kb.upload.use_1200bps_touch=true x21g.menu.bootloader.16kb.upload.wait_for_upload_port=true x21g.menu.bootloader.16kb.upload.native_usb=true x21g.menu.bootloader.16kb.upload.offset=0x4000 +x21g.menu.bootloader.16kb.upload.erase= x21g.menu.bootloader.0kb=NO_BOOTLOADER x21g.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ x21g.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -x21g.menu.bootloader.0kb.upload.tool=openocd-withbootsize +x21g.menu.bootloader.0kb.upload.tool=edbg x21g.menu.bootloader.0kb.upload.use_1200bps_touch=false x21g.menu.bootloader.0kb.upload.wait_for_upload_port=false x21g.menu.bootloader.0kb.upload.native_usb=false x21g.menu.bootloader.0kb.upload.offset=0x0000 +x21g.menu.bootloader.0kb.upload.erase=-e x21g.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI x21g.menu.serial.one_uart.build.serialcom_uart=ONE_UART x21g.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -999,7 +1037,7 @@ x21j.build.variant=Generic_xx1J x21j.build.variant_system_lib= x21j.build.vid=0x16D0 x21j.upload.protocol=sam-ba -x21j.bootloader.tool=openocd-withbootsize +x21j.bootloader.tool=edbg x21j.menu.float.default=Print & String use auto-promoted doubles only x21j.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY x21j.menu.float.print=Print uses separate singles and doubles @@ -1061,6 +1099,7 @@ x21j.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz x21j.menu.timer.timer_1465Hz=1465Hz (8-bit) x21j.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz x21j.menu.cpu.samd21j17a=SAMD21J17A +x21j.menu.cpu.samd21j17a.build.chip=samd21 x21j.menu.cpu.samd21j17a.upload.maximum_size=122880 x21j.menu.cpu.samd21j17a.build.mcu=cortex-m0plus x21j.menu.cpu.samd21j17a.build.mathlib=arm_cortexM0l_math @@ -1071,6 +1110,7 @@ x21j.menu.cpu.samd21j17a.build.ldscript=flash_128KB.ld x21j.menu.cpu.samd21j17a.build.openocdscript=openocd_scripts/SAMD21J17A.cfg x21j.menu.cpu.samd21j17a.bootloader.file=zero/binaries/sam_ba_SAMD21J17A.bin x21j.menu.cpu.samd21j18a=SAMD21J18A +x21j.menu.cpu.samd21j18a.build.chip=samd21 x21j.menu.cpu.samd21j18a.upload.maximum_size=253952 x21j.menu.cpu.samd21j18a.build.mcu=cortex-m0plus x21j.menu.cpu.samd21j18a.build.mathlib=arm_cortexM0l_math @@ -1081,6 +1121,7 @@ x21j.menu.cpu.samd21j18a.build.ldscript=flash_256KB.ld x21j.menu.cpu.samd21j18a.build.openocdscript=openocd_scripts/SAMD21J18A.cfg x21j.menu.cpu.samd21j18a.bootloader.file=zero/binaries/sam_ba_SAMD21J18A.bin x21j.menu.cpu.samd21j15a=SAMD21J15A +x21j.menu.cpu.samd21j15a.build.chip=samd21 x21j.menu.cpu.samd21j15a.upload.maximum_size=24576 x21j.menu.cpu.samd21j15a.build.mcu=cortex-m0plus x21j.menu.cpu.samd21j15a.build.mathlib=arm_cortexM0l_math @@ -1091,6 +1132,7 @@ x21j.menu.cpu.samd21j15a.build.ldscript=flash_32KB.ld x21j.menu.cpu.samd21j15a.build.openocdscript=openocd_scripts/SAMD21J15A.cfg x21j.menu.cpu.samd21j15a.bootloader.file=zero/binaries/sam_ba_SAMD21J15A.bin x21j.menu.cpu.samd21j16a=SAMD21J16A +x21j.menu.cpu.samd21j16a.build.chip=samd21 x21j.menu.cpu.samd21j16a.upload.maximum_size=57344 x21j.menu.cpu.samd21j16a.build.mcu=cortex-m0plus x21j.menu.cpu.samd21j16a.build.mathlib=arm_cortexM0l_math @@ -1101,6 +1143,7 @@ x21j.menu.cpu.samd21j16a.build.ldscript=flash_64KB.ld x21j.menu.cpu.samd21j16a.build.openocdscript=openocd_scripts/SAMD21J16A.cfg x21j.menu.cpu.samd21j16a.bootloader.file=zero/binaries/sam_ba_SAMD21J16A.bin x21j.menu.cpu.saml21j17b=SAML21J17B +x21j.menu.cpu.saml21j17b.build.chip=saml21 x21j.menu.cpu.saml21j17b.upload.maximum_size=122880 x21j.menu.cpu.saml21j17b.build.mcu=cortex-m0plus x21j.menu.cpu.saml21j17b.build.mathlib=arm_cortexM0l_math @@ -1111,6 +1154,7 @@ x21j.menu.cpu.saml21j17b.build.ldscript=flash_128KB.ld x21j.menu.cpu.saml21j17b.build.openocdscript=openocd_scripts/SAML21J17B.cfg x21j.menu.cpu.saml21j17b.bootloader.file=zero/binaries/sam_ba_SAML21J17B.bin x21j.menu.cpu.saml21j18b=SAML21J18B +x21j.menu.cpu.saml21j18b.build.chip=saml21 x21j.menu.cpu.saml21j18b.upload.maximum_size=253952 x21j.menu.cpu.saml21j18b.build.mcu=cortex-m0plus x21j.menu.cpu.saml21j18b.build.mathlib=arm_cortexM0l_math @@ -1121,6 +1165,7 @@ x21j.menu.cpu.saml21j18b.build.ldscript=flash_256KB.ld x21j.menu.cpu.saml21j18b.build.openocdscript=openocd_scripts/SAML21J18B.cfg x21j.menu.cpu.saml21j18b.bootloader.file=zero/binaries/sam_ba_SAML21J18B.bin x21j.menu.cpu.saml21j16b=SAML21J16B +x21j.menu.cpu.saml21j16b.build.chip=saml21 x21j.menu.cpu.saml21j16b.upload.maximum_size=57344 x21j.menu.cpu.saml21j16b.build.mcu=cortex-m0plus x21j.menu.cpu.saml21j16b.build.mathlib=arm_cortexM0l_math @@ -1131,6 +1176,7 @@ x21j.menu.cpu.saml21j16b.build.ldscript=flash_64KB.ld x21j.menu.cpu.saml21j16b.build.openocdscript=openocd_scripts/SAML21J16B.cfg x21j.menu.cpu.saml21j16b.bootloader.file=zero/binaries/sam_ba_SAML21J16B.bin x21j.menu.cpu.samc21j17a=SAMC21J17A +x21j.menu.cpu.samc21j17a.build.chip=samc21 x21j.menu.cpu.samc21j17a.upload.maximum_size=122880 x21j.menu.cpu.samc21j17a.build.mcu=cortex-m0plus x21j.menu.cpu.samc21j17a.build.mathlib=arm_cortexM0l_math @@ -1141,6 +1187,7 @@ x21j.menu.cpu.samc21j17a.build.ldscript=flash_128KB.ld x21j.menu.cpu.samc21j17a.build.openocdscript=openocd_scripts/SAMC21J17A.cfg x21j.menu.cpu.samc21j17a.bootloader.file=zero/binaries/sam_ba_SAMC21J17A.bin x21j.menu.cpu.samc21j18a=SAMC21J18A +x21j.menu.cpu.samc21j18a.build.chip=samc21 x21j.menu.cpu.samc21j18a.upload.maximum_size=253952 x21j.menu.cpu.samc21j18a.build.mcu=cortex-m0plus x21j.menu.cpu.samc21j18a.build.mathlib=arm_cortexM0l_math @@ -1151,6 +1198,7 @@ x21j.menu.cpu.samc21j18a.build.ldscript=flash_256KB.ld x21j.menu.cpu.samc21j18a.build.openocdscript=openocd_scripts/SAMC21J18A.cfg x21j.menu.cpu.samc21j18a.bootloader.file=zero/binaries/sam_ba_SAMC21J18A.bin x21j.menu.cpu.samc21j15a=SAMC21J15A +x21j.menu.cpu.samc21j15a.build.chip=samc21 x21j.menu.cpu.samc21j15a.upload.maximum_size=24576 x21j.menu.cpu.samc21j15a.build.mcu=cortex-m0plus x21j.menu.cpu.samc21j15a.build.mathlib=arm_cortexM0l_math @@ -1161,6 +1209,7 @@ x21j.menu.cpu.samc21j15a.build.ldscript=flash_32KB.ld x21j.menu.cpu.samc21j15a.build.openocdscript=openocd_scripts/SAMC21J15A.cfg x21j.menu.cpu.samc21j15a.bootloader.file=zero/binaries/sam_ba_SAMC21J15A.bin x21j.menu.cpu.samc21j16a=SAMC21J16A +x21j.menu.cpu.samc21j16a.build.chip=samc21 x21j.menu.cpu.samc21j16a.upload.maximum_size=57344 x21j.menu.cpu.samc21j16a.build.mcu=cortex-m0plus x21j.menu.cpu.samc21j16a.build.mathlib=arm_cortexM0l_math @@ -1178,6 +1227,7 @@ x21j.menu.bootloader.8kb.upload.use_1200bps_touch=true x21j.menu.bootloader.8kb.upload.wait_for_upload_port=true x21j.menu.bootloader.8kb.upload.native_usb=true x21j.menu.bootloader.8kb.upload.offset=0x2000 +x21j.menu.bootloader.8kb.upload.erase= x21j.menu.bootloader.16kb=16KB_BOOTLOADER x21j.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ x21j.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -1186,14 +1236,16 @@ x21j.menu.bootloader.16kb.upload.use_1200bps_touch=true x21j.menu.bootloader.16kb.upload.wait_for_upload_port=true x21j.menu.bootloader.16kb.upload.native_usb=true x21j.menu.bootloader.16kb.upload.offset=0x4000 +x21j.menu.bootloader.16kb.upload.erase= x21j.menu.bootloader.0kb=NO_BOOTLOADER x21j.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ x21j.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -x21j.menu.bootloader.0kb.upload.tool=openocd-withbootsize +x21j.menu.bootloader.0kb.upload.tool=edbg x21j.menu.bootloader.0kb.upload.use_1200bps_touch=false x21j.menu.bootloader.0kb.upload.wait_for_upload_port=false x21j.menu.bootloader.0kb.upload.native_usb=false x21j.menu.bootloader.0kb.upload.offset=0x0000 +x21j.menu.bootloader.0kb.upload.erase=-e x21j.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI x21j.menu.serial.one_uart.build.serialcom_uart=ONE_UART x21j.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -1274,7 +1326,7 @@ d51g.build.variant=Generic_D51G d51g.build.variant_system_lib= d51g.build.vid=0x16D0 d51g.upload.protocol=sam-ba -d51g.bootloader.tool=openocd-withbootsize +d51g.bootloader.tool=edbg d51g.menu.float.default=Print & String use auto-promoted doubles only d51g.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d51g.menu.float.print=Print uses separate singles and doubles @@ -1336,6 +1388,7 @@ d51g.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz d51g.menu.timer.timer_1465Hz=1465Hz (16-bit) d51g.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz d51g.menu.cpu.samd51g18a_120=SAMD51G18A_120MHz +d51g.menu.cpu.samd51g18a_120.build.chip=samd51 d51g.menu.cpu.samd51g18a_120.upload.maximum_size=253952 d51g.menu.cpu.samd51g18a_120.build.mcu=cortex-m4 d51g.menu.cpu.samd51g18a_120.build.mathlib=arm_cortexM4lf_math @@ -1346,6 +1399,7 @@ d51g.menu.cpu.samd51g18a_120.build.ldscript=flash_m4f_256KB.ld d51g.menu.cpu.samd51g18a_120.build.openocdscript=openocd_scripts/SAMD51G18A.cfg d51g.menu.cpu.samd51g18a_120.bootloader.file=zero/binaries/sam_ba_SAMD51G18A.bin d51g.menu.cpu.samd51g18a_48=SAMD51G18A_48MHz +d51g.menu.cpu.samd51g18a_48.build.chip=samd51 d51g.menu.cpu.samd51g18a_48.upload.maximum_size=253952 d51g.menu.cpu.samd51g18a_48.build.mcu=cortex-m4 d51g.menu.cpu.samd51g18a_48.build.mathlib=arm_cortexM4lf_math @@ -1356,6 +1410,7 @@ d51g.menu.cpu.samd51g18a_48.build.ldscript=flash_m4f_256KB.ld d51g.menu.cpu.samd51g18a_48.build.openocdscript=openocd_scripts/SAMD51G18A.cfg d51g.menu.cpu.samd51g18a_48.bootloader.file=zero/binaries/sam_ba_SAMD51G18A.bin d51g.menu.cpu.samd51g19a_120=SAMD51G19A_120MHz +d51g.menu.cpu.samd51g19a_120.build.chip=samd51 d51g.menu.cpu.samd51g19a_120.upload.maximum_size=516096 d51g.menu.cpu.samd51g19a_120.build.mcu=cortex-m4 d51g.menu.cpu.samd51g19a_120.build.mathlib=arm_cortexM4lf_math @@ -1366,6 +1421,7 @@ d51g.menu.cpu.samd51g19a_120.build.ldscript=flash_m4f_512KB.ld d51g.menu.cpu.samd51g19a_120.build.openocdscript=openocd_scripts/SAMD51G19A.cfg d51g.menu.cpu.samd51g19a_120.bootloader.file=zero/binaries/sam_ba_SAMD51G19A.bin d51g.menu.cpu.samd51g19a_48=SAMD51G19A_48MHz +d51g.menu.cpu.samd51g19a_48.build.chip=samd51 d51g.menu.cpu.samd51g19a_48.upload.maximum_size=516096 d51g.menu.cpu.samd51g19a_48.build.mcu=cortex-m4 d51g.menu.cpu.samd51g19a_48.build.mathlib=arm_cortexM4lf_math @@ -1383,6 +1439,7 @@ d51g.menu.bootloader.8kb.upload.use_1200bps_touch=true d51g.menu.bootloader.8kb.upload.wait_for_upload_port=true d51g.menu.bootloader.8kb.upload.native_usb=true d51g.menu.bootloader.8kb.upload.offset=0x2000 +d51g.menu.bootloader.8kb.upload.erase= d51g.menu.bootloader.16kb=16KB_BOOTLOADER d51g.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ d51g.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -1391,14 +1448,16 @@ d51g.menu.bootloader.16kb.upload.use_1200bps_touch=true d51g.menu.bootloader.16kb.upload.wait_for_upload_port=true d51g.menu.bootloader.16kb.upload.native_usb=true d51g.menu.bootloader.16kb.upload.offset=0x4000 +d51g.menu.bootloader.16kb.upload.erase= d51g.menu.bootloader.0kb=NO_BOOTLOADER d51g.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d51g.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d51g.menu.bootloader.0kb.upload.tool=openocd-withbootsize +d51g.menu.bootloader.0kb.upload.tool=edbg d51g.menu.bootloader.0kb.upload.use_1200bps_touch=false d51g.menu.bootloader.0kb.upload.wait_for_upload_port=false d51g.menu.bootloader.0kb.upload.native_usb=false d51g.menu.bootloader.0kb.upload.offset=0x0000 +d51g.menu.bootloader.0kb.upload.erase=-e d51g.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI d51g.menu.serial.one_uart.build.serialcom_uart=ONE_UART d51g.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE @@ -1479,7 +1538,7 @@ d51j.build.variant=Generic_xx1J d51j.build.variant_system_lib= d51j.build.vid=0x16D0 d51j.upload.protocol=sam-ba -d51j.bootloader.tool=openocd-withbootsize +d51j.bootloader.tool=edbg d51j.menu.float.default=Print & String use auto-promoted doubles only d51j.menu.float.default.build.floatconfig=FLOAT_BOTH_DOUBLES_ONLY d51j.menu.float.print=Print uses separate singles and doubles @@ -1541,6 +1600,7 @@ d51j.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz d51j.menu.timer.timer_1465Hz=1465Hz (16-bit) d51j.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz d51j.menu.cpu.samd51j18a_120=SAMD51J18A_120MHz +d51j.menu.cpu.samd51j18a_120.build.chip=samd51 d51j.menu.cpu.samd51j18a_120.upload.maximum_size=253952 d51j.menu.cpu.samd51j18a_120.build.mcu=cortex-m4 d51j.menu.cpu.samd51j18a_120.build.mathlib=arm_cortexM4lf_math @@ -1551,6 +1611,7 @@ d51j.menu.cpu.samd51j18a_120.build.ldscript=flash_m4f_256KB.ld d51j.menu.cpu.samd51j18a_120.build.openocdscript=openocd_scripts/SAMD51J18A.cfg d51j.menu.cpu.samd51j18a_120.bootloader.file=zero/binaries/sam_ba_SAMD51J18A.bin d51j.menu.cpu.samd51j18a_48=SAMD51J18A_48MHz +d51j.menu.cpu.samd51j18a_48.build.chip=samd51 d51j.menu.cpu.samd51j18a_48.upload.maximum_size=253952 d51j.menu.cpu.samd51j18a_48.build.mcu=cortex-m4 d51j.menu.cpu.samd51j18a_48.build.mathlib=arm_cortexM4lf_math @@ -1561,6 +1622,7 @@ d51j.menu.cpu.samd51j18a_48.build.ldscript=flash_m4f_256KB.ld d51j.menu.cpu.samd51j18a_48.build.openocdscript=openocd_scripts/SAMD51J18A.cfg d51j.menu.cpu.samd51j18a_48.bootloader.file=zero/binaries/sam_ba_SAMD51J18A.bin d51j.menu.cpu.samd51j19a_120=SAMD51J19A_120MHz +d51j.menu.cpu.samd51j19a_120.build.chip=samd51 d51j.menu.cpu.samd51j19a_120.upload.maximum_size=516096 d51j.menu.cpu.samd51j19a_120.build.mcu=cortex-m4 d51j.menu.cpu.samd51j19a_120.build.mathlib=arm_cortexM4lf_math @@ -1571,6 +1633,7 @@ d51j.menu.cpu.samd51j19a_120.build.ldscript=flash_m4f_512KB.ld d51j.menu.cpu.samd51j19a_120.build.openocdscript=openocd_scripts/SAMD51J19A.cfg d51j.menu.cpu.samd51j19a_120.bootloader.file=zero/binaries/sam_ba_SAMD51J19A.bin d51j.menu.cpu.samd51j19a_48=SAMD51J19A_48MHz +d51j.menu.cpu.samd51j19a_48.build.chip=samd51 d51j.menu.cpu.samd51j19a_48.upload.maximum_size=516096 d51j.menu.cpu.samd51j19a_48.build.mcu=cortex-m4 d51j.menu.cpu.samd51j19a_48.build.mathlib=arm_cortexM4lf_math @@ -1581,6 +1644,7 @@ d51j.menu.cpu.samd51j19a_48.build.ldscript=flash_m4f_512KB.ld d51j.menu.cpu.samd51j19a_48.build.openocdscript=openocd_scripts/SAMD51J19A.cfg d51j.menu.cpu.samd51j19a_48.bootloader.file=zero/binaries/sam_ba_SAMD51J19A.bin d51j.menu.cpu.samd51j20a_120=SAMD51J20A_120MHz +d51j.menu.cpu.samd51j20a_120.build.chip=samd51 d51j.menu.cpu.samd51j20a_120.upload.maximum_size=1040384 d51j.menu.cpu.samd51j20a_120.build.mcu=cortex-m4 d51j.menu.cpu.samd51j20a_120.build.mathlib=arm_cortexM4lf_math @@ -1591,6 +1655,7 @@ d51j.menu.cpu.samd51j20a_120.build.ldscript=flash_m4f_1MB.ld d51j.menu.cpu.samd51j20a_120.build.openocdscript=openocd_scripts/SAMD51J20A.cfg d51j.menu.cpu.samd51j20a_120.bootloader.file=zero/binaries/sam_ba_SAMD51J20A.bin d51j.menu.cpu.samd51j20a_48=SAMD51J20A_48MHz +d51j.menu.cpu.samd51j20a_48.build.chip=samd51 d51j.menu.cpu.samd51j20a_48.upload.maximum_size=1040384 d51j.menu.cpu.samd51j20a_48.build.mcu=cortex-m4 d51j.menu.cpu.samd51j20a_48.build.mathlib=arm_cortexM4lf_math @@ -1608,6 +1673,7 @@ d51j.menu.bootloader.8kb.upload.use_1200bps_touch=true d51j.menu.bootloader.8kb.upload.wait_for_upload_port=true d51j.menu.bootloader.8kb.upload.native_usb=true d51j.menu.bootloader.8kb.upload.offset=0x2000 +d51j.menu.bootloader.8kb.upload.erase= d51j.menu.bootloader.16kb=16KB_BOOTLOADER d51j.menu.bootloader.16kb.build.bootloader_size=__16KB_BOOTLOADER__ d51j.menu.bootloader.16kb.build.ldscript_path=linker_scripts/gcc/16KB_Bootloader @@ -1616,14 +1682,16 @@ d51j.menu.bootloader.16kb.upload.use_1200bps_touch=true d51j.menu.bootloader.16kb.upload.wait_for_upload_port=true d51j.menu.bootloader.16kb.upload.native_usb=true d51j.menu.bootloader.16kb.upload.offset=0x4000 +d51j.menu.bootloader.16kb.upload.erase= d51j.menu.bootloader.0kb=NO_BOOTLOADER d51j.menu.bootloader.0kb.build.bootloader_size=__NO_BOOTLOADER__ d51j.menu.bootloader.0kb.build.ldscript_path=linker_scripts/gcc/No_Bootloader -d51j.menu.bootloader.0kb.upload.tool=openocd-withbootsize +d51j.menu.bootloader.0kb.upload.tool=edbg d51j.menu.bootloader.0kb.upload.use_1200bps_touch=false d51j.menu.bootloader.0kb.upload.wait_for_upload_port=false d51j.menu.bootloader.0kb.upload.native_usb=false d51j.menu.bootloader.0kb.upload.offset=0x0000 +d51j.menu.bootloader.0kb.upload.erase=-e d51j.menu.serial.one_uart=ONE_UART_ONE_WIRE_ONE_SPI d51j.menu.serial.one_uart.build.serialcom_uart=ONE_UART d51j.menu.serial.one_uart.build.serialcom_wire=ONE_WIRE diff --git a/extras/pack.release.bash b/extras/pack.release.bash index b948f1d22..fd77a4ab2 100755 --- a/extras/pack.release.bash +++ b/extras/pack.release.bash @@ -27,7 +27,7 @@ FILENAME=Fab_SAM_Core_for_Arduino-$VERSION.tar.bz2 rm -f $FILENAME cd .. -tar --transform "s|$FOLDERNAME|$FOLDERNAME-$VERSION|g" --exclude=extras* --exclude=.git* --exclude=*.tar.bz2 --exclude=.idea --exclude=json* -cjf $FILENAME $FOLDERNAME +tar --transform "s|$FOLDERNAME|$FOLDERNAME-$VERSION|g" --exclude=extras* --exclude=tools* --exclude=.git* --exclude=*.tar.bz2 --exclude=.idea --exclude=json* -cjf $FILENAME $FOLDERNAME cd - mv ../$FILENAME . diff --git a/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json b/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json deleted file mode 100644 index 29884bae2..000000000 --- a/json/package_Fab_SAM_Core_for_Arduino-1.9.0_index.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "Fab SAM core for Arduino", - "architecture": "samd", - "version": "1.9.0", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "checksum": "SHA-256:f038520e059002b40622bac8ead9d91e401cf775e2b1ad763412a230a41bebe3", - "size": "356933", - "boards": [ - { - "name": "Generic_D11C14A" - }, - { - "name": "Generic_D11D14AS" - }, - { - "name": "Generic_D11D14AM" - }, - { - "name": "Generic_x21E" - }, - { - "name": "Generic_x21G" - }, - { - "name": "Generic_x21J" - }, - { - "name": "Generic_D51G" - }, - { - "name": "Generic_D51J" - } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "7-2017q4" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "bossac", - "version": "1.9.0" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.1" - } - ] -} diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 8c9cb0c87..205f5395a 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -407,10 +407,10 @@ "architecture": "samd", "version": "1.10.0", "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.9.0/Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.9.0.tar.bz2", - "checksum": "SHA-256:f038520e059002b40622bac8ead9d91e401cf775e2b1ad763412a230a41bebe3", - "size": "356933", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.10.0/Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", + "checksum": "SHA-256:821c6e28d6732513bbda20b1248fbb0344d22a3be57bf72cce9d2e9ff6738e60", + "size": "356698", "boards": [ { "name": "Generic_D11C14A" diff --git a/platform.txt b/platform.txt index 1708bfad3..ddd54d15b 100644 --- a/platform.txt +++ b/platform.txt @@ -164,59 +164,27 @@ tools.bossac.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA tools.bossac.upload.network_pattern="{network_cmd}" -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -b # -# OpenOCD sketch upload +# edbg sketch upload # +tools.edbg.path={runtime.tools.edbg-0.50.0.path} +tools.edbg.cmd=edbg +tools.edbg.cmd.windows=edbg.exe -tools.openocd.path={runtime.tools.openocd-0.10.0-arduino7.path} -tools.openocd.cmd=bin/openocd -tools.openocd.cmd.windows=bin/openocd.exe +tools.edbg.upload.params.verbose=-b +tools.edbg.upload.params.quiet= +tools.edbg.upload.pattern="{path}/{cmd}" {upload.verbose} -t {build.chip} -pv {upload.erase} -f "{build.path}/{build.project_name}.bin" -x 10 -tools.openocd.upload.params.verbose=-d2 -tools.openocd.upload.params.quiet=-d0 -# tools.openocd.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.bin}} verify reset 0x2000; shutdown" -tools.openocd.upload.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; program {{{build.path}/{build.project_name}.bin}} verify reset; shutdown" +tools.edbg.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA +tools.edbg.upload.network_pattern={network_cmd} -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -b -tools.openocd.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA -tools.openocd.upload.network_pattern={network_cmd} -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -b +tools.edbg.program.params.verbose=-b +tools.edbg.program.params.quiet= +tools.edbg.program.pattern="{path}/{cmd}" {program.verbose} -t {build.chip} -pv {upload.erase} -o {upload.offset} -f "{build.path}/{build.project_name}.bin" -x 10 -# Program flashes the binary at 0x0000, so use the linker script without_bootloader -tools.openocd.program.params.verbose=-d2 -tools.openocd.program.params.quiet=-d0 -# tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; program {{{build.path}/{build.project_name}.elf}} verify reset; shutdown" -tools.openocd.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; program {{{build.path}/{build.project_name}.bin}} verify reset; shutdown" +tools.edbg.erase.params.verbose=-b +tools.edbg.erase.params.quiet= +tools.edbg.erase.pattern="{path}/{cmd}" {erase.verbose} -t {build.chip} -e -F w,2:0,7 -tools.openocd.erase.params.verbose=-d2 -tools.openocd.erase.params.quiet=-d0 -tools.openocd.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd chip-erase; shutdown" - -tools.openocd.bootloader.params.verbose=-d2 -tools.openocd.bootloader.params.quiet=-d0 -tools.openocd.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd bootloader 0; program {{runtime.platform.path}/bootloaders/{bootloader.file}} verify reset; shutdown" - -# -# OpenOCD sketch upload - version with configurable bootloader size -# FIXME: this programmer is a workaround for default options being overwritten by uploadUsingPreferences -# - -tools.openocd-withbootsize.path={runtime.tools.openocd-0.10.0-arduino7.path} -tools.openocd-withbootsize.cmd=bin/openocd -tools.openocd-withbootsize.cmd.windows=bin/openocd.exe - -# "upload" -tools.openocd-withbootsize.upload.params.verbose=-d2 -tools.openocd-withbootsize.upload.params.quiet=-d0 -tools.openocd-withbootsize.upload.pattern="{path}/{cmd}" {upload.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; program {{{build.path}/{build.project_name}.bin}} verify reset {upload.offset}; shutdown" - -# Program flashes the binary at 0x0000, so use the linker script without_bootloader -# "upload using programmer" -tools.openocd-withbootsize.program.params.verbose=-d2 -tools.openocd-withbootsize.program.params.quiet=-d0 -tools.openocd-withbootsize.program.pattern="{path}/{cmd}" {program.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; program {{{build.path}/{build.project_name}.bin}} verify reset {upload.offset}; shutdown" - -tools.openocd-withbootsize.erase.params.verbose=-d2 -tools.openocd-withbootsize.erase.params.quiet=-d0 -tools.openocd-withbootsize.erase.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd chip-erase; shutdown" - -tools.openocd-withbootsize.bootloader.params.verbose=-d2 -tools.openocd-withbootsize.bootloader.params.quiet=-d0 -tools.openocd-withbootsize.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -s "{path}/share/openocd/scripts/" -f "{runtime.platform.path}/variants/{build.variant}/{build.openocdscript}" -c "telnet_port disabled; init; targets; reset halt; at91samd bootloader 0; program {{runtime.platform.path}/bootloaders/{bootloader.file}} verify reset; shutdown" +tools.edbg.bootloader.params.verbose=-b +tools.edbg.bootloader.params.quiet=-b +tools.edbg.bootloader.pattern="{path}/{cmd}" {bootloader.verbose} -t {build.chip} -epv -f "{runtime.platform.path}/bootloaders/{bootloader.file}" diff --git a/programmers.txt b/programmers.txt index 4bf42b694..ac4a82a05 100644 --- a/programmers.txt +++ b/programmers.txt @@ -18,12 +18,12 @@ edbg.name=CMSIS-DAP edbg.communication=USB edbg.protocol= edbg.program.protocol= -edbg.program.tool=openocd-withbootsize +edbg.program.tool=edbg edbg.program.extra_params= atmel_ice.name=Atmel-ICE atmel_ice.communication=USB atmel_ice.protocol= atmel_ice.program.protocol= -atmel_ice.program.tool=openocd-withbootsize +atmel_ice.program.tool=edbg atmel_ice.program.extra_params= From b995794ed6c7984c694d08886f3094c74f16ab2b Mon Sep 17 00:00:00 2001 From: Quentin B Date: Thu, 10 Nov 2022 11:30:38 -0500 Subject: [PATCH 49/62] edbg verbose --- json/package_Fab_SAM_experimental.json | 4 ++-- platform.txt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 205f5395a..8737aebf6 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -409,8 +409,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.10.0/Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", - "checksum": "SHA-256:821c6e28d6732513bbda20b1248fbb0344d22a3be57bf72cce9d2e9ff6738e60", - "size": "356698", + "checksum": "SHA-256:73ebf4fbfc0d798cbca01bc9ca18d7cbf1b9c2b196a1afec1a488b413520e8a8", + "size": "356734", "boards": [ { "name": "Generic_D11C14A" diff --git a/platform.txt b/platform.txt index ddd54d15b..7007812fc 100644 --- a/platform.txt +++ b/platform.txt @@ -171,18 +171,18 @@ tools.edbg.cmd=edbg tools.edbg.cmd.windows=edbg.exe tools.edbg.upload.params.verbose=-b -tools.edbg.upload.params.quiet= +tools.edbg.upload.params.quiet=-b tools.edbg.upload.pattern="{path}/{cmd}" {upload.verbose} -t {build.chip} -pv {upload.erase} -f "{build.path}/{build.project_name}.bin" -x 10 tools.edbg.network_cmd={runtime.tools.arduinoOTA.path}/bin/arduinoOTA tools.edbg.upload.network_pattern={network_cmd} -address {serial.port} -port 65280 -username arduino -password "{network.password}" -sketch "{build.path}/{build.project_name}.bin" -upload /sketch -b tools.edbg.program.params.verbose=-b -tools.edbg.program.params.quiet= +tools.edbg.program.params.quiet=-b tools.edbg.program.pattern="{path}/{cmd}" {program.verbose} -t {build.chip} -pv {upload.erase} -o {upload.offset} -f "{build.path}/{build.project_name}.bin" -x 10 tools.edbg.erase.params.verbose=-b -tools.edbg.erase.params.quiet= +tools.edbg.erase.params.quiet=-b tools.edbg.erase.pattern="{path}/{cmd}" {erase.verbose} -t {build.chip} -e -F w,2:0,7 tools.edbg.bootloader.params.verbose=-b From 65458fe0bcb7da8046d480a29f887774c8937653 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Thu, 10 Nov 2022 11:33:48 -0500 Subject: [PATCH 50/62] release 1.10.0 --- json/package_Fab_SAM_index.json | 107 ++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 1c6de3b25..65cde56e7 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -333,9 +333,116 @@ "version": "1.2.1" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.10.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.10.0/Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", + "checksum": "SHA-256:73ebf4fbfc0d798cbca01bc9ca18d7cbf1b9c2b196a1afec1a488b413520e8a8", + "size": "356734", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.10.0-arduino7" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "edbg", + "version": "0.50.0" + } + ] } ], "tools": [ + { + "name": "edbg", + "version": "0.50.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-win32.zip", + "archiveFileName": "edbg-0.50.0-win32.zip", + "checksum": "SHA-256:c26c964c0635363ce3b947cf0b8995be33455d09cc42e506609ba65d97eb9a24", + "size": "148852" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-x86_64-linux.tar.bz2", + "archiveFileName": "edbg-0.50.0-x86_64-linux.tar.bz2", + "checksum": "SHA-256:822936e2472a3ff70d00eb2eae5ccf0938ae078ccf8dcefb48bec570559b2c9f", + "size": "53577" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-i686-linux.tar.bz2", + "archiveFileName": "edbg-0.50.0-i686-linux.tar.bz2", + "checksum": "SHA-256:7c6547be1a5c651865243ab835564b5b71b7d5cab6d6cbf782ef5170e350adad", + "size": "53558" + }, + { + "host": "i386-apple-darwin11", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.50.0-i386-apple-darwin11.tar.bz2", + "archiveFileName": "edbg-0.50.0-i386-apple-darwin11.tar.bz2", + "checksum": "SHA-256:f5797dc582f625a7d82e9e73cf4311be50998acf601aa3e9251c23e4bee025e4", + "size": "44141" + } + ] + }, { "name": "bossac", "version": "1.7.0-mattairtech-3", From f036eda3cf8c54296d16693de73b0643eee77e44 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Thu, 10 Nov 2022 11:37:48 -0500 Subject: [PATCH 51/62] fix crc --- json/package_Fab_SAM_experimental.json | 4 ++-- json/package_Fab_SAM_index.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 8737aebf6..a762ca4ac 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -409,8 +409,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.10.0/Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", - "checksum": "SHA-256:73ebf4fbfc0d798cbca01bc9ca18d7cbf1b9c2b196a1afec1a488b413520e8a8", - "size": "356734", + "checksum": "SHA-256:af48a1b497d34b975ed92f315daa5b6ccf8677ec7ac696926a35ee81a193f355", + "size": "356733", "boards": [ { "name": "Generic_D11C14A" diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 65cde56e7..b758eaeb4 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -341,8 +341,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.10.0/Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", - "checksum": "SHA-256:73ebf4fbfc0d798cbca01bc9ca18d7cbf1b9c2b196a1afec1a488b413520e8a8", - "size": "356734", + "checksum": "SHA-256:af48a1b497d34b975ed92f315daa5b6ccf8677ec7ac696926a35ee81a193f355", + "size": "356733", "boards": [ { "name": "Generic_D11C14A" From aadf6a69569f6b7b9a12a5e75b04fd267250dde8 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Thu, 10 Nov 2022 11:49:28 -0500 Subject: [PATCH 52/62] fix crc --- json/package_Fab_SAM_experimental.json | 4 ++-- json/package_Fab_SAM_index.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index a762ca4ac..7e63be8ae 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -409,8 +409,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.10.0/Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", - "checksum": "SHA-256:af48a1b497d34b975ed92f315daa5b6ccf8677ec7ac696926a35ee81a193f355", - "size": "356733", + "checksum": "SHA-256:99fb9cc8c0ab2d9774c047f4647add031864099943c2377544ae7b9b4fa98b5a", + "size": "356729", "boards": [ { "name": "Generic_D11C14A" diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index b758eaeb4..d880a0926 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -341,8 +341,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.10.0/Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.10.0.tar.bz2", - "checksum": "SHA-256:af48a1b497d34b975ed92f315daa5b6ccf8677ec7ac696926a35ee81a193f355", - "size": "356733", + "checksum": "SHA-256:99fb9cc8c0ab2d9774c047f4647add031864099943c2377544ae7b9b4fa98b5a", + "size": "356729", "boards": [ { "name": "Generic_D11C14A" From 9767f5d48c948414265f40e1d02af2a509388c6e Mon Sep 17 00:00:00 2001 From: Quentin B Date: Sat, 12 Nov 2022 19:18:16 -0500 Subject: [PATCH 53/62] test edbg mac --- boards.txt | 84 +++++++++---------- json/package_Fab_SAM_experimental.json | 107 +++++++++++++++++++++++++ platform.txt | 2 +- 3 files changed, 150 insertions(+), 43 deletions(-) diff --git a/boards.txt b/boards.txt index 8a974977a..236f2e0e5 100644 --- a/boards.txt +++ b/boards.txt @@ -538,20 +538,6 @@ x21e.menu.timer.timer_2930Hz=2930Hz (8-bit) x21e.menu.timer.timer_2930Hz.build.timerconfig=TIMER_2930Hz x21e.menu.timer.timer_1465Hz=1465Hz (8-bit) x21e.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz -x21e.menu.cpu.samd21e15a=SAMD21E15A -x21e.menu.cpu.samd21e15a.build.chip=samd21 -x21e.menu.cpu.samd21e15a.upload.maximum_size=24576 -x21e.menu.cpu.samd21e15a.build.extra_flags=-D__SAMD21E15A__ {build.usb_flags} -DARM_MATH_CM0PLUS -x21e.menu.cpu.samd21e15a.build.ldscript=flash_32KB.ld -x21e.menu.cpu.samd21e15a.build.openocdscript=openocd_scripts/SAMD21E15A.cfg -x21e.menu.cpu.samd21e15a.bootloader.file=zero/binaries/sam_ba_SAMD21E15A.bin -x21e.menu.cpu.samd21e16a=SAMD21E16A -x21e.menu.cpu.samd21e16a.build.chip=samd21 -x21e.menu.cpu.samd21e16a.upload.maximum_size=57344 -x21e.menu.cpu.samd21e16a.build.extra_flags=-D__SAMD21E16A__ {build.usb_flags} -DARM_MATH_CM0PLUS -x21e.menu.cpu.samd21e16a.build.ldscript=flash_64KB.ld -x21e.menu.cpu.samd21e16a.build.openocdscript=openocd_scripts/SAMD21E16A.cfg -x21e.menu.cpu.samd21e16a.bootloader.file=zero/binaries/sam_ba_SAMD21E16A.bin x21e.menu.cpu.samd21e17a=SAMD21E17A x21e.menu.cpu.samd21e17a.build.chip=samd21 x21e.menu.cpu.samd21e17a.upload.maximum_size=122880 @@ -566,20 +552,20 @@ x21e.menu.cpu.samd21e18a.build.extra_flags=-D__SAMD21E18A__ {build.usb_flags} -D x21e.menu.cpu.samd21e18a.build.ldscript=flash_256KB.ld x21e.menu.cpu.samd21e18a.build.openocdscript=openocd_scripts/SAMD21E18A.cfg x21e.menu.cpu.samd21e18a.bootloader.file=zero/binaries/sam_ba_SAMD21E18A.bin -x21e.menu.cpu.saml21e15b=SAML21E15B -x21e.menu.cpu.saml21e15b.build.chip=saml21 -x21e.menu.cpu.saml21e15b.upload.maximum_size=24576 -x21e.menu.cpu.saml21e15b.build.extra_flags=-D__SAML21E15B__ {build.usb_flags} -DARM_MATH_CM0PLUS -x21e.menu.cpu.saml21e15b.build.ldscript=flash_32KB.ld -x21e.menu.cpu.saml21e15b.build.openocdscript=openocd_scripts/SAML21E15B.cfg -x21e.menu.cpu.saml21e15b.bootloader.file=zero/binaries/sam_ba_SAML21E15B.bin -x21e.menu.cpu.saml21e16b=SAML21E16B -x21e.menu.cpu.saml21e16b.build.chip=saml21 -x21e.menu.cpu.saml21e16b.upload.maximum_size=57344 -x21e.menu.cpu.saml21e16b.build.extra_flags=-D__SAML21E16B__ {build.usb_flags} -DARM_MATH_CM0PLUS -x21e.menu.cpu.saml21e16b.build.ldscript=flash_64KB.ld -x21e.menu.cpu.saml21e16b.build.openocdscript=openocd_scripts/SAML21E16B.cfg -x21e.menu.cpu.saml21e16b.bootloader.file=zero/binaries/sam_ba_SAML21E16B.bin +x21e.menu.cpu.samd21e15a=SAMD21E15A +x21e.menu.cpu.samd21e15a.build.chip=samd21 +x21e.menu.cpu.samd21e15a.upload.maximum_size=24576 +x21e.menu.cpu.samd21e15a.build.extra_flags=-D__SAMD21E15A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.samd21e15a.build.ldscript=flash_32KB.ld +x21e.menu.cpu.samd21e15a.build.openocdscript=openocd_scripts/SAMD21E15A.cfg +x21e.menu.cpu.samd21e15a.bootloader.file=zero/binaries/sam_ba_SAMD21E15A.bin +x21e.menu.cpu.samd21e16a=SAMD21E16A +x21e.menu.cpu.samd21e16a.build.chip=samd21 +x21e.menu.cpu.samd21e16a.upload.maximum_size=57344 +x21e.menu.cpu.samd21e16a.build.extra_flags=-D__SAMD21E16A__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.samd21e16a.build.ldscript=flash_64KB.ld +x21e.menu.cpu.samd21e16a.build.openocdscript=openocd_scripts/SAMD21E16A.cfg +x21e.menu.cpu.samd21e16a.bootloader.file=zero/binaries/sam_ba_SAMD21E16A.bin x21e.menu.cpu.saml21e17b=SAML21E17B x21e.menu.cpu.saml21e17b.build.chip=saml21 x21e.menu.cpu.saml21e17b.upload.maximum_size=122880 @@ -594,20 +580,20 @@ x21e.menu.cpu.saml21e18b.build.extra_flags=-D__SAML21E18B__ {build.usb_flags} -D x21e.menu.cpu.saml21e18b.build.ldscript=flash_256KB.ld x21e.menu.cpu.saml21e18b.build.openocdscript=openocd_scripts/SAML21E18B.cfg x21e.menu.cpu.saml21e18b.bootloader.file=zero/binaries/sam_ba_SAML21E18B.bin -x21e.menu.cpu.samc21e15a=SAMC21E15A -x21e.menu.cpu.samc21e15a.build.chip=samc21 -x21e.menu.cpu.samc21e15a.upload.maximum_size=24576 -x21e.menu.cpu.samc21e15a.build.extra_flags=-D__SAMC21E15A__ -DARM_MATH_CM0PLUS -x21e.menu.cpu.samc21e15a.build.ldscript=flash_32KB.ld -x21e.menu.cpu.samc21e15a.build.openocdscript=openocd_scripts/SAMC21E15A.cfg -x21e.menu.cpu.samc21e15a.bootloader.file=zero/binaries/sam_ba_SAMC21E15A.bin -x21e.menu.cpu.samc21e16a=SAMC21E16A -x21e.menu.cpu.samc21e16a.build.chip=samc21 -x21e.menu.cpu.samc21e16a.upload.maximum_size=57344 -x21e.menu.cpu.samc21e16a.build.extra_flags=-D__SAMC21E16A__ -DARM_MATH_CM0PLUS -x21e.menu.cpu.samc21e16a.build.ldscript=flash_64KB.ld -x21e.menu.cpu.samc21e16a.build.openocdscript=openocd_scripts/SAMC21E16A.cfg -x21e.menu.cpu.samc21e16a.bootloader.file=zero/binaries/sam_ba_SAMC21E16A.bin +x21e.menu.cpu.saml21e15b=SAML21E15B +x21e.menu.cpu.saml21e15b.build.chip=saml21 +x21e.menu.cpu.saml21e15b.upload.maximum_size=24576 +x21e.menu.cpu.saml21e15b.build.extra_flags=-D__SAML21E15B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.saml21e15b.build.ldscript=flash_32KB.ld +x21e.menu.cpu.saml21e15b.build.openocdscript=openocd_scripts/SAML21E15B.cfg +x21e.menu.cpu.saml21e15b.bootloader.file=zero/binaries/sam_ba_SAML21E15B.bin +x21e.menu.cpu.saml21e16b=SAML21E16B +x21e.menu.cpu.saml21e16b.build.chip=saml21 +x21e.menu.cpu.saml21e16b.upload.maximum_size=57344 +x21e.menu.cpu.saml21e16b.build.extra_flags=-D__SAML21E16B__ {build.usb_flags} -DARM_MATH_CM0PLUS +x21e.menu.cpu.saml21e16b.build.ldscript=flash_64KB.ld +x21e.menu.cpu.saml21e16b.build.openocdscript=openocd_scripts/SAML21E16B.cfg +x21e.menu.cpu.saml21e16b.bootloader.file=zero/binaries/sam_ba_SAML21E16B.bin x21e.menu.cpu.samc21e17a=SAMC21E17A x21e.menu.cpu.samc21e17a.build.chip=samc21 x21e.menu.cpu.samc21e17a.upload.maximum_size=122880 @@ -622,6 +608,20 @@ x21e.menu.cpu.samc21e18a.build.extra_flags=-D__SAMC21E18A__ -DARM_MATH_CM0PLUS x21e.menu.cpu.samc21e18a.build.ldscript=flash_256KB.ld x21e.menu.cpu.samc21e18a.build.openocdscript=openocd_scripts/SAMC21E18A.cfg x21e.menu.cpu.samc21e18a.bootloader.file=zero/binaries/sam_ba_SAMC21E18A.bin +x21e.menu.cpu.samc21e15a=SAMC21E15A +x21e.menu.cpu.samc21e15a.build.chip=samc21 +x21e.menu.cpu.samc21e15a.upload.maximum_size=24576 +x21e.menu.cpu.samc21e15a.build.extra_flags=-D__SAMC21E15A__ -DARM_MATH_CM0PLUS +x21e.menu.cpu.samc21e15a.build.ldscript=flash_32KB.ld +x21e.menu.cpu.samc21e15a.build.openocdscript=openocd_scripts/SAMC21E15A.cfg +x21e.menu.cpu.samc21e15a.bootloader.file=zero/binaries/sam_ba_SAMC21E15A.bin +x21e.menu.cpu.samc21e16a=SAMC21E16A +x21e.menu.cpu.samc21e16a.build.chip=samc21 +x21e.menu.cpu.samc21e16a.upload.maximum_size=57344 +x21e.menu.cpu.samc21e16a.build.extra_flags=-D__SAMC21E16A__ -DARM_MATH_CM0PLUS +x21e.menu.cpu.samc21e16a.build.ldscript=flash_64KB.ld +x21e.menu.cpu.samc21e16a.build.openocdscript=openocd_scripts/SAMC21E16A.cfg +x21e.menu.cpu.samc21e16a.bootloader.file=zero/binaries/sam_ba_SAMC21E16A.bin x21e.menu.bootloader.8kb=8KB_BOOTLOADER x21e.menu.bootloader.8kb.build.bootloader_size=__8KB_BOOTLOADER__ x21e.menu.bootloader.8kb.build.ldscript_path=linker_scripts/gcc/8KB_Bootloader diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 7e63be8ae..adab7996f 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -474,9 +474,116 @@ "version": "0.50.0" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.11.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.11.0/Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", + "checksum": "SHA-256:ae7b510901beca4ef5a1b16090f5b2cc37adf1137caf66f7d88c29f232012b3d", + "size": "356839", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.10.0-arduino7" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "edbg", + "version": "0.51.0" + } + ] } ], "tools": [ + { + "name": "edbg", + "version": "0.51.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-win32.zip", + "archiveFileName": "edbg-0.51.0-win32.zip", + "checksum": "SHA-256:8dc289bf1c85fe522aae4bae08f673d364d02b74d0aef75c3eb40c1632f9bf10", + "size": "148847" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-x86_64-linux.tar.bz2", + "archiveFileName": "edbg-0.51.0-x86_64-linux.tar.bz2", + "checksum": "SHA-256:ebbddae462f52a347a7548b59984a6489899bb5462de5ff26645f59bcfc27e37", + "size": "53512" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-i686-linux.tar.bz2", + "archiveFileName": "edbg-0.51.0-i686-linux.tar.bz2", + "checksum": "SHA-256:ebbddae462f52a347a7548b59984a6489899bb5462de5ff26645f59bcfc27e37", + "size": "53512" + }, + { + "host": "i386-apple-darwin11", + "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-i386-apple-darwin11.tar.bz2", + "archiveFileName": "edbg-0.51.0-i386-apple-darwin11.tar.bz2", + "checksum": "SHA-256:0398f56577ac4318b34c16c033d784ac44d1c0d1735559be24ba6a9366db10f0", + "size": "44689" + } + ] + }, { "name": "edbg", "version": "0.50.0", diff --git a/platform.txt b/platform.txt index 7007812fc..04aaae0cb 100644 --- a/platform.txt +++ b/platform.txt @@ -18,7 +18,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Fab SAM core for Arduino -version=1.10.0 +version=1.11.0 # Compile variables # ----------------- From d71ff71f2016cfc87952fc59779019500300885a Mon Sep 17 00:00:00 2001 From: Quentin B Date: Sat, 12 Nov 2022 19:22:55 -0500 Subject: [PATCH 54/62] fix edbg ref --- ...Fab_SAM_Core_for_Arduino-1.11.0_index.json | 68 +++++++++++++++++++ json/package_Fab_SAM_experimental.json | 4 +- platform.txt | 2 +- 3 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 json/package_Fab_SAM_Core_for_Arduino-1.11.0_index.json diff --git a/json/package_Fab_SAM_Core_for_Arduino-1.11.0_index.json b/json/package_Fab_SAM_Core_for_Arduino-1.11.0_index.json new file mode 100644 index 000000000..67145c23e --- /dev/null +++ b/json/package_Fab_SAM_Core_for_Arduino-1.11.0_index.json @@ -0,0 +1,68 @@ +{ + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.11.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.11.0/Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", + "checksum": "SHA-256:f015d271ab6f1d0b785c8a0c8c5ea55df3d2d7e810250ab7b2718c9b12db200d", + "size": "356710", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] +} diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index adab7996f..d1b2f8e00 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -482,8 +482,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.11.0/Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", - "checksum": "SHA-256:ae7b510901beca4ef5a1b16090f5b2cc37adf1137caf66f7d88c29f232012b3d", - "size": "356839", + "checksum": "SHA-256:9bd5701733f0ef8b5f93d64ff8ef7757f4cb83326853813d7c4d931eed4eec4e", + "size": "356705", "boards": [ { "name": "Generic_D11C14A" diff --git a/platform.txt b/platform.txt index 04aaae0cb..c122303eb 100644 --- a/platform.txt +++ b/platform.txt @@ -166,7 +166,7 @@ tools.bossac.upload.network_pattern="{network_cmd}" -address {serial.port} -port # # edbg sketch upload # -tools.edbg.path={runtime.tools.edbg-0.50.0.path} +tools.edbg.path={runtime.tools.edbg-0.51.0.path} tools.edbg.cmd=edbg tools.edbg.cmd.windows=edbg.exe From 2570de391f0f180595d97fa814bfd7612dc218f3 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Sat, 12 Nov 2022 19:28:12 -0500 Subject: [PATCH 55/62] fix CRC --- json/package_Fab_SAM_experimental.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index d1b2f8e00..f36e837d0 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -482,8 +482,8 @@ "category": "Contributed", "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.11.0/Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", "archiveFileName": "Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", - "checksum": "SHA-256:9bd5701733f0ef8b5f93d64ff8ef7757f4cb83326853813d7c4d931eed4eec4e", - "size": "356705", + "checksum": "SHA-256:f015d271ab6f1d0b785c8a0c8c5ea55df3d2d7e810250ab7b2718c9b12db200d", + "size": "356710", "boards": [ { "name": "Generic_D11C14A" From 59cdf1806bd4af0b65847133d37193072a232117 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Sat, 12 Nov 2022 20:12:55 -0500 Subject: [PATCH 56/62] update mac version of edbg --- json/package_Fab_SAM_experimental.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index f36e837d0..3d060782e 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -579,8 +579,8 @@ "host": "i386-apple-darwin11", "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-i386-apple-darwin11.tar.bz2", "archiveFileName": "edbg-0.51.0-i386-apple-darwin11.tar.bz2", - "checksum": "SHA-256:0398f56577ac4318b34c16c033d784ac44d1c0d1735559be24ba6a9366db10f0", - "size": "44689" + "checksum": "SHA-256:5bdcfee59e5da5bd419d7efbc6409333d030f276b6c80e62509bdde14e9b4d25", + "size": "44238" } ] }, From c1c8b6a64d526553c9d8868da9f8fd3304b273f7 Mon Sep 17 00:00:00 2001 From: qbolsee Date: Sat, 12 Nov 2022 20:50:01 -0500 Subject: [PATCH 57/62] Update package_Fab_SAM_experimental.json --- json/package_Fab_SAM_experimental.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/json/package_Fab_SAM_experimental.json b/json/package_Fab_SAM_experimental.json index 3d060782e..9d12939db 100644 --- a/json/package_Fab_SAM_experimental.json +++ b/json/package_Fab_SAM_experimental.json @@ -579,8 +579,8 @@ "host": "i386-apple-darwin11", "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-i386-apple-darwin11.tar.bz2", "archiveFileName": "edbg-0.51.0-i386-apple-darwin11.tar.bz2", - "checksum": "SHA-256:5bdcfee59e5da5bd419d7efbc6409333d030f276b6c80e62509bdde14e9b4d25", - "size": "44238" + "checksum": "SHA-256:cc69fba2bfdbbaf8a187ca5c8ad1f358be948e8ccba39da32b243857addc32b4", + "size": "44850" } ] }, From 03e583a7e670fb0b3a086b71180b32cd113b33f2 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Sun, 13 Nov 2022 22:08:04 -0500 Subject: [PATCH 58/62] new edbg 0.51 --- json/package_Fab_SAM_index.json | 107 ++++++++++++++++++ .../edbg-0.51.0-i386-apple-darwin11.tar.bz2 | Bin 0 -> 133120 bytes tools/edbg/edbg-0.51.0-i686-linux.tar.bz2 | Bin 0 -> 143360 bytes tools/edbg/edbg-0.51.0-win32.zip | Bin 0 -> 148853 bytes tools/edbg/edbg-0.51.0-x86_64-linux.tar.bz2 | Bin 0 -> 143360 bytes 5 files changed, 107 insertions(+) create mode 100644 tools/edbg/edbg-0.51.0-i386-apple-darwin11.tar.bz2 create mode 100644 tools/edbg/edbg-0.51.0-i686-linux.tar.bz2 create mode 100644 tools/edbg/edbg-0.51.0-win32.zip create mode 100644 tools/edbg/edbg-0.51.0-x86_64-linux.tar.bz2 diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index d880a0926..4f6ed41de 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -406,9 +406,116 @@ "version": "0.50.0" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.11.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.11.0/Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", + "checksum": "SHA-256:f015d271ab6f1d0b785c8a0c8c5ea55df3d2d7e810250ab7b2718c9b12db200d", + "size": "356710", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.10.0-arduino7" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "edbg", + "version": "0.51.0" + } + ] } ], "tools": [ + { + "name": "edbg", + "version": "0.51.0", + "systems": [ + { + "host": "i686-mingw32", + "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-win32.zip", + "archiveFileName": "edbg-0.51.0-win32.zip", + "checksum": "SHA-256:f2e1eb0ca2040fce69c6e37c3fefc50ad29e647d369b1b09696ee37a3d7358e6", + "size": "148853" + }, + { + "host": "x86_64-pc-linux-gnu", + "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-x86_64-linux.tar.bz2", + "archiveFileName": "edbg-0.51.0-x86_64-linux.tar.bz2", + "checksum": "SHA-256:c9e241a4674030a09053fef1a405a97d372d0c9c915761ec0887ce3f1a009a30", + "size": "143360" + }, + { + "host": "i686-pc-linux-gnu", + "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-i686-linux.tar.bz2", + "archiveFileName": "edbg-0.51.0-i686-linux.tar.bz2", + "checksum": "SHA-256:c9e241a4674030a09053fef1a405a97d372d0c9c915761ec0887ce3f1a009a30", + "size": "143360" + }, + { + "host": "i386-apple-darwin11", + "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-i386-apple-darwin11.tar.bz2", + "archiveFileName": "edbg-0.51.0-i386-apple-darwin11.tar.bz2", + "checksum": "SHA-256:205c18b51e8b746a74714025726cd8be307ba951e30deba51832914a6f3c99a5", + "size": "133120" + } + ] + }, { "name": "edbg", "version": "0.50.0", diff --git a/tools/edbg/edbg-0.51.0-i386-apple-darwin11.tar.bz2 b/tools/edbg/edbg-0.51.0-i386-apple-darwin11.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..001a1561c1ecbe1769e939e7bfc466656f081ebf GIT binary patch literal 133120 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 literal 0 HcmV?d00001 diff --git a/tools/edbg/edbg-0.51.0-win32.zip b/tools/edbg/edbg-0.51.0-win32.zip new file mode 100644 index 0000000000000000000000000000000000000000..00af85c02157b4f4f1a00ce3100c0439d04fb96a GIT binary patch literal 148853 zcmV)0K+eBVO9KQH000080NIdjRU``{viU>;06rfF01W^D0A*xiXD?-BVrMR8cxCLp zdwdhs_BcAzCT)O*DbjH8SfqG@0s<1HNTk(HnLsK*Q46A=g2gI|f{-53gV2%$JBC12 zl!y2NML@+DmbSc-7W(30X?a&(1#v=oqopm6{MOogW|Fkv`F`)cf85Xg+F}rXm`H|UH1Hb;FiZhMe^QwL{*w*A?YkDWXV$ja(XD{B?dX>N(!^;A zQ>IRSaq9S26EeoX_S$57!t*aAOwD>NVd85E!lO?lygGTp3w`zawniDp2n)kZnA3sD zo&I_TV~t|Aw_%v`%w0^oh=@CwW&l{pGE7nwb3P8zvDhMoHpFxU}Z+NzE1((uy z3WXzmguXJ^cV|nuekpyYQ@Ct|`$2}wy8+zu)23m%_aI>28(y#cWFvnQDLyJ|9qq@` zR`|Sq2S1*U>6h?Ntd5L1v$`c*inp(Q5}_N5e-dQ4Z(GCN)1Rh)K*i~&qcUF85-v9N z9+R1*mu?3wN&&c?@LYQXxcf{bJ*F4@iG|MehUaW;YqV!M|EZsn%*?)AS0_nxT~ipV<8%+JTl?4BEMuxDBZdXC4UkncO`(|$p_%zJ zSSB-P;P9ujIBUj;Br98$GY}2D{VAxN4UnRK(f2IlW?bH^0fpE|I&lX6ym%Iy8xjD* zeTx_?MQ01~rZYBo_xmnJGxeQFf2`(G&e;`!3negId|5Mzd(a3U6Jpj6+puf%;kSf!j`i>=IDpyBBq3aCijE^AWvgj?O$p9vM zjK$-423m45`=7 zkfIss(bI^CqR#q9{Sz==&T6~Gag4R!MbyRW@UmQfY<6?P%#*xW&O6St+0A$GoKRkW zB9rtR;0;7C@<*@;4S6ksp9318SRlt}7*~6zg0_IJK`@SGITsGMsJ(a<`r9QAdM_gQhI4_+aX4J

      &p3TqWFNbf>A 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⪼YN2$3thGgr}G`F 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 literal 0 HcmV?d00001 From ba20b5dd9cd022dcb16cae8a44b91aa471f180d7 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Sun, 13 Nov 2022 22:12:17 -0500 Subject: [PATCH 59/62] correct URL --- json/package_Fab_SAM_index.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 4f6ed41de..445bee0fb 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -488,28 +488,28 @@ "systems": [ { "host": "i686-mingw32", - "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-win32.zip", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.51.0-win32.zip", "archiveFileName": "edbg-0.51.0-win32.zip", "checksum": "SHA-256:f2e1eb0ca2040fce69c6e37c3fefc50ad29e647d369b1b09696ee37a3d7358e6", "size": "148853" }, { "host": "x86_64-pc-linux-gnu", - "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-x86_64-linux.tar.bz2", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.51.0-x86_64-linux.tar.bz2", "archiveFileName": "edbg-0.51.0-x86_64-linux.tar.bz2", "checksum": "SHA-256:c9e241a4674030a09053fef1a405a97d372d0c9c915761ec0887ce3f1a009a30", "size": "143360" }, { "host": "i686-pc-linux-gnu", - "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-i686-linux.tar.bz2", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.51.0-i686-linux.tar.bz2", "archiveFileName": "edbg-0.51.0-i686-linux.tar.bz2", "checksum": "SHA-256:c9e241a4674030a09053fef1a405a97d372d0c9c915761ec0887ce3f1a009a30", "size": "143360" }, { "host": "i386-apple-darwin11", - "url": "https://github.com/qbolsee/edbg/releases/download/0.51.0/edbg-0.51.0-i386-apple-darwin11.tar.bz2", + "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.51.0-i386-apple-darwin11.tar.bz2", "archiveFileName": "edbg-0.51.0-i386-apple-darwin11.tar.bz2", "checksum": "SHA-256:205c18b51e8b746a74714025726cd8be307ba951e30deba51832914a6f3c99a5", "size": "133120" From bfe0cfe6ee19eb98c00722b6783fe0bcbf098e1d Mon Sep 17 00:00:00 2001 From: Quentin B Date: Sun, 13 Nov 2022 22:28:17 -0500 Subject: [PATCH 60/62] fix bz2 archives --- json/package_Fab_SAM_index.json | 12 ++++++------ .../edbg-0.51.0-i386-apple-darwin11.tar.bz2 | Bin 133120 -> 45562 bytes tools/edbg/edbg-0.51.0-i686-linux.tar.bz2 | Bin 143360 -> 53567 bytes tools/edbg/edbg-0.51.0-x86_64-linux.tar.bz2 | Bin 143360 -> 53567 bytes 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 445bee0fb..463533760 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -497,22 +497,22 @@ "host": "x86_64-pc-linux-gnu", "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.51.0-x86_64-linux.tar.bz2", "archiveFileName": "edbg-0.51.0-x86_64-linux.tar.bz2", - "checksum": "SHA-256:c9e241a4674030a09053fef1a405a97d372d0c9c915761ec0887ce3f1a009a30", - "size": "143360" + "checksum": "SHA-256:1a7cf4b2ea31969eca14223f3b31f268b41f9ebc1b235ea62b483089c8844578", + "size": "53567" }, { "host": "i686-pc-linux-gnu", "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.51.0-i686-linux.tar.bz2", "archiveFileName": "edbg-0.51.0-i686-linux.tar.bz2", - "checksum": "SHA-256:c9e241a4674030a09053fef1a405a97d372d0c9c915761ec0887ce3f1a009a30", - "size": "143360" + "checksum": "SHA-256:1a7cf4b2ea31969eca14223f3b31f268b41f9ebc1b235ea62b483089c8844578", + "size": "53567" }, { "host": "i386-apple-darwin11", "url": "https://raw.githubusercontent.com/qbolsee/ArduinoCore-fab-sam/master/tools/edbg/edbg-0.51.0-i386-apple-darwin11.tar.bz2", "archiveFileName": "edbg-0.51.0-i386-apple-darwin11.tar.bz2", - "checksum": "SHA-256:205c18b51e8b746a74714025726cd8be307ba951e30deba51832914a6f3c99a5", - "size": "133120" + "checksum": "SHA-256:4510eca1dece282f4a65297ff330fe4f2838bc30dc3d456418abc35877fb1390", + "size": "45562" } ] }, diff --git a/tools/edbg/edbg-0.51.0-i386-apple-darwin11.tar.bz2 b/tools/edbg/edbg-0.51.0-i386-apple-darwin11.tar.bz2 index 001a1561c1ecbe1769e939e7bfc466656f081ebf..3fd029ebb59d94362fd2eacb2e59e48805a786e2 100644 GIT binary patch literal 45562 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 literal 133120 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 diff --git a/tools/edbg/edbg-0.51.0-x86_64-linux.tar.bz2 b/tools/edbg/edbg-0.51.0-x86_64-linux.tar.bz2 index 947928cc5d548b20b9384248bd4caa16a5cdf8af..4a4e8157e16355e09e9cf019975d6f09dad63844 100644 GIT binary patch literal 53567 zcmaf)^KT~H6X_ri#M)ZYm<_c zfj4#Dx7R0qX5BUaXkxXTf!ZVY+8@#6iX`D{6BT7JK_A{7beS!EpvsWCw*-OwAYePX zSKzw4&QH5UPPN|nyDT>?54H9$cHIlqj?A$aVfuNoE-K#ZQ<6U{s z>yv);qq}e`c5=|-3a@O?^Du$DRZ69odZq0JO$n)}SvDF6O+2uOTdG7FjIL)m8`oJ{P zeJODv=xoVz%v`yDy0JNNJlmOmvE{KpU3Ko`(X%VuKJ&D4x9z;?;Y~hibsnFrte=0$ zPky{}vh&`=aisU&?#yc4xl43iU9atV^z0txMrs3`thw%7mp`5WB0j1&|Fw}?^DLIi zdD@P8Zg+YdH>^LscoMpgbi0(FY;H3s%Lu;YaPyS%T&H$#+ekA)&tW$N=JDM8eX)~M z71FtG(S)=T>v=BY9rU=ey3EQ94Zq1k38oyc5kzkPbkkj7uvmNecr&AS1)(!4~oZq%+JHrArIZ zDEy2|n_y2fjEBZ~a12@Ghonmnhgcbx`2;O}5|<2EWFQ7CnnclL0OrFy#em0g;GfeR zOB;nlOKT+_d2#U|WKj}*kU$yfAy_|%@dN{=@I>hnL{J_yL@>a;DB6O#0akzq&YyRS z5+RBVIn>-@J|#o6|L#f~ta7ZBhr_JgIi-0yMRz=KFh#;>qJ=U^a+YYY@!U$|g#slZ zg)+eKZY4yS^3pS*`SNH4OUm*LkR@ifk_C$~-e!fg z^35>w+1iA*9ui-IU;TNUC!?`6w9Iz9P~3{Skwnl!5w(7BRa+s#0Bv&@Aab^DK(TksYRWWVl2Bpob7Ry%9G-j;+=;}F{u4~r^MQO%4$(QFpFKO{4%cGF+ zumT&$7j%daU{X>7fA?|RSyu&)gGu*K8x2I7F5`Vg!@B3gjpa4(P$Z#?$%}TmlI_N* z{KccxKw7{A&;?5NW~ zQ6~dNpedsf3!K)*<*-_njU9s(Wx)(}NwkA$xAf%KEvPVX&UV*hr_sYUV;MdmiJi2p zJ0hh5pBGTFcFsn0S1xz+S6;xxU`R(32%}n-0E!ZZ3y~m_p`4Z}K|Bhz5Y6~u9Q+5c zfeQtQD=#)pDl3!;uU|4EwJXzC*9VsSg)CVzGm6KY0cwE6kxt8qkRimvnkb*Zk}0vb zdL>hYT~0$o(5S7ksHteg0LWShDt|n!hZw(^p@g1wW9_!}j0|G)w!rcfw6cn;)Mcf1>xJ&1@3bkZF>1^~KA_ zaP;y1=Z8VS?FUFp|0@NlF8Fu5$4ltbP#a5HmBFF6(MKH^5eu|7E3el_Z;o6mm`v}L z*{m%={IX4msw_U=1xKV*@$^f<3@`P~Kt+}l@zvGUdQ)hM-SeZ#cGq7pzZ)#O*tfs$55GPU+xyBaAUC*5v4qgI82$zMu~+IvJ$65(jmLMyA!F{t+nd(b=IesfV+w?jWHzVg?0!CpYNyXJ(53Q`X=-S1v|#pmLwBvyPU)wL zput7tlqj0O=~CAaTLJv`mT>dp>`MZED04!jmKui03Mt*Y<5vXYS^fUddiP$2VIzu= z`$_)EW~EWYly&XkfcO@}H3Joo-uc6<>+RB*75;IUKw#?1;jHG{>5t=0&rBt5&_Xvp+^P$ ztgnVrMASibdqjmKr=xsB8kRE%aS_YLJuJB&53K`J35VzySVkL*IAmUaPHgcd{*zto zAI_krE41|QRtEe-H(%NUE1~|#9XzVm5t9H?ngZnQwf=?xA1yX9z`s5VD!$nZjV(iUpj>AS7x65}i)Y zWp)TdeyE*~s3Xz{;hoC?Qrb>DZc=O-5G+;~Ji>KNUB^0xZ>0_5|r0neLsPr0O1_;G8jb?8@er42lQ>;ipb*j1tw9b+a8oMrGUWJuy-wxB8 zc>j4#C9l4w&h8Z)ZpGT_(^u?&J8CwsRuZRwv_3$hoE-t#fyo8lzAT_h^0Z zO4R05N@%7mua@tm15*}(rWo4fXwQ$SeG5;QfNzVZntlesUx-wq?!^Za zEprFT9ewms724@Y-b^kXN%(>RpZY?;L#m0xcI_0PAs_il(T*3g`cGu#s!K&z`)ZeV zzK48jXB9WJW5^mCDEe)9j0c{`qJCPI|8TOXGse?0?AN~@oGOKo6bl~$H@rpPjjw6|*VK0R|w zCBZ*(F(!@uMWa9p$Ct)o$VJ@;-KYeql88;ECeKYl3&t;ai-NaXTvwWNg|uqVD??_9 zXxU0SZOJT)uDd1GoMJL3*b zN;UmsVk0a;?ql#)gX8NdYHMz38G)NtObWmulp-P1(1W~bc<@=Wk2h2{d} zt`Sq^^$iAm*K(_Tyy7>6y-9K4AN*dezQhS15A1Ui>>&A;MjY};5r%qCyPG*iyINh~ zel}_-?t)U;e#{iCDwG)OCk5ksQR}oM{Rpl1I!FdtcqwzKp>$83y^EA6P1hD+xF z(&gh3xfXWA=w)Um)I>{rHlI!y$ReYr9ftKCQUZQ<{)tkB?~1DV;f_On*I8v}Fbj-A zq?3XAlQmbJYQ?bV$Pz{`AQ&DxSyUb&3>j14K-#-|APmPKEp0{4&*J{Ntt=6fAJ(X? zA6Q7alsF!D7z;CfqGPx>UoO2mtn7i473tbShR-G^-M=n&xa@)O1t$y6}9C&!tCqIGr<`p&Ad>lLmUZ%ABG z7z`V!tYA&!ly!rpLKwUhxes!06XFjxe4ys!AK_yzaQxyS(AHTo(hKua;kUB6+1ZSG zL7O7ZS6$_7CHU)Dnib(A{>}T!_snAcorVBp4g*r}Pd+#S5I*vLT3S?fI};AD&&KLC zCr4SUKkTCRNQde*;LOw6f??dq8YZ2M^4F~@Q|U(d)9VQjKh+9>;$=b7WBCPtvX`j~ zMHfExL3zzOezvI{N>>w_q zrNyE;U*&~Lqhg@Qsmy_J< zS3Gy1gWIGoTAC;V*<$Jy>CXSxZsFXf>eJHwghl^Y+Iifz4Gu5oWGGg(GLT9L=dmp( zBX%%4T|RXthj6%DgcxtH*KxBnAmzRE2{bXvz{ea$Ab377kOl(E)%i!qU&2OpI|M0a z_M!7Ex084k{LDk-Bm~Nal@m&m<>8RrF#H6Vk!^`mNREtlnpWSvS=4n|b6BKGyc!3W zI>q@Np3v*j9lau`EV0u((%LGrqHI)VczHQlLIa;wG!o%@;OorJoWCCrZ3VyEsW~MvW-ZmX5hwD&EZ9E~MHrVhlA>co z-Y^0TDO(h~UVv0+nh@Jq$XM1{4$L_b2yEA{L=3@!J0M&riDra>8pj1-l`Wkbwp|s{IP+#7m@{qE#|=i;bKV74anOb;6=(cfwRty_ za?*!uSztV7dnuxe-pSBlyNr%{+1AH%!Ahrgn7yFjYM4v&Q1Ay89#WTwmo}6bm>^)3 z$A*-aaMg_y{*y*7TV#ykn_1t>wuw`$EL%}-E934Kj;M-pGuf z;S-aiHQN}oaPFepcm9&`SFYS@$7|}HQ8)YxdZcp(;LiI({TqKp!$pU}+gFuj@kZw% z1c0ENHxAr;G6M!gpF8$-`*evai9Va~ma0{mRFGc`#R}PuzS)Lv@N?xZZ|roHgSUOz z;Hw*@3P@h-{&rbntnv>pn8qpb#X%0Y)VqksP1Y}y@YWV?kXPHE_b3erKX5XNpZxc6 zL0Ftz^a9=*CzuB&knVRCASxA-Cy^oTr^Jz^3>qZg43zWNOaWmT^vwS{ImP=WYv7-D zvgxh+Efo6E_E3&g?{`D5{rWkRT-Lq!8dKY0_KRg>uWsfWlwN5gR-$D>n1bPVg}(mpaF`}{02C0b7urVm|oqg z1YR$^JrK+SEp_uoo44qqC|8Nj++>2A=btC9KB>a?Jda_ZIKZd+Zw?!BD0Mt|e1Ej9 zYVsr$=k%nPG#==a669ng`5kt_KYF9pX3Rh@%x1E+IGoj{jxj<4N{>6)T)3Ds6Zpce zzvk__%E36C`BVAuXi^mJyhRf$vT6GXS0iA5;bw?4vk)5O^|8ZGOu(XjTDgsg=Aa#v zgX)T;-c4*$Cba=Q1*HX!?b>v}{bSD$^p=mTetWXCG&LQ1;0(cqnTsP%D|^zBDvjDh)c9db1>_W2YTUfbp0f-9LCFxQJ94 zjJFQB(AyXs5oJZK{e^}kA>`5sg|*fG85Wr|mXZTwVncGdi2XXkX=`=h+>5sVKscPj z%k(|R7yl9rs?CMV+z2Hfk+1%Tl4Hgp>!h=gR3nOXVWIz^XMJHjdkZ>rW1d{}qH_CG z9_k19?6+$X8)Q*YDbP`F>-&!;Gs@(KPX3iPnjyAQY`8^8ZrZ`~C(<{1N@VTjgr&XV za$~W7t=iF4MK~tIK+P1l{9XDY zzcJ@uV_u19j&&f-$F-sSRHgsa;C=Rk9B23Iq5c^5qwzMcDK5?juU%vs;3&gy3eZ@B zcA%O3tB5UH4@QcOEjMZ7QwGXZHCKnRQ)LKx*m#aKY%1hM`!M!o1vJirhwsRW;#Z%A z`h-c^sV`hWX;ej?`v^Ki#({%32G?3nurg@c0l$jaI1neurqdZ8l>?etkeL~$;=b8h zo)LHEmS)@K>jcT&yU$*#V|m6#TzaY+=T*Jjc<_tjnCaBtID!FS9+bc>d#UHCT$Y}d&^NXX% z5^;T02Gvq|%{C*z=wbNu z>mC}?lcqfp%0Q$uJ3AIaPt=3_R^_k42@RVb_lwWl8FY~!d^@e13B>idJUCi%49X;% zS~;F!XG^=YHJ%~g9zfxoFWm`AsDn1Y&_0HjnhM33|>$$fK_$qS4fI6 zTdpi0gOSwjMQrimm&MGZ9ZvtLy!hK4Yvt%EjK!J#u*<(6qjb zlREy;U8p_c`#Ufq-=OvscaYk#m78=NEOu@5`qpn6qo*KRSpcp5`Oi(nT7`P@*k&3y zw=F`5Cdb5QAzc-iD7;%(Z^0_Heg4N4ZX)ZW8!8IW(C{q1!L=eP#L`FG);wTTx!{72 zw83p@nr+_r&0B5{Y(8= zYv$d`vWnc&O1AkR119|PazzjxHi*uqk&#W&rcKGFkxk1;AEx^%Zu9G^9{P_JV)wDq zU8O;eNfCV7M%Z1OL~?JmUgSzJz!{dejlHHI_xabLHVYGG?RiY zZZ$ui3pnn5T>@6Bve__f4G;c@+F1GD?X;-MKHLZyq(okOH8G4h=*KU%wyUP+hgMci zUDxa_CoBkZPe|Za%QXU~onF5?2(hktbDkh^zy;2401SN-jHGx_{3jjp?|$gVF&M@u ze=@8EabmxSO&kDoW8$QyNH%%#0$GWMa;4ypZK&-!oB5ITMP~{V2=cIhK3J?tG!I^c zq8L+{@EXvsVfXkCF?_|g-Anwkii!r=WZ$G-iFQJ?z+uu4 zSoI%Wsup}4hDuxOFTs>iQq~BPHW!el)dC2_^&1YE*%`QOj-NK!T=y5eoiVc!EqvKY zvTSfd->#_wGoak2CKUxN9bBQXFPRvL3t6l3^BrP{F%Ze{1(F^UKzXomW6e%~c5YS^ zuWNSc7L~4*Ae;B-m#H!7*XR+mqWpZILZ;i~gz*$UBO|ApYTmlcOPE?%cd2j};`JwU z@^k_r=#`ZFKoTHekv#j0|JI?j`W_`s8Z6Jnrvoy~fCH9&vE$;p7JnS2Z6DZTk!p$c zm^#G86NSu2{6gw@9@_famjy~KpqRlu$4U&;en(GI(7Rv(u&;>CT3q}GlF+z14 z@1_Ou5?&a^EshULE9RwYPlNM}@Tn!2X7uA-ury{GXTXnNg&3t#%H{K0Uw*$K&(kuZ zYbaWo2okr907m9UGC`xPElM(M>J01&Bgg!Dmd)T<5QhGAbBP*(!{@mp!K`K580G(0 zf!D}rE(xJ()J3e&$N>nDsw}?BDkHe8IXL81SvxPISVM>_ky}BeuJ7F8H)7KG7WN)z zFL$tas1_p8TIIMY2WFMQ@LBlR0b1z+&eAl4Ln*8FD2XF>iM#6ks#nDlEwi%*yRl@W z1~!LfS>`ZfbMdRqGL6JVCT?WSSYZ+550n2{yWO(`$0^a2Ii58AO$SP}sj*cC0FRP3 zb*(##H-f*ZiB;s5vDjJhBiCD+*ygo;2(&9_;32u@=g2vNyZBXNX_BB-4p{X>Qs?NAYKhK82*(e6AUI zH()Ay4+(~jq-)WPHIIM8a-~B3BV^^0u6ogjrh>Si27n;) zP6~0A180u$@0G6RiB~8(5Au~Gd8IVoP>f3R*WA*^LxD0`l>61}F#*REVd^;q z3a$6Aox@9Q1SXX>TMDE)0KnATYRPoZe0RaZCTupSzShL48<%jpE~nENu$}@qQ#6uF z2%RP|p;mA-7%oS*3^S#^FkFx_W)&4;>?<)wMlk1%Hc`<`ZE5}eglHK-$5BklA<3jM zTpavw{Q~`-Nit1d7+zPuQwV~CC2gYQDPX^|XZzX)QwPy$NSbNu=DlfkgV+*gapuVz zMNFtu0OKGEVX?`%kW&@jV@P9`AF`TQc>#&5m@1||%Gz?eDG(}TSA1mg4yCgbbm?K6 zcenigvzAM)`1BQBzkk|LAEb$^Oo(N*6o<)yXoL-45VmV1x$N)S(1_x|N~4lSj1eWq zSRJl3>&AF2!Y!Ocl*Pe6tc5*gjWi2W*>(0s8~UfJknD6r1sPhbO#MN5Tx=EgDylM3 z%uS2pL`FN9O?Nh>fD4UW+K#fJPESvg>A~WQ03=dHMK!`@Wy!iStNvOWHvnUIum+ia3N+9mn zXW1bMhHG_g!xOE#O`)cyU#D6;R4*#j^&&zf-5|^~ z=tP6kEcU-+{$#i|(My3YGl*t5Wd}B)U7#Uc4sk&&jn(Q^aETUk8_ZcunnFsZR0~=o zIMcW;V2$EY)?7gHF$)7Xl1oxJD=4^(C0C2?K_uI0ZrDf!926Yrj56?mNya&*YV*$#z2w3rrgZ?-YfkrsEPxJWr z3ou0Le}PMg3F5%4xInb9u=xIFREt&|i(y=w1Yu%xi{~leG{w9M$tFAY1rCj)IrpS6 zGAx7d8_~u^LQNcn|4U}f{nGT`bIe|W&8E*-&mGaD2s)uaY|BPzg9~rFM`ts`c^n^n z)#%WdsWD8Ri5(*a3pXZxTJZU`&w!ln&}U@B+cgjg5LC&|!JN5wfKRhnbIOVX!qore zapp$Bisj)->1L2G#-068;r)wG@7AM%%=IhDO(*$c{3C8)A6uq|&l5!Y%}jI~d1(KvJ#~Q){>CA#rRE zhhV6sLx|3Buab?%6x}+G`n=SW!2J?J%2Sm7Pr-CXEaxSm`yg||kb9C5k6^I5i4b|~ z9_W1lrtxUZgT3cky=fS?_&uD!dK^ZOEFnNTIhJ1Oe2_#(gTnNGI0Ti;Po+EXhmd*P zpG$Mzj)v&H`@@D21z-{Qe++<`mOs>A4|fF-!?3Whr2Tgcr>bf@a+tu!9rz>Aw0xG4 zWj3HA0hdy7x>I>rRsJ7Z|MSp9Mf;IYetdkKW@qayR!x@bHh%(~bmSqi$?3{~K34oe zKLjMi(Hw3%LOAkhv1#PX?GQ;33u(K`C{_wh-{a_kSUmCAtxn9t6QR}bAbWE$7NX*H zB(7j_4&l?fp)nH<3Sl>L@nkY+BB2=ZfW!yLxu?(nZ2TW=yC!eRM5Qj;j3XgZ0x6pX z{}Sr49sE%9V+mMldp=dSo!73XY+8oeZIcVE#qCG&Ow33-?x44`p6>Y_zDP+D$#gR) zWTM%A*(I>RAgjn}Mp&9#z;jB5?{ia@LBgYOYwU|M5Ar2+8vC(@z;4QRlVytkFbYr5V0n~fES zIugjTZ%ON{jHGa6(XRx;#B2Zw4kBf)md?m2JBd2fkV>!DG2|TSu%oc@9Ki~I?pVov zUMF~L6vKvVvf99(?5rh--+#P0&_*iaqiPCJVBsjo)nY#S&bSXAQ07*J=!b;=JMQ? zq}Y6ZSH!kx!b)jWU|<@dosUyH;D&KOlTealFOqh|I{lTTlCv0Y3Z5LqyfT7>Oh8^0 zUBu7{NIL6UW|MR@;lniv9MbbQ)jr8d#tIaOBWoespKvPXRtPen;((81MIXk^IKN|d zz>k@7#ckW>MX;8l*BdC>DiZNu8uH-IWEl2-j)V~*%X)vgPW1jQ6@qGqV8{oI2{!1Zob|LWF!0xnyFt z&C05C>fAqBrOkfu#k08(Vb?5I-|h*8(z-z-4V#l<@zwLAN$-CBbP6GIamK!+J3&HJ z$)paA#scB6!C3@Pq@Ic*R0+_RT`y6p`S9oQm(%WT+U^hn4=(XsUYht5aa6qFmn!SV zCa;;7K5oLVrH$3QwnZs7TSp!~=bkyuFqS`lap7QP$?a`zL$goCPH!!LhfGZoph=jS zyNF{ zBo!p6tIGEAf2SJSd&y!9tWMjnsV9?EF0|OX4w+;}xBknhH)yu>5VJz2-7J<&TOwLi z$l@^}Wg(t-()llB$}9_P1zDsCE?&Xf>}|Y!U4P*h0>iEF&`3^JF`Kh>+ie-dG+GvA zkzy+yCSS0i`X{_#S9Hr$c@>_0)B0ZOD}P=Y%qFM$Us6?2R@B0&eOh)-ajk~cA=#M> ziI2u4O3$jIFhf#JJj4~mmky%{i_?Ht5@tVSFBvu_j)?&lXi+v*EI)AlKS83htXrA*k6n;@B;1_{# zx9Dn}>&Wc(xntIS{`vUAem0)l-k9@(I^KP}tt3b1}WXpH>HVY`qVQDI$?(KSKn1l z?4u7{_Al3su6d%OAWYUwp;ea)`1OP0nCJVJ&Ai#a zg)P_!QzE*3w33r-%D#XOcq8G0j|K)_+W)=OE?OJ|99II8Im?0|+&{mzZUJMzgriK! z5hlwoE_B}?B^x^tX+D{YcH~0-{)?Y+u3oyqV@_DOg*?nX_!MAb3>`D_@cAF@aGX|W zvbrj&Wyk!U0px4Dew@H1TAL!s{sO$c9P2sF;n}7@nS7tidFg*FW*l^pDqOSL_a8BX z1p4qIVKDhq<^or1Nss!V|Ba`%&IT}suocYscyPn;x1W1Xnkov4 z1PVA8WE#NBPa~{p8nl+)^{OfDElOw$z6Ng3>JSae4(jFe$63d9+R1uyVh$SIt(O^O z40g==!!R--hEZAl?GyYeiNDvB>ac)D>lo|LE#8=a*TrSJ@H+WsJjWk;Jjnugd|cN5 zVWxAHHm!;h$7dylv8Wxz32|4FC*rhLFJ-k)#=ebZotxM=iWw=nuxZJUkb$=S{+<__ zSrg0E_L1a$HZeHn^jY*%t>cpT<1eiQD?7E+B)XnuipN$NC}kO80U9G6lz^87OM<4SsE_!)7I zPoNXGyTS~U5)=r&#!Prtq~LuzT#(^CIdGnGy4mA-HS+z)UHdSN|AB>N3Y6i_o0 zsY2b>!IVY$5rbL#u<-*Yp5+5hI`_Cq0P4xq5vIoVrIFmky|Swvo`w9 z*d=$e_SSGo)R01`e3LxX?=Nbs2h}K?Fg){RKOvNciEl@V|6Sqdqqpo>5GZZb$cdf= z2casqOYXAubG^}*jrFZ0qk>AQwBh>n{lxlpD7fx>*7eYoT4rRhOrS=v(~rXsP4~9j zPE_K*n2c($=YDHe@7ozOm~ZTV^u6^LZv~2ohvB5}i1&#k)E&hBsfR&PWt0_ zebmVxNfLTPdr?MI*;SrGij;_Xj?WZ)(%&NhTHWtEcMQj7NCZcg z1jtk}_Ky^_z6G4@Zvt?%E9^M_yLA3_g(Ke=hwm?mJQ0E;s{H#?kD07fThoFbhu?gf zAaW;8P*@Q0CY}m-;rMxb%(!pz@L~6fLfL{$Z*4G`VmTSh8|@`k_m;OxpVK z8%@cpI%}Xd84JRnqK-~W&4J4|^x%jF%g@C-?%#{c+F@C9=o@i>VOSwUPV-NdgxBBW;Qq!cj(KG0o7^}X1{PF;yr8{2Tqm66>;Lri}NB(4{TwMDvRTJbrtTD za6co)>U}HxAV8+LwK7**dEP_>j{qd(V=xVWGU-U8(#(~|eTfxi`X0A>bN(gwG>$jg zL@e~uwUvAlD3wD^D?IyH`LIKWMM(q&lzlkflxMDh!-_!z?C|N=tVqko*U!#7NNCOT zZtG{R+{>cW@_)ars7NxLJhG43?Ji8c%G3azl#E><21U)h0hbnedTD{G&Mg$qvZTxo z>#GO)i%S=IV9TdHjGJ&4+aucGuEY#+Kj%j{KSIoU>1({a-T=vJ#o_+ip{4jq3tu}8 zveRkrBUX08wy`#4^`8&7jfoy=tS8+QvI!umcr={IF|0c86XA9qDN&n?ul(J-vB_@9 z(ssLE^@s{by!2b3y|U|BO#m-TDe#!w}b=@h>T3Pd;y1iUcYA z;ywc__$YfYo!;GMw$WN6LNY9#buJ_L{l?BQjPA@@BW<(2*` z4=s(PU3qKeMzM|j&Rn;7eZmU!M>du4&$kJ$j;0+IGLs-Hnx58}(Kt*#m*X=ZBZFtS@uCEc0qUPs(?GyOo z1%4GhFNjNtkGclS!KHJstD%E*z(5p$hsD4_ED0qA!FW}V!!RQLJ~A2yqbOD+Agbre$zHr3j_ZJ|0|LUJ9{RHva2{4UC7%&1|4 z+Ny?YC%i2am)H8!14*Gw5x~o$zI-+*YV2=7a(RTOUc)Uf$ z0;^3gSkV8#$%r*vL~B3RFo3?qT4P6)PYQhC;}9D4A}_n(_1xKdR-Bfr$QE)ToN=YB z3JHc+9o(BaS=2CL7$C?I4F`k|^_BLG^on;kLS_-&|J=Rrgx~lYC0^aLx5T+cF8lvT*$*WcO7{UV2jsM@?88 zQ=<}Q0x9xgi|~toF5yu|upT-ZP4BS?47ps}V(1r&VFaSXy_tJ%b=NY2Myny+M8@rK zzbL9sw%5)}|NR+qMcw*q+U~qxUaz{Bq}NUFHTr@@F6rVShx(ATQ$tUo+$eXCcPL}w ztIt-5xVSFoQG5xDAhI8;wkgL17Hbk;+?cw#1YXwp^gz^*79M%^_s9EXk;X*eM7BCD zP0;0(*cTcY9ut7>YdNvzr>Y=qw%t1?#!`e`5T-wvtlP@qcKq>lU z%-!xgWY6Y-!;|VV`|D~Pj^%pD58V0%WlW9p%?k2^5<*4(D7|$0qQFaKaHX?3ki4ORB_+U=#E0A+gupc-#74Mj$AW*Cqr%f6# zsoG0&b?^mk5Er5tZxz(LK-$Dl1&;3NiM5_{y2kUj&iqeqrq7bKJsXb+F+VEwLVkHjKuP>W;lnSL{NUChx#k`!%K27ta zf416N+zJ-T?2Q@CP-S+SOg)VJ3;o5T!I-LG;mD5i?coZWhQ!M#lBJ^p?7|9|EN+>Q zN_8P!QP{bp(3l1)fGX@pu^+SU64qelggTDs-hNu#x^=eM?qvK{DBse4vs+I}1xS;B1SnBfPy6s8*? zftd&t?PSqAnt{pKsCF2wv4eVVRV@Zumj-(bpf~(4cFOFv?{9xDCsOOXjyv+tt{ClF zf(qHPNHrZ1^;tbf#9D&|r?JXz6Z@q1DZ9^Yk?eFqle=lWR3(*8i+`KdYYQ78yOyG( zHY+|z$y44^cm}JRzAdU;gUQ>zp;A3=H${pW6jS_yH5pYz*qXWZty0@FYzBR%ue+u9 z%RMg5&a3p9AKj@!p1#Z1j`m4BpCGYkTitdBAu_jnu2Zrj8#A`pvubrw-FBBeh%{OX zq9GB+M|r%l3E(doYxEj%zA$~8VmI^W`~Khe>9Mh{*>^vA21`c&x`N_xXfhNe!!YpWtKYby;?8fI|zSkr*P(cMP~kUVcZ9nk;IVR0$7yxcy-1-Gq8i`6eq@>+yU|AoOTGcsSaOl!N$*j*gBw zW))FZ3BfN%2~Ez!9^W;PBe0wJVQpBOnn-iP_@JmbcA{sGuyeg7T_{8pa32ir?$n(ygu7bsaVFxVC=AUnz|$9jnxD_r}ZXKIb_r zp%SzFo;;KE{+katopumf<=w}3XWWksG zO#D|5z9#URadb2J=fF%|w_7d$5(!Fdrl{&RU+`&{ z5|zt^Xm8%9QoHjTicQOq_?W#M6ck4w$|9O6$|A~qO`V)U?wR-H_1(v*cXGC}i(cpQ zyXRi|!)7o&7OWNA1$M6@P89OjzqZn#UC>~EuQ3w2-bX{e%Eh=GZBq?Q;z=bcS@~lo z$NSY2d=S(fKJRQhFb}IDKx{%6)g6#jChIVndW1Y?;Mh!r&iKtHcQsZ2&L^vgDe41R zj*!$QSLpGo#s-kdsZH`Hq}ehHf!wxRPG)NswZ)4vK^Mg=oF?@ie-AkNV9F3fOU8H8 z6N$1Czq-yVe%ggE#LmgiEsgBA*xAL(0#!wxB}utJ4pR?pJf6KCY7shqhEiqAC$ElPuzsTObt6Pu7*gpyyF{wzKl-F(svixl#ZJ;FD zTM4hs=I^DkESY~{(zkAK*u2tw{-Bn?uQLNyh^8&9LQ}}PCH`SjToPNmS#RGry;thC zeKYf5-?Jj_57mky9Tg#4+B&^ZAWsTa7zxi3Q`z7?(Ouk>j;daXV6d|IRFqWR8+RlWACGKcp}MF5xR!ZM zr+qTTv=ueA>&*MTKXZ9CkIFgAIk;?LEthH>h5g8Bo%l^u+ojF`)*tSdVuqEBm>wNl za2E>q+dAkDG}I8;7@1v`BT=otM%-JE|J*Zm^F>cleB#NL54z>E)#gkuHgN_+ui`SA zrQ6a|BzFer4x-q)d4L^y_|mPI%F{Q0^W%to0Uh9&=j*^3(|>kuFaQ|rKCNblyKW@G zVl>KdZJ1rQ+29JpEB$W+Y-6L@ysovMu1`ZnXM))K5zb)+)e@lz7D`Q$AtM-q6I!PO(e zAOQ3%8M1yV2xMHV1nOSs!6c{tcFd-|u!Odrs}OGwZ4;xVckJAK7`QVJqCp1tx~Y4 z#6Gs$Td09hj_jC>4G#@Ja5KJ*@9d7xd4TlC_a43VCnvTf`%4vs7-ZkB)Z9m5L@!x(>h*I-uIw>G;`Yc?9o9BY(L1aO>%in=sG=f)6RL8pY zZ49$Qfc;IbZ{qLo7lCetqt1Z{syT7%?Y#Yx`if0ljy_#$t!&ZMhxffSw`N?s=#lbt zs0sA)M=vjs6u46f$(0A&x;}aTWM>mwuy?tkyDTz4FMZ)i@)4{L?7UCSS(b8rkylk7 z?QZqJd6ulNk(O$|Qi96H<3c$Dgz4|VAkf{DaHW+V145qoc<^RYJ_eK^mffDcS*pQ~ znq<{P2{xBVpJ*s((y#(;+t%Y^`**g;8qxVh>kq}m-0m1PqGxREWAY&aTF_y?5_iVkP(j%6*g6&clTA#_K))|;icy{ zfyGj-xKAV^=ZCj_$)@?S8Md21(^diORQquv6KphbogJ8PhQUn+h6;$aXf1w7De^!0 z=uW=EYgN11ZffuO(y}5YMh0bEnEre_oD1xR zaEEp%&P}0&RBB>vC-D3{qeBzkTqq7#R#?=3Y*8YCMxl3!q6WgkB7~iXvoJj75(US) zY`Ya2y~}r1+$q`}pQ%0{{CS!donjjCmSh=fR7u$y1$Wt=v;R^S9>Yj`bH(ZT79m@w zKZetZDnQR(IY`||e?*M3xXBfWp2|Q35JnfLuMB6$IESvpQRA+20sFL2RvsUpTZtq_ zaB81W1pBXNdtY^Y`x3IaOe#I=y?wMl051?JL=|wt$ve4<2F2Z&xweOZ(~acmR%Oqo zHJqZk)a~J;Jc8vuFCv7UHN7%}KN^{Gc#+z#Tf+_ih_1ZEB!5Is_pTlLVs-J%*BLwf z=7@Y_G3l;0w$h)5+d)cLk{kuGd>k&VSO)WA9YSPDo z7t$bo`W-l}IXvY$1cua(O?-dP;Tv%2I<@=xCAY)~Z>HNykP3hTxa}9?7uc7b0KKu;Q=fszNvWXs{f;Z z{`UqL0A(*yNaJlp*N1iFp=QRb@d;E(9Aiz&i>uJFeaq!JI+|~)?pYn$EK_4_YlTtT z-1oG(?e_b-Ct1PQBkxBSvKl^0KkeZ=4v`HA=vp^;As=XKsh4^1QKLgQn1Lr|-1Og< zHLtaieA20bVw|P_{-HU{RFVj+Wt7Q@vL=JI>aJ1(!&hTsgDHc1L$L@(V%QGt1TRrh z80{k}oM}fI2-9HLHYPL`KsGJIk_rrIpt}%M7$AZpG1r~V5o`F)D-&n2g5Tjc!h-_b z`bh~_m5FwG>c%{ino^$$E%=T8)FX{n@221F=%!Ygoc}5=>kc@iMwjHjJID9#RXOA; zU0R^cVa_Ps^nk+%KuKf#D3{-rT#o;}T|Qe3G2*JvE@O#p{swMTXPL?53H)j!{$}IY z9)9O8AI zC60xbdn@QvzDsFHyd=(7sZG300a8AtyTmdVE^cp7$Ah^TAvrQ#Y}mA{GfOo1?Q z`%KK}bG)|MDYfQ!^r0H*s&q~ZnLZU3UP$HLs)(H)bJ=PwW*t?cHaA>4?6J`c2o2?E zR0rAvA1g%0aby-EFifKA48z)e6e09C335R!G48z0myF4U3M5(wFKpDYggjk8Y>=cV z8O;r{jc3N|0SmSRRvL>lBBGceLho~uFx80>t#wD4Gd}df4l;xZ5ez^3nv%hCM|Nr} z9{XD#Q=+!|9T=HL3n1a$k(e8V$`~}7qm1KejnqrM;d9mxyLe#3!1vy3*6QQjcgDCn zy)r>1m|h52rhp+CM!7EvstXcRV7#Ah`M2qKU9Hnz-KT;}mFA1;P};R&@A&F+f6S*Q3G#!Njr|p87P=Nph#WSp7;uM9h}!M+ zJu`3>ow>2qaDRuhG4jlHn~l}W;Ige2TI+74;wua!9k87!tMrlKTKk9Pd#HatO9L>E zji`{ie@T`W5JXt=bvEmhEJ_;T=^A7iBtk|%w8m!lj6dZ+qVEc zk|W_E5QHL-WEBg58lRPnYszyAu$?9VB;2eRx4Vc!?nXq{7W>crH=NZX7;`80?s$0M zX~bTJ@0aqZEGliWk`*w?Gv@0NFbp1{w05KjFxK67HUefC;?ASZG6RUM@7RZGu`>>d z{I!9pKP^xhf#V*kGL;kX9iJb&Y=1M({stgg!w!HnA^{N?#AmQr;W_qYZ_@kQ3zgQF zd2y_I`Tlx4yQ}lAk1*T<4WSVFfvYAOqjINNnaTY=`*jv65qcvUJn{_VdOGS&g0ERapC>|YVK?~t)UHuL;)cg;U&8T7{AI_1+91A9Ye4vJVDc=7_G=**@kp^&|wIkEj} zFi>PgU$m72p=5vo$B_VbTWcAyJt_GMEHV{@_2MR&Vd-kOwD}$u4SXC8_Dpas(_EkK zC$*+@da{=T=z8A9Z!W&t|9ag!2r-6$fe)mNVB1r-$F_mG^NADJwiaa9OKi%>=L3e! z!q3?8qY|Z~6ABT!4KS3+0ExMl<)q}xN-44WS8c5(A(5!!@;u&9yU5Dkz20-*PTse! zzp{)ca60{G?DphJ$GgnwOtY{Fw_Pf4 z4*$3NAgDi|x+jC1cAa*8e}Ik>nP?a|yk{5klV84I$pW$Say~DCS5db253fsf)Dm>A z7(XX3iJA8RflmkA!5|R<)hnp~@sPyqp0oM1Icuca7@MM^B-&=5!f1 z4|I3>tbWimFbzZ~sKqLKN=QA+E2W^PP|4y5$RFCG4_pnTG+iV?%){on2 zss`DpPC#XnN`4q4x!HL4CV&de^g@MTkLsD$XLDkK>T5?j(eU01P+UsT@O~$}`*mrl zu?uyZ1U&X_5ipx;2)hzT*0_HoFwA&N)=Q4Pb#Mw{1PF5s0KCG;Kr)bs#_6uBmlg_X z@>}SYv}sjICxUa?`T6?SM?iYqy6rW=-u0YuXECh45}RDCS6DL#|LC2@Y{pih-mIe@ zio4z4axGhN!H1=JvAI7skZWZI$fFyg(8^3006m!yg>YsK4zLoOEhCzgE&=*r_RB)$ zZdH=1I=Q=hXwSlA(pjs`R;@RP%iR7N&4?gH3`lmnI=aD;m@^06I;9~uw9($gS!%5F zqlnIO|LMlmR9fdBX~WcP_*7^}arBw%wkSdTgU|*^sck95o{F;yGJKao00;<=06<98f}}x5HN6E+hh5ii zdx*UkQ?_dh$V4HuEDa$LFiRT0*ZxfZZT)_y&C}dF%TGI?qg8gANLaAt25WI$St-qyA2k>6^#iuL0Q8 zqL7omY?h}XBZ|KRwchJ_oTfPw`eqs+xq>7J!2(K38oqar=l#!@#}`sIHpjL< zJouofZKDCBs+sL*ppzQJSw<8CWMnLu0w=zc&h*_`fxG{E_wTfglC0-OC*Xk6ZkSO3 zPY8enpQFAAZB9B6jlVA*U#GXw&jNS*{e-+>1ZO?5QkKK;0Ob2Neeh}a#?(ylDW$nO zHI5Q{X05R^K*(t`(%0FVP>YXtuKu9ZveOU54qxOgmoweL5fKp^ZMM!4!nVYDWUIZGH%IH6L;`@jCwGyH%LP$To#E4{1X$_2ML_Zz zn2{BDijw_|f8@T;Z13^7zUleOYyfh|6TUr-!XTlx(zq0t2@Elapdn-LQ4Ir%YLFH{ z)0}9vCd-}FV4^878^Bmz1XTwT*=_nLjm*qPMnQ(=M5aoF)1F;K6D9)!37PWzyU_0w z@DFv%Z+=|$hdU7rOA<}XY0O*8I~gZa^yycwM`e zwf3t91jsv=Dp(58d6#o^bvzG?gI;G)O#`N|biLNnt=bKSMntl59Jz+OCEhjJFdEHb z(sI)#T>Bt_F@~nxqw|T8kL+!>sUf=gV6;9Np+F}(>kztTmR1U0sRaWJt^itFEkzQH z3_vExvgFvsq@HwXuh(4Mt=JPR(+xK}YHY@?8^JNES*Sz|gbzsMGlYYHC`z#ZR;Ann zb2`PCXG{kNfvHeumh+9#ld(~*3`QXn&^lQx$|?iVXe#7mG6j5wH-LzJ0c`&Z8a9}cnl2VxODLJZ`dn(LRR_N>rHirn>Afm(M{WxNQ$Q`9S*k2$pEDL&w-k5=U8MulSug)_P8_HDlFPAfymC%*NNegrA>kcK$k!{{mG;+>tXG8*Gio zJa#w2%lTQ2yejX#FQD|NQSm(Qv+sUSSGF{<^D|`IB*{%7z8*f2M!D($}lMOC5X*W6;dZ9Om178I2 zg0o9Zm@zTa1z6a3%KBf5UTye_*lPN@2ejeey4Z1Ry?mQdyqeaKP1);f%NJxDO0wHl ze8j<+XO`RQs>eGoP-rU~P!z`FS)JK-S>5K#7^p^J#5Q0+BSd&QwW}9-El%_!%!}7W zMy3^&PtkP-TG}szHHWBUg(FBbJSI$ckzN?I6?@hL!5CiK%~-G#!z{&unQUEVK^csU zO?W;K+I)=Z2$2~KV$;h7hM49@zB3k($C*kA90;!)SK??+BJ4tt_#l#txanf#s!dgd zA&(1)-yxlUCn&7G6#6Wp9wY;6h-$cT$;}~VsE4boE|E<&&axAbg15gxEIDBnK0gjY zmvC{CzJg=Yolx2$Lcn@0%+k-zRy`8vm)#evdyPz<0IG3lbnBVT@HX zSW-}k3TfZ4uvIs+9ZsrRDb{1tRCPV4b)hc!V(?Q@w*LX2LbNbm-#MQ>gO0=337M8y z?ZvB9YU{(LWGxU)kEcb9952^GnY1v23yd&A0!$jHMbh}9mZv+gqLG{Q-0zroNk{kA zkI2p5t@T_H?ZiN|(Wl!{MdqdCaop(t=nKZ00s1Pug9n!Z>k}-i2hnL=p0d!ny%VFP zn-wK`5`e9QpaIU+ib)1}*`*ORB}}-48K_uHVKJUkm1j}(XQt9Hed@cRjSsEmTyAP2 ze=nA3M~sL-z$DK4p_)PlCEHQXmC0P7L310Vxt5I$N$ z3XK*YXyd-i0fqB3Yvv5lV88l?MiWy8B^?PQM!EX zSbW^(RY`y#wOk-b+O#&0;@9mKix|e3(-_8@X{KYtefUx_GkWxN912ICXziGbv~e;Y zTpIJY`c}CAJK=Kvov*Ppz+y6Up zz4F}NYs1ygJ3y@A>E>Y*m7gRJ?D0~_4mO_5C7XR;A~{%Ss7K`n6jSqh)mFUJkB0s* z^Zv=68{}`~IyaeonC1CDBb%Yc;^^e>d40}a42hkWN1@R&$wAJ*jq-rdN7)5URHTJ$ zKu4yHn|i+jnvTX%5*R_Kl=b5l$H8SAKNm5$xc0IA`lL9%{e;DV2sHGT7tm7pz#j9i ztGy9jncYzrKK^&5=zVRUul(XZVX@Z{0dDs}6+tul?#sgOPEyJ;07Psx+!e{$ZPmVc z+PpqSLBDh(^_74hmDIaXUGij3@na@qG1F8PXSq;nEmSr{FlG(FKc1*;hz|Z*UAg@F z7;~r(?SQ$bJh#wThBIYbkVR1lG$3#j_asTVLbxfXH<{q?=3hi-`_^w35ItVHs=CNG zdte9=Qr2;9YicgpPFh~wNvrxd(aG}XwBSb2&y)!V@P+-XnrwH1j-&tr$mf^a3L36% zRh3?B;hiQ4j>(I)lNKuroM%i*G9($8WyuL9uOOy$g4G?%O9oJZx;Bq){_Q38m>;Cv zqr<3%mn;zH!@-2K+?>!3ZT4`u_g?Kc7j9dLuo zwvL*X9C+i&Nv76bB~vYCU}rfte0_5R^ID#Ehvle&r277MhM)W0*l4|;w=H~~GpTHQ z*^_$;3B!3d=Dgg|sSY5B)dC9t*-e?AFSylPZm(ajtZZ!=Udjcy@_*BVJZR{G^>$c- zOrT+%eXZ>myMS6X6=J0lF=SIpsUxM@7py_ENeA%Xz6Q4W;Hj=%L{779s_(V3(Gbs* z@HMgijR|yMdRx&zh+mlCcoydlCpje_IqUo<3o)nREGoVO=TO*zv~K46d-EJgcdP*L z)v1Q<|BFh`Y|Z@>TUfYKYwEOpG6qi0piPySfHYMi`9?YKSlT%hbTOh7Nk~`F?eaTi ze>dEB_UoDKc&36hpo+=Z$jij{E^?v6l41Wsw`Kb=GqVsUvot;gU={73vn6q()a8ki zv$}_~LwV#$6joU(0AhN$HbQ`9kavVZ0k|mtE`NK1RaGRCHzROxajcCcs?tJ6<;X`) zMe+L%;|V4Ot!qgvu-_X-sAYTRs;Z7L$T=YuefmnO(n%w2r)f}RDaK0si6d>$RXH6| zRL1)Hl-*6<`*C4;Pb0xY+Zy9-q125DjBT;D#jw+3gd1#au|ci;8yt=hV;IJaxV&Co z^NYPj(S%WWKC2&D=6e2ZhJQJlWuiw{P+MOuS$ReI6BMs{2CgEFW1UC^BoE3z!Xssj zq+oQWgNBjc=7;UkANdhKB}-yM7XES?`62%@1V2ZG5AC@0f4)VNjQ_>pTRb$$l1%(q z*-|J+)Ac$N5-3ckn-O7i!G@IC8eT+K!sY!u7IP_=0|5x@Ek?!TSq)Orr(i+ex}_h= zYB0tSY;6(2qnu$Iet(eyhOFZa^Gi{dX4#iwv?g{N(UnoZr1U#6u9m5TL-|3EartHdi|%j(^pg2*$uaT3EQxN8%+Bxdmh3PKBCE?7rRBRj!GbJLE8kUJsMRi>+ zPkKr2#gECWYfHwhvcrrf7eBF5W+N-Ox6=0RIOlR|$TjO%Ct+E7l!R`84Zg>@@O;0j z`?(~NNXP25>gxLcycvlY>s}9B(_q>gS8mRmzn|ewbBKo9x>sTwLw*xc{?%0troyBu zL9w>mk+U~bxVN)1Hq!g9yT;*C$gA4D%DCT65H?-QBB1SH(*$h5H6I7jU3+Ci#B%2(Px_{%xJf0~?<+8}w%kKNdkq z+P`RFfYe>QG_f$sP$2&C%Ip7sZ=mtZrf|wl3+n7~>KDze96^X@6Z3m%9*>hn7KfFr zKTpTKiBBw*M1iJYfCF8zGBw$e5vL%oX+K?{&NX=2c!5y}p^spro42!t<;MB^-RF7Z zrV#%9!Y=5eyQ~^WfR8dDr;Nr2qccO%qg2dKbk3@9Nt%JSWYY>;2sq$6TIg&8HnSK65b(Fz>9dpQ9`SxxdhWkQq=e{Y_+Ma&vsbc z(T!8<97kuQfP2PSh~Pfol`QyfHqR){6)wY$(k#&tnG}_)1E#En`1jG%n6~!{we=S# zF2};O3g}iKQ8%bk-xVQ)>)OH=3>by!1PDrqBmko|J=tW8amB{b#oMl$E)@RtbJ*0| zCk4V8SLivCA4XdbhU3g<>_2zzy_a9dZb;mcLNUlmBd#@swRpUCjgwSpV+9BhSQx=~ zi51yAo+huwb@(M=>fdvOsN>4jI6$Ryh6&R%rfv=u5WB8t;>d#r1zs}hCL3Aww1s~K zEWs=qG6b)f)sE{W>D;J}&oMVCEp9D&itc&b5=Xf}coA=N#8)(W4?oAs*Kii^EZmyw z*hNRk&sF$X)FMLL8-1PN)@&)Xl&VOXSOL%Z1hRCj-+P6hv5jTHaG7PLwu=#hSNa;C z;}LS%nv^5u@qb&t`^r_|?BryAU!zLV0#SO1n4toCB;--1ra-@n$%-FdA@_D;0u|>v z|4Z&r^uETJ;pODr42EF&`;F>TOAk-#MT9d233Y1}j@!wF2F4*7vl#PGKu|`+g+TYS z-flHjklV|31;(3JyKLt?-#^XByScwv8Sc%Is<4d=rW;19#)3yRjk^O#uQ@1ZPPx*s2r@0dn^K&d1Fk+IKo> zcgn8gtP@=K-8mu^uo?pyVlpC_w*8gaqcCTsGR>pjvJ59e$xfjv25N&lGXXfUPp$~2>f(mTN8hI+>?n#=te-SfKjy?Z>Krmow&8|*Yy zFZ|b%p>LX7u`S$Ku{_ZYwmxOdQZKHQ%T{mMKs!akh4^z8&y#cG&l@h6IfmK3Q)#tv~Admd6-Nj zW?zL0W#mb=(rnJw4BN7rK1J&b2~$Q42*@$8vp|4pHH;wLq>O+F{M~zfEaK6P+z&d@7uDPzOe_q2zU1yP*ZAA?h^;=y$E9r`< zO+WyKq{0(g==?WA-wV&)zsXCG4qrhEfK@f+Mn{<2uMrWn5I0?r|8pb*=x|njm$U>y zkD~^jmj(V)rl;DIw#&Kv3?33V-UUjlOBRvZ&lH9>#4aO^AkY(B!NbGtwf5aHciX}3 zj*G9v6+>#ELSm8!|{)zP4UU01c=CK9NoU7eVeq- z)2gx^AU#Jo%@u=3u36T)|M-lOu8g50+K&n{g?PTWs#h0a4|&& z$J5e#zD<-sv@f+{w%AQ*8o5icVQ*JCWI344M0J9S58jSmVN9Z`OsrXtLm=IVLYU-( zD0IhAjgiV7QiG=$IRYY}=#(}&Dy2xFkPBPP07s}_b z|A#e}i_e28*7N20UDw`U_&r~B?S2H4g;hlrRV1paDEw27UWa?h3M!|kGq)xeypl;* zyd;ElP}xnA2aG#U*4zB&x%wOa52IeD-}fBRb0I9ZmT({^8l#OlQ7jN7Iss<85DbzR z6%G+gh#TOqu@$xPzNTjLg3GU=5Req&xtn^9(CoPz2yVR1fp^mtZ^6t&V;b10DBWI{ z-Cnml$cC6gY06MUONL`TvT7GZW^%HslLvM&1`TPR`&(Y{< z6)XK*0|`?8JtnPaf&f0r=ru|DjbFW8XH7ZnuzpSNDw`jrevb&tNI2M&pOshLX2HB2 zm|x691ZM@ShmGhPZ(OVw>hB|=sNm8~tfa4={%sKa_Z8sB%>U91)qxXjH=Yo=9G4_1 z5t-N$NYNNBT^)C-5&|%6ubu!AAYV}g1zMo5M$2x>sVY#Ix7jV=D^!xhkurfIcB3cR zwkgocSX%t4H3p~WLQ=b|TxbXXNQSzZMh^@7=(y~vNT$UH_PjH?ZuiVO1tKwq zi^?8v-?eE2BK+xCyrC5irR_Vvs#sO9tdz5x;j&)-qr7wy@DZZN(n&NwG4fD1g%8-) zf5)yOGQ1E?V6dy}B4KH{tUmJoRvQe;YCi|)^%cGYXz|s`+E7BCD>L1m~tqq2LABwUncf$sB);TBxf+5*#{%2!Ho8;UKP^fWc z2mo$@t59Zx)FK#lT)>U90sMzSw-1lg-NrX{j-MkrlZc$=PYzqRAOf$8e%w(v0q_0^ zw&>GSLGE(6dg|}COk@nL?)o{|!ByZ{sjmDak_t@wLyqlDRySojS)TO|so*of9Xfox z_;lNcDsVL{0MnOee*Ow6zvvfdYSQ6vq$0-TE@=X@OYr?Ko$~(tI^APosQa9tW)qD6mgYoG1r4pa6wqWLbPsnU)oNyJA0 zN19Kx(pE2J$b||@#Ru`&#i2CV38bGeUgqr=^z6~mAuC#`-y-s5jA(!`I6*>JbG+4`Kb|DKX;R;QwFg01Qoc($j~ z8c4x|KKNl?6F~t6thsQ#Lr74fsBi^4p&~2w^_Y|sS&T)CTGj2S#fW`?3Vw-6nox@j z^{hv!?AuLvjXIBJDbYeDZQ!!LX%%K;@ZoVLYl4+cY+eN}sze^T{;6BM>XgBjt|=Am z5I9!8s%)@#u75FKL=CnDN0~%HMAEMP*<0HTZDyr#STaD_CxP#~L{Nlb_DO9?2lS>! z7zF>HZo8*diS zBxXv6=t7Yg+3UN?q1%}CZuhO+$=4`1ajDH#1jFyQ=`)$1s7DhC_P2sE9#|HQ;V8t# zkw`dGqr_L6{Cyv1ZtrLT?Kdq1pp#s{D6ks?^EWq49k=Gs55Iw_tC>7^JzZ7>?RKjx zQypVxez0AWf{y!@;HH8Risk%k7FLZHs?laF*I!7m_@bfkph?lIRbtacYJaecZbV7Q zNZP>ws19H^BGAudcj)*C!czQQcR7CswA^dFrpZT3?mf<4R&LmS+nzf{+D(INa@&R` z+Z(5kceVE18b3ArmQy}u1pVi%DEaHqqaAXd>Q)X~qlZ-eUn2GoD__)7HP?K#5+04T zd$9gV)CJrMeyfqBH7Gh@ML=MR5KZV^9f{Dx6d)G=Hc_jy5tP7&XQu#23l&Y>iC<*& ze54SlzLMo%^9ntFZc*Z%cY(Ri^QqEE4sW%Be&K;4TbXu}US>)lo}yBbxD+TGFEMn- zwDt5(Uj|EhI_NnIz1!q^8!jgs*W=dBl15(tH(IJ3(7IM3mP-eQ;fuJM#-J#0Xsktt z9*xLP5#BbyZY5WNc`+F0`pLcJu-~`)+huxmbU46LnUM$x5g|chT9~WR0bFdc!#}y2 zpJ-?-bY~CRtRh$gxeI}iY@?)N8Gxh-kPM(!_%+g^ZhF4$L_v!|pg*s$fxv5t5JCT%#TrppqA3V7i8L7?#2x-BS=XVU#I}moG7QfSVMyPl zCS+QE8(lB7r~*-RdRab=C$8scdsAGs~-DNib8M$xOu~H}i{-9U^ zfiM7610u-U1BqPV|B`^;R%UlV^7V(gD^b4<(9mtZ6>s+U<+DG_5E(48_aJns9@_v_doqKL|xiB|@lZi?ng(MI2JoB~4Z1An~VRJCmt-3OKU82aXGP}P# z3%ZxQnC+nPXoU;;jLAWbsrohh$B~#9jSk%zcC{HLv zH)mOMJ6vRI{0ql`**@Q~qx`X(zLtJRg%0C;Jfm$qqBxXBdN@~ouNEzL#*B>{_Oe(VX} zl#kaPCzgCl#sAyZJoVoqQU}=HPtX-snA;>EoctLT1OmUZL)p^9szD%~%mu`Bb7=U4 z{5NTpc}!p(i(uCgEnf1DUm`w$M2!zSWN9{jL|%`lIn#!g7qC2XrF$@7dayx<_ikn{ z(O2wIkE7n>NY0y27dH6lXHj_5X}11@JQuHM*m%}Mu$*=V+TDEymK6Mt*_7DY{U3h= zW0}9qw_#EAv$JLUP_6l7xjEtbI#CAa-1*62O>?ugiw{i1deylTivrzgfTnNmkh^OV z0rr#4{k#xyxXv7`M+ibk8yq0m-wD+mEcUKh=D=hQP`mfgxFPs-y8+Et(R6fUM6V_9 z@#Vw%Q(1{$BFkKZA}xDMl0x$%qCyV(id}7S^804g-ZrLk=U8P!$6&p6Elytpxny(S|-dbOS@~W_pW1Y{R4gM)#F)b<- zqGvi0T;~K~%G-~ZaW;&vPMCo4#IiEP9w?nbjbk`j{B*j|JPjQGaqI*%;Fl0ah92$F z?YOJ9OOxw9YGl11*F1(jS60#zKRX@{eJYU&0e0#uYEVUf((IK3Lj896_+5}mGXG7Q zRP-lyc36|A(@{llIuc9b_s+r0CwC=L7f~}qMnyE5XR@jl3EnLA^X`Nk8Pb5pBoNs8 zk;wKABzHHdK1q`BE@8%rwt;j1v_W_|b@c3)YZMJLCew!BYUN}%9n)~-El&+szsJZz z=K`2sC1J?Km#o$B`wAQLEB29biC#E42Qk&O12AA4(DU(+d}FFVF2u;!{^JLq{6XJ2 z2SIW5<{t+zd?>h(GbHs=kS;F2CA}~VTow`UEesgoa~+;IK1Pi-Jft~Q)|uJZBWt(x zfr|72lCPF<+8Yh){91!@r7-mF47I4IR8ejn)hdLp4s)Cl?mt#7y4U3ocH1)?)Yj*z zw6SfV(#!v>qb=SG*RJi{MQ_Isele|laV3xBZCB@FiZl>j5DL9JkB%55#4jgp+1Kfx z5nnU(S+KshcII-QgyWj{Xd9g`TU5vrT}RSaecaBRRfq9BJ3AIkqR$|2%VUB@vh%I~ zv)?v*pZWW)f$Uk@iz4!%wX7i{Eb2MSO7-5+KkTxH(YkzPOmpN1;ArX36~S|@AaM&= zln_7cAk!*Fy$8VT+vO(Yn7|LLhj+HvWxx*Oj&qS+O86^JgSbQpE@}wARM9#xIiS#> z4e{NVe>ay*RW8jKyrcTTiz9}MQsdH5vqow*RQY?-Cxga)$vUMRIZ(2E&ibE^TnEg4 z&cNbG__)x1U-RKbLKE73<$o4X>;C>~Jr6(Wd%pAD+`rwx%uwLIJ8z_Vn9Po)MeoLJ zJki3qS~*ttj=sl*Tw_7MtPe{k0wv8eOv17ThIA~y=s#L;cZy9n2k1Oj^^6%6aF z8ktH>)u^u-cO(*k&V8y}4vdSiucu525X43^My;SGtAMSe-)@)-{4Aupm?3SfKAWow z8!LMUG_dcwsx8#iF>DmCIRgOrNJUcbjV!Ki`VaDsKm5!y{xp*qAFTele=jfC;#0z` z3IyS%9Zv+~cL%!ngMT(D?`4SrvpFiL5YOx?U&=ZoeBq4xpNZ@B>UJB|s2l z5CDCIL*JU@vqo?%kcU0E6vEOD*9h5lfaf zvIx*d&)jQ{-+eQ1arJ_=VQx&EJ5fXN4ZJ-#GaV9xOG!mc8JJ2`xV`3hKwbj}u>Px1 zj=rMeAT1(pLBE~UZa-ftd9SR88_arEZ&}N9PKj27`x)(>Xw{^S zAk?c+9Qk7>d!SpUfNd?`dy?e><;YB4hEzJh67$u5T3(#M$jviAgzaa3-|DOQ_;D-* z$-0|xANg;OmtvJL3>Y&xX&cW@-4WYqcqU#pkoMo6?^PCatyAf!AYr!#pS;n9a#UC$z5sMjFOkWhGV6OuwhXh>rcZ2+!;4Gs_@Ky-51u6G)d zPrF(bUjvOyc^%{)W1AC*5PYn7O|klnoIdcy&ssm!-*dRQ6)oOXi=N@iNcWj5bO_{C z;2dL>EfPq|YPFB@@D&q+fu=A!`*U|)7Gz$GfMdl@W_H-5Wx4`qVW;Bk_dQs}b@o<# z>L$?HZ|5TIm73nzPpDVHZ@b9n9I&DiV>V9}O26?6f>cv`N?0mN5U-)6BF*X~e}{G! zEl)T*i`=j|>N#@8*HQN{9bSTY%4~0wCv2 z5WxZh(BHh9{2hlH-)`Yt89Vp7%*}*}v zIa+(*z&M+V1XLgx1`ho^B0}8vR#Eos%N^-}Up<_f&esmL^F;~N`+WMVu3INx`&8Ns zE+ig5PG*#;1on3!1ZXJqBIwL|`f30b2Z2G5sH_{fEP#;6X24+P3>kyxppZ;Sz4|&q z2eb>G2`K%mt^H^PGJm_L#{ciQXDiQ&C$02bOwB!n0WgUQff{S|VLdLHMhLmAZ3S59dD2Wsd(TmA()=$U}{ z{v6=G-M%4c!heoPEY7MyOM+G08S=|glR?lSAqpJuhM_`C?4cM=|3CP4o>ZVgSv|S)C%m8)TFJR~fyu!!+ zGxNgxG5j2VQ7n7^8Q7rqJ+1KEpP}<;>3Yta5a4;9tNNc*k0B&Xg9+rXQn>6PzfUcX z0gwOyeTDg$I`uf~KxR4f#Xto|GyEz$Klbu;yx+vrLG)?!jI6tOFTz3*&mG`OVlU8l zH%^=n;6y-A8J#(qm89 z!8mpY3j`~bLz3`GFagjTo*NHYc!Z1kxf;I2mkujOg@$e~`;opd`ZDk4ACB^QgYB8b zm`AQ((9L3Dto!V9FJs3nTV6igW)6;t&7%y>H$Og-e*5IUN4+Mx3j|0j;q zXvF0OnQhI!6bAsq8f z+eiu-oUh1~sALS`~2A!v>%`Sovh{uiQ2&?DOr0bBHJy;rw$x9 zuwA`}4_}|D(dx&7%xb1QHA4yAAwipxAlc?hVo*h8!JS?G=ZMa$EHG)c)H+s+59e{_ z99J(g`I z-?!iQucimxawKM%eml>$>##ip7}}jk(-F%!PFFE}Fs%d(Lj4UtKvAc{FuZ;@gy+hs zqze4@p)B*x94hbF%P3#0Q%EJ%u<#gm2q{UpM=mYAn31;Nw#qsaK|84AF)!$9ywkoI z`uSxUFDW&T3PnLu3qYBKEywm{gy{vP3_v!4)Se-09I=}`xezFxzmy}}OlReHTgx4mAk zPM4?(x1?UaY|%#@Cl}h_7L(sfNKyF^1H+mKTcH1BkbkGyBnd|nNd*S}-5{hW(~iK* zXP}W9L-HfK`mjimg@9{*1pT*#u1?d-(|fwKc0+Z#8rY;Z=v+YCR3b?KmyJY_WpZE) zbj5RIk#wVq7R#6!demSu#vx(uanW_+;GwAn1}yu%|9KA_`$OI`cbfgj-}vyZK0M|_ zPg6~moP)I@m|7tZbr_cp90-H2G7siaAjr1Yy}p=|MrXsrsI`VR-~0C+U6qq>`Mt+o zYbKj~Pyc%RSYtiMZxsx7|Fr=iTdIVEDDFPB_=`aRrQW403Zf zB+~5}V&pejO?f1pE02#x|^N+slha^qJvH;QWgdaw6wj^8w|cjZ#4e@cj4@F-KLXB4@}cF2^d#Ak7}f7 zDW+k3c-wwIi#}SVNk%suuD;6NKJ+#=Hrd-AY;4-C)nVIygv!~bVOM*lI*H^A2NUIrLm z^>pC_kLqoHI~`nXpW*G=*GQeJC-MDp@wKoyE*<+R7T4b=Dc<;qtrK?T6GNqs{5rmz z*Tpl6mD2bXrQ3YtBw0;UZm?q}RA@L*<+X}3D#a*<OzP8`H`aOO$rP^NC{Y!^Jd8H2M(lCjLyR(TnvniC>c*IjBTEs zgBGP|&|)#XaAg{VFOdeU)0!Egk$H}LGg9UmUA9aT&P<^J4HTeNt9Y2O1{E*@z{t!U zE>6ixem9ZsYXY8$tn6ZW8#^To8BWwenv_wYk=SZ3W1!j|Bp?Lst%SA)p|HAWOR8Jk zNF~IP<6RWEYAPhpc$zX04V~X>w97lZ)D5K?!raQV7T^X0hNWV~O*=&fhSn_@5lpQ$ zIG9_Z!$v1&&QUjG%l#nE+S1N%vV6=q!-P|z83dL*4F=XLP#<<%r#16CD5l@ms;)8o*x zLfAlXgI#2()fIzbfD8a}F)Ok_DMdRgDUhU_Q+Ehx7?7-Dag9Te1K5Zf9<7&ahmV?Z_urn6)|WvNJ= zsR>L%C}>Ky7(~Hjrt-3(u+?Ky-&>^GU$_3!Ukq@r&+k$&XOzF+nR}l%r$wNHp-1D*Xc^w=92nPpcf{$$q4`HyNm+d5iJcnGQk#+G4){ z7sS$5KaQ|XB{`3kqdu(|b^MDBJMk91AJc=_dvW^_?NiD30KgktV+VgZt;dGheHa*) z>7?2a%|AIEA6&;2F{IW1(si4#Isqc~9|;CDhQ-%!U~IcEKSn9+<9RhpMlr%~ovA0d zZ$*SJTaw)sWxGKD_C{kfV{PhL3K_tKwV)A-X)!KrjYQ7R9Z8@fGd;FHhgZh}Q6N(~C>uaP!GjxP z8farwjdomwE;2NQ*Az966O0m6A&I`(ey>aE?f;j2yErtEXFAO;YirqgG*tEe#9=qF z;^hft=lB2a#>QX1!@S43L6k!x#a zqek;vd&7;L?4Gg5(zwl%Lm3;hGUdu^s%kNEn(}+KoDM1)ER~#e47;-|@s!n>;JW+0 zN7U-Q2 zZ|4SMUzBn99td8^aXreFrIR{)IBekw!vk9x7{->#r;9%+@J>k7O5ee)nZ0p!)TB!HvBY! zx4s~R7l8m@yGSNgY9j8s)DfO_#@>$W@Ij6y*uV2Kg1z?rU)pL>LG(m2f(XdS%+`-> zN*7!?;!`%_aP2LGHX8x2{!9fyC0NQk)xfRE%wwXgZvw z>Y!2;MbXyQbYrPDm@-$b_J%UBw$mZ;VsKxX@MK_gI*|5GfTn`vD?=<(!hZ%G47_?E zfS4^PT3#+DZSrcx(faB9Z(gt*pH7ZSwE7+tG{Plc;`&$DxC4>}nZNXrM9~HFeX1y; z2NTyoNHL1(pe1IUBr_o1YrWF3pGW$$8H=6beO0Bw$_0GJ#EnuhpPmqs1_}vPdYQNUWKKfixd#Ls!e9MwSZ!d9=c1Bs>2L%;AV;;6111H@&iosDv4W1PCl# zB|PdU#$R-Vn18jQCEwhoA>kQw@fyiwt5!`~vu4$sTW(KD#riKk902H=->ur5J>?|1 z_K2D7WH<8Ei#u3@2VsN>C6F~3(d_RME5-U5)mx+WIjKCR6U=e4zq>USG@nL}q)_Sg z1^JVa)E8Y-TE|PAQjINxgiV1%sZdGNW{@ePN0w7S4F!bQfMwF_C@WNnZ#mr*!5{X) zER7o3Gp(b-w9kD9tuii_vq`W&0ebLS%UD{d5sG_8#gIFaBwB$ug+|g^Dwj?sqBX9d zHKY|Apx&-u;3I>>cX@p1{H;FI!}GDW4|>f%(e1vL*7Bqgq-h(yPdGI5P}DZq$Fqo1 z?c|SS=FfXs|MuUysdL}#`D(8FeR4@JWWj2N7z=P6Z1l?|nfr;zG^wO54T8TuzpuL7 zNnb2iM4sw1I8h^SP>OCFKH*PT3`*^d1_Xs!TqF}1B2NJ%zgGq%dpi>vg>4}vSPJR_ z72vur{3YMtvkvUJ0}{++<|UDEvDrHY&sT}JW!BPpq>_qIbr7XN(@nB9!8aL07}8iu z3_=N**#k~lr1#1LUNA#LUsCT1c9%fEct#9|UqJ24Km1ju8>~2k7!tq;W40I~L4Z!C z2n|Av>*vs!6WWMqoEhHcCU~>_=Ja%XR5yhOh4W-`G)s%hClIz#MZG9W$zZ{R^NgOk)Bq=w`z0r0*)!f#mlu3Z^+OE zj`Ia;NgLGC%sL&VL1{F)xPE$3x5&#(=x@t5UBtlD|o>mPSsLD9r;M zQAH~H1D`M^HYU~EF(GhluBsXjS=DrA8b}2RUeD~7sIs>2Zwm4xuJAzdnie5rkQg;3g1 z>kq~GyzQvvo|gorf(`Ov3ggnb@$7d~e{lGI_rCs5SG(J7qbJb%^n3m1p~32mytdHN zZ8#txXkgn(F^&73-2vk54$rg+PklG;kjCC=DCK(8ae<=5d~$^4WuB0(rgjEM~ih56%snrJC*^t=g+gSCE}>dix) zFW|@``|ac2bW(CR2&+>}JMz&B3;v=F_|%VC3DByA2*6}!aY`T=`rY|MI8U;nURH7E zBP9QK{<59Quf4E&Cin+;r;_)tZVrT2{wU?CDSSz;$0fB;)Qq;N&-|?MB6D{l6 z@1Fqyw`m0QgssuftzFRbTXm>)1ChBSq)^)+(vmugQiM&qs4&%pYp%|cJmAHlJ?-II zAeshaB6sM|pTGH*%2TzBp$*_xR&-q)fFv+4m~LO7qY}tuiWShU z!Z5zVaM)x#a#{D5hGBl8F6@3Kagu<-{mV%<6(*#H_Q`5MjZm1j!9!S#Jjo2jGYuh% z741M}nFJCM?C`*9b%g;~D1(Q5Ev{jNC^Z_Nb9egu?w((q#65GNa|3#SU76bE` zyxe)3NhC6JSuR$58NtO-V<43fY*kK&ejILqd>m3N6r{>pw6P#ppd|GyV6F@6h(J}dt!{wi1t+b1UYU$bxTU#9g`Wk%Pr$CE6bUd48Ox{E(4{P<*n@NQkV2GF zqL2{R07OfUPJwvy#&WbsCZJ`Hz=)>F4N&U6t#@k_Ry=J^lvKb1q63u194gz{{7-kG zm$JQ$sGj$?rjRV@h-wlUdWj2k(yAkJbdy|9o&kVU%-JBEr2$AxplBDVAcP^ZLjzu4 zts;Z1>Uz4(myjf9;n>ndv1?(>V2Wuz;fOe{nl73Kz~8zaNLw7p_15exiM891jMgfZ z4K~_>d(`o<0gW=l2wfW{{tf> zS5;`&+?k_R&IYk(kfl$f}`{lD0$8%kB)rZ5N&v5zO zPS-XqZ{%sPM5o)a%N5Q!fD6a)dsxu}kZPxoFM9X=eyDQ(thsH!E;#_9hWQXwXMxdv zbY4Fnp~~B-r=gs#6v5xnsnfnMK8crwtg3UeIv4gbqt^pk6>>4CHAjSfW|d9^v@W$gHsYQ+hq%*juwqQ)0XLq(HSM_ zR$L{&tTV%0!1wBgn_0dx2Frtz*-ecDFJeXK<&uNi*UDm%BCHgF$8w1}#&*76m- z1^LYAko(Sdd$M)XCd3&$*FD4v6!T}X;de^9a1QULm*s3kHpQTVAR3Sh;D77#Y?L$# zAOVp;P+gvR+$|VsGZkLrPkQ%gB0CtlUfRqTF6}u#c_O+SY1}mdkpd|#%loac)vaBq zDlxU*tN|7KJwQBufaW}zR2TGPWpQ=xl~qyQbdh$=dOTBRsDTD2aWRT;fim`B&uRgQ z1>DbX@^#Se_%=~;=#Br|Jxza{tG&>YrDPkBH%!2U1!1Lv2w%aIu23Ij`v+>92 z{ZhJM4sT!ZIRHw5a5uOVF3U$pu1EBQ1^KeQK?E5C4bl)IsEewJ4la^wHJZ^#w-BgQ zJ*_+%-@o3cHw%{PN0KYD(AkCzhDjL?`k+AtHvmk{89X?m5lb-EH8u;wcgoGd%WV7T z7w=zLP;gew<7@;g`h?M%>SrZ*wn_cI3*N)@zh`T0xtz??v^;E!v?p-O53J14 zVaWQbi**>OYJ|NzgLmAYC}ht7VPrxn^ku7VydV^oxlA?kq~?WzMqW_sJdnVY0et~< zJN|C;>)u)&2C<~1$7=a4ET!@eq2EQ09`tk*zwL6WV`p#L@4g7ws=4VI>FMd|>FMd| z>FMXm>Flqmwu^Oe8MBHgXgEF;BDUufNRiJ<-bjH^fO)rd49vyU>7-rgVb+y>-MzkK zf1P4TKbWeRYcKM^aJ4V4qp(4l!BD<6L2)W!U&AK`Xh2{AnUYjcw+39NVM^ScMppfm z69i`dt`q~`${|5vplKkk@^2;-Kt6sH>+M^8R&CvqLVE+)+_&z#hA{Z8U0EU86$~gr zsZ!3jH3iKKOZSmgp+Qh^Bg=trY217d^{3?VzORkwx?!k)5-W+Ob;SSYNS*bfu`d<) zr^HNQyaIdBgZFd`x$^ zhw5pMzr%k6;k~*CGeyCCTzY=uBCH$VX_UEHMrWmyWmc8fGaYD_`%e@e*-c` z*@5|;q4%$!KZ}R5X%)7?w&XQ=K2x!_)9CfGD9rWv9#X2Lak($Kd%@n)@z=8QbIL5T z$Vfs`XbA|MGF|HfcuB53$B{X31b8jxvRYfQ6~BY|y1(Y{9*FOgQ!gQVX(QAS&@oJl zS*4!sdmfDBC?OJIshknogYI`vv5KdXVoZ(k_dc@c{>XS6mUmCO8IE6tNZ3BVK*ymZ z*`8jAV*W$0XuDxi?IC>k)6G@(4f$t?XZ}0@6T{U0^~sSCX>#d? zg=eP%O=TG*!iXkYJ)ITiD~Ibg!Tk5zUY`S>^xz_Hl|Dw3C*X5@A0xhGvk~_Czj57b zxS@Ki`a3L+r@RB^ZA89TQ~+pCKQZCC%NWa&$TG@cuc?m})csIe=ny~at;ALtVFm+k~)|UyP;kTdo zbB93T4lDvWmXK2p5K@B=`sO{q%|CIRa4R(xV%w~{p!tWZA2i2XxJ-xVgAPjGskwpN zM=N{mD)z4Y$`8MQg&%htku*RA2@^L0{R4j%y_*FbWCCU}m`ZsR63gWBc??;7--qG% zoXoa@dwpZb7`xD9pF^WnBy&WVq7xr5!k|$_pHFEDwHm%_$3XDfh!aV^8Vusl9GsEI zFqKt6Ps4=R`Oz7f(9CQ+8*9(;(RBlK0Rkav0`ZIVe=YZrRo|rDzAw+0l)O9P@NVoq z<7{r~BE-;RCze9Mz);ZS&N=YCc>G&~ZH>R*k-H<}Rc6cwH{U^LVocECIdYv;53$+A zeoGQvGX#75yKOT&UUAoJ*P@oE&$=^-wFE5`1wlyrH6EL6h`Lq0J3B$MdQ+6&iAbT4G=j^FO1c3 z^UyEIWT+imOS5ff(f10AFW4J{9%c45lk_n~2)(drx8XXRn9KneoRk#Nw^C zxC+Yr-xnu+?{Ck>`Be_HTV!itVF+~yARd7S_q{5G0fwZ?VqhH_-E#?ohjth5&Ad@> z{W3CtleJ8(ZnR591>@~@M$?S7*aSeCuE(Z=_llf4l`qcu2-prDG z)j_l|^-T2ljp}F6_b}9TGeFZab=gR;0L*fVp%Y?8=Xc@wY}!C6myl!>;w)MYCP~9h z7S=2wu|38Z}N!l?qSsLsOQ-Dj>dtcRag$U^L zIv(D1GdpdH+BKrXhDBp(^$`N>F9M@WG+%kl#$#x!Gghalr)C*_0vl+0G-q5(ED+VQ zkCb#X&fJ(>?mPAAPi?TW@d?5{j<1s@eQa35VN_%vAZH4$App@7|bxIK*b&v&^}(PYj~tJw|W7+xEzVj>=|2bHU;USapDdk40i0BkdU!gTv3Cc zsP|gz?QTrUtZ16_D~a53>*?JCo^*uf+ivfRmgk34HB=RUI+%geOjy3U$igyTheN8g zu%ye4R%F*aJJ?-vge;00TE{xn82LVSGF4`JMOQ5?m8_l&(v#n6qKzikj>(qbxH&#? z%XJX(@>T|Dv5hy7Hy}u)h=%%B!JRWvQy~zU4UL2`^DL^2>Q^Th1hB?-HCxg` zAx)%Lw(7n1t$?tOZmfTL}LleQ0;a%sfuY2pgx_g6cKsm$@ znGe)B|BK_%WBQTW4`+$3_c4yNJ16YLp3jHE%;;+6Zy2b3LyiinE~D1-?wH-z(}l)S zXtGw5elz_dJ^zc372$Fsk+RRiiO<^KkI{yS>5LtbH3X?2dUS=EWcxk&Lb6lLBtIUt+#b}Q=_SK zEgF=jgJC|M$t>uMH_c`#qej?E`Px~`IoyOW{|=Z}3BY+PVUnIJNdU=rVZQYCQwRto zjY0+6Fy47p6jM{&{9L)>bV1#>j5oEsJZqWT8!AjT_91)JX!Lks=KE9p0x_ zmRJyv;_am6K@{Ks4)dF-iqq`&VNzk9&L7*0TSU7_aY5IlV<@O;9;iPF|Mw@6fo*JR z`4zgisVkQgt@HTH;ds9jhwr&}QqD`B47jX82pRZ!h!VU5Xa+XWwb_GAVRo#*3j2Zy z7Gf;TUsozsv{KN%$fZIop>$0Wq-<@Cv4C%H}V9eHF5Dlv^oh7pSAh<8o^8T6?GEWL3DG$l@Yq2ix zFy;R(J$Bl0X9L{uMV9+@gu-tIrux*+XgEBXVM2NH8e)@ zW;3iB#kUDn(9mnInf&KNf59!K(la4~&d|*U)f}K~#{!Xz=!#@`l6k(dW(_37$%0rJ zq=KNv*BBNQiF9P@!|KVu;h%7sNQRZ&-+m5<&h4K-CI0Mgi=^p54!7~oG`ju!Ggg96dUoO=yix_g@c0mqkim0}QzJ6|jH3($pGFUr@S>wt%C))qy)gc&x=3hX05=~0 z_W!qM^FD`-ztrcgSF4sx{%(&9CS%~^kDE9F)>dZtIsYTk}i zCkkon7TX;^$*%(jM>82x=8|!{!%@>P$hbCvqZM}I&S9LR+)AMXwNaF{t;DLeRZ|Xc zG|*$#ZL+>tX-sAbMUL0+LL zcegtYmftH|)n5?-bo+2oQ1H+5iPihpslPTgn6 z)yjQZ4L=P}n>Xv^s4Kq&MWw)m560Ze+H?6n+rAD%gtXitBZHks>8h8hp_ct4+qvAY7#tP{rt@XV&%@r@8~3ldfk#PN+mt!1 zy-)uN@U^)_eU5&ej778{6Jr1^^pD3BJ`5grGRyPnktXgkjhi5vCbi z;TJSDKr|0n_KFJg@ONS<1bUoouPd+AYIOeN(aCFjxzCY1LFCIxmnF@7fQhif)TPNbP4{=^J-IRD-Dq^gS+BaiGrBg+@~iZ+5|Gyt!W=QKaN` z49?~c_Ga^!j#ncdErOZsp5MMXMIDyQq$V`}BboYjInJ0K1wWEToz1>7%c`fjftTlH zy{z3d##SF!21F#Fk!HGa%}!dHQ40!YlrX@d1{ex8nd)Jz`n&!$XUA{8+a4-07YpCc z_`2nGOzE1F4>OO5e9)suo>un)0KL$)ReS_~=eLH+{_@Z-p3UW*PQ|^iVT|y~%lBc| z+1bC7;*YVC$x%>8fX%$cVSJZia+G$?upxM@(bljWCfvx3p1;2#vvBRhG%!E<748yOmeUMf_iUyzxT==4&B*BS~(n;JzN#9 z=K5?Br!r_OC+aWaaK8WVyHeO4#!`8ULAchXTj*k;C3Cjc!~UC+K5} z4fs|SFfWh`;LOqDTI0p7r;gAAJSsK}@AMs?>$2Xq3zGGH#PU<@-gV!L)XYSG^Q(5~umIof!8YiAh@o6~3~cs}12*#LL8lDVH@famaFuFng? zz`=tp6KJ{QI91KVkC#*!ABjvG6d9^^-XrA#g56Sf&9x6o`Owe)+*`zdt+wW;7UkJ( z+@4#EVpa})_JjEVNq?|d`m{iS6v+_K%BNU(bfW0p0m}ud_nT%ZtM|1otmYg!byw-D zm%Qx2qz>;-lPP+ceqxo#NF%#z zp^2>g*b{t0T{#Z5u0r(jaXp9YLx&{W33id9{Zu@<=2BEkhAG#LZ z&%w@{#_hVcucdVD+}?x~F4h{J0ulxtBpzqFDSHIEp#{6eH2C9UVDNqi=&MuSLUQu< z{n@&6Aa4r4rS4}HEdDt{^pOsyF*TZ}w;9Y--OEk&{Z99T$HBq~F8>>t?F=9o=A}3y zG(pq7WNnCM90)CZ>fn>%n8EfmP__TJ<9mczAyuaz+$U(cnR7gJTTZNw9|Lsszs)iW_p0?yR zlWv~eKbF_`#k#)R&m%9iR+rp%4!Phl=9Qm*CTL24X$|u=Po1~>`mKf<4eBwFj7*|o zVJ2%G-NA!bg6>g(+9<>(8?4u%^?Itk1(59bWDtIhh5i-ZzeCA8DgupexN*rd1WnB8u1QyI(Tw`-SF2 zig8THz!TbZx>P9TKO=*Pw&d?Jj`-Mw&)Dlah+wbs94?ODIkANO68{r}j6j(6wR?w9$s z=ohwkB*^YE|Hm6!$FkFKVSm_%7Ypz3>2^{1_%=1+z8N7VGzfT?{_})2dEatzh%<9? zwHc(KZq_y1MR>Umm(LFkiQ~t&mVxEAcYgJ1=xtJukBASJX2|ZW_x`ehpNp=SY{a%^ zALRHqn+TqcDf2=1JwXjm`mpD9|6gCOaMPrP4YwDp^(s0;Np{eR}~_#cnzeV=xNNuGa&aN=qj8$U4&^7X&|9n`Gg zAfUquyi^*jsnNMKsMqa#`f@d5tE*?5dEyRqvvhQOt=Gw`%fZk8ezvh+*Fn_iAW+1E z3wEl#@bjh1Mu8jWCar8=uiqE`tA zn_X|8yV}@QW~4soUNcsZ$c%!P*Y04G5(myef}?aJ{cXzzGmzD3fH z(C`sTnz5`aOdi2=^wE+0|F`!AZ0r1|^8O;^V+PZHJ_t$5%`?r^Ef&|J9q*h%dv^`yBuuWqgk` z(7>Bm%J}1?C3))I=@rgIMkvVK?*DS2VMfAZ3ku!4cJ14@Zp4`4MC2k90_pG2iah0} ztq}Ps<3<(6;>pEO3TBRN9haHgVW_vE?EYVS@9JvA@A9C|#@)LXELf#t#EW+A+qWVI zgTVUK?e$oC0px(kNI&0HNrDNu zfO}--c}VR{c3+8vnS&xP?B;6?Eb-J`T)-V{SWi*rVnuePX>}dx827S3fHoJa*S39(8T9V{Ii=t!qTQZvX zt3Bd?FfuHQAsoa%BsvX`btbp4~IhvI+Vj7=6VpBzLiDL6iu!LowMvn~AnG_&0NK3&>Pf&8AFiIim{ z>fZ^9)*N;R;cN0VSipgZ@h$q;eltNBAhQ?YuuAOC#A4XNAF0rk_Zyn~SbqbTz08s~ zY-nw^e|wD_ih`zs%@9o`10~Gkm8_48>*mWzTW^?DCY>#l-)N`hw3q}y%NmC9n9dh--2QA&nnL`9iQLZb3;fYDN#lbs66bBVX{cY8%Z`<)MEUs=j)`7MWj zZ)N>ed^>CRsDwQ9^z`)f^c3`@^z`)ewDquo4_L@gZbfef*i*eJsp-)(u#fXuhU5ev zfnd2^?aP#(n{{K!--he2!Z^|8!HF4l-gYc^hctR#{A3_5h=Tl@BwKqXYtIO+%raaT zW+&ui%nRoIK%*dxR22m?0$=$cMlXP(e&AJcyz&I%z{ek(>vJABM2L{gj?9md50bx~ zKD^v>6D;F&%QV(|9IwGgP}3{MP&A)M9NWOnGWGA6)>14So!ftEH9MfhP7a#+NI|rM zXK;mGAnNwyTzhC|KBFhrGw|%+7^Qf>Du#m%bh7?edH3<(pQ~WfEU{Ug1eJq(2TKcO zt(Al=g@uFc+n}%@GeF*tQg>9uh^x8<*cq%!jiN0VJ8f129XPloUJmY}Q((a<7whJ+ zyDk*qzqnGtEbD>9yp+?x4Tvh{V@icPMxXnzs^^`4d3c?;tQEbh`+u^#JYV-;(~HRA z-yr0S!I(zeWXxVEqY(hLoUEvtIySU)bY|%2=;-OlfZc6|0x)J~k*PTVz~SX|z9DW* zv4263^UU6n)Rq1)aOO_$(U5gOsLDv(?$lN&^h!Z@Uj{p;9DWym<1N7Qa9-aH)K>a@ zTSA62Gtr(AK*T4ley@Y@yE|yEvpPFgQlK&2FA(l8wSMo1I%9f5I>8Et9?byZ|{qQo8l=Y9H=Hx%-+QPv~K{iA|N=Zs0D?UjM@;Eux_W zW@xr)-{RZMkeyv6J4;JTOA8N6OG`^jCu2SccAcF{0S4#txjzS(xMKP&F};M9UaArX zG6B^-U-5-iN*DbrD%L&9-EDKk?I~IiW3I;{blQ6pJ?6?PI7Se}9yQ%bBbxKRelI!R zYZHC5QzHfNW_mXqAW<(~yshkvhH@Il$j6_N;Np-27#UhJ{SSr4;J*EZ+6kYN%5A=b z>pHGZWzCta!15NEpLhR>(ynXwK;^~TtlGPF?c29*+@W^v zE*4NbV2AzsS5iRbtcuRA<`Gfu67pl;q*fFt58+B9(WFTr!m@cZ2^&$CaWhzd)v%br z$=^1)oG9L0en=)q&sp)~L`>z6q^s4$T3|%Tohmd8mNNR@EUHbOs|kS2qi&CtIsBhl z4Wvn#Y&}+F{$V)#+P%E>qxP(sDrV?pmTM|-hCB0NqP;^@1_(vo``)hlo}QkbqM|pU2PZrL6jCBok|fnw!m{cN@u$0zT*1+T!yc*)d^-NW zpLpYXh>m^q_U)Gc@h>m9u~F16)O4rWG5uEuX2Kdxs#z1JOIRPODlGWa*W}~>cAJ+d z(b6`J+a~>cMy=C~r~TSG<^X2InAETqXYsF%d;-QeFJJ=5~<tS#sJvQjc3_hNQitig9Bj8O5Gn!ae)0(me zXpM6q3ReSHQOc=X?SeajtaA)8-;3FZN)XIN-!GKo4Y%K2h{#w8CJ6u;5e^7^ybH*_ zt_B$S?B)Hf=Npp!AFk86b=Lm=+iz zbPA0Tm`b1WSg;Go&^KuR6y}*nyM_KLJWuWVx?Gz4oeQkp4Gj!6EoCF#Q$O;+Qaa}B z4L1<-DfYZFf$AJv4*I#!`MbX(kH?NLX6lz9afxrlGu2((2FBQw;3$VN?%}8QI_;g) z#@auJ{YRB#btG(TW2|OB9>%6h9!5q+2Cmw3(GYW*W!~0e;<59G2l}sRrjgGn!0#-irEH-iK-|}62~18^T>jTW+2~?! zodO{#YvT4_Kpv%H>%6{;*7m+m?}ftYo|}t{i;IhP?c2Dp;^N-DczxY=Wh2DI#ITd^ z#clAzb|GLuQ24<*nBE?>?EjO=m*U9RiPNV}ty;BeaM-b8#fuGPX1p;BYyswL5II8x zt*YZaK!KxT@#mtnd3)2LUkZrz(UY}>bP-MY5) zChn)!%%MQBRP~1^5Jt^3UI6uF*)!7OaoDQuzIAI_7W8eR z_pn^}WTxBEEvq99HNzTk)TTP>E$WwU#|-u$6to3;nt>i6dbi+piF@7WJq3I@>0 zy|j>8@c3<2<=LO1hl%W4haZWkwHr;W<-$RCpI43Rd3&FgOTajV7w(x7Z*E0Wo+SBM zRn@Ovy?XE5xpL*pmn1(1@02<#OyJsG^yFUNm4?Am%0>gOeop0zRQU zP5<_-o1in=z26yK+biGr{Z7Zlm&tUpFtjg}KQGhrwW|!9)bC!sdcI4UIXO8wIW_&8 zh&-%hO*1LZCs}w$UGPUN$$i;^^-UoK_#Qj0_Gl(@e{SF0`MVFLK=Td%ZfVx&?ctc~ zcI@_4m%CP)oodz$5-?!Fjg5^CJzQamQgMPl!H#73ewqhO((${7Mov`YM^nS%gIA^H zHt2ayL%h{#Q25I&@;+xH%{IY%hJf`qcP?DHawV%)uid*1`}g_!*S5>z*Rxve{u+s_ zqa9u<(X9?|`!2>TQOI=N0^Ucx`>QD-hmzgzYu3l+eVR8eVq#pma}yEUmo8knpd2tN z4_B_UM^A>9?OLf#pcy5q57%WijB@h-qI}c2h5Wc)JVTyl4^6-LW3n7w-mmm__io}` zxhmwFkKDO>?d#kfDVHvU8i58XVihEr_N)EBkL&%rxi|(%fX+`iu)y?VIoUB1qr?{q zL|-5-6(p)6C{Tz%RXmn@eayT62V#UEBeRf{nvd;%1C=UNwQAMeOSZ1vlXC6YJn0mF z^Tdtl`E{;zs2?dJKHBdwh~~H1{g?j)V6AqXrh)nVh@KzWt3tFG;rV`0K6rb?x@LY$rS{Y-n%b`8fGlJ|BDky`SalG`|^X`Xt6SJ)Zm! zXwVPc!dq6^=dd@leC@ip7cMw&vVAKmH(&P3310tPgMiV2G{#Zeb`^BW|8MQ(9CYBR z;vz-t7!WXm_8yT29jFki!Jy3NU@N$=VO1EgvP~HRvz+;kackmmJ?BdqK)7>px}aPS zAIg^xO(3T`yI2&jmV%BTW!OHlWO^-->;aGrGeK5BB&$^TYn2Kij%WN=>ef)q9;RAC zn&oh)t+?Cm_ZfSI#^+lhDOqD(T}tA*#ko>XzBoyMW5P<$9&_F3`KNO`7^^K^_ zVT($6Tz}5CuU6RrW*1QaG>IL(8nyxI!V(gnc~YfHl{UkNxQO24o5#nJl9G~ll9G~n zl9G~ql84%35n~DMU2V|hUg3->h3Y|q*6%3RB3a#A?5l~-n zCMe9aO*6l=thBT8DebS5GE-Ak6LV|a12=QlKAn2c$d1W$o}O`@=A_6VCiH6$w4w$rV3U=3EAWO&l1Su08}L(A z8U2<$=Qen`n>=9gnxt~XCPqNWp(6-E9OMxUMJ$24Ffy=q>Fk1$J=N6_tR+;VjBfso zY1Nci$5z(PD_aE*16wr_KMWa>!cEk|4{E?b%te^W3nUa8Y8F@|0kiFpRL`rmF#3}J zJ1v^wc&!#jAE2=We5b~?&+eO0X^7|wS$b{m*E2JHp7uUiW}!^nMlM z3m;=^4gH=S|2aa{>h|5Q;*1CShQsGp zt*nn7Me>Y-g@dQa@+hoi6e>oe%nKhcU8sh^u zT5X2Cx6$8t9M*QPm)?Xyz9gjr67%j@Io#`N?h>>2N=n){D$_GFh_%R+W)gl99 zplBadG6^^fg2@m@0t}FXK@g)fuWZ9u`AI<&dqrC-3oCTI9rFjHvCGZUaZ?5;P#`;# zoE;;ejW7m6Vh|Ff>KV4S>xI`frR^n_AOnzlbXS3<%f49lZ(ZeSu9?sFb2q(kTgX{) zO4{dPu6qQwuU{K&hl^V6%R&c1kI%OfQySO^En)YE@+Rus2qifO0PHIeX z0wD*x`x8TI(b@vmkW=Q@1_Y{j)KVthmj{qFhk1-)%)(EA$K~}L3i{|<<;g+h;|R41 zynG4j;gS4v3ws6`WTVuTip(@CHwRW1y6AT;T5T1rt&T^PZd7A5YUHhzjbRi+GmJu= zEQY3)L8<<&Y*;c>xD{}v^-Gw2hD7dbl9raj;tSMw${JYv6n z3dI3-6&+eQX`Ta!IvFg`T^GD?l{(w(F&`oIvJ^zmAqB-q*viJ$vYCqIfqj!&uoOhp z{T!bp&aE}Y6P6rNTJfck%T#N2jMyrwhf@b?g$tCTrYpN1`ELrjNiwYgT)M32w$&=x zN&EvBPLJ)DOCiNwm}(ilO)f2~AW$y2$u%sB`WC5a%0W+) zDouj~B*@j&7+IfW17o@oTJefZHaalZsj?E1Y$B{|cvI&t#MgFdBTv2mEu4ULta6ypBdV|T2<-fp=L@9WQUuJ5uTT(iX1xpm!9ca0g)xM{V%EkvYN-^C) zvPUrurR~FRAUA7HN?$#8N?Cj$z_caARuP&-9mYLmp%S@xYaUKCYPP$S#*lVRD%rJ} zwXK3Nw|7f2QyqheGtmbPR2X(QpG4be$e|8fRoK)VD1{4$^G#NW;gUdIqdl4jF|#>% zdMO@T1ip=Ph1ydlE~%p&*XrRl35{>sjX*dibOLe?x`@a~okDAkWEm|@t&k2)3KT9v z(EBJ=&oa7ACe3;EOo9l3%qr+I#Mff@BASDRv$h(TemAna)O$$GF6SFeI7xc-!)we! zq}0SWH?WqntMS}#DU>J>8WrfYRQM(<-&stk+*AcN-aw+3hCXE*q=m_2d#7ZNZ4CP> zhcjvuZPNWYdQ{|9vORpa9ur8LcNpHyj#aqfrvZlT>=noB zI*V)w1Vxa5VH^(%@>Hy1sp7BT_Hu4B2Mum)CxNJ+8@fV-@DsO0^0Fb^gY}Y}BRzxe zmpY<@Qi7_2Zn~&AYW}KmT7tHVv#PM1S*V~)j{h2n6)rA{-$|eq&xhdHEsAk2tgR`i zx{rTrs_9ql^D(Ss1gO0IYhPvWIw8-#`aU7x>^sX6tpL0n9xSGJVHc7y`hBp41c8^;AeEL>PI{+TBPlCq=`qU0yeI7=VoNeeF&FY3g$ZjBHAUH=9PDVZN3A6RR za)CFj_fLCvh#GiMX&|T*Aq9qEJ}YsFSAb>BKZ;+^EBRZv7$}!#0qC_}lnlkJBha!9 z0?=s5U^-sso~$S}j9hw14yl4P@36Cry(ZAvMO~cI`*d^s4Zp$2*)h7>Xf6qcuN@HB z1_ynlb27F2DwR~!GnC?8tW@S)Os$-W2@Rc2OJhjWu{C_hDPZ~ckkT7MJzv0Y9EUOxP@6w(f_ z?&s%tbY+MJb*m4F`Ju2%b@=ybSMxxS`Q0KBhvm&5-Lf&Sk=l)oR(^&d;4;A{2m zv9p~UBqz?4F|wpXjx^&4*(79RnzaPoG~Z(3RMs^Z{X@H<_*E&!GD0~N2FW91LyAUV z;~M}@nsN?E!LW(OM#jiU#FStvesa_*2k@nuU$Y<@Uz7FFyYg?V?qz&ic+K~F%zGT{ zLeICg?s^qK(ZMX z$)3M*Jo!iHi?}m1N{0BX912|Eoeow}R0D)G1Ai}c$^M&Pu-IuCxnrPiOj<@Gi-G8+ zbiMy~KhC~y|30=d?ig9Y7A^(4McNE%VDFYlBnk8*{~$d=Lqas21jsCg0~KvhF)2h8 z3moO!N4%UZc6bYS8U~es#x&8KbCc=&NLaLxY<7|*KAJx{lglC9yw|2_Xg|?qwUca6 z(grjl=POui+wNg?+={N*39)IP7t!_a6^_tSJ3S+|wbn))q`uf~0r|K(XQCa$CNM2u zbLx~ah_$;%Yg}fCj|IgWr%^UW=Yzk!eP&eGwC;U%C#d;IuJwp8?mkET5uL!Vv(qZSl2wR~Vj9T><*$}xw}MbGC>C(|tRM z6QuOCAnSeB-{jjjDkPDmYIIb&4L%`)Tvmmc!E>&ELa71!slYL`0_XGo2FGBR_U3+3 zbEp5PJsrD#uZw`r?Eil*UieYq0u7y{E95OeprQzj1R(@gs#efwWF>|8^4u|O zW&F4oOU}FQ*myNt>Z?l13c2j;WW|w)@p77()V;&17LqX>a$rnR+^#ABvF4T+oQ@d6 z7Lirwsg*N^Uh?C(e9`A?eS^55u6P{nVq{eZiW_S`;v)9-r?o(C{yQd3@lGW2v48s*Ls$Q?Mwp~zfN!{;M=?w2NPN2$}n6>s9u!Tlb zo{Z}Nq7+J&2$NljzJp>c-5W2ca;p4JSD~kPQUlS`;=#85b6I>H!Vh`i)ABxN{rlB- z`GMQgb^9@{ls|=o#~v_fQZf7Go_0@O%gsfM%V3dV`F1uV`Eoaj?BVxCa%!= z&X3}c*Q=4x?`hB>h~S8TrLV$wP0`Zc_ z)kr3DL<#_zL`IJ~F}3!Xkp_Rkh!@>77i*+=v~4i9(Q*PAHZe90v?OT1kkEVP0c~7qBv8WbM#e^de&0=tHZbB^kY{vQqe##aX|PBv zW!8WWQ=1z`Uw|~)Y-pX;q8m-2u{J&AIlT@;fmBqA?A2nj3X4i;V;XE4O|8ht(bkPF zWrf;8R%g;^4ercHF3^C@w-iy+0SE7}j9-P!L3pMDMVd@&)wH8Qi_+QQM$$qic%ZpB z04E9|*ubGET`VM_9%2H#ImiR}8c7uTwrlzbBH2d9+Zz*WWv&Yi+G?c-!rs+4+r= zwYCpG1A)t6bL=7E?DbG9yNo+2@4C`M+psm8soo5j_Mg$I-79oovgl>s@i%LA{+i{1 znA}s`be`XfwThwdLey%pcSZ^)wVuRsRu9G)-@dzNw!fEliThx4YGT5+N77UB$-Lj6 zGS~03|6jknJye7G2A(-qqKY??Oy6;l=)bqx-*YMpx$kT`i9hBxRU3=>Y_c zfWsq|S8m}v5d}{eV+23#!ZTTwE1)Q&9^SM6 z1NV*#3mNlWRK4EOddg8?O+xZ+v=r(#8@>J(`}JQ}W8GLLp7~!?yZgxG+Av}d7eA<- zvs!=Bi+)3V^#?`LhPU;2*%w)t*QUXrN5us4W}%@1D-fn9@TlG7+hzw>FRgQStLg+g zV=)miE|4<~DdinIQvOFTv7{b$^5Wv;+-5kMTy)1P?bzi%_wBFkb-J62{syZ3dvNgm zRZ5J~o<3(?)@jqAtnLE+@j>~YeVn#Ko$q5F{Z{5sZ~rcv*2i@)P(vxUmYAXS(DjcH z_*#xvR?0qrZbtH|&+LDU?Ei7{H#|d(U$AHJK)re}G}=93@F#ZvQ`XYs!_6p~P`lR4 zOJBG$k2uT5<(7WYbQL{51xdHhqHMK~ZQ;Z|LLwq2N22;BeXHg+Ha|N=I3Uj+SbxYz zyklvds&d)PVdm~9k)w6Tm|XqIq zLS<&NIoyOMY*^ov85syc^o$KnzAj3)BbMIl;%;v(dr57_dP3DPCe=D(VgLvL2fzSA z?-kc`{dfFWEGNf{yZoP{JN{R*efods86PeJ;kw}P(|i6VdqSj7r4Y$VC$>1-8Si{x zX*`^3O1hlS@07t@zMPgXAA_d6V=;it9X0OMKX;4erz;hWcJ`8+M}tvS6*Ey&n-hOj z_d1QW4Gi6j-UgzeRMJtw>87)fPdF}Tz{&}yCzPhEG|$(C~i92Z<>Aw~ImyOYF#I$HbG13Kmqjs7V($Z15SDdj%CyS~1@y-uC3x;Y6{Bw z9m0z!t}k(BcJJ}&bG-I??eNE8pUGg}Ma1py>-?Xoc69lupR}PP8q|&kUm#mwsMKS7 zsrcSvk3F@Yig>UG9|coY9c?<3Y2k}>^RSJ(NZ^djWe*QK+4nuoU5~cAfWDI~WjL_e~#>qYYi)ojSL%+7C#`WuCJ?tf} zvM2CN)Zg&`X^iHp9W_wKEu{tj?sQjq++QwrxSReH+H+j)?%B?@(c1-EODgY{rE1;F z5$h*60f};V^WJVR;k$dq*?Q^v%`2m8MRcc_$k*x9D%+2xKdms60t z`^^2!rs2;Bxem?w7uMQC$Sx76LU;2DLTUCen|HS5M^jC+{=cWKj;;5Pfx%%XVk}+!n76@L7Xm7DCy)eG3?PW&BjW2c5ecXe5a|E6>r{0*Tk`web=RG{ z?pk*;L!VRM`D)j$T~)iD=Qw-T9d}-2`_KO6;cx8Nu{K=1WApQpuk?uiY~C@KTr%d8 zi!U8J_7Yp3_u@#x=`{-jGZ$oM+p6yiRL!4v|Ll1KB>KNSA0XQQ*WuYz z{`B)7RFn#M!15pC9XrM=%l~5Bj?G8;Uy|?j+OqThgE}Qd|Np%FA1*1IkYcwd%#mul z(ng`iY6~isPh6*^$UB>@*j8Xm$8WanEZZQU4*V;YPx*DHjHa$G$xFqR;$_jz39ch7 z*ru*ZL%LGDf&MzDSWnc|=C;BV&q=p4=m&o@#BbtSzr_lxYjQl1Ua{1GUCleJc6eSH|f*Btp7XdmCJZD9z(ECv3TUujO; zjWWG~%AqsY5~Qw{RyNy3bLZS~>6nY=&Kf;;&b*q%qZb!kI{MNv7cQKC;l&~X=|yQ! zox1wEDO4O0!lW5RS!BpCJ-^g>?LAN2^2n9v&UQRLGjiUXj!%BDNXeiyi9>%BUlp+m zQ&l03$iH(b0wYog8;gGh_?I*C@ex~QZ@#kpm$&)*$78Sn}JzJTx(Jv;*m zp9tSP0Ka$ud>B&AK0(S~AOk0o|95atgf|Z$fA#?U&j!FR7(mXD0rWXE0RGDXwep?5SGiw0+h5_&)1JsA91Mo);pr>a5{`~{!f7JkT4i6w_ z)fSm9E{5J=X|Kb4rLdeg?KmO+$fKLwbM0O|~fIkiRaN8NSY;rjGQ~ligz`xHE zMYvY-iy8kdL?<~p5?B4ueUhKY_%`$xHM3^lOFe|wHobK6#ObqUFPMGjoP~ke3not- zKX?AT*^_79F?Y6Y`t&>RoNs=Otm${p3{)iP!jnFMHk4pr`rkla(!nw0&S0loL*)wMeI>nt? zaTncBubeq&u5Dpp!K@mh%v`u|HVRmQf%$W76*K3~onJwextM0&J^Sv3vjY^u{}BPH z%$q+QgqeXk^XJ(p3F1`TT@B8x`85GsWpz!ULSWVRQM|zXnz^Lp%msH61p;hy=2ryf zLYO67s0dqv1Htp|#DmJkP#B^XEtnIax=1O=tXIsPzi>9>LAUAC@2#v}FlSz%Qs%N^ z@yzL!bLP#QJLi6ig~Xwzct*EE#RZm`rla8QsF2nB?wNDu*(w*zo^2~D9XG{aGIhGQ z;1b)_2#lY8@rB+oiQB%ri!aPipqE@YhMH^&oB;i!5v~(gr~Gx`Uj5I)`a+6@<_gXr z#2^V)Z0kzDgpphoPhDxeMgOzLc-gp~^VLzf5~nSj==ifkm%oFc#+gq&`7;d92H8g8 zIbj)d=A@IpV`aGJdvk_RIzAZ=oKE2s+e9f(%@35ns=h}gV=IvJ28HKIyqMu>e#_s@ zV7RTs!fP4slK2XS50iL=;TaO|V)zJ&+g`HLQF>k}@oa{lBk^K}pD*zl3|~E7>d)|t zB!30NCrUd+7=EebcQL$3;ue zze|1x!`Di@li?dAZZcf)dlSH7zlq^zO1zoj=SsYT;fmkMaIfT>3|IUfhF>Z9t~LGbulR0; zUn}`J48K|8c?_Q}ah>6cU(WEmB)^K`ieJs}MUvmZaK&$Acu?}282*IBn;HHyiFYtu z@jDs*JIOa0uJ}C+|C{8yXkd>&<;N7?&G0pnpTls)&trI-I~hJ(@=b;- zehQyeoZ&x{{3?bkel^3Nll%sTD}E!xUzGeN zhAVzE!(W#C4u&g!C&N1=-( zI~m?6`6j~^zlY(!mV8%a0Q)n%N%C_TuH@%2{9lrN5O$=B3W`b{7#17B>5)86~Bk! z6_W328NmJwpD+123|I2=82*6d>kL=?a)viZeig$NznbAsNqz&v6~B?;D(;fmkP z@V`iY2g4P=li{l*-(ue49V|cxZ-y*JX`WjhAVy#!$(QJYyANBXLy0+ z=P+E!&tte>@^ywQemTQ$ko+o!D}FV@r%8ST!xg`g;d3OviQ$Uh%BxNll&%z-z@QFhEJDx2g4P=li_zszR7UK z?_u~N$#=E)x4#-Mxf!m;OF0Y=N;!E9UnX&#;fi0*@Mk5zis6c1&G3Ioegnf5zmehX zlHbJeqY`gscuJ*ZmoA1YzRB=3$YH!*IpVW4I~#I>Wz}csavUsw_RK7_Ru$49}GO z28JtsBg1nfzlq_B-^}pKCBK8=ir>lb>m=V~_)LlSFuY3QuGjn9U-8`xUnu$N9Hm;% zSNuH2e^l~yhW|q1Z5j zzRqyPFK75h$**F#;#V{L9m#KCxZ*c5JSO=~3|IVSh98#v4u&g!C&P#Q$g-o!aK-Oo z`00}Gq62S9;~B+wGdx%Fa~Q7pc?>UiP z;>`?yMB*I`SNu+fFOz(e;fmkG@Lx*4>+SybS9~|aUy%G9hAVy^!~Y@qI>XmWyqw`1 zBwodE#jj@g7Rhg5xZ*c5{C&x9Vz}ZrGdw2w9Sm3ePKJLY`6j~^zlY)WdD8AX``cgf z-3(8c{2YcWejdY5mwcV!ieJv~b0xou;a-VXGrU0J4GdTOMuz((zlq_B-^}oG$?sse z;&(FqHpw>`uJ}C+uabP%JN@k+khq)S4@f+R;fkNf@W&)yXSm{*GyJELU&V06uV(mf zCBK2;HPu#r8X5ke#G4qd_{|J&ko*pYKPB-_hW|?9Cc_oKhv9#aeAm1E?f*}SyBWS# z;yDc8BJn(izbA2>;d2&P>6J75dWp|qxZ+na{5Hv7%5^rMoy9+ISni<|H z@eYQ27hC*JhW~Amg?BMr@lA%mEcv|*SA5$pOP*S1-YEIm48Q*-iI7m{Di@S_r6%y8SsmYiCK zKPUMO3_tm1i{Hrbh?KLO;V()#D;QpVyCtWI;l-a?_$r2bWV#WC*M4sCI~jhJV@-7R9; zW$R%4&ZvcVGQ6?X!gn&fcCCeXF-ir>WW?2VS3W`?_8v+z|6 z&+D-82*YbPTX+YoCJbSB!-^_5E z#Ah&E@v9hK{+1=Dn&EldEPOG;S4jD_3~$_N@f#RkE594l$nY5wU(WC@X&>ePlpV6) zx8%E|KT~+udlv3y_=DUDBR6Gkk@#m-6e%4v~*7`5la3EAdW-7k_H;cQU+D>eYZ*QxZt)u! z-t(=6H*&n!!k06=SmG-fZj*Qu!+T`9%?$56WXWH}@GfaDHU3g|n2~C==PEfaQ+T$- zs~O%o#Nsbzc#qA(YZ>mA{04^SIW2x8!)+-RzMSDR>=wR);ax*5youq(gDt$7;Ss6l zDvnEgsqv<=!-{lEj!TUzE%VxJ5_dD)eX_;R;&_^cXEVI#Bn!`Bc=jn4p2zUUObahy zc&C(8%kMy{csawXC4Mu*Bhp?g7@qfiOP?l&&-k8&H#0nPhJ~+Ucw?4@M;Kl$ z@eYRDvMqim!mM-raZ z2irQ6@a!afXA02OOtT*T_8%6zM-c6)OUUeFHj(^>N`J#7bfBAdqITLci7Zl z@dsAE1_Q9}tS5RBPTwR^f8|MdsseGnISE(a9-_xHl5nz}`m0L9DQ)#vorJ5lO3xN2 z;rI|q;;%LdADTdIwuU79q$IpC2~SJHmnY%)5K7{2MG{Wmic^10Nw}s!T$__{^{o|p zyebJFp2UwN;U_2I9ZC2pNqA=xo{@y_Ou{ph@UA5M)Fj+Y!cR-Wdy??elknao{Ci2b zP1ai~!!wd_R}!wiiAj&$N%+VlepV8GW)hyAgrAj!=Op20C*gTX`1h0Wf+YN$B)m8Y z_axzZ5`JzHUY>;iAPK)Y2|q6hpOJ*;B;i#_cy1D2orKdj;nd&aB>Vye;#!-8k4nND zlJL<`f!Ig!c)U@BX`*`|wj~j!3GRVdG!dqW?Sa_e6JeUr9*8}g2-76` zKzW+F@z*aNW}5@DLS9*Fr8VVbZWhvtVu}1G!Ze{o{u5!ENFx7vx^OcO@rKM|&hBJzJssPd z!@1&bgKe?-@cMuYEi6Cre7`6*^OthTtS$U%jCHJTk&o z7t!ikLG#8hAL%9`;e6wBo2^*;O}jT@euky*+M+{?ptx3-h1j)4-4sAEiv5~Eda!7_ zcv`;&Ps_ryJlSihmn$Blhk1^2DLz6x3 z+RJQO{dRQ=lAl#-^PP<*S@9K54+O8F)&4f;l)s=bzS93Jidf67^K{{v`E%5D zRPFjmjZ+T=MiuDczlaCkh#uS+UxUwpBTxGd{7pZ!MGrri9yee37KLrZ*3du-CDE}L zm)xjswChWw#5PMnfJBk%I%1iZB+?jCdRJQ>(s2|+zOgTnM3Vdo{pDAENB*ZrlH?=z zHgg*WK~^4yOuXx0-Zi1Xn7q>9=D0{hWTDL1pOnPMkdTxG=Xa8LBsmFK$!1m~2_a5M z64@imD5E^tU*bQ%;6}+yme@lQ&m@U)Sn!QcQTC?2SbK`9^J&RciYpUuo|2;?HQzaK7`s06LJ1IwMI+M=Kp@Qc7AD?tBYo!X+itiUD_m|+E;MnDf1 z&7n|Wl*s6*l+igzT@PL1fd{+}&&u1j9}xN@*=!PraKra_cnTZN6!~+kMkpgGHO^;Ig*T`8uvz{maO% za*}Yd^}DGK2a7fcQvF*9)fVMZQbYn5QPx?MlL^)8|Bg_|c`x_|800R0OV7halXnR9 zAH*gm`LbobNVY8epeN6}xBGjQ7iwqKkvLm$gS|A^p64t4Qmdm^ib_LQ>Ba}gDiX-rDuK) zBb9~EB~a+{8hRe>tXfK64_)gj3ypUhU!p6}L#KEn&`1xq=9&LMB&b#Me(cwvt7f$Y zGSD>5-+vvC#~R_vlYB_wemu)PtbCvkd5BdIC0sPvvc{4;N|6dP4`8cM(wqY@wh_4j zM8^$LA*UvIIRJlUfj;6rW$~V|pbHZ`H+Tyz@O0u$w|G?+G$_H#2Jc!6+&o@vgU^l?h%Jc;CJylzx_Y!@%?Ijoo@!HNXpC1#sqe3C`VU z)Chg~F6#XaPznuvs6}{LNG=VH@|Xoe+oHcekFK;n9=O&#bPcJs_+|>-ME=o=+4&9X z#%o^*`R{!wxFxxDs*yj8c z(+2xA#I+^Ik1fJOsZaUM$k$n0;LyuOJIkNHSs3lXH*vwbjQPL;n5WM^g8%bQ@DIXK zqpeBYaaqrGp`mN`N9hpUd!G+-^VVJq=|g7QT)QgL(v zc*-A@R=n=riVoI45z;y;8~p|T5?f80j)7UQ#qKMNKD>8a_zDab&R>FJ-)I?fq~R$Csa79fQcx1U-Ch=+JP{KCtGtX(pSCh^qutn|LoNz8 z_|ag$edo5%^yS5_e~Ea7Z$JD_NnPYVw_X8VjR))8;bJ?ytjjnOzIs@&Ww2J-;KQ8Pz%Q##g36~G{8SPqWXY_EY-@e5cji2RXaB)mHv1jY`5e ztXFJ>xnS#U$H#@!3UCwr%TmUt;GHsO3xSe4f6$~gZ-M`Q5xLf z@Ih{gebYqrQ}v5sg1W7N!G2@ptC&=fDKPM^g_em5MzwJN8qsZvT87&AkDuE`C5+8O zcVcGjqb61?)@O{O3-7X13-r?%>&zoY(f9g=(ay5gpfx2o1{lv9DQwwVIE7iH0oJOQ(o&y=W*j zNk-~PtxzN!jN6gUpcL)th<7hFjkulE7*wo1y#bYBu<1nlRG@>R`X*^o<9@Cff=jRWU^k2W|ms_iR zMSjT*iX!IuB~1p4(xf6j#k@?VI*3x;*^$WbJp-mX7O6_VA?;hxFO?i`q|M>Uq?GLS zac$X4DBSSX@nG*T?NJl=Uup9P;a{cO=*8vUykJ)k#_%1L+RXKp+ML&MkFoxoEeJ>P z{JL!1v;ZVvGal@~{X4k6i|{7gXD&kJ!~JWO+Ai>R0lPD*4TnvO54LMsT>+BRD>}n^ zN+{!JWfjqJ4H=Gbxg8#T*+}tdt3Rx#;@QNCEqInu_@=hZfd>;pjz`1g4!vTNzrm3P z=b>$rxr41Zy}wk#sZfc3#hbwWd$ zgSdZ^BEsdavWiVY0t7!LP^701DXZ8rp}~NpoYeFdP zXW{abgkot>tbNJNfPNF!(-P?{nE+RaY^5h>Yl#=aki@XEig!pBvb5w(jwei%G^dYsq2h7g-1<)u}p<3xMSj?a&3)%VyU8o175M zA}x?bpxY)Bg+|En z2(h$SGZI}ZDGl#Nem^t}vO;C29)+Z%-R-6$*4H2WU-WlF&ENh@Is`bgvEFK zz_R#vz5K7uehxwUdvcg->1Wc3e3S6*b3Nqp?e5ceVdRt=1ULBcF(89&!S08MVeC6S za;P)dm5L4^#dJWmbwj~2*P!&*BoY8kh-tXZlcEF(DdyIHsu&Hjz9ea%=osGn{JZ)K zdnHmxsuilQB5x+Ok5Hnu(CbjArF>Vd(04LYKXHfgBT6wbUlsnW!ujcPhpi}nmCg2W z4m^dCxgB9WoKcK%{vL7bXv9d*a2tyq?Zqx6XKTH|Y{r~X#(zE${{j*J>Av`XlJUjb z85eOkL?rcI(w|p2r!aXXee!Ne$b-x0@Sp3v``pC|G+RLMhSmhy~h7qYhn zGci%0^a|$&@GbjT@&DZyf0MX%;6Jzp0hT^i{3ny**R%LFeer*sh@Z%h75|2$_$7(> zxkCT^zWCRu_^DQWy}j5W3rK^6Bg&o zd(C-mwiK~1jS16^R@C{WkdJ10Wt1*OAK+qM_bE+Q(_f;;k64e-vK~)v!Q+eY_yp;< zJE#7PhIX_NHWw+jJ0A^OVT_-bZN>n>cazxO*!Lv<1CCQlynB6)DZ9WL$8r|?Vi+MSn4x$Vxbr|G|GiLrfQueNMDk|?ccM=sK> z45OZpcuY5L^SENaMk!+c*zP>=xX|f2ZDp|?P3jz4PWl@l$ifq_Y^&Wi+jAIA*q$q{ zji+dJv}_%6w&AIfz6!r3;S!qP+Mw{b6n#0sLALO?)Wn^`x_hp)VndrF)gB%G3XlS7?AJ^tMCB@e; z3ZTPyLth@NNBY{RVpe9Qpk1VgYYN$ax7Kpb)Y`&U39hEH^-~wz5DJ+M~436Ve^Na1G3A2jB4Jtcp0j#A442$+GOSLtme}P}K{;$;ar+WkW^17;)6^(&{irg(znU=;29mzj55V zu?*AhvT){8kX35$>>exTCACMKH6FcU2Lv7diNh9b!yqB;#!%T4E+Fj?W~BXmHC1|A zIVdfR1ma8lp6ggb=w|o&=VeHV zTJaNyv8mGTJP$$oqXAgIX?~r6F=adl={^tD={BXW&1&@%u$I~G9BK&9@Z9Q?sWn5b z=h~ge8&YW@z$U6leGYhP{A5JY;i5ms0Dl~{TYI~63&`{*+Iam4kSA7bH+IB+h`UD7 zPRlBGjBj(CnvR+|*>g_lRu??YD6}T{jK5GT4WeDuwcxI#eyb+FR14Giv5__k_VI1o z?KighjV=BLMD|7ZWN9lujKaT|$gxk5^C0!Lf zjqzr5AKXeb2A2V^BAiyk6}Z79vuHD-Nj=6n(R2*wQM9HuhvtlZgVKYa^=^&X&;qfD zWR+LD^M1sEDV|$BoXUgl+MV-&p=4~apJMr3)Yn63MRC|&s~ZAAaE5488%m5$Sj7{& zUdXOR1giU`h>VOHqw{csOxm1APpnE%ifJY~3dg^L8G)gQweiaoF z?YRXbsfKe2NeugkXNk<|tA$lGTRCOZ&>iLnw2cJ^iRpD>>*od%9$a5+%`<4|>t2%% z*=w^&DYQoS$v4BsR3EPRJdRQvVKb*T$%%v;$>o<~i9@c`gue$v4i;|Os&AqEM{c&; zg2!Q|ACj4lrvyg8M47bS6fu{b0XiLLNYqcA4p8{kKtg;C9*Vs<7wlC%=Zugeq=c z)=z`UeHz>&H2C&$S!;fR7*uQOcT%-?ejG$oHa@qO(lGErEB2fU(RMTTg2<9JP2T@f zB1dOKUhG$hOzmkESxgk3uoPA?oKY0Znp31+*(kX0+pNvZ<(5DcG?iXRN{syw5*jfU zFMM3JoiS)TzST7DH8RfuDqB#2xOFtbGA?R8NWx|Yv565&hc@P6On}T;?^=3M`zb8i z1h2GYm|g)5o$um4$)=20Y>X30Mt4%@_-H%&CZNt$U0451r?%a6TJS zdKHK^{UpLtqZh>Ocji#$mzb_#@A6J0DTdnSwEok<#QGM=_a)?CF64Xr z&*WD)>l3msg6v{#5)^UeH(ybB>udkNyc z-zRQtLLB5Jrev{NA?^rGO8Vy?^It>d-I~8{M_A^4kGQ4zT_W$K+a*HSU;EE+tnxx9 zUWb!DbTSLuB9nc_(J97u@777W@fGUPFCot#9&r)P!ceMrAy|s_c>^24j$#bD9u@tY z-`MHTjWnfdb-yG@7#Nc$ec~2W<~BP<3{hXAtgy9a2Nkb1z)Idp%o~xppN$JowmH!6Cvx-;kPV-s#Ml{(I4EC~z1#@pPMi-w?owpd3Oj2$kX9k3 zMLR8L!XZ$iOOIH_SuE1UR>w7VKmK9fC`=mdLZ5ZTAb5j|jGG+oSBvEfGE)G1fs50Y z9<~)zCzVId+tfc-Et?qt^!)V)Y>@LCdBaVIA3lXn0>{zAS-^SUg zReIs!V(q8xx_y&g*s1-rrP%ehR(Ax&iNQCPqI+(J`1RAjhO5`3Q{*z45l z&Qs(;7TFo>9i-LK$z*f};i-cqc~G!-Ff56&9F~p4OI#LtaIn{fNxeWp9wN!EVDAtd zdQ;?~7I{dpcc@nPk|LiZ$wPy^Cuwyn6gkZzpA_s()9QY#$mx=t7VJ&e>K0n$VB0W@ zoKE`;b<+fT5S>JGgKt>uIs~cTRr|A{F^$CyV}|Pn+HngeaQkcaCN*e`c2^>TwF#KM zvyPl!`r*H$^OL*er7u!FEt=Yl&hLlY;_>3Tc+K|iciWv!;8OcBpX;Io#eNW$p%=sR z=@psF@YLv~UGU%I4*Q(p5pZ@}d99!V#FcpO} zATK8z0$iPO19pkw=34wl<^>RZYwUTozoz#6p&&V?%rrbMAs2+IvFshoKRQY)HkNod z`l4nE+5o&#sUIi(FlEK~WUa&Ui~i6cajPs~)?d|zX; zIzp~WFFan;YGghgls<}Hn(!H0N-MVb!qst1H2k?8Nb1J2@NE~{_1w29St=)O<(Sj_ zVTapF^x>K0z^J5P1(kbi;~0te8uuJ6E!yZjI3!o zvHKA*Fbs??!I`4olt2v))UlJA7^pu7JNXTG?)5qF0dhWv9?pPhYohQ(Jt$&qQ3Fi& zuRj*I=wI3TrMU$&9e>Dq%_HcoeyZe!oVVOJ&_Hy?uagF%RmiU#S}z|)OClJm#!68d z=A2IaeEq)FK4?6FExV_qIMelXB-%A-Y0>tj4x3mCKgVc+`kNNpZQ*LWksrkk`tNte z#WA75-JsiB%guKossDIF$itN4^hmHP5;TjK7CoXwo{dIv9|>Flfz_5kLtHYZHl#FM zLjnyFsPaqtg`5*W!SS(_*2dVc=xP7-Le3xHxi!$h))ID=a1_UB-UDX+t|bdXne=f< zIDQly^gn_?U;M%&ORDSR;j3}l;ILNOj$;8hXAm2S!vq?g&{F{CN>d@^iqMZ%LI2C(+g)KE-8%Kh>d&7=XvGZ8> zG-8)kbWj7u@>t~rBcqg>Anh1FgvA4l3b47D0(^wek2PA_gPaXRSo~DQPbL1u1mB_f z4&vu4{x~eCI;|*x&&2u+T2u=SP#nI(x0j@2h_>inoDbbtX{3#_A2N!rMyS>3@xp7S z--`R#ji|?B{1{IE_Rp}SJe%~~AB82GVNmm*ZzTNj(xQ}yrQMuIYwWg%$6%IEGqCA@ zp?UdmNOeLgT+t1Na~B90kz@eShTFB_KDW@Lyj7+bN=ok%E4^Y$Z+vokKUrd>H%X%- z3|Lff)(NpApTWhqsu-AW4gKojYaM0bTWPH27!Na)(l9u~R#{?XAc!Gk)FI3Q9@!_u zSATHHHU99_xNd*fyK$n?*?opp&l>#K4AH|lF66()Wh*V*6gV5BC!<$PfPIA>H6JDu zib1IP&}ZLYS`ig$Ae|J-X2y7U)OT<;x6)^%jlZ?kJoe5B>Z90*a4jwR%R^Q!wI|k7 zRw|soMNIT{t8hVuK@TJIcoznslN`t!Wnp|-7)zzWXet7?m7rawS5bl}YUJ&Q{_ySb zQu|JCWTNqI_vw|5zJ|%gIK6;*ZkxY&kgcq6XW(KT%Umr+6bFIO{4gNVR%V>G4RsmE zxms#A_m5GG7{CU|>X$g5iw)uuvlE%C9`ihWX0UqE!#7JYPwzx5D{nh%gQy zw|g-jU5kK~=~Ck`6=E?;VPd#Er8HdafK5k?E5itY@@|ZpfN9dQbr^Jq?~e!L7@pGZ zNToLK(6wQI)*v+CxUnPpCA#D4FKv~6ZT`7iP}@*z^H)=?i+<+B{kd;g*vRd41!?4a z^w8c$_nBQ1O#fWoIIpA|;g=AZj#a!)#4q3xvJq&h^l8VxuGH?uICmFLXM6}B)*Z!z zP4occ*L&XpeOC-mUIWriq4_3;xF}a`4qzPV@M$wQ;0MEG5-gs{_*+N_j%wVy9XGoo zCzkdFC9nqxYy+u#I|+eYoccflfN>-Q3A}-yIokycNl^4oQWDpy_DXHWo7(W=9&NbZ zrQ?;1`V4pq1H0Hg;W75Y7Ok!fbC#EDX;AWV1iyv7Wfhn2e?~Xb{Zo23Xg*44_9JaWH0eb!=tL&O3<-1+-(b2r4;VbmhHo^t?(FV z;d!YOD?T9>3GOEmE)o(q&{U-Gb4wyloSZ^Rh~mFy}FkEjY) z4Q(4wc07Zm!M$1q1d*bMAQJhv3h1Qo6wpZ!yyX6bDbr4M$+Ne46 zhBKxb&SsoG)`q8GPV2_MZ2Zd$q?<=DJ)-E3AbO~1F5-D3N#m_vEgXZj$blO)K7k95 z9>uXK;irKc zL(UxNAtx)#ZljSwIQ>%$#?`1G{4DYjF8bx~&`UqFfkp)wmqB;~iPq|Wgcw5nNB0Wx zHP6a9$gGfaGyba)$nk2+x~XgFilR-MiX`5`vvp)*!}$lIg?%{cH|B;)YJMsjTUhx^12g=fN=D&zKQFV!hMK zUnz2q~1vx>6e40Eg}b(Q4VIWr~BmjVU0_f$TUGrp5M^> zt4C3Yox&LZ`5dkpf`nwzr2qLEs=Kn#@D3R2=l_z=LdqLiXSXWeJ0Zh-BuZJ%zZLh^ zL9r)=J^I;TC~QEv#PrDA4ZbzM5%2FN^8X*Mzu#X-_18)B{xkcRkXBEJGW#^d3#bdg zZFBC!#f}N(3|e9erQcU-w+_H5vsq@as&~=zE6CeewcHJP{cHI#vPnPNT>xq31dK&s zyR&d_*=`DqW4#{sGGdr3@!T4>QG57*yS~&GeR&TI0SnxYU1L~ak^Vnf;JM%SS%6l9 z`&-~!swVv`kPB(1f1R+vNZeZ%n1n1_7FbOcCAq!S7Tr$z;27yK=(Gu2;`9dBjR})A z;4YaT_FozQ#i8Tci*0iMIrv46am0I&J2$6&=R>|N`Dcnp>lNhS z;XaGz{swM8Q>>h$pQ7@PodyX>=dZ2y63%y_s*w?};DOeIK(f28^DGB|6_0wn!}4@H zww&VT6R5!GTq0zyRM@vZvUm|*dotRrg~bi#W|@gRyy@3FU5lUHqtLO)`R{- zZ@dsn=D+t$Vs+^<2nFY-;LuAblxkv83`c5~t|!H0kJyU+%TC?c*8K-$^hwAtMf)^Wj!fVcf23Q4x=}dAJt>ZZ-B{*(UayrOVe?OEaIqAPsuGjyKFq zysM2e5al7}gSxSu&f~c-VtT5jaI^O7h^wXM28>%K=57v@h9^Mbqk6?VcmZaxz5C=u z{Vm1NWn$qMf%A0ZUA(nM@2eX^t(s4%0+gwdgIdQW5F@Z#@j$%w*_zz@qkhmyLEn^8 zuiRimk?t=M_!`Lk9sp2fCNe}Zy5F;=-`$6BrK$Lr zVi4!Y5uBSbw788@E%qCmum$K3*|BOl)E8|@kG5#RHXK}yy8Ku_GFtpz5U_IDl5RhO zWqx0D=d1z><<>EjD z9dxp{7#)6`!x{mNC}#A_RBun{Ut-t^jq1RF7ImHsTrkaOr%bhzUA#vSE5qA@XEbiN zcNqI2t0x+zjFFTMm=?$uNOK+BZIvy<3oR6MbVm)sfy{SyV{tUe z>-as3y^*lv8$3mcV&D&boNt3uR$*cUF4D8NIR|>@LPTgC4iBGinYpHi#is z5btwGKgFKyF`AE-8OO_vLwM!9*xZkSKxyH=nlGqwxO~{x_2+&oUQxGJ!?(fTt}aHp zWd;TelW_(XY30#RG5uh6DUe@0$y@Y}K46RSiV(@IK@nguxaQ&onK z$VAON+|I#mX>@Nkf;s+%xt_a#{Rj=zp>-I3&s_6|&>#Z0L3LV44R%U))SZRDh*kZRN>2-r2(e zIn0bulg5bmZ*=2d9vyV=!8)8ac>^;VEMnSe(HXsE_ozgFTYF?t;DXvC_iFVQr(!h( zbxKS`3vhauB4EdNWbKg!H9LK;(4+2;#eODvUa2n*I-WJ;9Wg%g(ZUVJAcfcv#n}qe zhZ8V#9<-qLs!>`!{dXD4!dKgA+70Pf+pjoZtNQ>Wkt;6K>R)h>ovu!S^=U+GdzBLN ztxD47rWCwuij~JR?X^cBjlOb2+Z~H>3_0K_@Iz=eS)ssu07c?Qv77codhTIV&NrL!+!;!^^mqu7V~A9wqWJs|uWJ0JBC#2r(t{kC2EE#%>4 zD;gu-g;*tZpJ?@E&>2UD&w|&v3+9#M&pMo`UJ2za!N!+ zE*xwe*tXj@waZj=dn;bNHvA3kIN9-nFH+0%7j^}* z(9yM(7+rqjBbfL_JccNs zRDncGM45YDAenPf)7Ie4>pt8M-24L|D$%-|Q6Qp_nxU7dpWm$>Uc41RP2zWGGkq1r z8=>lXI|PZEsp@1|XqG429}0NJP@6-vqPvh_nema|IA~Vm6awC%m&5vTsM?~iihd83 zCgYiGP18_es2S0D>3+?K&dO(_q{ozn|K*{#%*u>|_;P~jB6Aox#I^@#voMpvi7O=B zf_79Az7yv;aZaEtJo*5I>*Ei*V=f3zl#kJ>tt=Z!Z%t&JS+FILW_&=O&54-*MAqnR zTWR5YHSfl@i`fm@uW&cst@r{K`CFHn2CL)SPFT6aH?9DR`a*9$T&C6C1rLEDa9NH_ z_%vaxSP3eKF#El*ziLskjT9pH{o9Brm;VRai5+E3?Sx8(S_*756;A7z0|q8;bQjD-?4=F>!`JK|}(xJZJhF z=!fbj-fJbFZdKBIQ3dJ4VpOT9rncejRO-62QC%@RHeaANgu1&Q?cfn`{e?Y7i#$DY z3uV^;EJ3w74Amb~%2#XTUwgqzW zE^2m}@s%(GKFTo??dWr;6l}Gde?`W9g&#a@(z_xs57O98v7ZJm>%;djR08}m#FG;^ zXc|zM%Eg}0ELKTP7k(C|f_haTh&MBYygeu((O;Y8z(rS0c>V%`x0^$eS=mkh9FTbg zMfqK?Wcj3FsK0$aDY=_ok65D9dWPDX_h9TrJ9#*$W0m+ASPpH#r1xu+D*vlkKQWsu zQ=wQmo8|=s`W%2sN|+&_a3Ao5AeU+VZ3s z&{r5(c~Y&u96m?XcdI@rKM{KpIsr#sC}ZAT7|_Ln2ayeHJS0XzHGidCM?~~OF)#3G z&qQ)J2>%p3mW}TSZov2f-PPXMOY~BOu^s+gwBOh>Vk|7jccN(ChE>Ef^KR6GzRG!s ztaS?@Q8|}kG|*QC{`o(eUfe8P3xNTO6ore{7}rOd=P-1ipKKcQ7zr+G!DSb&4o!@V66O5*y~UfC%sH$ zDtNR4&1O6*vh`I+ABGC%>!^O+zwDcTmR79y(Qcq|+j@8RrpiW9gPl;zY{AiVN_#AM zLYGLJz8^+uNBiRIp-YgDcd*)rn88+;8A3F@u)F3nA!$7xlm^?f%mBe*=iM+?DV-}g zDmrh=K7A7~nlF?*jPOy+isgw7XG&j?bo}j`+IV{iLXqWkw20x zFmy(t!g-a2X4{Mpeeua2*tQ+Et$7!tr>wHVZ))0Bp9Bu9bsF?V|Na#|ve{a@%cg5< zchOsrIK66HJ=CJau_`Dj@;jU@Nl&}k)4&21Zx?%_)deYDnkBWJJq_HU;;rUSrqLHP zu^+p_sym;UIVjV_0;lix)|XQt(;Km9FN0?8_=K#VaVtt-*O~Z^P-s@CyZiN*9pH8E zco_z_b-yX*cHJE>J1G=Z;~#7N*oW`KV!bxB2=(_{z5Qy@;zHMtXumoKY`pb^?{K1? z*^HiF96A;}91m3C4DTsI&0nn`UCcUE?$EV(%?Jc~NfCC2fAST+4x^i(6l>4WjAS&b z3EW^|MHcX0f&ZHDOyGycV^cqFt9h{Yfg!el)$He$e@yWhBeME%y9#_ne;8$%C_ zFn7Wpx-mX4G=79JK1c8p^U?OJvyd`geZ^;1=cCU>e7|vLLa(|iIgb~*p9Texcn1=P z?y)jFBl(LVKQsx82M=IUJw8u2+RW!IXl)#_k!EfS-qB8_N9~xcn2TOOgz;Ia<8vr) zT_}e9GKii=?b3G}PBUDJ^0CH6WN$t6a9(UYBqr9&F+3fQ2x8-6iXNU{j3d$0by_~h zE+W1Uh(U#U0AmnrGGLs9xj`28tUVZ+SYy?}$UygY;lF789PK=@VNUDgR%^o&gY<7W zO&DMN@F~{oOeY;d!-#&4525-CT-N^2+7fiD>ukj~U+k~1_gmml=Pj|t@C~&l=xmLG z#MHR_V-)Vebq+){*CXOuTXwN+-3SW)n}SXy)|^UWg+A*t=<$wC@pzLxKvM(j6RNi2 zTHCbPn_K#&PX3VW7jk|ubugT>OpBbeKiot`GsPF(i%;i|Zo~6Qp^<;U#k>q@mDKOW zad{AY(NAf+0B+r=N67xZ@qtiq%a`WKq@pjO;y+&#lvxFC3x`9w%;rlg@DHn)^Mk*I9(xE0^_aPNz()NycAJjKB z$&5jhy@{j&~@I}P>9he0zv!_vq>sa5nd zmp^x(Z|PprLAQTtRwE0(gKcNkU^;^VAVo1>|3Fx)rX!SjH{@fp{}xX&zG_pa~gdy_c#p^oLC8fS$@UH~yrKLeMt(7EU0g4Yr;eH3yEwD5?&w}y zm-&~C*tSi>-CBq3h|_!qK}7j%5=@Pj8halDnIv;s?QII)4Eq*e6@wV_iq(iuJ(YRm zZj4(-;;g~Cth3RCCUwv(*LlT3B)*YWJ1|9!?r|;sEZ!532X||QV*}@4;RK71*}=p2 zVL<`O8Er^=kLcTPofeCBiT5Wr23vf9j|y0ie&oa-+)k@#I>!mYaUQbw4Rv%gwxy@)aUK>AVED<}!@6)}@fTpR|b<@2-8oWeePB zc`0}(8@}l_eZ{&SGSyP#NX(=x%PpWF8BLhatU!>WiEnzXvqL7b@V9p5SLhLx{1lxl zeGoSG30ju&ANW8aCc&0JB%}7Z9CI3^t`hA7@kt+5ewHGXj9H3A*4c0;HUZ7cC^(Bs zBmx5pP0T@7?hasyB=izMQDD#Fu{jsV6_WD!3?e7xaTx{s^7t?Xsk0YSDNC`}A-S*h zS@nbbdD_F@6aGB&RxGsQO#3m!!sj%5;nrJRN$bg$|2+A|!5Dro8ArJfIb8^?#Q^D+ z@M4E~64DG7_1u6X9ZS9!a`xgzJfqa{Jk|{bU>6FKeOi-htFmv%`47Z`{QIZS7v^pe z`@kXRvj8cDKSDyt`2<42Ui*^ML(Zot4IIB{IU{5{rl%_k!L3O52JlM46m6znV9-yv8g zmWOE54$D|iqAiCXa9|_;G2HnIM|o--m>`U%Pn@7zFYpE9=`~xC#T;n722-!(FCE8H z;ck%c(uzZ3JpZz7=&)k&9t988LF^~didB}L+k^G0s2d)tYbRyinTxEz?_zBeRGPl% zhQk9Og8(Q*%euFO?{b+vPz#PThGS>wtiOTXq4h3=#1{{@BBlC>b@0F}*#+u{=34R4 zS6Bj-^J5^;Xn|g4U616?wm8330`}v%@aAf1g;p4k;!SD@ssRbTL?m#UELRNlVHR^5 zaDU;knjYgrVqd3dS*pHBUcTb#p$rfFxEmJTKs&{5zkQY`BQ$O@UZ%osN`|MfV+r29 zo0c6*fs?Pq_c`$GoUgDCc&618g^TXLZm*bcj7M8d^Br5EmMKq>Qp#bP@v2II>C`Y<2i%jxE|HhkQ0XvYV*kjy?~H z`~yYKb3&Oe+!?XL?b;*xh?cvBazFg?^kWcgeUtT(vw(|?&8Cq=<2&TY+VI%B5fa9R z@>_6UxPO5=l=%wo>^lngYmaD%Lz1#WnJ?1gO^b%5X8uv!X^+u?03q-S2z;5ACw#9u z@N13{vVR0xD6<;B*M`TOhcv#Al7W6rpjf3dys&5*9*fe^9;0tEpoH43zFRC%cT*!r zeRavQGVh1W!%8m(R7*EwW_XKvI*x-S##?A>L*T`zeM8W!`$;{kR7;nxr?NKxghSbv z&&BR-eT3%t7zXu~VJodcjX7DjAMmA?{mc{F0|sTUuSCVSmc1Ln8lv0xQ?7iW+m>bf z!*@Bbx*-1B9HGpIuN`c&HX7e1|LyBPp7id5$IbGG^0PogZMWlsdVVs6kmWRU6>Ntw zrT9-ud=86HzZ7zwiRZB3`Jv2g!QAJ^ar(#JPqySKcpxp=ZdvjnF@7*#cso(oF%mY% z!a^7j;_Xhd2pfS~}{FH0Z=M75{{YT=6sndr)${HZlf4QYypGYji6v+0W*R`?15EW>m;4}9^eSZGHOKlQ zs{BXnfm1^HD**}PlD_AudOrf6FEFo$hX`dp1cEn$`1y2(6fLD=!LZcyh2lYP$kICW3t_`vsJ4z;5f)}?O{`!ohBU|E4T$D9Oe1D|8Oj`nxZApD zQgn6~Hi7Cdg9(>z#_U7p;_OiRAsxBE$EYYC(Exq$=&1OkeHLdXKaY$i8=iVzGzG9ilF4DPsZGm0Z13MK>))Nw&YMR7qv?F=fo z@7&+_RCV|51n`;X_kP~@FT>|j+o@BhPMtb+>Qr@i%(Y`kg+<)1Q_F{uQY<<++}6)B zd{K)&z}_R8_y(w8@halOUXNKWuhkPou((dLcEv1zku2(;Nqr{9SyWYn+So~yR{mxo zT;}y?z`=#kWk?L6>u%vf=)7bpnndVA$yX#j^ml~r4dxEEF93=bgf5);u-8$~osNuF zR9(B=!o(u;tz_+@Fyc!Ui@A2Grtcb%L0=8%nnZz{FFq^!GiF(?8tI3C)?Ix>Vn|cA zg*3Xp>%EeNw@j8PMOi1IY^b8FlrlwG&-zaDh!1(oKFafi^M^mYBB8U!fn;9B8x zSf~G_E1oRB(5=%oOnA#2TQ0*QUKKcq%X5VJ3GC9ahz*j@u=WL1OWP)kn1-H(lnG6p zmJ$)l5Q%HQ{GAQ-wU)ithN{SxTU3i$qa55H>{h4qY!olWT=OzO>brtU2JloU`Ii0C zV8{Q(<5_L|U*5^Jfhk(qDP^dx(OP;iu7Q!-YZmZ~_`y@@m)3ht;aJ;pe)h^UsG46R z{e93f@78^&^-Jx(sy$k>IB*YWxT-y}cDnaaqL0;nOM$jr4V=sT(e(4&jZcKiUoho4 zX*fr%h@3k31yj%*0fzdBJE?#&`j|?6H$_q>@k>4KtoJ8xwCwrkLs(X* zGc3Lo@C667j@jlW&+$h^0ihgk^}Qm9ia)9|A^xZX{^{~C^jg*n&Q#;is8Hu_bsu^g zMq)#QUN<5Rs6(_Ye(Xc$6r68fPTKd>cioVtY{dHr+-|3nkZ$;mJ@|=>A(lPZBzWEa zCai-iK~Uc_pZ_rqstCk5h%|4mVX)Zd2) zZ2Wu;{|caq>b6EmfMUwr+Wb>{Z}V5}6}QJQ!d1 z8LMe?OZ%m-o)GGp_T$%e+nV>cZ`dRvx^$Zeo%#3%Ti+me_pH})$8|$-K0Y6di!|1} z00&?Cu&)+8sQNx1v%?%}`TVl#b)Fy{pEc zA?39j1U_g7x6}f!vf z58!k-Wo;{`!v$b;IUPnyGU#-Om*!JXU?|R7N6beIf5Tsh^HKrNcl6>#xzL-+GuSv* zw&E%r!aG7?-mr73z8E$tyo!fYc>+IW085V?U?LZ6?IU)4D@t^K1TVZ`*y<}|&1E>! zI1-T~q3}2!vg;uSb&Ejc-7NBenC;$qVQ>f-|-BzvV^oyX8O?}K&RLoUOb#z!D#9EU4mxg>EJxg_$W190t!mMgU47^=>{4sm4PN^BcpK`RBK{GV=nFh{LR zys1o^VIR-DoM&O~ede0!vb zLdrG*_xky!KCk-k*U#HPP~USI|FeGHLZH{r>4?bx&-K#-x&KG&=jWWPnCIYyl=U-I z2x&+$m9N7LM<815n}h4;-9^Fm^GiHa$6r66Kx?~3`*`bT#I+;fMt#a$0`ZmBN0bud zZXt(|qTw2@RROQdVfAeO(po$}#Mp3LQ5~VFjyLN)@2mStNs(SN&4wqO`6P0*_;D>q z>U2<+N7?@4s5N`h58tp)7l?f@39EujCJj%>nrL>UL>9_0o(z%0&c2_j`Ki`PmPlpO znDf!EoP3J->ZQ@_q8jG7R>^NWt6i|?&K2z1-(atX4{?aW6_Ce{y%=u&Ya6Yy5O8~b z*y|zs-ahBKmBwuMd;@X4w&mQVhWCqMN|QylY~%C<`%n2RIPm4HGm+&=J>Dnt(LCvq zR?DCdM6P9Ukc0QvJ6SV7dsvpi_Heid7p0nf#25=Rh6D%htbvaI*jWd;tv-vv^|25h zl!fp!9$tezXRnZjaF1y4Og`}`ZuL6+X=*vs>fu?C2KV2ZzYqSy){`>It4S#r`t=}l z7PV01yeUe`7gEmsRt0juw8x=b-PZK_;;8Q4VbALY%zTq^*Wj5px;4PITII~g9iTXX zFyzFep12pjs;aVs=_mzQ;$LZGzdd#wxcyQfa4b;rmKqN3^@28hsH{{G0|_V^CyUn* z9iPHV)pZ2%jQVsr5=@mS8d9%PE%H7pv9GuvCHG$@LA|{=we*4+N{(gx+pI^h$XSoZ zLA|ve3Fpp(NYTT(FA1ay>%!E#Zl_!4?t)L&qi*(kbn1^stw)XBHNge>Xu^{h+l3=2f)QP!l*^9PpiDmVFH= z=?xEvY&7rdgw5AEpGg$5Pc{_ZhCAXsOl!p%K7zT5s*NW)6ep5grRnWv(c2i}l%C}7 z&kxLJ=}+M*w3^%~sr$ejCDQG$FTVgQsA zDg$7eI;Q!2w#P$%ybX(b>K#sS_N*y&pY*9ds3Z+zXO4L;eU@gAC%bR z-PeEzt%f$@-^sH4zs3J7|8En>h^Z?Z7bDTul@0qyDPi6n?*aAo$$nS zlE<};ua<09*EYmmuJ_Fk<=Vam^9S~Y%1?gDG55_+qp_`hh`m193({{7iCX>AzOV5m zNm~EgKx?dk|$Z3SWuaV4FlNt6$_cdOpN3JDzt0aRv&!@N*k+BhzNc~N{aSBubiDr-d!Xcf1m^ZNq6{1x<$G|r`u3S5gME8P zk`Up#rx8b%O~0%!5%&6WyV@#$?!IqFzaL2CyY~Cww#c9RzE74z)@&gwUdVD^^ zi_>IcbvqEDlrYaSBW9UA+?&F4G=@K&oEmZ_=^Tj;(a~C>ym&_7mJ^ltItv>iM^2h# z?QQv|ajc#w*aweBC(E-kWZD&L`Ks+oNJ0l{AMXJ~@ z13;}}Ul8j-?BIP`PB+SB+LmvR*!Yw&(Xv074wv#bgXsuK%fq6&eh#9x@FrW-u7kbi z#dozD)Bm6%8Xp}q%GYGbZKJF16G8ImS@`%p$ZKlVH=AO6bI%WtFHZo6_^0c_8z|)S zsb4n5Nxd}C)NM=H!r*$ous#7ZVYyP8dpI75+3;=kufzN&Jv)qYMskKOdXAzU5kK_j z@OnDaDOHMIx>nV?m!gCBiG0fSL+*d7<3W9`lJBAE@4$LD%e1Tsg!*HMZjoqMOfBaV zjQAR`dSaF>CQ+{v_*{O6=K7R+O7I?<*F$rCN*yV6(b611+M2KRDf7rS|B3uR9Pa;G z$*Fi|KUX7-6TRhLR5SNAc>8jr++5L=n8g^5)hWHC>ALhDF}2q)_~rtJqh+Cpf!x=d zSS9_F8~RQ7%3E?I-?=~A7%BYWnI6>}b>A+d;g)@5Hp+jL)TKw7-L_Kk6e=ovNjOuT z@?<=1`UljfJVT`M0_+NNCcSm~a~s*_2X_biqxfy^{T(**#JY9=QRxE^#@2lPyMJur zmgh86L#j@xPMM%u=&3ls%6Jdh?YnESmss|#eoAdQNYy2PgKt>vSEqEA+Rw>wRXulb zkGnnVX$RGdgZ+T2@7WVzER_BP7%Zm~@R%$8*OK=adclYAMuz&M;b+k@B`+1|0X$)H z6{9}oNzf$z;B983)`20EQ-U&Y^MObX2t3mmtdRE|zAOe5W3UFW`jo3lXjwRmH1b}b zGMg;(0p^U718u>fob(RWyaT>tdsB;v{}izgyx*)YPKm}S>E-R(o;!S24KuY1-!t-Ccu*>2}vY}rGO{pOG;2OmGc zFm1ohu*k!Hd+uD}amu3-)O}^!k1eM#?}GAZZu%9{{gAHpiJFgX?!%OWp*kgz|HXE@ zl2B~7`iQwY#zD9YiXOTdce?x1U-#u{+~Q5@vPTJnh^;5an>cVCd+(A8tAER zsH4BXy4|h6<(@YBJ7(EmSX4BUR{%hVw`d){1eA^rkEz`UGnL*pVruWFmFkoi`!dEc z%f?X9_=(eGhH8>o=#29GW4HS>NOZeXTD5yZ>vmV!?c&as_k%VfeF42XeE_81zbYO? zTkW_YHYo_JnXhis{dbk$?k<1z=<=)F<&RtCdi`_wHwOZBKN&YA+)?oqaA$gcCUBZ?b@o{our(0s}`wt;$oJKhHcNr zF(}BhuUe5Y4l-K$lW*%^^{KXpSROTsftoQ1)QutaF3*4b*2_6B z_@1b&OCe{sIWO?Ya{A;Xkr7rXlKJoh7&GW#^FjspaM4y!}DYvFzML;C36_ zCqi}n^LFsM{RN!2&jSIrL5@P#Ghb5b!2KM?$9-VnZQ%7n9uIdid0t^qmtsVX)yb9z z_jfGh{X4%Dw&P?W7>FDSdP+0yIub5Cgv;l0Iw&DEcd~WxDN~@`8(wt zJ7m5LhZ&E5A|mdgCf-w3z)h5Z-D@> zTL|$~9nu+9lJUzn-ptqy&xA(Baq*>6SGBJm<(PT3qTnZ--EOF%K)LBr@@n0O??IW% zztM>#?3sTSGJyoQjC-+_z+3AhkE575OQ{IEJmxdiG#4;uU&}h#a07h{Zkrn++qG?e zLXyF4^BR&G#o5%=>**p!q{%ZiB-Olzop0Ta!jxJ0{xf5q-jY(7FH7BTvp5M|1l3Y5!CWggMW#< z`(iS`iI9l5`AElRlP}M(&-d`k6>sxrVb2LWd<~D16WP44Bfi{2cx&|JWv*+nY`D|& z6BgyGq2^ZlVdpM=H56espCHS!^R-ytbyFKTZ;%X;^O)LuX-CVBh`U*->MFga{GpCw z%L?KB3@A2kn12E{o*bvR5st@J)*s!@;I{4bvfHWZ&pv^EampXbt!5m!N!CoaM#i?o zdBE#1mBdqr>2BUEvwS=LW-Gmnbjvv5zO!{ya;euFJXq~m4SdM1T5pzrB2s+3^#=Fh zx3vL3mws8N{5@qOj;w6qEvOz4>H!`mt#O)ukU*8>1uiL6VQOo%@!Zh>d@QzemCk# zZg)?k2J1;G&$xu1QeY)=*m zH4Q1VwS~19NB42p6WH@Vttb7#=By{5k5!U9oR(UzCvN>c1BL6--{VL^&JR5;{oNqW z|DZ?)^*0LpNi?|memyEFsIWVU{)Sr~{j}7PRV0H7`w&U3u&YG-dyMdX=HBZAfs~WN zBfG`aikv7rsPkna-h=L0;Nd(7$E4E3AzPFlo(^fY>v^V*D?OYiB1gPrW@uHKI9#SgnvkwEu}UUOQfcByDeWamrHNIt z8%gGStQ2)1u45jWQuD5EoB18&{P-rFnm*s-`EghC!PDgpTW5SUy=5Ar9^|lEhns+r z)u{}Zl%?;W_ToG>p3}%|Nl@yW`K$NudZwy31gd-Y+&8|U2TD3+3jeFyZXO=NjF>=5 zJ)vc$qu%NV^(HMhUsKM8({j?1xaD9MOMZB7PDafyJ@j{j>!beet=p23_g?eI9YS94 z4coEkqhW^^@8vFC_^`u^`1rt%n1;ICp&jTlZ zK3N^^ho3}Mk+nM9K-Q|JC>ew0?7nULM`ct=#v4!=Q~RE@COTNXu%-tt!eJj=y;{j# z#yk)2&mpHVM0U1nI7fh$sV+~_8{Ces^n2Z-hgy*qc&MnS)=EZLI_H=y0G?(Yb;t?uL2+D7U?tqZh9yQ8jA0 zVmdwG#CMpt0xrk4G_v&Hp#fH$S3Uf1E)C|JRSKo7cZ$D-RBt68QzS$2x1IJ|D?ZLt z^i6O1T=~#pik@#4J!d#HY%{wOPq3)lVV)3d8HzA?poss?LqJ)Sn)`{%x~%AV`>$>2 zd0sM(qUSZdW}+7^YE2Js1pQS;iq*cpKPqO+r5s4`>ImzNgFho+wR@{dH17_YMc}U6 zQM3Oyz4lKF5>@l>Q1gOd(mY?$sQRtx?BABoo(`R7%K)nf1vI>}H;&ZN)K_)e4&Gpo zr$8y*hUvas((+g4TTq^kZSU-Omj%Ij$%Jb`a{T3uof(`a&lXRrSqDvxXGk(il2=O7 z<4NEKh9obOBn|=|wvgluNiwexZb^UPDvIEk zKVL2zF7w`nm_x5zgE$4vp(E@|UFOgsNe0cKeIzxCLh9=M>t;C61lCk@>v9aE*k!v} zvgBzu=Jnw+2~xhzRsEWcb5aZ=EoluA?@MW2#I`PCxU(hUT6L4IFqbTLu(<@vasuiB zmDTA|ot0zkj95Zcwbr-mRH9-^@m+ah3Rhi34pB3DBOTyqf|(WqiKk0{x;e>MNv?2` zA(9jh>1p{5{XxsCIr$lJ*PMJu7pV#PZz)o>)C}BAQmuaHO(Uv zSaGdhvdxVm^~L2rczorp$<9Yg)kA%)ZqDmep71+@DkPegoS@y$){+&l>h^)gvv- z7;wRF3qu@RMvUnc4j>NJo1aZnB5m!D#5QVlX1H18w9`YT)HIT?R*^Gaiq1w1^dvo> zq^s)*l1yc8o88d8dY!TQZ_%ekJCYRr?*dk7LFBUKJMt90f*on}&r|d^h)3N8_6lG} ztv7Axe*_qt;5&&op5+jH9Z46#OC+fXE`TpCyQUDAtC9~jUQRbuqIC=XTDQ>CX(3FtVCk)Pt?>V}MB$IKtf*?p#plU?@S(U!@u5~G_ad3x zR{ms_uUJ<^Su1_bosh*Rs2A|0Vs+JhuY?90SgkW^%d(vIVUf1~h&LqP8MFY4bfKC{ zmk@W!+<21iaXk;poq1#?kgBsDiw%c-tX*Y)ik~gizMnPXHR+e_nzPS;*3Xr0w%qmi zR>O<^C+m-ptoEPR17%(bjBHL@o&Wq(*H`}f;AFS!H>5nL%g;MD{)UuSbopsVmCLi) zv8_}ar0itBD}y9TD~y+5hJ`r%SNB<(4pV4ej*+T(m%+1B$!vLeuV$F1>H`fjQb5K7 z!bh*;!W#`q#sH+BajwPALJNieusyb_#}C_$s{TqTIf|4tPb*B{rrzg~@(`27oQ=0% zS26tJvv@?$pbN-8xYhjbLOs81erh5vl~!NGSZy-Hqe!1nRN%uHFM-H%IET^5Z}MWnMAL@WnR=hkEYAR)5crrt~(Wdq^^t{qJ;0c)_1u> zUO~;<;FN!3Bw)inSi|}$ZdI5Y@QG#QZIgH0j8kvA znZj#A`FLwXMAXZyxny5r@Rplh-0nNIgR)XFxKg?7*R=;pZu#{hz-%2)kjdqLtl5D& zN6K6B7*fa18}yLK`rd;}mA;Fq?Mfm2_!Y-4Z0kWk)T?=d@HYa#Nyeh(0zl12Co^P0 z{}X2)nRP#KrK#>Mb#Lu=nK9k@gdqYIbN!c^Nv9Pmq}`yp1hG4N7xx4J$RBuCvOs$ z@dRq|RNgfnewuv#;BJ~~$lg``OUQzc)cdzTt}zqD&eEUmRS!Axe#wlmDZHs7GPFLO zbC)phuZO_ckc}YTB@g@R_SfuR!XqJ76JXeTnqdd!XyANj{&V88QHJHrU{6b#ikIcY_Un+ zHwBxJpq=Shubd%m>s(lu9;LYSuv8T;F|LF5gY#flhrVEc7EiJGCTw|gUt#<7sDsT_GU={IjnLE@_)RKTbKyo(2RD&1B{sLPmb-`WvUjBUt=QR$?H7xUHJUO7VE#g{t^QL`^XrnuGerN#|CAtCdPPZ~ zBQiDaa%!0`Qh_D9v6=)pv5R}H8vuA3ax zi2(8_WoCW1%=+<>JW+|H!=8+R8Ic(SV>8;n?&ok>PF%WUhU$5;WTR%2qU9b&RMYbL z)ix(SrxkOB40S3ok%mY!(`m5@IHh}7iH7mWyjRH*!6oRFPg=Nevg=GX-MCfxkc9Bm?#G08Z=8MY+YP?QJe70kTnV)0G zSayTRUo8ioiu#Cd;LM0g-zt~8mr0)9fAFGt3fP|6=6k>}fm`oS zQf8?7jmNIvkTOn}-*wD#c|RMI-sO7Z{PHo6JU_Oc|1mi>5JW)jN%8=h98{WJ7(?0N zRfnYFxi-JgS4l*F+7>n)NbP>*K zGChn`xP1n|bc{07@E6N6)x2L``$l(dulWn)hV%Z2cxs)LUiS)X34G^ywt;dVZIJUk zTkraC-qR=1&v~ zoYxRf4Nw>R1w6Lw;4b@*jFDsig8S}s6z*@9VV^YF`zv^_-iO-bawbjCf8L2CRo*_* zPLweBzwT=#P}cdx6l>%xeHdBavzZE9*4QBR>f?73m}lk%hqN2<>XeyeA9F~5oGn9I zyGw@je1MKMq;CS_8q)0~p+XJmM&jl+n!rq*C?8vBxW9)C#=#Ekr*N&3JscZVJuCu0 zaqRZ}Xz4*=t(?`&D;G!S^I=uH>3C&d;gwWU{yUD{cGP!0@VoRX<#h>oG#S2VcDF2P zI~`KB|8a7o2Pss-trm=_jQ>uuD;R%r{Az z9|{v3+-8&Hy+odRy%n^{d@;<`eu46Y8ci%I+2*Z+2*ZU}u}ku=3NLU?lO=hTQ#wPE z#e#AHD6M(W1edbSA4=5urYEH85cdseCj{)ghNFL(n?|0=AJ~W4*GF&+R5&=wusLCN zmX<^d=>CP0WCT^Of0$+Wx`z`xQDUMW6cfxhNtz#0N4*5j%rC|#72;2AxGY3(^3&L| z7wvuJ<(FT6{ohM}z4g{xPoCeg?x6BX$$EndPTW#=(EMU4>pc5%yMJv=&-RRNtc>n9 zbM|ONf7KK|)hI9NAhLrmwaxGp5FTcr|{}O zofs0+d0Ct&|Cr7z<8D^r&2jgu@Q%23goV5yC{%GSrgL%Jxcr#Ti{kt{!s9|? zI^Q3+9Uu@szDtK2_UW+kFrgZ+n9l!*+f5>-^SZbLD%>3R9icgXCPNq$*7Hf~0W7%G zEePh>6qt#Om}~e?l)RqgJsS=`9br9)#&HSj7lKFtw6K1l@H)c!s#B_jwTYzp5_p69 zPRr})%i73mcu1&WRwFa68MRbuucWrJM}l%%B#i{+bQ(!pPRA419rj;h$L2{aD5vKN z*1=%aa=N)lSWhf zA8`@6>Rq>-F{LLQ;3+Czdh4Gg24(oc&iWixKL*7UQ2ybZNOSV#pIrA5+}BrG%pSix zC)G;-#fkp2pPg!2EPjpmt9G=WB{8*?GJ?*|S^P%z5ih-DNsnR%f*Q_ONq>qZ5>dCO zuz5>lAq#&yvm@+siO_E|Y(Abz%r!duNt#~?aByT^lf3uHdo~CCO@~OKdv#11l*^9vLll8)L*ps?599a}a@u~UFG{wR$EC%Mkb-ahfn{+%*;!o*# zKZ!r2}Vld2y_2M6n+K7 zvuaY?x^A=5LC)|!2b31z9wJDOOETEmyPZH!D3zCajG0jXCp!0>?t_s9b&7E448!ZG0fL6@`4t-qY9+spk zRpfq5()@xNvOa5iOVLgiz3L@5B5Dyr@&k0lMe>7E^+~E$kBrNy>d3)X$mp15yO_($ zb#-W>$79}mg;Wu3Bf5c3+-;UgwJWLCTEH?`4O{}2DP#r(Y`7$YJU`bdRh{S|D0{0; zR0Cx7<3WsLyC0%Lq#t5ZtJlq%dqf9&oQeGI6i^%h58KJO&^JG=Gvht`ZYt3VFv zxVn%1Eph8U_D@93H#r*-BSw}I$B2okJpv^dGP2_6O_BZFc|%HHMUpuWQd)ZbBE#sD zt7!*#pn#RN?kjK1UE3ud>sfqq^AWzMkaFJywGL#=r^b0q3FNf-NCyh;)CB{ipce%} z{ln0P`eJH(u{z4}Wp+&MDLTr-IkhoF#WT~X)i_U+-IvF9@ko0wD)+SBc>9l7GHt zemZg@uEbTtDFe$?6+W-PE>d8J%sBFBfujJk1yr0|-6cfuSz`&Lt!-vDxHB_hwM=GyK z#iuzVu8-ME$l*gFMn+v2r>F;bXlY#Si+;X{@tWCQ$d^x(@bNj0StE8*m?4E36n-Jt z<(niF@)f3tN8N?5sixBms1}UElPI#3s^puwu=Ag)?}J{`rF_ZGJV;LB50*CFX|5E2 z`l|%RI)LiZ`kA*1R;0~a^S=GSZ>r2=8J6D%>w&A1YIyCDz@RHi_615F#BILx3*~UJ zzFu#rMXQyK+MTrpmBm%)`t!|N@YO{eVq(c_R%2H5LQl&97w^|oFJEp9$q27zPoL2+ zIWCITXs4Xo^73o*Hwcmn?=$W=%cA6fGc+T774PZ5myD6Q*8->kKz#s4-eZ5AJju=X zQWL*Se1m5wh6MEsul;^Iov%^X$~irdH*ewf-Z8b`(;5%^r~d~(-(S4Lnq#i3k!hUw z0$=DxO-FU9`*+=|%|C}W{~BKNaahe~VZ4;o8*}sanx8`mwxyr3KehTuSk*mVwbIal z|GtLoP|kX(+@(uK-a9cHCU@!5{BdOa*Bi3KYPN*SG4N`g`AKa1*NKI9k+z#Z>E8Y& z2v}01&kGxBJt#eI-4~Apn5!|jY^(X5Ikx4DZ9dLD?Uw_inA+PR+gI1C z*Fn+t%i?4ZT-yB`>D1Eg2D!>9Qn-pvFN;J2^Tk&mj_4No&Zn%;smp%wpJmhSt@$N1 zX4ySd_A1X*%iBO{`qE+W8!bDWG!#`{z-sKP5+#Sw%WzzOIps)L;+JZr+64e4p8?4& z90;oRs5e6DMNyCM{cYy-zY~>Kndc^xG1T16FzauZ{y0|V?^Y1(s}$JV1a_@3N7kd7 zEuq3!Uw9YZ&DnlyOFxj9bHL&9zt^V}Ql~ah6}oLz%fBgex!6U%>mxpEX(wNt0-sL5 zP1<|mGa=z{K(30&2MT9}Oc|GVfZI+1_>xoiCXzJ->7*ks0B!Cc1i^W4ve|q_4&=%H z7uh=^9_4?J`Kk0O<)ck9si`vP7O7G`P|NzmAgqs=O;&x%WKBph%V?d?bfN89avgpPvP@FxfU%*Fa^U|a2RH@r>V>RCw=0S^zmuwMqzGIaY4Sv z=gpp(mF{yV(R~1zHXXcevmHLhIj0BIg-1Cy53rbaQ^2=w=FQ}+2Dl0WWUsYiA(a;`G zX_=v_6z1j?7?lOZ1$q90e6nmN6!>Qr7nNStM{vuZn@98fxpNqSR*aH9Tlu;9z&q*O z{CpWLg~aurl+U3N8;z?-MKup|^JnMgUFNPY`Nu*T;ME=Oejn%eGv7v)xzGTy@tPkKc~Sp{KPmER~UG)f9e$||n#l$95hG8lQerKM$lqp+&D z_zGktH{U2^etHU|j1E}9GO!1|q0X#0#EYl^s0AMU{R*;6NFL%+q|&SZ1lusH`e4FRSoF{^eCg z6<|#(F3Y>jC{%O0H17&<^-nBRh$av~f9^Iq|4tLs)51SW-~Y-xyU@RO~m#m(4d42O3EUNl8Z1z~Kpl zhYw8d-=Tvi#~wpNlMXWrG%0g)=NA~ch77vlFIeb@!~9Lq(lES(VZ_hvXT-;=a-+>( zIXcR3_~+6qRbEn1DFS8WmgXA;3yb_xd$!cJ*xS0gu5A}tbt|RLLaC#M!WfAnRAYFa zs+?O1&!x!%;*01%+i5(&`mP86_14vqe`j`q9qT@7(-dJKbV zU@Czfd2@@(4Gm*qw|R}=2$FI^V&%0)V`mDDf<~a{TTDQXS_2zexU6X|pqB}#nh|Xv z4V7tQHTp>JD+}^iC;V3!vy1$yZ&gxTOKO|yR%Wn1Ja&1pl=v?~}=t5_|>eVCs{?|8o< zs;W2YsR96rO9w0kg_?6!(flZub`)G&eyGgc;$kCrJ|5$)BL7^{j)q{2MadYtjxa^9#SE5kTG|!-d4gXlB4ebeQilP6V;ZP+ zUKcxxR;C0?1aqXIFt-ZjkvKRZAwh{znPAfj%^0ae3!#-M9FyjqnI<$`srrciGe(LQ z43c0-QgQjHI-{kIs7u<>I>)Z&psqBqU!gQ$R`?NaxWF2UHDlyizN9WhEl2Qc)zNcSUcb zkIaC+{fyoVh|AJjAc^@T^pqApI*nPV^vGFrM0MJtrk_!g%Or;Mk|Mvd#0rs!`9*mJ z#@t-#fAJNdYx~D~C>lVh8evGsd&kdZE*K-V+@7bIgZ;p|Q>r-usLy7A8yM2F2?b)D)GJ6yz7tMZ4va zDs%(mGcZY1EhAE46tmcM=rE3nQ&i4u58|`OGB|~;xmqa}0HRa^8T~s2C*B7HsH|VL;5ASKmp7vF35$YB4n!nLlpr-bdCA_1||+q=$EiCF==4( zput0iGNo-c`{(8co2WDfCdMZyf-(M3YDh+~meu_HeuG*QYSHN$JDUz;kgija*l&10 z7r}HmzKzIWBr2(5yLT5$jNx zC=J`q()H4ONIu?QYc3mu+;tO`T~?A?EEAcjXUP!@Kq&@|HT#b}KMmDbP61{7rp;s9TOW<{*-b; zMo_CLGpDlJFZ44IUrZ5;3R%Njt%Xv*s5GyvqJmL1#6^)ge)NQyY2Iw_sLZU)$(iXn zYT*&MFS-Q+dr$j+_uEH%&sl9gNqCnPzsU-PmTQS$=e@CI7CZ6?>!a-}wF&r?tGbZ^gTB{Qcal4eg&>^yK0b;x~SNL(isF`LR#; z{Ki;2FXQrOzWvbKxa{iP@11h+zy~E0*YEyrXYHFc7p^WoY0JZx#KAc!R@tqgC z}xR(Jh$<#jiG%aS47PG*Sk?W;#xXBdF`UI0iCnvPJOIr zZgWa};f7V-_vg2}d~e8RG-2(@j?jE>%qj~R(CoD|<*%Nc! z!|ngpeRcH5n>x)~5}#5M`S;@d8$xE}efHhN%PyOpTijz$LP70#&+Ko$yro_7RS$%m z+WcMQH5YA<`F_W{YYVblo<8wE8yo8vt$60Qk9vMEJ2U>huHPYUS)i^ z@6(=P17~J+c=W|Zojw?Oc|`W3-q7B$u^k(i8&NOzT0i%qr)tZL_PYz8x%)uwtIRoHsJ^aqjzoa~M@zPG~`j43L+|&Ooes+sdv+>IfPc_{Z^~r{?+unH6 zKWxlf|9N7;8+Ud+dvAD6xA!Yg?3lNI*@*m`&zo1$>EUVfuI%_)^np7A?QiP+xTnLD zcb#yx@1~f;Z`>Do?c8rdPCK%-UC|{M&HnMloqy`?Bm2&Mvu@gz z@5R16_JcWPA3gK)&xabXOKW`kFK=D9c9wbH+ix$v>GgZIZ{0I=(l;MX_-qSH)7Ngzzy0iQ^1is^zIjz0ZYl|Vq+R(i$Xy}#&;kM?%l{l=TiM}4yU>z|(b zU~Xy6d#AtBt#Rq}v!D6l;{|KW7L0ki`)AW4SCr3-3A{9-UEz$5A)Nzv6N0a?}F0v#?E{F@%N{_ z{cd5$k5Uhh*fS*O@y(Asf7hlDm%R3`F)e}h2|d1f?zz8iefFh+$hm)J;yn9yvD+{06I5u~C=&5rrx%u3(bA~i_TzAiPQQJ=aC}LW}q0so% z1O7Vd2H%j&U;A~-`Um!|Z<)UJ!eL)`{`%tkuQ~t5w=V7R*y=}5*b_3n=ETO@#JFu& zM@{ix(pYii$q%a^YWM!_{;zLuZZ5k0!16JThj!fA9P{!$QE_GcTH+sF<{$h1BWq{8 zx8mpdlO~?Gx@1STf1|~#ZBLK+_z)Q4G+CFG4G{zbNcq}QrqF_-b2qgwf}D= z{l=ZtX=u*m$_@paI?S8j|HZ9KYx`B)c#qk1?*)aYJX~IX!PfgG7VkXSyz%w8cDKG= zJ1F|Q@-_2fyEWf`a%Az4)3O$1^j^PtZSqr5J%){abkFz+FWoWy+p_+1zq;mne_7rG z3%e|QVOeD8&XvCe8dn`G&c6T0`+jcxX5r;K=6u$EUhU&^HdTCEI&%2;6CPMHDSG0{ zxe>QN_HNDTC%>|9I_sWVvRzgj=3Ak5d#Ms_yW{C_{8ke#=-^3M*efAvp&{WyysK4g zL2|TzOL@tZ1z(t3QdC@|+)Vh&w9CveJUGidcxH0_B?ZMZ^GXuRo#;R(mh8laII-mU zNuH9tx#iSJ8i-4d>PC)toRK!bHy~@kq<%(rX4=4{v~k9`v|#DLsRO(NrUcW*7-hgw zFWHruK4js59DWxLS?J334O%!Leb7Qr&g5}Lc@<^KSzJ+8T9j95kTo!AOoC@j(VSeL z-mi@D4NMxHyl|mseAWCiKl`O|$wL!7S-JS}*v(|6jhi|l$>YI@w00Mc1?+gJl%Hbwq|K9zm7wP>4u?Z?qO3{_J(r_{NXzpRXnGcH_PUCQRC z0I!$j%GC|or(5n#ip-`FwEN$C^eR1;dqPG}sv9_291o$bGT2PBvk*VW{}wy`e03P$ zZ0~c4*?t0!HkiIR5X7bB9KBgQQFF#tiT`yik2-abStwkbU4%#;2fszve*vlatwj63 zfS$*|7zn-e3AHUgBim!=@{9~u%ofaQB~h+tS-P?k69!}@CI*+Ttn>tOa@2o=6M&zT zTUn0F6kl<6kufPdDIqz*=)-A+I`lM@r&;YtgYp#I8QKzQt>DO@I=z`G3Vo(hNX{{* zrvrW9e37$-N|~VxkDj~AlcgswJ90}7MgMUIRKUTk!8mkbU(aMkn>tVHGpS&{(JK#=0>@E)!Z44p%9k)KEpedNj{6dmz2j7Q zB4^-Io|q6UPfYLuJI*eUM2?+Eqoy6#Sgh)jaG)eHMdMGjpc7p+6Wujc!mgh|#KAUUU<$_5U2$L>tiU*NU|Pi;qyV{EYZZ65JjB&<>$rm{Juz57+!yS_5T6^! zX>N=Qh`5tK)|IcAuEt-u=M0RByO3HVlWUEPH!q2WCkn=i1LMSl zBPlSpkO-b&JUEgH#;F?|d7;N1FM$chgJY^-oVvlWleQQ;1TW8$*EE;B5_iZV?vSNm ztY#EUFzz&|V5~7yFu^!Opa-0MiECDq81E`@CW@+Tjg6|%I_|2h$0^U6L1{_w#o{Az zS4V>URWJ_mLEe$?>Iirof`JLfT^#{F*pWn6N2u%&OyywQ5kA$}P=^at)*UIfI+7(F z8KMVI#fLg^2M77YoqXC+gIb)Fq$WyMQj(3e!ooU9iM%Q$s)$4iDh6t;HEAFtZ_!FT zSe&eD3`};Kn+GS@eNnzRTP!`%Q%zf z4hlC$(ksL{EEfPOxeTT6TVy)-sN{|b=ICfSgx2Se&gCc8icmY_MZ<-sqE-k%`yZz5e$Tw$2%(HSCx{GEtQD z5Jhlx;Xo^A;F!c=hO!d8eUHi-&ZF692*@uZO{dCfKli)wxf_a88)t?P&pYk#Lza~v(rv_ z8(M}2JEj<&>}|~+J8jobZiC-WJLPTgC%3_$)CRwuw(GYYW;^Yax51wj#4nsIP@KdT zNY{~}RtTT045hr1OI2#T!(eOp$Y_m!{Lt3)j<@+~SFrgyUBtodppblv>ViRf;YlBq>`+JCg(BIZLh_}W`m^s#k18wkPns|ecbRo> z8kbFB(L!rGE$74d{kT_s6rA3{_iMYq?{B0j+d^Giuy*OPmB(SHH~9T^`@tfeZS?VZ zv+UcQN!$ebFRv16Y}}XD&U43)a1_4aLA%&Q{~LJiTC^In`G7A(?#5yu;jq;t76;B+<&(0NyV?W7j=V-DvRkl+%2FV=|sNfXmAkaNRcV3NEfF zf1mD7e>p0WbD<%L1BNnyIx#SDKysp|(qA$#X$~hw>X;~D$c5>X2Ycq^4@@eQGo$0# z$v#E5)5*Ta=f}9TnIgvysKpNn-1qzCu6_hRd8w$p!$t1ux92C9Y&!Cb<=2_tiTva> zg1lVMBd-YS#_uouy7S`&J)Tqeoyt${_IKhJ&5xH|9`z^q+`m-P)qn7F!%95$4`8b) zQ=O9zT0aiml5;YB-gHli9KY$2RP$VbkIUzri*sgXw{}Qscozb0{K^?t!9wmHtCJP` zCX$}|8a|(!{anh)%@Y@>NQyXHEA1&3ykV>T)TlizIh-S?tNH&kpl$|vk*Oo<$DGr-K@ome~MeIa#i%P-V_8yZu`2B+#$C;l;&CTF_ud(v@ z6^tJaAqsnC(Hw51R&n`HJrbgxu<#rU9@X1B3oinHaz9L-#5g7#ceo3S=2+M5c@W5- zD@?Uc6fAxp2R~1T6mwm=pn|6_a@nHW%^b5Gwac~+2#(R_u}?n|lZFZj$7{bpbE2Yb zfz!02_*n3TF5tGkJQlodL%8cnAEbfS^sA-TdgjD_4o;Eb8Ev&W2?CD=RbEzHJacwc z}Twxf+k3bsD)Ww&Nc?d%c;M8bc8QB1{`B)zay8g`ETp19JzOT7L1mXINrdltb2aB2mF$93 zPes~H8=TzF7?hYKHxUvOl9F|;;6CCgDuzRkdKT5PIFfjF$pO+fRuXni$f;o?W?*c* z1i~!`js#W_-}U*Cz(&G-gu5jC&ym0v7!V2H9|Gk6yrVFIBTzq<&#ixHd|2=pVIMVLi+m~bIs!dU1f+?54h!Y$+I2L|)n z34y>$!q|y{z#c*)2l){r`ocgUo6sQ4CtO3gif{|z{e-E!wssfcF2Yz0?!!|9fvJS$ z(*l9bglh?R6DC}O9Ab=D6HX;uLs(2`TuMI(Qwjee<%HV_V`l~e;TY}-yahFjusRnx zA>2avf`oa2Ko^YqSYGOzK$t-2Bg`h8Drw$NTuoSAh&&R?d#0n<02p(TL&8~v#e{2% zpp$SP;cmk6dB_3bD#CC!3u_3w6Uui1vI$f9%0)ThtWw66a4q3RLZgiFC5$Zxz6bmu zoJwf$Vm$Swk@@h6bOPZ4!fe8y2+Ij$d(s|Z9N}8Rp@gXm7%#%|h46#Wa|QJzpYS)r z!&f3lr%}%P(8~$e5H2I!NBA(|s;hw~+_D({oKF2E%pXGeK36f}zH6YHu)K!xmhxrL zBjtqM4f5 zCEleN9qWybyfm81QuZ)E-!aOv$luOyDrLWg5*Za8dwuAb=Gu2}oN0g#JF{ zg}d^Erjg`%$SWoAWJDXGvpPgadOLdhkeo`{WXkHLEIm4QdFTbv-D|=|M<;}qbcpV* zdk3uGSqAJzV5bPI;2ERwNZA_7exq!zT{bOPCNIy<{`N?q(k?3qmhGWz9c4v!+4Nx9 zca%kbcO)QR|D?Utur8shQ2H55UJvXAyYJGMIP$ua_l4k6eaV!*jE`O$8oJ);OnOJ5 zHyhaZfz20K>C1(>UBOdKS;CLl8d4VIi4UHvcFmZSoG2x0$^21@1}>7mgg7ZSuO4*9H5?4cCvnRPwx1 zcTse#^f#5fMdV#Bc^T2M^E8>B$s}h`wvVzvI}&q6E|InC!ZJlJ(?u@nxh0pr=<={0 z;l~uq%#LBpLZc(M?Rfc>S6@@}bsczDU}L3Ao1v*PMLY(-m&q5~Yb2rOuP-_~^y3a{ zCZ%^&a(tMw_rn5#;edFi>pp~sBM;$$K#t_mhtPE03F)6fSr%m%+GQERvXPXnqRf)p zSX*voj!&g*H)Ug_9{m;?CBK~fsE9ydw90215Xx@_`9AW~B%kq{N^l2x)#Uw7=oud! z+Yp)_-F;=4FWOix{HuwWgygJ^?&FO%y!Isa37;~e6KW!shp!B42n}lr>(Cm)+c6Gw zKY=r@11~RUE_kLy$JT^~=5C9QoTOr(bs(Ch+)rJzOCa#Q(0yTa>~&JNLG<-Xsk>bCbxpglf1;+Pwxgh>!mO}iq>U_K5>Da!M8tzIn&!Ebbz$EidQirBIeJLO zrJDSHnbcnb|L-I3 z4)Q*g97Q+lkR@N4(OW`7Z|x9mAacw^`Z}s(Kft;~GJkvUt!Agrc&Rg1$>caBAx#0J zQ6P_>5BQD1FSX#^vf#61A#^;0i6l7_HKQX%WYD%=epx%HzY1Jm>^%|~%|1=&yzK2UmC*#}Aw2knC~(T79B zCLLQ5E1ZHa83yk$0)bB~S+Hmf+8b^fw}gZ(Jhr{z%;RO?TX?3WN5C(C!VB30uOD-C3tbGw)>%Z3oBH#6W;8v-%s#|9i-rOx|UZgB&%4(ogr=A@d3ebgvx(D)_p< z?-kUQt%&?dULW#qChsJbqixcW?(nQt>r(P8+sPkopWvEVRiD6M|++oV22J^87DQ68_9?JGbuW?1T zS&j{%+U_VU_bjRKzy8s)A^7Dagm9d z&;?2lNK)kBxBsubZx55Js`B0aNYdR2p@U%z58$&;tRETC{Y<~#>@-|qdg92)Lf@g^hQOkNEkuzv$;CrDA&Hf zwf9=5&R$&=_y+I&<9<0`(!0*@x7OPGto=OeyznPj;kSeOS(uN2y`FY(0b~auEA4=e zw*}a(z+}w0202olcLLuF{J&f0d!S#v@{QN|IP5$FJF8w_oge+*sq>A90q;ZX_nkOy z8n3hP0rmH8;N!sm%z5)V5ohJ4t^_tf|rzgqYdVfx*^O)_xt2ZFdkKbk;=JfZvu1WQG zC%En4qV=~2*iK-?)7FIlj{_S7_7n1jzy9bC%Zko6sDuqE=7Gx*PoLtNi{L03QZ^0r2~{jiar85SnP!2avQ(Uke$! zMzwD<&O^d-9=0AEs2;JzP?M%@{?@;<(Lw+Co?`t_IU0b?#`Q4rE4AgDD>oqjWz#Rg zUz{e`woKQ?Vvu=|WbC?T9gS@m-*2tn5XN;X2mGiGsutqAp?g1c->9$2mruji?!;tY zz65*(_=iGYR;{JBxncTR{9S9;r1iKycVY_jO1LgLT%A|_qO>np+i_+yYz1wl>zu}+ z>%k9!x91|(r*y7>acJ$#8shH;Z_=gtCQy%q&w~FZen-YXT61#b5ChGs=~%tGQ!x^w zzVdtM)ntnGOFpZ?b;h~CwvZ5=W3|q#S&W|n@autphHzV_SXWP;ue$xSdsnBMp<96N zoUmOU&X<)xF4upke0yMPZ@XWoG=7W%e+KxsigkJy)hV24>+~XYuq5Q3hultFXRQtE z^)PdIysC@p6-!XnN0v;#5%}bjId?v@7S~*3*Gx=&Cp=!&4~uajtZ6Y*l*obl64m|3 zVQcS}iHWb^x2+Fkj6w8j8ZU^a>%1GgCnly*UQ}QEz^|Hq4eHe!KG_ z#2;?1T7$OHDrZAPQG2L{!99?T&bM^kcrUQ%czh z!2-w)0(%MAe*AWGG3H3R97L1kQWt-qYt|p{otU_TWawCT&8&&z=i|WXTKDJK-#q`} zJUkjlre)CMb+#&_!Q^Gr?YLubFt=tghf=#J#@GPKjW-dY&v zTF~7K-8ow)CU&syZKOLXe!gtxU`5qsC@(eQ=#ksFBh?XIyKliYeM}#ABdi|R={Ez5 z*85ywoxteu$p11AUjUr$2@qM*Zvl3F1f#J%4Qw~Ck+5GJZXBrUp}seHov~p$jRPaF z_0kT19H6mqAMn|@4?)g}Io^lkE?$qQeA)MA40;BQ{#EFG&#yD+-HdaRSk*%)3g7j8iCzAA_4x7R>y{16(pZ9fAW0q%u3iu1pnuCtWBE>7pzzrlIS zWVgc>9ZN%i_Ik_2#G`DB*TmLOIC=!1M}w+|J!du3l8@R%8oHeyE?)N{Y&)=iU?fA^ z1^9n!fc6Az0o8?#nc8-3W66lq@0zm4#!UYm#~ckM+heAFv7hvBo0!Ppw_C4a%)70s z*q3p1yQZ$9zPxf~ytmZw>()P~!2hs=%VkHlBOW;7fxn^$ve!CeF-~XLpvvS7It5xz zgTdsjm7yBuwbXXzXO_{oV+3Som*KOle_|PaEAtnY;q5vaGH)xx53v5}W%wNPkJ^)S z_jnFNHfiUbvshmre?Rl<%J{dN`E$zX=b3+J8NQAA<}!RA^B0xj-^=`lGW-hWUn`kr zs%bhgpGi0me2!BSh^Eg!EPUMY(@dq+{~F^@3eWoZzLCd2rTA*a|6K7?75}2}oIh^R z@a(^$_$tL$C%L9szgF?H6hGBeS^Fn3eyZYePzrs7Xi{Pz`qnc{!0_;)G(Ma8!%{uRYns^hCp$w=bTX^O8`{0zmPsQ5tT-=O%n zDZWYZZ&!R=@tYLCR`HiB{z}DPsQ8THTNQt;;w#kg-w^V&P^RZZ{q}K-;_DTEm*S@@ z{yxRu8Tj_UtoV;A{xQXWO!4~^e~03qR{ULxFDU*aihoJ*nAyDk`Nxpw{;&AzR%xG( zKU(qiimy}rTNJ;5>vtaGG2!F3`b?wZFHrm$ieIJpZpCj@e3#;rif>nZx8h@p-!A;1 zEB}1O?^OKhiXT$^7RBGK_)f*|QG7=6dli3{;zxxyuAa|S{C>sHQ~UwNU!(X#itkYT zxZ=}_e^v3gwE|aE5kGBn=_|p_WL-C7*XaC^#K2QH$ipMDA z@oN;1^KXy8Jmh8k^7%H!5nTO^Q*_dDtuV~K3|iT@zJH2 z-#z`=ipTuo@j=K-{rmixipTut=`U71<~NUDrg*HMJpN+EWBm5`_k_IEzt49m9`lQ* zKcINbA0B^`;<0}5_}dhJyt&EFU!P?Bo{)F`J5KR`AM&pJM)8j-{%FNNsrcE7e@gMj z{H-nD&lo?X_~Uqf9B2F$#hTJr(X3WL<9q#z6Bb16`!l~P< zHqR^m(~2+D-C*_iF#ctauQ3M|{|&`IulOG-{sqN9ulQdw|7XT4J6*}$-x~9*;*VAQ ze<;2|@xNC5`HFv0@#_^|s9S0MlVZGc5`VeJ=M{gj&gXY2zA*D+^Qitl!T2zzwyhzw zb5QaBp!mYf2R!{J6n{|hKT>>QhM)iQ9$#ZL|EEd3pZ|<5S97lXXg@Q2{v^f2zHR?8 z#^1rIvx4JS{A$G)W<22OU!{2D@9{l~FU+{x@;5U6e#IYD{9TGK%y`h#e?ajE75|9h z3w3_}-}ZRwe?I?X#TV-Q{9jP~LB;=<;tRDO^2%RpA4HLOd$l>J_~R5`sQr|uKTq)o z6@RYc3$i;g}UHK{${};s@_>cTA<)76<)@TdtUn(E{5dOrFm-?IU z@u!76`-lCzknwXvUi9B-{VV*kkT2>}iG<$}@QnheKNIpr{V1Oed8c1x zZb}h<9pir+^3?<*istjTg}l?RRQx9ukNAye|MMa5%2%!Ue^C5XGc`%&_!{F+hP*3Z zjpCnDe1+nF7V>iZzWo;zKSk;Pr{bq6zM_|Ei#Dzw#UB;&?)WPef1Kj06@RMYr<$9s ze-|*mIOLswsuaI0uAIwl1E=i@-^}=%s%!962VN1v``2JNIDC1vdJbSgnE@5_Cva~y2n>C8WE!eV$Y zmMfn-|Hu99ZkV#q_>ds3*V#?(xo)}G?F+t}4_wN9d z!%tu4#4E<}QhvOyc2gd&x}}#WH!M8+9Q*y*{JchV^7?PM5{&(;ONai=rGsDd_k*vy z{n1gE)^nO<`C*n%O3MCtL*-xDvi`Dl^oiO$6}99x^rVAZI30b$?I$^v{ovaUum7$~ zWBXh>_&t|q_cP9V0nbPOx65DuBbV>k4_z93-=&6A*>7>vxQYG1@x#my9dP@DPq{S7 zY2p7-`GcRid<)NTxqi&$;dGeOp`SWD`xBODJots%H@siq;~D08{|)*7b+rG{XSuwb z#-DThLtL(Kzu@rfFI`$V=+b(YA7S|{r^#pC2vD~C{oDA<>D+zuk)9c3Qf-~{iai-0 z)M&+LBk=D0cDyFMZ<~E>e{ULJ60k!<5X6G{VGqZbRI_+HdnRbUq#5Hz5G(*mpAZR} zz4z2(Fo=rU&zfUk>9jfvOBw9z?cNdar=?LOdIh`{UQ{xJ(0C~|=RErRAMWQk`*H9$ zZh!Ozm&*R&uibv^C6{JjbZI@~!_T|@F}4#Nn&kfsKB#NoBTjD|$KZ$$0EA;@DGwJb zX3@g=GzhtBp~2XBd_&8|OM(VAn#*+HOU;?wywK+@&6jLwS+E4(7-_ISDaTZ>gg&~L zD}F53*CW5P-g2!+p9hvt?D|?%0ZwbF%5CXkb89NFwp>R#(6J@35ODO_I~G-#Ll#m$^M~+VTgt zKm5O3TF>bS^Fy2_IUVNnh4p=CE2ZY&t*Km>eI>m8wvYXKH(q^CuTRHEUg!hW_+|SP ze>u7%hu6X5mGd|#v=GeY`3%1L+!ut?G5U5cz-*rj+`HMmuN`Cua@jtt1R8^-1O364 zOePDdpa)+gf-(EeCH;Z;ZS(~qS2p)SY3x#qMkcBDcK1OJ9#o2-r>U!pj8}j4{;~q! znAxzjdE?qx*hfNWL753Y`6pLj0jKf5aJ_PxoN)W&f9CX$E{$_)I2~uXu~!^l;Pbxl zcc*`TRCK{^*A`=(7Ow4GS73`%_!+IRg8wd;0+w z{-O#MaQG-^*Kk^YjN7lD;nMNxE)Cw~(xGErI>z`2r$d}(IUVKm?67=x{p&t<6VUos zK2(8~VHL^|xN4pBH}+PSU-EdDj-KGsp*b$ia%uv%Kf?RNEZ@TWF;43_O}^;lX$`-! zx%s@HVN>fsZ~s7WZevqpZ2p1)ySLzmg|Wt1Q{#ep4xdy!55T>UhTglYH#`Gl7MH}U z%oQc^YIA)_d!i#M(;9A8q0#@p=<)FC{!CUqy*_LenDIm*+~w&QvH?AWA3k zLcvc3UaI_O04FZx!=NPkRDSlw%aG9a-D#?#1`979!Vfk5XXE)0iSl+&? z9^7ZF{0U}I+F{@n_A;JiyqfLo7x@{kAqY;VTjaN4#;J6)(YxL&@U^))1^mD!@>QS- zpRMp&7Ka^f4T|cq8M3$4>F=$3>oT8Wm_;Yw=_7-a%I$@lS^3)5rSuw=;gf z%6E|QV3w1QbAfg*{NZ3+soLwmF-B}>||@r zm`}5v!AG2d01s-=_Boc9_}rTuY#wG@;&9x}%)c=%@w-DTe>GC7-vYOD89%?z@)F;> zpXGnf_~@tu>iM`{VqD^fG``dJs@VC4+h5D_b?__Ii^L7*JKCJUxWpgtWV``5_0wd* z8AveR1iVzei$7yeIKj8Gy!dnYTh7h_v@_bopAs*;*uiF{&G!V8{2Mp&i+`k?5?A~n z%Znc*4k>;RKL^T=_($TG_FcNLCH|NA$H{;SCB(7=SF$-Jb ze~EkA_r(GiKTF*6BF=ZyYxr5>jg#8#cU(aVQ=K6xkHjhE`G4`h#5<)ui=QR_+0W&X zdMU6!1IEQ~5*OXcxcGlq`Ct4d@zh!DH}SK?TV;7C^(%2&sb8r_iR0S$xgu}zv&3gt zb9uzi5}y@6cfN+7B`&J{oP5d^Jnp8Sa2$|$s`m3B$62+XB~B~HCH^e1y!NMgv)?bo zpAz5I{*?IdD)zJZQ{u+7{-aI&DRJdLv%L6I;>F@O@u$R#1;6e!{3&r-?a$#KxeNHzLE1&pH+VcqGPdhpsZ-)vFSjOd-b{JQF3;lf1$%~&ufBw?pe41~>Z-dV|T4$SjDN=e=mf<- z;s=SxYClN4_Cv}K5}&p26@|&gI9^)MC-Y8FPLD5QyukN02`=qc;=fWa(jLbC;>s!O zF=;;%9~NBNp~Qo~$$pS}k+|>{F8_O8qh3aF6twAj8RmKkEL&V>O5An}<5DjYul)?; zQZIvL>P6zb(oe&B;W+W6dSRTGzv23Jlw&8Si}!|4Y1B&pV^+|5a>9$}e$d8Be6Yj7)d+DC3XR z%NXM#FYRhv;nEHz?k)1WP<|T6Vl$lm{ahZYFNvGq!MMzK5?B8`w?koj&=s@`#q6|)QiOFE7`u(yTs}3dpRL5h*rxO}iz6<*&7t%7yyiT{vyVIc8g};v#seOJ?KkQm(gr+mqTb&dS$^a!XF%=~ zy#x3xv5i-ldqTk!rDLH$bH*M)}imAm-0hRZE2jolU_=GV;Q{1;%Mim zyMo(y{vz+|7;o9-3UUGBlC<5zc;R2%KDx8rK2yg2KbFDA%HW6C{`f74z?3q?*!Xf z{sU#?KV1eN0Z#eK{qBaWQ+QRa80JrVuS-<^!k>w2+B*XGwwK(rYlJBwn7+omGmUoGH zu8e#=F2I%QcZsRg&QCD=-Xbl>8Tz_y&!|T}p+Af5za4g{{PH|clJWC_lN~(|uC)0U z@87WBNrlc@!9V8=JjZq}vpDZW68iQY)q7TrpSLqU$o)dDqYX1YcBb>QeGfeBeW8r~ z$HYDd;JNvlZ!sR@a$-8L+gKSpe-Jx7U-Yp26pWwbH+ilp$@uYhT;-ie(#Yd&;SLAN zd=zIphR+w0tn+S`k8{6hV7y)I@B!IxQ-eDj|H+>%pLK!-mzV)7&pVOi7Pd2@{Qqgj z>+f~KJe`~S7$4&PvWaay%y{hc4)`$Rk1;;Z>z_2^`z_8pk>tfPINrZ&kIQg9_OcG% z>+5jtFH)Wp87~Yu!LPaIV$NiIl*@S&+d13fk%I8gm1Xd&fZOp?tq(iczPZsEu-{zA z&wk(m+l(f+v3!!t-^t|NjK_HVIhOG+iTrgA*vt6W88_UX&tUx97U!Kv@-vnnSZ!cy1EXGGZ?g0DUZv2b`e=EyGlg%tY z#QkLjlU){%O1j_gWBKtNZXd&)-G+eEd>U8tsmY{UI~vp(|G zCfAt7{o#!<(-9&G+@afxecTe-J8jqL?Ydn=;-ci zO?4;IxP>^MNDXW^@^DeQadGUN1*L@&?OnZHiBv9^+L6FBNx2=SJ(udqB+>&tJv*Qh z*-JpO-xE!zvQ(l}Hi4VV6S>T_;+jOF<&xzaH(r@ov1xtt#?>3vClZZ|7B5wPlJXaff$iyWPd%E8~p7i>17A&N-~cM^G$OTYj6RGYhvY zB-?oQu6g4nYZLTmiMQ7r?p?ZZ$;M5WhPz9aExW|D;#s3yUrz$V*cRzfUA=ZU(bJdC zG%h;#+yzor^p<>o&!UALv0@_oHGH-EBSF`{<~%c$^AdJHI0VD;)+UM$@?_lg6mkooU3tobN~V zX2bTA$Ys0me_^bNth$`99Z03^aq)gz4-Hko==mtdwxuw#we4u@Mx%0C+-l&Jj!Z<6 z56sm)W(W+^y~s(Xh6G*<(Akxy(WpI>L$_IR$&z);6U)~xOC+%84WMb0Sa#+5CF@o< z`;2}32++#)n-a@cv4vHrx5Ub|8`;#V ze1EPjg~RFG5|6K3yLxGJVqxQ=#wHBxnM@H`*m$<-L0_fgOC+|oXLA_c+9zuz5}91C zw=aPzPto+{TL=eY)J1z&$3QM44ad!aGUbJG`LoA4NbhdF_Gfie2 z>7gA%uI<2(g$Ka;a%h4y`sMr6eFOb|{@jvCltwz{dpuykS|Yi)P+w)YuwX>You8|<3FX6A}(U5KB(D4d_4 za#WLb6dF!tm%`!)UbYLMVmX@(Y6*o$OX}?? z!qg6_wnKlj7pYFrxwc51QtJ&DOuebzzI->HvhwXD5~(~EQ2i=r*VKDp(HAFg+o>W! zPaN8O?V`eAT{+X$*Vf-XS;q=>rKy>Q7Qz~5&lbl`>)L3g^k%kUS%m=@{>!HNJADU| zNleH%`Yig0)q{dBgH>N%b!E=BIR4pe+p`1xZT9hC(}Zc8b-yz>RCJAyd=D zV7me4(wOJ5`bxWMDlramwM6E0SGm;J5g~OJuj@2B@W8YiFEn$-|(2P0qlS zYrBdY(cOBNyE$BI{YYZGqA#w`yp^I11X7t;7um8!CP12BO}jl)DEh(a}%K@rpI*ujnHBiOhD?RoGKn?TXU2^8wY+Nyd4D8j3x5yS6AQ z+XkLbZOu3*JEJs$y6SPq&NE_(HgCHjiF+#pS}~C&oWk3*7znVtTtBwh=zX;IN*g*R z-!bi0&c_l7EOmHINI6KubPJ-=%OQy6w_U^008+Bvwk@6gP(0p5=QdmKc3h>gBR!yo zZ|5QIde)fE02st-Y&5~ClYPjQ{x1H$s7wNUx+ zuZ#d4lsjd>*o6Z6Vx}>_qlZp08)3nvo$||`s%K4OFP;x??C2e6r1JzU4R%DJ)`70> z^n6S~PHM^0)$OF)8ry;*di!y})TfkIL7c4tl z7=R2;k9vAAYjU9L4JIc*pF*X4dqVge?3^lR_(Wx&!>S?rHvGb+{7`=}>q#1flJ19p zb;6i)07vz&V0}sFD*bA;zgp>E&-#)EN?z+<4*m~#2bCQEFzZVy_b1`y&Ci#oL96yDTNq;H+(y~tLSg}q~=l@fsFVBBV+Hi`Wp|l@C zpTiGa>I>a0_ov1922d?8`;xv4U0lKn_2qf;#jjKUe?yo2FU?GzJCC#e^QVH0Y(eBV z{j7sBxk&Wo`SgbUWEC4%4E0~yq}@1I|L7J(ckuf-h>aKr;gJaEJVM?7%E14lgY|E&l957jdLO8@`> From 0e66890ba9598ad077feeddcf10345f905943c01 Mon Sep 17 00:00:00 2001 From: Quentin B Date: Tue, 27 Feb 2024 21:26:53 -0500 Subject: [PATCH 61/62] D11C14 openocd --- boards.txt | 1 + ...Fab_SAM_Core_for_Arduino-1.11.0_index.json | 68 ------------------- json/package_Fab_SAM_index.json | 68 +++++++++++++++++++ platform.txt | 2 +- 4 files changed, 70 insertions(+), 69 deletions(-) delete mode 100644 json/package_Fab_SAM_Core_for_Arduino-1.11.0_index.json diff --git a/boards.txt b/boards.txt index 236f2e0e5..21604f676 100644 --- a/boards.txt +++ b/boards.txt @@ -112,6 +112,7 @@ d11c14a.menu.timer.timer_1465Hz.build.timerconfig=TIMER_1465Hz d11c14a.build.extra_flags=-D__SAMD11C14A__ {build.usb_flags} -DARM_MATH_CM0PLUS d11c14a.build.ldscript=flash_16KB.ld d11c14a.build.chip=samd11 +d11c14a.build.openocdscript=openocd_scripts/SAMD11C14A.cfg d11c14a.bootloader.file=zero/binaries/sam_ba_SAMD11C14A.bin d11c14a.menu.bootloader.4kb=4KB_BOOTLOADER d11c14a.menu.bootloader.4kb.build.bootloader_size=__4KB_BOOTLOADER__ diff --git a/json/package_Fab_SAM_Core_for_Arduino-1.11.0_index.json b/json/package_Fab_SAM_Core_for_Arduino-1.11.0_index.json deleted file mode 100644 index 67145c23e..000000000 --- a/json/package_Fab_SAM_Core_for_Arduino-1.11.0_index.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "Fab SAM core for Arduino", - "architecture": "samd", - "version": "1.11.0", - "category": "Contributed", - "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.11.0/Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", - "archiveFileName": "Fab_SAM_Core_for_Arduino-1.11.0.tar.bz2", - "checksum": "SHA-256:f015d271ab6f1d0b785c8a0c8c5ea55df3d2d7e810250ab7b2718c9b12db200d", - "size": "356710", - "boards": [ - { - "name": "Generic_D11C14A" - }, - { - "name": "Generic_D11D14AS" - }, - { - "name": "Generic_D11D14AM" - }, - { - "name": "Generic_x21E" - }, - { - "name": "Generic_x21G" - }, - { - "name": "Generic_x21J" - }, - { - "name": "Generic_D51G" - }, - { - "name": "Generic_D51J" - } - ], - "toolsDependencies": [ - { - "packager": "arduino", - "name": "arm-none-eabi-gcc", - "version": "7-2017q4" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "bossac", - "version": "1.9.0" - }, - { - "packager": "arduino", - "name": "openocd", - "version": "0.9.0-arduino" - }, - { - "packager": "arduino", - "name": "CMSIS", - "version": "4.5.0" - }, - { - "packager": "Fab_SAM_Arduino", - "name": "CMSIS-Atmel", - "version": "1.0.0-mattairtech-2" - }, - { - "packager": "arduino", - "name": "arduinoOTA", - "version": "1.2.1" - } - ] -} diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 463533760..4a63fd173 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -479,6 +479,74 @@ "version": "0.51.0" } ] + }, + { + "name": "Fab SAM core for Arduino", + "architecture": "samd", + "version": "1.12.0", + "category": "Contributed", + "url": "https://github.com/qbolsee/ArduinoCore-fab-sam/releases/download/1.12.0/Fab_SAM_Core_for_Arduino-1.12.0.tar.bz2", + "archiveFileName": "Fab_SAM_Core_for_Arduino-1.12.0.tar.bz2", + "checksum": "SHA-256:f0bd44defd0377192a543100f7e7086bab8844be7f75e3aed3dd208ec4064846", + "size": "356371", + "boards": [ + { + "name": "Generic_D11C14A" + }, + { + "name": "Generic_D11D14AS" + }, + { + "name": "Generic_D11D14AM" + }, + { + "name": "Generic_x21E" + }, + { + "name": "Generic_x21G" + }, + { + "name": "Generic_x21J" + }, + { + "name": "Generic_D51G" + }, + { + "name": "Generic_D51J" + } + ], + "toolsDependencies": [ + { + "packager": "arduino", + "name": "arm-none-eabi-gcc", + "version": "7-2017q4" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "bossac", + "version": "1.9.0" + }, + { + "packager": "arduino", + "name": "openocd", + "version": "0.9.0-arduino" + }, + { + "packager": "arduino", + "name": "CMSIS", + "version": "4.5.0" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "CMSIS-Atmel", + "version": "1.0.0-mattairtech-2" + }, + { + "packager": "arduino", + "name": "arduinoOTA", + "version": "1.2.1" + } + ] } ], "tools": [ diff --git a/platform.txt b/platform.txt index c122303eb..ff87cdc39 100644 --- a/platform.txt +++ b/platform.txt @@ -18,7 +18,7 @@ # https://github.com/arduino/Arduino/wiki/Arduino-IDE-1.5---3rd-party-Hardware-specification name=Fab SAM core for Arduino -version=1.11.0 +version=1.12.0 # Compile variables # ----------------- From 0ac2331fcd0e96c411836e1d5d36ac2363cab7ae Mon Sep 17 00:00:00 2001 From: Quentin B Date: Tue, 27 Feb 2024 22:00:13 -0500 Subject: [PATCH 62/62] tool dependency bug --- json/package_Fab_SAM_index.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/json/package_Fab_SAM_index.json b/json/package_Fab_SAM_index.json index 4a63fd173..df5f4e9d3 100644 --- a/json/package_Fab_SAM_index.json +++ b/json/package_Fab_SAM_index.json @@ -529,7 +529,7 @@ { "packager": "arduino", "name": "openocd", - "version": "0.9.0-arduino" + "version": "0.10.0-arduino7" }, { "packager": "arduino", @@ -545,6 +545,11 @@ "packager": "arduino", "name": "arduinoOTA", "version": "1.2.1" + }, + { + "packager": "Fab_SAM_Arduino", + "name": "edbg", + "version": "0.51.0" } ] }

      li{I{N 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�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