From 8f1125252f65078e6a14c6393020ad8e5e6d7829 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Tue, 1 Oct 2013 19:20:54 +0200 Subject: [PATCH 1/2] Added attachInterruptToPin() function (Rob Tillaart) --- build/shared/revisions.txt | 3 +++ hardware/arduino/avr/cores/arduino/Arduino.h | 18 ++++++++++++++++++ .../arduino/sam/cores/arduino/WInterrupts.c | 18 ++++++++++++++++++ .../arduino/sam/cores/arduino/WInterrupts.h | 4 ++++ 4 files changed, 43 insertions(+) diff --git a/build/shared/revisions.txt b/build/shared/revisions.txt index 238eed0025d..b317261e2be 100644 --- a/build/shared/revisions.txt +++ b/build/shared/revisions.txt @@ -1,3 +1,6 @@ + +* Added attachInterruptToPin command (Rob Tillaart) + ARDUINO 1.5.7 BETA [core] diff --git a/hardware/arduino/avr/cores/arduino/Arduino.h b/hardware/arduino/avr/cores/arduino/Arduino.h index 630f0d6d78e..dcae175308b 100644 --- a/hardware/arduino/avr/cores/arduino/Arduino.h +++ b/hardware/arduino/avr/cores/arduino/Arduino.h @@ -244,4 +244,22 @@ long map(long, long, long, long, long); #include "pins_arduino.h" +static inline boolean attachInterruptToPin(uint8_t pin, void (*userFunc)(void), int mode) +{ + int irq = digitalPinToInterrupt(pin); + if (irq == NOT_AN_INTERRUPT) + return false; + attachInterrupt(irq, userFunc, mode); + return true; +} + +static inline boolean detachInterruptFromPin(uint8_t pin) +{ + int irq = digitalPinToInterrupt(pin); + if (irq == NOT_AN_INTERRUPT) + return false; + detachInterrupt(irq); + return true; +} + #endif diff --git a/hardware/arduino/sam/cores/arduino/WInterrupts.c b/hardware/arduino/sam/cores/arduino/WInterrupts.c index 87b83e4572b..ba46e5cf1c3 100644 --- a/hardware/arduino/sam/cores/arduino/WInterrupts.c +++ b/hardware/arduino/sam/cores/arduino/WInterrupts.c @@ -129,6 +129,24 @@ void detachInterrupt(uint32_t pin) pio->PIO_IDR = mask; } +boolean attachInterruptToPin(uint8_t pin, void (*userFunc)(void), int mode) +{ + int irq = digitalPinToInterrupt(pin); + if (irq == NOT_AN_INTERRUPT) + return false; + attachInterrupt(irq, userFunc, mode); + return true; +} + +boolean detachInterruptFromPin(uint8_t pin) +{ + int irq = digitalPinToInterrupt(pin); + if (irq == NOT_AN_INTERRUPT) + return false; + detachInterrupt(irq); + return true; +} + #ifdef __cplusplus extern "C" { #endif diff --git a/hardware/arduino/sam/cores/arduino/WInterrupts.h b/hardware/arduino/sam/cores/arduino/WInterrupts.h index bb698cdf384..da73dcb2024 100644 --- a/hardware/arduino/sam/cores/arduino/WInterrupts.h +++ b/hardware/arduino/sam/cores/arduino/WInterrupts.h @@ -29,6 +29,10 @@ void attachInterrupt(uint32_t pin, void (*callback)(void), uint32_t mode); void detachInterrupt(uint32_t pin); +boolean attachInterruptToPin(uint8_t pin, void (*userFunc)(void), int mode); + +boolean detachInterruptFromPin(uint8_t pin); + #ifdef __cplusplus } #endif From 33c23720c1e4f9653c18f710f5dfd838c992eda0 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Thu, 3 Oct 2013 16:23:34 +0200 Subject: [PATCH 2/2] Updated keywords.txt for {attach/detach}Interrupt{To/From}Pin --- build/shared/lib/keywords.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build/shared/lib/keywords.txt b/build/shared/lib/keywords.txt index fa4df1c20f5..50331d07cf9 100644 --- a/build/shared/lib/keywords.txt +++ b/build/shared/lib/keywords.txt @@ -149,6 +149,8 @@ analogRead KEYWORD2 AnalogRead analogWrite KEYWORD2 AnalogWrite attachInterrupt KEYWORD2 AttachInterrupt detachInterrupt KEYWORD2 DetachInterrupt +attachInterruptToPin KEYWORD2 AttachInterruptToPin +detachInterruptFromPin KEYWORD2 DetachInterruptFromPin delay KEYWORD2 Delay delayMicroseconds KEYWORD2 DelayMicroseconds digitalWrite KEYWORD2 DigitalWrite