diff --git a/ports/atmel-samd/common-hal/analogio/AnalogOut.c b/ports/atmel-samd/common-hal/analogio/AnalogOut.c index f3b3310ebe..1fa67dc9a1 100644 --- a/ports/atmel-samd/common-hal/analogio/AnalogOut.c +++ b/ports/atmel-samd/common-hal/analogio/AnalogOut.c @@ -75,6 +75,7 @@ void common_hal_analogio_analogout_construct(analogio_analogout_obj_t *self, } self->channel = channel; + self->pin = pin; #ifdef SAM_D5X_E5X hri_mclk_set_APBDMASK_DAC_bit(MCLK); @@ -129,7 +130,9 @@ void common_hal_analogio_analogout_deinit(analogio_analogout_obj_t *self) { return; } dac_sync_disable_channel(&self->descriptor, self->channel); - reset_pin_number(PIN_PA02); + reset_pin_number(self->pin->number); + self->pin = NULL; + // Only deinit the DAC on the SAMD51 if both outputs are free. #ifdef SAM_D5X_E5X if (common_hal_mcu_pin_is_free(&pin_PA02) && common_hal_mcu_pin_is_free(&pin_PA05)) { diff --git a/ports/atmel-samd/common-hal/analogio/AnalogOut.h b/ports/atmel-samd/common-hal/analogio/AnalogOut.h index 3710a7211a..b5c97cca02 100644 --- a/ports/atmel-samd/common-hal/analogio/AnalogOut.h +++ b/ports/atmel-samd/common-hal/analogio/AnalogOut.h @@ -35,6 +35,7 @@ typedef struct { mp_obj_base_t base; + const mcu_pin_obj_t *pin; struct dac_sync_descriptor descriptor; uint8_t channel; bool deinited;