From 0352cc8558c90d1c7652c9167991d96e1eb1f2a0 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Tue, 23 Feb 2016 14:21:33 -0500 Subject: [PATCH 1/6] Change digitalPinToInterrupt to return pin, and use g_APinDescription[pin].ulExtInt to map pin inside attachInterrupt/detachInterrupt This brings things inline with the atachInterrupt documentation for usage: attachInterrupt(digitalPinToInterrupt(pin), ISR, mode); --- cores/arduino/WInterrupts.c | 4 ++-- variants/arduino_zero/variant.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c index a1f1de9e2..0f1bf188a 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.c @@ -57,7 +57,7 @@ void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode) uint32_t config; uint32_t pos; - EExt_Interrupts in = digitalPinToInterrupt(pin); + EExt_Interrupts in = g_APinDescription[pin].ulExtInt; if (in == NOT_AN_INTERRUPT || in == EXTERNAL_INT_NMI) return; @@ -116,7 +116,7 @@ void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode) */ void detachInterrupt(uint32_t pin) { - EExt_Interrupts in = digitalPinToInterrupt(pin); + EExt_Interrupts in = g_APinDescription[pin].ulExtInt; if (in == NOT_AN_INTERRUPT || in == EXTERNAL_INT_NMI) return; diff --git a/variants/arduino_zero/variant.h b/variants/arduino_zero/variant.h index 1a1d47565..6897f4f57 100644 --- a/variants/arduino_zero/variant.h +++ b/variants/arduino_zero/variant.h @@ -77,7 +77,7 @@ extern "C" // #define digitalPinToTimer(P) // Interrupts -#define digitalPinToInterrupt(P) ( g_APinDescription[P].ulExtInt ) +#define digitalPinToInterrupt(P) ( P ) // LEDs #define PIN_LED_13 (13u) From 2e620d7019fd9106d1501c1c21061f357d00bdd9 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Tue, 23 Feb 2016 17:04:19 -0500 Subject: [PATCH 2/6] Move digitalPinToInterrupt definition to Arduino.h if variant compliance it 1.6.5 or higher --- cores/arduino/Arduino.h | 5 +++++ cores/arduino/WInterrupts.c | 8 ++++++++ variants/arduino_zero/variant.h | 7 ++----- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 1be6d7171..c630f7370 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -114,6 +114,11 @@ void loop( void ) ; #define bit(b) (1UL << (b)) +#if (ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10605) +// Interrupts +#define digitalPinToInterrupt(P) ( g_APinDescription[P].ulExtInt ) +#endif + // USB Device #include "USB/USBDesc.h" #include "USB/USBCore.h" diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c index 0f1bf188a..430195ca1 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.c @@ -57,7 +57,11 @@ void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode) uint32_t config; uint32_t pos; +#if ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10605 EExt_Interrupts in = g_APinDescription[pin].ulExtInt; +#else + EExt_Interrupts in = digitalPinToInterrupt(pin); +#endif if (in == NOT_AN_INTERRUPT || in == EXTERNAL_INT_NMI) return; @@ -116,7 +120,11 @@ void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode) */ void detachInterrupt(uint32_t pin) { +#if (ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10605) EExt_Interrupts in = g_APinDescription[pin].ulExtInt; +#else + EExt_Interrupts in = digitalPinToInterrupt(pin); +#endif if (in == NOT_AN_INTERRUPT || in == EXTERNAL_INT_NMI) return; diff --git a/variants/arduino_zero/variant.h b/variants/arduino_zero/variant.h index 6897f4f57..8bfe71c5b 100644 --- a/variants/arduino_zero/variant.h +++ b/variants/arduino_zero/variant.h @@ -19,8 +19,8 @@ #ifndef _VARIANT_ARDUINO_ZERO_ #define _VARIANT_ARDUINO_ZERO_ -// The definitions here needs a SAMD core >=1.6.3 -#define ARDUINO_SAMD_VARIANT_COMPLIANCE 10603 +// The definitions here needs a SAMD core >=1.6.5 +#define ARDUINO_SAMD_VARIANT_COMPLIANCE 10605 /*---------------------------------------------------------------------------- * Definitions @@ -76,9 +76,6 @@ extern "C" */ // #define digitalPinToTimer(P) -// Interrupts -#define digitalPinToInterrupt(P) ( P ) - // LEDs #define PIN_LED_13 (13u) #define PIN_LED_RXL (25u) From bdba29668c74626b830cc60c64527f7ac13afbdd Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Tue, 23 Feb 2016 17:04:33 -0500 Subject: [PATCH 3/6] Add change log for variant compliance --- VARIANT_COMPLIANCE_CHANGELOG | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 VARIANT_COMPLIANCE_CHANGELOG diff --git a/VARIANT_COMPLIANCE_CHANGELOG b/VARIANT_COMPLIANCE_CHANGELOG new file mode 100644 index 000000000..0b13a212d --- /dev/null +++ b/VARIANT_COMPLIANCE_CHANGELOG @@ -0,0 +1,8 @@ +SAMD CORE 1.6.5 + +* digitalPinToInterrupt #define moved to Arduino.h, variant.h must no longer define it + +SAMD CORE 1.6.3 + +* Timer for pin PWM selected based on value of PIN_ATTR_TIMER_ALT or PIN_ATTR_TIMER, + prior to this pin type was used From 90bf3d5cce04f2a5b7af46451f1e59c993ce3d13 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Tue, 23 Feb 2016 17:24:11 -0500 Subject: [PATCH 4/6] Make Arduino.h version of digitalPinToInterrupt return argument --- cores/arduino/Arduino.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index c630f7370..97a1342f3 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -116,7 +116,7 @@ void loop( void ) ; #if (ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10605) // Interrupts -#define digitalPinToInterrupt(P) ( g_APinDescription[P].ulExtInt ) +#define digitalPinToInterrupt(P) ( P ) #endif // USB Device From 49f0d6716127d58c80e46445e75484e6677349fe Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Wed, 6 Apr 2016 13:39:49 -0400 Subject: [PATCH 5/6] Bump ARDUINO_SAMD_VARIANT_COMPLIANCE to 100606 --- VARIANT_COMPLIANCE_CHANGELOG | 2 +- cores/arduino/Arduino.h | 2 +- cores/arduino/WInterrupts.c | 4 ++-- variants/arduino_zero/variant.h | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/VARIANT_COMPLIANCE_CHANGELOG b/VARIANT_COMPLIANCE_CHANGELOG index 0b13a212d..bf1c2fe21 100644 --- a/VARIANT_COMPLIANCE_CHANGELOG +++ b/VARIANT_COMPLIANCE_CHANGELOG @@ -1,4 +1,4 @@ -SAMD CORE 1.6.5 +SAMD CORE 1.6.6 * digitalPinToInterrupt #define moved to Arduino.h, variant.h must no longer define it diff --git a/cores/arduino/Arduino.h b/cores/arduino/Arduino.h index 97a1342f3..3bafdb5fc 100644 --- a/cores/arduino/Arduino.h +++ b/cores/arduino/Arduino.h @@ -114,7 +114,7 @@ void loop( void ) ; #define bit(b) (1UL << (b)) -#if (ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10605) +#if (ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10606) // Interrupts #define digitalPinToInterrupt(P) ( P ) #endif diff --git a/cores/arduino/WInterrupts.c b/cores/arduino/WInterrupts.c index 430195ca1..70d9acd01 100644 --- a/cores/arduino/WInterrupts.c +++ b/cores/arduino/WInterrupts.c @@ -57,7 +57,7 @@ void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode) uint32_t config; uint32_t pos; -#if ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10605 +#if ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10606 EExt_Interrupts in = g_APinDescription[pin].ulExtInt; #else EExt_Interrupts in = digitalPinToInterrupt(pin); @@ -120,7 +120,7 @@ void attachInterrupt(uint32_t pin, voidFuncPtr callback, uint32_t mode) */ void detachInterrupt(uint32_t pin) { -#if (ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10605) +#if (ARDUINO_SAMD_VARIANT_COMPLIANCE >= 10606) EExt_Interrupts in = g_APinDescription[pin].ulExtInt; #else EExt_Interrupts in = digitalPinToInterrupt(pin); diff --git a/variants/arduino_zero/variant.h b/variants/arduino_zero/variant.h index 8bfe71c5b..cb88edb28 100644 --- a/variants/arduino_zero/variant.h +++ b/variants/arduino_zero/variant.h @@ -19,8 +19,8 @@ #ifndef _VARIANT_ARDUINO_ZERO_ #define _VARIANT_ARDUINO_ZERO_ -// The definitions here needs a SAMD core >=1.6.5 -#define ARDUINO_SAMD_VARIANT_COMPLIANCE 10605 +// The definitions here needs a SAMD core >=1.6.6 +#define ARDUINO_SAMD_VARIANT_COMPLIANCE 10606 /*---------------------------------------------------------------------------- * Definitions From 1c8071ad335393dc5b92acf602a3f29b919e99a3 Mon Sep 17 00:00:00 2001 From: Sandeep Mistry Date: Wed, 6 Apr 2016 13:40:41 -0400 Subject: [PATCH 6/6] Make MKR1000 variant compliance level 1.6.6 --- variants/mkr1000/variant.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/variants/mkr1000/variant.h b/variants/mkr1000/variant.h index 8a576f266..a6415d599 100644 --- a/variants/mkr1000/variant.h +++ b/variants/mkr1000/variant.h @@ -18,8 +18,8 @@ #pragma once -// The definitions here needs a SAMD core >=1.6.3 -#define ARDUINO_SAMD_VARIANT_COMPLIANCE 10603 +// The definitions here needs a SAMD core >=1.6.6 +#define ARDUINO_SAMD_VARIANT_COMPLIANCE 10606 #include @@ -51,7 +51,6 @@ #define portInputRegister(port) (&(port->IN.reg)) #define portModeRegister(port) (&(port->DIR.reg)) #define digitalPinHasPWM(P) (g_APinDescription[P].ulPWMChannel != NOT_ON_PWM || g_APinDescription[P].ulTCChannel != NOT_ON_TIMER) -#define digitalPinToInterrupt(P) (g_APinDescription[P].ulExtInt) /* * digitalPinToTimer(..) is AVR-specific and is not defined for SAMD