stm32/mphalport: Support ADC mode on a pin for L4 MCUs.
This commit is contained in:
parent
6b4b6d388b
commit
3022947343
|
@ -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)));
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue