From 27255530d2e8bf684ac0a9398370557bd4a2b79e Mon Sep 17 00:00:00 2001 From: KLASSENTS Date: Mon, 27 Jan 2025 16:12:10 +0700 Subject: [PATCH] =?UTF-8?q?=D0=BD=D0=BE=D0=BC=D0=B5=D1=80=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B6=D0=B5=D0=BA=20=D0=BF=D1=80=D0=BE=D0=BD=D1=83=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=D0=BE=D0=B2=D0=B0=D0=BB=D0=B0=20=D1=82=D0=B0=D0=BA?= =?UTF-8?q?=20=D0=B6=D0=B5,=20=D0=BA=D0=B0=D0=BA=20=D1=83=20ace-uno.=20?= =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20=D0=B5=D1=89?= =?UTF-8?q?=D0=B5=20=D0=B4=D0=B2=D0=B0=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=A8=D0=98?= =?UTF-8?q?=D0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- variants/elbear_nano/pins_arduino.h | 15 ++++--- variants/elbear_nano/variant.c | 68 +++++++++++------------------ 2 files changed, 34 insertions(+), 49 deletions(-) diff --git a/variants/elbear_nano/pins_arduino.h b/variants/elbear_nano/pins_arduino.h index d531927..7328c0f 100644 --- a/variants/elbear_nano/pins_arduino.h +++ b/variants/elbear_nano/pins_arduino.h @@ -37,10 +37,12 @@ extern "C" { #define PIN_A1 (15) #define PIN_A2 (16) #define PIN_A3 (17) -#define PIN_A4 (18) -#define PIN_A5 (19) -#define PIN_A6 (20) -#define PIN_A7 (21) +// there are D18 and D19 between them for SDA and SCL +#define PIN_A4 (20) +#define PIN_A5 (21) +// there are led (22) and btn (23) on the ace-uno between them +#define PIN_A6 (24) +#define PIN_A7 (25) static const uint8_t A0 = PIN_A0; static const uint8_t A1 = PIN_A1; static const uint8_t A2 = PIN_A2; @@ -52,7 +54,7 @@ static const uint8_t A7 = PIN_A5; // digital pins -// D0...D13 +// D0...D13, D18, D19 // User led and button #define LED_BUILTIN (22) @@ -114,8 +116,7 @@ static const uint8_t SCL = PIN_WIRE_SCL; #define WIRE_FREQ_1000K 1000000 // interrupts - -#define EXTERNAL_INTERRUPTS_QTY 7 // todo +#define EXTERNAL_INTERRUPTS_QTY 8 extern uint8_t interruptInfo[EXTERNAL_INTERRUPTS_QTY][3]; // determines the board pin number by interrupt number #define interruptToDigitalPin(interruptNum) (interruptInfo[interruptNum][0]) diff --git a/variants/elbear_nano/variant.c b/variants/elbear_nano/variant.c index 473111e..e796b68 100644 --- a/variants/elbear_nano/variant.c +++ b/variants/elbear_nano/variant.c @@ -19,7 +19,6 @@ bool spiNssPinIsBlocked = false; // list of pin numbers from both ports with pins inside the port -// todo аналоговые сигналы и SDA SCL! const HAL_PinsTypeDef digitalPinToGpioPinArray[] = { GPIO_PIN_5, // D0 @@ -40,31 +39,30 @@ const HAL_PinsTypeDef digitalPinToGpioPinArray[] = GPIO_PIN_7, // D15/A1 GPIO_PIN_4, // D16/A2 GPIO_PIN_7, // D17/A3 - GPIO_PIN_12,// D18/SDA - GPIO_PIN_13,// D19/SCL - GPIO_PIN_9, // A4 - GPIO_PIN_9, // A5 - GPIO_PIN_9, // A6 - GPIO_PIN_9, // A7 + GPIO_PIN_12,// D18 + GPIO_PIN_13,// D19 + GPIO_PIN_9, // A4 (pin 20) + GPIO_PIN_9, // A5 (pin 21) GPIO_PIN_7, // LED(pin 22) + 0, // dummy pin for backward compatibility with ace-uno + GPIO_PIN_9, // A6 (pin 24) + GPIO_PIN_9, // A7 (pin 25) }; -// etermines the address of the port by the board pin number to which this pin belongs on the MCU -// todo номера пинов А4...А7 +// determines the address of the port by the board pin number to which this pin belongs on the MCU GPIO_TypeDef* digitalPinToPort(uint32_t digPinNumber) { GPIO_TypeDef* gpioNum = 0; - // port 0 - board pins 0...6, 9, 16(A2), 17(A3), 20(A4), 21(A5) - if ((digPinNumber >= 0 && digPinNumber <= 6) || digPinNumber == 9 || digPinNumber == 16 - || digPinNumber == 17 || digPinNumber == 20 || digPinNumber == 21) // 12 pieces - gpioNum = GPIO_0; + // port 2 - led (22) + if (digPinNumber == LED_BUILTIN) + gpioNum = GPIO_2; // port 1 - board pins 7, 8, 10...13, 14(А0), 15(А1), 18,19 else if (digPinNumber == 7 || digPinNumber == 8 || (digPinNumber >= 10 && digPinNumber <= 15) - || digPinNumber == 18 || digPinNumber == 19) // 10 pieces + || digPinNumber == 18 || digPinNumber == 19) gpioNum = GPIO_1; - // port 2 - led - else if (digPinNumber == LED_BUILTIN) - gpioNum = GPIO_2; + // port 0 - board pins 0...6, 9, 16(A2), 17(A3), 20(A4), 21(A5), 24(A6), 25(A7) + else + gpioNum = GPIO_0; return gpioNum; } @@ -88,7 +86,6 @@ HAL_PinsTypeDef digitalPinToBitMask(uint32_t digPinNumber) uint16_t pinCommonQty(void) { - // todo так или меняем из-за А4...А7? return (uint16_t)(sizeof(digitalPinToGpioPinArray)/sizeof(digitalPinToGpioPinArray[0])); } @@ -151,10 +148,10 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) { uint32_t adcChannel = 0; - // if get a value 0...5 instead of A0...A5 - if (PinNumber < 4) PinNumber += 14; - // todo проверить - else if (PinNumber < 6) PinNumber += 16; + // if get a value 0...5 instead of A0...A7 + if (PinNumber < 4) PinNumber += 14; // A0...A3 + else if (PinNumber < 6) PinNumber += 16; // A4, A5 + else if (PinNumber < 8) PinNumber += 18; // A6, A7 switch (PinNumber) { @@ -184,27 +181,14 @@ uint32_t analogInputToChannelNumber(uint32_t PinNumber) // ---------------------- PWM ---------------------- // // use only if digitalPinHasPWM() == true -// todo еще D12, D13? -#define PWM_PIN_TO_PORT_NUMBER(pin) (((pin==10)||(pin==11)) ? 1:0) -// use only if digitalPinHasPWM() == true -static inline uint8_t pwmPinToGpioPinShift(uint8_t digitalPin) -{ - // todo еще D12, D13? - if (digitalPin == 3) - return 0; - else if ((digitalPin == 5) || (digitalPin == 11)) - return 1; - else if (digitalPin == 6) - return 2; - else // pins 9 10 - return 3; -} +#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 bool digitalPinPwmIsOn(uint8_t digitalPin) { uint8_t config = 0; - uint8_t pinShift = pwmPinToGpioPinShift(digitalPin); + 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); @@ -223,7 +207,7 @@ bool digitalPinHasPWM(uint8_t p) // if spi is in use D10 cannot work as pwm if (spiNssPinIsBlocked && (p == 10)) ret = false; - else if ((p) == 3 || (p) == 5 || (p) == 6 || (p) == 9 || (p) == 10 || (p) == 11) + else if (p == 3 || p == 5 || p == 6 || (p >= 9 && p <= 13)) ret = true; return ret; } @@ -237,7 +221,7 @@ TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber) if (digPinNumber == 3 || digPinNumber == 5 || digPinNumber == 6 || digPinNumber == 9) timerNum = TIMER32_1; // timer 2 - else if (digPinNumber == 10 || digPinNumber == 11) + else if ((digPinNumber >= 10) && (digPinNumber <= 13)) timerNum = TIMER32_2; return timerNum; @@ -247,9 +231,9 @@ TIMER32_TypeDef* pwmPinToTimer(uint32_t digPinNumber) HAL_TIMER32_CHANNEL_IndexTypeDef pwmPinToTimerChannel(uint32_t digPinNumber) { HAL_TIMER32_CHANNEL_IndexTypeDef channel = 0; - if (digPinNumber == 3) channel = TIMER32_CHANNEL_0; + if (digPinNumber == 3 || digPinNumber == 12) channel = TIMER32_CHANNEL_0; else if (digPinNumber == 5 || digPinNumber == 11) channel = TIMER32_CHANNEL_1; - else if (digPinNumber == 6) channel = TIMER32_CHANNEL_2; + else if (digPinNumber == 6 || digPinNumber == 13) channel = TIMER32_CHANNEL_2; else if (digPinNumber == 9 || digPinNumber == 10) channel = TIMER32_CHANNEL_3; return channel; }