From 0e2431048d7e48c8f8c3033923acb5659dcfc1ac Mon Sep 17 00:00:00 2001 From: root Date: Tue, 20 Apr 2021 15:21:05 -0500 Subject: [PATCH] Fix PWMOut on SAMD21 --- ports/atmel-samd/common-hal/pulseio/PulseIn.c | 6 +++--- ports/atmel-samd/common-hal/pulseio/PulseIn.h | 4 ++-- ports/atmel-samd/common-hal/pulseio/PulseOut.c | 10 ++++++++++ ports/atmel-samd/common-hal/pulseio/PulseOut.h | 4 ++++ ports/atmel-samd/supervisor/port.c | 4 ++-- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ports/atmel-samd/common-hal/pulseio/PulseIn.c b/ports/atmel-samd/common-hal/pulseio/PulseIn.c index f65d583640..20c79642a3 100644 --- a/ports/atmel-samd/common-hal/pulseio/PulseIn.c +++ b/ports/atmel-samd/common-hal/pulseio/PulseIn.c @@ -137,7 +137,7 @@ void pulsein_interrupt_handler(uint8_t channel) { void pulsein_reset() { #ifdef SAMD21 - rtc_end_pulsein(); + rtc_end_pulse(); #endif refcount = 0; pulsein_tc_index = 0xff; @@ -236,7 +236,7 @@ void common_hal_pulseio_pulsein_construct(pulseio_pulsein_obj_t* self, // Set config will enable the EIC. pulsein_set_config(self, true); #ifdef SAMD21 - rtc_start_pulsein(); + rtc_start_pulse(); #endif } @@ -250,7 +250,7 @@ void common_hal_pulseio_pulsein_deinit(pulseio_pulsein_obj_t* self) { return; } #ifdef SAMD21 - rtc_end_pulsein(); + rtc_end_pulse(); #endif set_eic_handler(self->channel, EIC_HANDLER_NO_INTERRUPT); turn_off_eic_channel(self->channel); diff --git a/ports/atmel-samd/common-hal/pulseio/PulseIn.h b/ports/atmel-samd/common-hal/pulseio/PulseIn.h index b91bbd703b..e8fed8e5a0 100644 --- a/ports/atmel-samd/common-hal/pulseio/PulseIn.h +++ b/ports/atmel-samd/common-hal/pulseio/PulseIn.h @@ -51,8 +51,8 @@ void pulsein_reset(void); void pulsein_interrupt_handler(uint8_t channel); void pulsein_timer_interrupt_handler(uint8_t index); #ifdef SAMD21 -void rtc_start_pulsein(void); -void rtc_end_pulsein(void); +void rtc_start_pulse(void); +void rtc_end_pulse(void); #endif diff --git a/ports/atmel-samd/common-hal/pulseio/PulseOut.c b/ports/atmel-samd/common-hal/pulseio/PulseOut.c index 086052a973..ebfd4e7b1a 100644 --- a/ports/atmel-samd/common-hal/pulseio/PulseOut.c +++ b/ports/atmel-samd/common-hal/pulseio/PulseOut.c @@ -93,6 +93,9 @@ void pulseout_reset() { refcount = 0; pulseout_tc_index = 0xff; active_pincfg = NULL; +#ifdef SAMD21 + rtc_end_pulse(); +#endif } void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, @@ -159,6 +162,10 @@ void common_hal_pulseio_pulseout_construct(pulseio_pulseout_obj_t* self, // Turn off the pinmux which should connect the port output. turn_off(self->pincfg); +#ifdef SAMD21 + rtc_start_pulse(); +#endif + } bool common_hal_pulseio_pulseout_deinited(pulseio_pulseout_obj_t* self) { @@ -180,6 +187,9 @@ void common_hal_pulseio_pulseout_deinit(pulseio_pulseout_obj_t* self) { pulseout_tc_index = 0xff; } self->pin = NO_PIN; +#ifdef SAMD21 + rtc_end_pulse(); +#endif } void common_hal_pulseio_pulseout_send(pulseio_pulseout_obj_t* self, uint16_t* pulses, uint16_t length) { diff --git a/ports/atmel-samd/common-hal/pulseio/PulseOut.h b/ports/atmel-samd/common-hal/pulseio/PulseOut.h index 634088128f..8f8e504fab 100644 --- a/ports/atmel-samd/common-hal/pulseio/PulseOut.h +++ b/ports/atmel-samd/common-hal/pulseio/PulseOut.h @@ -39,5 +39,9 @@ typedef struct { void pulseout_reset(void); void pulseout_interrupt_handler(uint8_t index); +#ifdef SAMD21 +void rtc_start_pulse(void); +void rtc_end_pulse(void); +#endif #endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_PULSEIO_PULSEOUT_H diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index c2e27e1e7f..2137c47559 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -102,12 +102,12 @@ static void rtc_set_continuous(bool continuous) { while (RTC->MODE0.STATUS.bit.SYNCBUSY); } -void rtc_start_pulsein(void) { +void rtc_start_pulse(void) { rtc_set_continuous(true); hold_interrupt = true; } -void rtc_end_pulsein(void) { +void rtc_end_pulse(void) { hold_interrupt = false; rtc_set_continuous(false); }