summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2013-05-19 20:04:29 -0700
committerKeith Packard <keithp@keithp.com>2013-05-19 20:04:29 -0700
commit35a05041d3ca3e69a146bd3bf8038c0f1cbc1b42 (patch)
tree8877862f68b7139b605711cabbcf37151325e583
parent098fd43a740ee2a782f82b6b71965b60cdba2d62 (diff)
altos: Add EXTI_PIN_NOCONFIGURE to exti interface, use for MS5607
This asks the EXTI code to not mess with the pin configuration so that the MS5607 driver can get interrupts on the MISO pin while still using it for SPI. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/attiny/ao_exti.h1
-rw-r--r--src/drivers/ao_ms5607.c12
-rw-r--r--src/lpc/ao_exti.h1
-rw-r--r--src/lpc/ao_exti_lpc.c3
-rw-r--r--src/stm/ao_exti.h1
-rw-r--r--src/stm/ao_exti_stm.c30
6 files changed, 24 insertions, 24 deletions
diff --git a/src/attiny/ao_exti.h b/src/attiny/ao_exti.h
index 2ea4f47d..85bb2fba 100644
--- a/src/attiny/ao_exti.h
+++ b/src/attiny/ao_exti.h
@@ -30,5 +30,6 @@ ao_exti_setup_port(uint8_t pin, uint8_t mode, void (*callback)(void));
#define ao_exti_init()
#define AO_EXTI_MODE_RISING 1
+#define AO_EXTI_PIN_NOCONFIGURE 0
#endif /* _AO_EXTI_H_ */
diff --git a/src/drivers/ao_ms5607.c b/src/drivers/ao_ms5607.c
index 0eece584..8f1dcbe1 100644
--- a/src/drivers/ao_ms5607.c
+++ b/src/drivers/ao_ms5607.c
@@ -247,17 +247,9 @@ ao_ms5607_init(void)
*/
ao_exti_setup(AO_MS5607_MISO_PORT,
AO_MS5607_MISO_PIN,
- AO_EXTI_MODE_RISING,
+ AO_EXTI_MODE_RISING|
+ AO_EXTI_PIN_NOCONFIGURE,
ao_ms5607_isr);
-
-#ifdef STM_MODER_ALTERNATE
- /* Reset the pin from INPUT to ALTERNATE so that SPI works
- * This needs an abstraction at some point...
- */
- stm_moder_set(AO_MS5607_MISO_PORT,
- AO_MS5607_MISO_PIN,
- STM_MODER_ALTERNATE);
-#endif
}
#endif
diff --git a/src/lpc/ao_exti.h b/src/lpc/ao_exti.h
index cbe63eaa..e8599eb4 100644
--- a/src/lpc/ao_exti.h
+++ b/src/lpc/ao_exti.h
@@ -25,6 +25,7 @@
#define AO_EXTI_PRIORITY_LOW 16
#define AO_EXTI_PRIORITY_MED 0
#define AO_EXTI_PRIORITY_HIGH 32
+#define AO_EXTI_PIN_NOCONFIGURE 64
void
ao_exti_setup(uint8_t gpio, uint8_t pin, uint8_t mode, void (*callback)());
diff --git a/src/lpc/ao_exti_lpc.c b/src/lpc/ao_exti_lpc.c
index ce98b4ad..588cf58c 100644
--- a/src/lpc/ao_exti_lpc.c
+++ b/src/lpc/ao_exti_lpc.c
@@ -91,6 +91,9 @@ ao_exti_setup (uint8_t port, uint8_t pin, uint8_t mode, void (*callback)(void))
if (pint == LPC_NUM_PINT)
ao_panic(AO_PANIC_EXTI);
+ if (!mode & AO_EXTI_PIN_NOCONFIGURE)
+ ao_enable_input(port, pin, mode);
+
ao_arch_block_interrupts();
mask = (1 << pint);
ao_pint_inuse |= mask;
diff --git a/src/stm/ao_exti.h b/src/stm/ao_exti.h
index 35b56b57..ebea224d 100644
--- a/src/stm/ao_exti.h
+++ b/src/stm/ao_exti.h
@@ -25,6 +25,7 @@
#define AO_EXTI_PRIORITY_LOW 16
#define AO_EXTI_PRIORITY_MED 0
#define AO_EXTI_PRIORITY_HIGH 32
+#define AO_EXTI_PIN_NOCONFIGURE 64
void
ao_exti_setup(struct stm_gpio *gpio, uint8_t pin, uint8_t mode, void (*callback)());
diff --git a/src/stm/ao_exti_stm.c b/src/stm/ao_exti_stm.c
index 1361d0d4..c1dcdf85 100644
--- a/src/stm/ao_exti_stm.c
+++ b/src/stm/ao_exti_stm.c
@@ -70,21 +70,23 @@ ao_exti_setup (struct stm_gpio *gpio, uint8_t pin, uint8_t mode, void (*callback
/* configure gpio to interrupt routing */
stm_exticr_set(gpio, pin);
- /* configure pin as input, setting selected pull-up/down mode */
- stm_moder_set(gpio, pin, STM_MODER_INPUT);
- switch (mode & (AO_EXTI_MODE_PULL_UP|AO_EXTI_MODE_PULL_DOWN)) {
- case 0:
- default:
- pupdr = STM_PUPDR_NONE;
- break;
- case AO_EXTI_MODE_PULL_UP:
- pupdr = STM_PUPDR_PULL_UP;
- break;
- case AO_EXTI_MODE_PULL_DOWN:
- pupdr = STM_PUPDR_PULL_DOWN;
- break;
+ if (!(mode & AO_EXTI_PIN_NOCONFIGURE)) {
+ /* configure pin as input, setting selected pull-up/down mode */
+ stm_moder_set(gpio, pin, STM_MODER_INPUT);
+ switch (mode & (AO_EXTI_MODE_PULL_UP|AO_EXTI_MODE_PULL_DOWN)) {
+ case 0:
+ default:
+ pupdr = STM_PUPDR_NONE;
+ break;
+ case AO_EXTI_MODE_PULL_UP:
+ pupdr = STM_PUPDR_PULL_UP;
+ break;
+ case AO_EXTI_MODE_PULL_DOWN:
+ pupdr = STM_PUPDR_PULL_DOWN;
+ break;
+ }
+ stm_pupdr_set(gpio, pin, pupdr);
}
- stm_pupdr_set(gpio, pin, pupdr);
/* Set interrupt mask and rising/falling mode */
stm_exti.imr &= ~mask;