diff options
author | Damien George <damien.p.george@gmail.com> | 2018-05-02 12:05:45 +1000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2018-05-02 12:17:45 +1000 |
commit | 3022947343bc54e09ba144084d391fc83db11f96 (patch) | |
tree | 20f225061e59f3624599ecbe27099d666461c97d | |
parent | 6b4b6d388be338d36de01b01e25f6e324321750a (diff) |
stm32/mphalport: Support ADC mode on a pin for L4 MCUs.
-rw-r--r-- | ports/stm32/mphalport.c | 6 | ||||
-rw-r--r-- | ports/stm32/mphalport.h | 5 |
2 files changed, 11 insertions, 0 deletions
diff --git a/ports/stm32/mphalport.c b/ports/stm32/mphalport.c index c822c8e77..cf63baab5 100644 --- a/ports/stm32/mphalport.c +++ b/ports/stm32/mphalport.c @@ -157,7 +157,13 @@ void mp_hal_pin_config(mp_hal_pin_obj_t pin_obj, uint32_t mode, uint32_t pull, u uint32_t pin = pin_obj->pin; mp_hal_gpio_clock_enable(gpio); gpio->MODER = (gpio->MODER & ~(3 << (2 * pin))) | ((mode & 3) << (2 * pin)); + #if defined(GPIO_ASCR_ASC0) + // The L4 has a special analog switch to connect the GPIO to the ADC + gpio->OTYPER = (gpio->OTYPER & ~(1 << pin)) | (((mode >> 2) & 1) << pin); + gpio->ASCR = (gpio->ASCR & ~(1 << pin)) | ((mode >> 3) & 1) << pin; + #else gpio->OTYPER = (gpio->OTYPER & ~(1 << pin)) | ((mode >> 2) << pin); + #endif gpio->OSPEEDR = (gpio->OSPEEDR & ~(3 << (2 * pin))) | (2 << (2 * pin)); // full speed gpio->PUPDR = (gpio->PUPDR & ~(3 << (2 * pin))) | (pull << (2 * pin)); gpio->AFR[pin >> 3] = (gpio->AFR[pin >> 3] & ~(15 << (4 * (pin & 7)))) | (alt << (4 * (pin & 7))); diff --git a/ports/stm32/mphalport.h b/ports/stm32/mphalport.h index 0e294a21c..511a76cd0 100644 --- a/ports/stm32/mphalport.h +++ b/ports/stm32/mphalport.h @@ -32,6 +32,11 @@ static inline mp_uint_t mp_hal_ticks_cpu(void) { #define MP_HAL_PIN_MODE_OUTPUT (1) #define MP_HAL_PIN_MODE_ALT (2) #define MP_HAL_PIN_MODE_ANALOG (3) +#if defined(GPIO_ASCR_ASC0) +#define MP_HAL_PIN_MODE_ADC (11) +#else +#define MP_HAL_PIN_MODE_ADC (3) +#endif #define MP_HAL_PIN_MODE_OPEN_DRAIN (5) #define MP_HAL_PIN_MODE_ALT_OPEN_DRAIN (6) #define MP_HAL_PIN_PULL_NONE (GPIO_NOPULL) |