diff options
| author | Keith Packard <keithp@keithp.com> | 2012-08-06 19:33:44 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2012-08-06 19:33:44 -0700 | 
| commit | 6171892fa32e8a662a494ec6ba28a82fddc68589 (patch) | |
| tree | 273dbb25febfa0ea8fff5c0909dd044c50102d52 /src | |
| parent | de701d5a234cd21930cf92c9cabebb0e230da9b5 (diff) | |
altos: Add ao_gpio_get and ao_exti_set_mode
Needed to support general GPIO interrupts
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/stm/ao_arch_funcs.h | 13 | ||||
| -rw-r--r-- | src/stm/ao_exti.h | 3 | ||||
| -rw-r--r-- | src/stm/ao_exti_stm.c | 14 | ||||
| -rw-r--r-- | src/stm/stm32l.h | 2 | 
4 files changed, 31 insertions, 1 deletions
| diff --git a/src/stm/ao_arch_funcs.h b/src/stm/ao_arch_funcs.h index d2c973f5..3d8ca1f2 100644 --- a/src/stm/ao_arch_funcs.h +++ b/src/stm/ao_arch_funcs.h @@ -78,12 +78,25 @@ ao_spi_init(void);  #define ao_gpio_set(port, bit, pin, v) stm_gpio_set(port, bit, v) +#define ao_gpio_get(port, bit, pin) stm_gpio_get(port, bit) +  #define ao_enable_output(port,bit,pin,v) do {			\  		ao_enable_port(port);				\  		ao_gpio_set(port, bit, pin, v);			\  		stm_moder_set(port, bit, STM_MODER_OUTPUT);\  	} while (0) +#define ao_enable_input(port,bit,mode) do {				\ +		ao_enable_port(port);					\ +		stm_moder_set(port, bit, STM_MODER_INPUT);		\ +		if (mode == AO_EXTI_MODE_PULL_UP)			\ +			stm_pupdr_set(port, bit, STM_PUPDR_PULL_UP);	\ +		else if (mode == AO_EXTI_MODE_PULL_DOWN)		\ +			stm_pupdr_set(port, bit, STM_PUPDR_PULL_DOWN);	\ +		else							\ +			stm_pupdr_set(port, bit, STM_PUPDR_NONE);	\ +	} while (0) +  #define ao_enable_cs(port,bit) do {				\  		stm_gpio_set((port), bit, 1);			\  		stm_moder_set((port), bit, STM_MODER_OUTPUT);	\ diff --git a/src/stm/ao_exti.h b/src/stm/ao_exti.h index b579ad9f..35b56b57 100644 --- a/src/stm/ao_exti.h +++ b/src/stm/ao_exti.h @@ -30,6 +30,9 @@ void  ao_exti_setup(struct stm_gpio *gpio, uint8_t pin, uint8_t mode, void (*callback)());  void +ao_exti_set_mode(struct stm_gpio *gpio, uint8_t pin, uint8_t mode); + +void  ao_exti_set_callback(struct stm_gpio *gpio, uint8_t pin, void (*callback)());  void diff --git a/src/stm/ao_exti_stm.c b/src/stm/ao_exti_stm.c index d54e6ee6..11099b02 100644 --- a/src/stm/ao_exti_stm.c +++ b/src/stm/ao_exti_stm.c @@ -116,6 +116,20 @@ ao_exti_setup (struct stm_gpio *gpio, uint8_t pin, uint8_t mode, void (*callback  }  void +ao_exti_set_mode(struct stm_gpio *gpio, uint8_t pin, uint8_t mode) { +	uint32_t	mask = 1 << pin; +	 +	if (mode & AO_EXTI_MODE_RISING) +		stm_exti.rtsr |= mask; +	else +		stm_exti.rtsr &= ~mask; +	if (mode & AO_EXTI_MODE_FALLING) +		stm_exti.ftsr |= mask; +	else +		stm_exti.ftsr &= ~mask; +} + +void  ao_exti_set_callback(struct stm_gpio *gpio, uint8_t pin, void (*callback)()) {  	ao_exti_callback[pin] = callback;  } diff --git a/src/stm/stm32l.h b/src/stm/stm32l.h index 4d665e8b..3a498a0a 100644 --- a/src/stm/stm32l.h +++ b/src/stm/stm32l.h @@ -167,7 +167,7 @@ stm_gpio_set(struct stm_gpio *gpio, int pin, uint8_t value) {  }  static inline uint8_t -stm_gpio_isset(struct stm_gpio *gpio, int pin) { +stm_gpio_get(struct stm_gpio *gpio, int pin) {  	return (gpio->idr >> pin) & 1;  } | 
