From cb38aaa3a361d60f7389158a374e7cc175c71a19 Mon Sep 17 00:00:00 2001 From: bridystone Date: Tue, 7 Jul 2020 20:16:05 +0200 Subject: [PATCH 1/2] additional check for turnOffPWM --- cores/arduino/wiring_digital.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index 0d51d57d..86aadbaa 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -103,6 +103,10 @@ static void turnOffPWM(uint8_t pin) /* TCA0 */ case TIMERA0: + // check, if TCA is set to Port B (default megaavr-PWM ports) + // see variants/nona4809/variant.c line 13 + if (!(PORTMUX_TCAROUTEA == PORTMUX_TCA0_PORTB_gc)) + return; /* Bit position will give output channel */ bit_pos = digitalPinToBitPosition(pin); @@ -113,7 +117,15 @@ static void turnOffPWM(uint8_t pin) /* TCB - only one output */ case TIMERB0: + // check, if TCB0 is set to alternate mode PF4 (Pin D6) (default megaavr-PWM) + // see variants/nona4809/variant.c line 31 + if ((pin == 6) && ((PORTMUX_TCBROUTEA & PORTMUX_TCB0_bm) != PORTMUX_TCB0_bm)) + return; case TIMERB1: + // check, if TCB1 is set to alternate mode PF5 (Pin D3) (default megaavr-PWM) + // see variants/nona4809/variant.c line 36 + if ((pin == 3) && ((PORTMUX_TCBROUTEA & PORTMUX_TCB1_bm) != PORTMUX_TCB1_bm)) + return; case TIMERB2: case TIMERB3: From dfb2462101be632b8a45d995fcfa90e2beb0bff0 Mon Sep 17 00:00:00 2001 From: Jens Breidenstein Date: Wed, 1 Dec 2021 07:54:16 +0100 Subject: [PATCH 2/2] better coding style replace return; with break; --- cores/arduino/wiring_digital.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cores/arduino/wiring_digital.c b/cores/arduino/wiring_digital.c index 86aadbaa..e22bdb4d 100644 --- a/cores/arduino/wiring_digital.c +++ b/cores/arduino/wiring_digital.c @@ -106,7 +106,7 @@ static void turnOffPWM(uint8_t pin) // check, if TCA is set to Port B (default megaavr-PWM ports) // see variants/nona4809/variant.c line 13 if (!(PORTMUX_TCAROUTEA == PORTMUX_TCA0_PORTB_gc)) - return; + break; /* Bit position will give output channel */ bit_pos = digitalPinToBitPosition(pin); @@ -120,12 +120,12 @@ static void turnOffPWM(uint8_t pin) // check, if TCB0 is set to alternate mode PF4 (Pin D6) (default megaavr-PWM) // see variants/nona4809/variant.c line 31 if ((pin == 6) && ((PORTMUX_TCBROUTEA & PORTMUX_TCB0_bm) != PORTMUX_TCB0_bm)) - return; + break; case TIMERB1: // check, if TCB1 is set to alternate mode PF5 (Pin D3) (default megaavr-PWM) // see variants/nona4809/variant.c line 36 if ((pin == 3) && ((PORTMUX_TCBROUTEA & PORTMUX_TCB1_bm) != PORTMUX_TCB1_bm)) - return; + break; case TIMERB2: case TIMERB3: