summaryrefslogtreecommitdiff
path: root/ports/stm32/pin.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/stm32/pin.c')
-rw-r--r--ports/stm32/pin.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/ports/stm32/pin.c b/ports/stm32/pin.c
index 0b939334a..117a8366d 100644
--- a/ports/stm32/pin.c
+++ b/ports/stm32/pin.c
@@ -103,7 +103,11 @@ const machine_pin_obj_t *pin_find(mp_obj_t user_obj) {
const machine_pin_obj_t *pin_obj;
// If a pin was provided, then use it
- if (mp_obj_is_type(user_obj, &pin_type)) {
+ if (mp_obj_is_type(user_obj, &pin_type)
+ #if MICROPY_HW_ENABLE_ANALOG_ONLY_PINS
+ || mp_obj_is_type(user_obj, &pin_analog_type)
+ #endif
+ ) {
pin_obj = MP_OBJ_TO_PTR(user_obj);
if (pin_class_debug) {
mp_printf(print, "Pin map passed pin ");
@@ -601,6 +605,44 @@ MP_DEFINE_CONST_OBJ_TYPE(
locals_dict, &pin_locals_dict
);
+/******************************************************************************/
+// Special analog-only pin.
+
+#if MICROPY_HW_ENABLE_ANALOG_ONLY_PINS
+
+// When both normal and _C pins are defined in pins.csv, force the corresponding
+// analog switch to be open. The macro code below will produce a compiler warning
+// if the board defines the switch as closed.
+#if defined(pin_A0) && defined(pin_A0_C)
+#define MICROPY_HW_ANALOG_SWITCH_PA0 (SYSCFG_SWITCH_PA0_OPEN)
+#endif
+#if defined(pin_A1) && defined(pin_A1_C)
+#define MICROPY_HW_ANALOG_SWITCH_PA1 (SYSCFG_SWITCH_PA1_OPEN)
+#endif
+#if defined(pin_C2) && defined(pin_C2_C)
+#define MICROPY_HW_ANALOG_SWITCH_PC2 (SYSCFG_SWITCH_PC2_OPEN)
+#endif
+#if defined(pin_C3) && defined(pin_C3_C)
+#define MICROPY_HW_ANALOG_SWITCH_PC3 (SYSCFG_SWITCH_PC3_OPEN)
+#endif
+
+static void pin_analog_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
+ machine_pin_obj_t *self = MP_OBJ_TO_PTR(self_in);
+ mp_printf(print, "Pin(Pin.cpu.%q, mode=Pin.ANALOG)", self->name);
+}
+
+MP_DEFINE_CONST_OBJ_TYPE(
+ pin_analog_type,
+ MP_QSTR_Pin,
+ MP_TYPE_FLAG_NONE,
+ print, pin_analog_print
+ );
+
+#endif
+
+/******************************************************************************/
+// PinAF class
+
/// \moduleref pyb
/// \class PinAF - Pin Alternate Functions
///