aboutsummaryrefslogtreecommitdiffstats
path: root/src/wiring/ext_interrupts.c
diff options
context:
space:
mode:
authoriperry <iperry@749a229e-a60e-11de-b98f-4500b42dc123>2009-12-19 10:53:07 +0000
committeriperry <iperry@749a229e-a60e-11de-b98f-4500b42dc123>2009-12-19 10:53:07 +0000
commitacf59b1abb346998c492b93fee4a680a32f538d5 (patch)
treec49dd57f489769608095736457a0db9350868a47 /src/wiring/ext_interrupts.c
parentaf4c4985cef82b80b936584d686c80d9538082b6 (diff)
downloadlibrambutan-acf59b1abb346998c492b93fee4a680a32f538d5.tar.gz
librambutan-acf59b1abb346998c492b93fee4a680a32f538d5.zip
Added licensing. Moved lots of header files around. Added HardwareSerial reads, writes. Tweaked some of the util and assert functions. Added various useful routines for printing stuff to the serial port. Continued moving out stm32lib. Slightly more consistent naming, this will come in another change.
git-svn-id: https://leaflabs.googlecode.com/svn/trunk/library@74 749a229e-a60e-11de-b98f-4500b42dc123
Diffstat (limited to 'src/wiring/ext_interrupts.c')
-rw-r--r--src/wiring/ext_interrupts.c49
1 files changed, 44 insertions, 5 deletions
diff --git a/src/wiring/ext_interrupts.c b/src/wiring/ext_interrupts.c
index 0a35472..20ec11f 100644
--- a/src/wiring/ext_interrupts.c
+++ b/src/wiring/ext_interrupts.c
@@ -1,3 +1,28 @@
+/* *****************************************************************************
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Created: 12/18/09 02:39:48
+ * Copyright (c) 2009 Perry L. Hung. All rights reserved.
+ *
+ * ****************************************************************************/
+
+/**
+ * @file ext_interrupts.c
+ *
+ * @brief Wiring-like interface for external interrupts
+ */
+
#include "wiring.h"
#include "exti.h"
#include "ext_interrupts.h"
@@ -25,7 +50,6 @@ static ExtiInfo PIN_TO_EXTI_CHANNEL[NR_MAPLE_PINS] = {
};
-
/**
* @brief Attach an interrupt handler to be triggered on a given
* transition on the pin. Runs in interrupt context
@@ -36,23 +60,38 @@ static ExtiInfo PIN_TO_EXTI_CHANNEL[NR_MAPLE_PINS] = {
*
* @sideeffect Registers a handler
*/
-int attachInterrupt(uint8_t pin, void (*handler)(void), uint8_t mode) {
+int attachInterrupt(uint8_t pin, voidFuncPtr handler, ExtInterruptTriggerMode mode) {
+ uint8_t outMode;
/* Parameter checking */
if (pin >= NR_MAPLE_PINS) {
return EXT_INTERRUPT_INVALID_PIN;
}
if (!handler) {
+ ASSERT(0);
return EXT_INTERRUPT_INVALID_FUNCTION;
}
- if (!(mode < NR_EXTI_MODES)) {
- return EXT_INTERRUPT_INVALID_MODE;
+ switch (mode) {
+ case RISING:
+ outMode = EXTI_RISING;
+ break;
+ case FALLING:
+ outMode = EXTI_FALLING;
+ break;
+ case CHANGE:
+ outMode = EXTI_RISING_FALLING;
+ break;
+ default:
+ ASSERT(0);
+ return EXT_INTERRUPT_INVALID_MODE;;
}
- exti_attach_interrupt(PIN_TO_EXTI_CHANNEL[pin].channel,
+ exti_attach_interrupt(PIN_TO_EXTI_CHANNEL[pin].channel,
PIN_TO_EXTI_CHANNEL[pin].port,
handler, mode);
+
+ return 0;
}
int detachInterrupt(uint8_t pin) {