From b85eef9bfedc1736bbe743837635b58f6dc0e595 Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Tue, 27 May 2025 16:28:15 +0700 Subject: [PATCH] =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20di?= =?UTF-8?q?gitalPinPwmIsOn()=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D0=B5=D1=82=20?= =?UTF-8?q?=D1=82=D1=80=D0=B8=20=D1=81=D0=BE=D1=81=D1=82=D0=BE=D1=8F=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- variants/elbear_ace_nano/pins_arduino.h | 2 +- variants/elbear_ace_nano/variant.c | 22 +++++++++++----------- variants/elbear_ace_uno/pins_arduino.h | 2 +- variants/elbear_ace_uno/variant.c | 21 +++++++++++---------- variants/elsomik/pins_arduino.h | 2 +- variants/elsomik/variant.c | 24 +++++++++++------------- variants/start/pins_arduino.h | 2 +- variants/start/variant.c | 24 +++++++++++------------- 8 files changed, 48 insertions(+), 51 deletions(-) diff --git a/variants/elbear_ace_nano/pins_arduino.h b/variants/elbear_ace_nano/pins_arduino.h index 721ece4..5c8546a 100644 --- a/variants/elbear_ace_nano/pins_arduino.h +++ b/variants/elbear_ace_nano/pins_arduino.h @@ -98,7 +98,7 @@ static inline __attribute__((always_inline)) bool digitalPinHasPWM(uint8_t p) return false; } // return true if digitalPin configured as pwm -bool digitalPinPwmIsOn(uint8_t digitalPin); +int8_t digitalPinPwmIsOn(uint8_t digitalPin); // determines which timer the pin belongs to TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); // determines which timer channel the pin belongs to diff --git a/variants/elbear_ace_nano/variant.c b/variants/elbear_ace_nano/variant.c index d5f6a31..9847f3b 100644 --- a/variants/elbear_ace_nano/variant.c +++ b/variants/elbear_ace_nano/variant.c @@ -204,27 +204,27 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) } // ---------------------- PWM ---------------------- // -// use only if digitalPinHasPWM() == true -#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin==10)||(pin==11)||(pin==12)||(pin==13)) ? 1:0) - -// use only if digitalPinHasPWM() == true -// return true if digitalPin configured as pwm -__attribute__((noinline, section(".ram_text"))) bool digitalPinPwmIsOn(uint8_t digitalPin) +// return 1 if digitalPin configured as pwm and enabled, +// 0 if pwm on pin is disabled, +// -1 if pin doesn't support pwm +__attribute__((noinline, section(".ram_text"))) int8_t digitalPinPwmIsOn(uint8_t digitalPin) { if (digitalPinHasPWM(digitalPin)) { uint8_t config = 0; uint8_t pinShift = PIN_MASK_TO_PIN_NUMBER(digitalPinToBitMask(digitalPin)); - if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) - config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); - else + if ((digitalPin==10)||(digitalPin==11)||(digitalPin==12)||(digitalPin==13)) config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + else + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); if (config == 2) - return true; + return 1; // pwm is on + else + return 0; // pwm is off } - return false; + return -1; // pin doesn't support pwm } // function is used only if digitalPinHasPWM() is true diff --git a/variants/elbear_ace_uno/pins_arduino.h b/variants/elbear_ace_uno/pins_arduino.h index 63c7b31..f6fb144 100644 --- a/variants/elbear_ace_uno/pins_arduino.h +++ b/variants/elbear_ace_uno/pins_arduino.h @@ -93,7 +93,7 @@ static inline __attribute__((always_inline)) bool digitalPinHasPWM(uint8_t p) return false; } // return true if digitalPin configured as pwm -bool digitalPinPwmIsOn(uint8_t digitalPin); +int8_t digitalPinPwmIsOn(uint8_t digitalPin); // determines which timer the pin belongs to TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); // determines which timer channel the pin belongs to diff --git a/variants/elbear_ace_uno/variant.c b/variants/elbear_ace_uno/variant.c index 9842331..a68047c 100644 --- a/variants/elbear_ace_uno/variant.c +++ b/variants/elbear_ace_uno/variant.c @@ -167,26 +167,27 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) } // ---------------------- PWM ---------------------- // -// use only if digitalPinHasPWM() == true -#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin==10)||(pin==11)||(pin==12)||(pin==13)) ? 1:0) - -// return true if digitalPin configured as pwm -__attribute__((noinline, section(".ram_text"))) bool digitalPinPwmIsOn(uint8_t digitalPin) +// return 1 if digitalPin configured as pwm and enabled, +// 0 if pwm on pin is disabled, +// -1 if pin doesn't support pwm +__attribute__((noinline, section(".ram_text"))) int8_t digitalPinPwmIsOn(uint8_t digitalPin) { if (digitalPinHasPWM(digitalPin)) { uint8_t config = 0; uint8_t pinShift = PIN_MASK_TO_PIN_NUMBER(digitalPinToBitMask(digitalPin)); - if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) - config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); - else + if ((digitalPin==10)||(digitalPin==11)||(digitalPin==12)||(digitalPin==13)) config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + else + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); if (config == 2) - return true; + return 1; // pwm is on + else + return 0; // pwm is off } - return false; + return -1; // pin doesn't support pwm } // function is used only if digitalPinHasPWM() is true diff --git a/variants/elsomik/pins_arduino.h b/variants/elsomik/pins_arduino.h index 2b9176b..248d0a4 100644 --- a/variants/elsomik/pins_arduino.h +++ b/variants/elsomik/pins_arduino.h @@ -123,7 +123,7 @@ static inline __attribute__((always_inline)) bool digitalPinHasPWM(uint8_t p) return (p <= P1_15) && ((p & 0xF) < 4); } // return true if digitalPin configured as pwm -bool digitalPinPwmIsOn(uint8_t digitalPin); +int8_t digitalPinPwmIsOn(uint8_t digitalPin); // determines which timer the pin belongs to TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); // determines which timer channel the pin belongs to diff --git a/variants/elsomik/variant.c b/variants/elsomik/variant.c index c5eab70..7c65693 100644 --- a/variants/elsomik/variant.c +++ b/variants/elsomik/variant.c @@ -105,27 +105,25 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) } // ---------------------- PWM ---------------------- // -// use only if digitalPinHasPWM() == true -#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin) & 16) ? 1 : 0) - -// use only if digitalPinHasPWM() == true -// return true if digitalPin configured as pwm -__attribute__((noinline, section(".ram_text"))) bool digitalPinPwmIsOn(uint8_t digitalPin) +// return 1 if digitalPin configured as pwm and enabled, +// 0 if pwm on pin is disabled, +// -1 if pin doesn't support pwm +__attribute__((noinline, section(".ram_text"))) int8_t digitalPinPwmIsOn(uint8_t digitalPin) { if (digitalPinHasPWM(digitalPin)) { uint8_t config = 0; - uint8_t pinShift = digitalPin & 0x3; - - if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) - config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); + if ((digitalPin & 16) == 0) + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, (digitalPin & 0x3)); else - config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + config = PIN_GET_PAD_CONFIG(PORT_1_CFG, (digitalPin & 0x3)); if (config == 2) - return true; + return 1; // pwm is on + else + return 0; // pwm is off } - return false; + return -1; // pin doesn't support pwm } // function is used only if digitalPinHasPWM() is true diff --git a/variants/start/pins_arduino.h b/variants/start/pins_arduino.h index 7a5fe64..dba76fe 100644 --- a/variants/start/pins_arduino.h +++ b/variants/start/pins_arduino.h @@ -136,7 +136,7 @@ static inline __attribute__((always_inline)) bool digitalPinHasPWM(uint8_t p) return (p < 32) && ((p & 0xF) < 4); } // return true if digitalPin configured as pwm -bool digitalPinPwmIsOn(uint8_t digitalPin); +int8_t digitalPinPwmIsOn(uint8_t digitalPin); // determines which timer the pin belongs to TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber); // determines which timer channel the pin belongs to diff --git a/variants/start/variant.c b/variants/start/variant.c index 2e83da8..08e2be2 100644 --- a/variants/start/variant.c +++ b/variants/start/variant.c @@ -101,27 +101,25 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) } // ---------------------- PWM ---------------------- // -// use only if digitalPinHasPWM() == true -#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin) & 16) ? 1 : 0) - -// use only if digitalPinHasPWM() == true -// return true if digitalPin configured as pwm -__attribute__((noinline, section(".ram_text"))) bool digitalPinPwmIsOn(uint8_t digitalPin) +// return 1 if digitalPin configured as pwm and enabled, +// 0 if pwm on pin is disabled, +// -1 if pin doesn't support pwm +__attribute__((noinline, section(".ram_text"))) int8_t digitalPinPwmIsOn(uint8_t digitalPin) { if (digitalPinHasPWM(digitalPin)) { uint8_t config = 0; - uint8_t pinShift = digitalPin & 3; - - if (PWM_PIN_TO_PORT_NUMBER(digitalPin) == 0) - config = PIN_GET_PAD_CONFIG(PORT_0_CFG, pinShift); + if ((digitalPin & 16) == 0) + config = PIN_GET_PAD_CONFIG(PORT_0_CFG, (digitalPin & 3)); else - config = PIN_GET_PAD_CONFIG(PORT_1_CFG, pinShift); + config = PIN_GET_PAD_CONFIG(PORT_1_CFG, (digitalPin & 3)); if (config == 2) - return true; + return 1; // pwm is on + else + return 0; // pwm is off } - return false; + return -1; // pin doesn't support pwm } // function is used only if digitalPinHasPWM() is true