From 39ee35f88d4c7a6968cd43498ef2715bfcbe87d5 Mon Sep 17 00:00:00 2001 From: klassents Date: Mon, 9 Sep 2024 10:57:21 +0700 Subject: [PATCH] =?UTF-8?q?=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=BE=D0=B3=D0=B8=20spi=20?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=BB=D0=B0=D1=82=D0=BE=D0=B7=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=81=D0=B8=D0=BC=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB=20var?= =?UTF-8?q?iants.c?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libraries/SPI/src/SPI.cpp | 1 - libraries/SPI/src/utility/spiElbear.cpp | 53 ------------------------- libraries/SPI/src/utility/spiElbear.h | 3 -- variants/standart/pins_arduino.h | 12 +----- variants/standart/variant.c | 50 +++++++++++++++++++++++ 5 files changed, 52 insertions(+), 67 deletions(-) delete mode 100644 libraries/SPI/src/utility/spiElbear.cpp delete mode 100644 libraries/SPI/src/utility/spiElbear.h diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 4166d74..10a9270 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -1,6 +1,5 @@ #include "SPI.h" #include "mik32_hal_spi.h" -#include "utility/spiElbear.h" SPI_HandleTypeDef hspi; bool newConfig = false; diff --git a/libraries/SPI/src/utility/spiElbear.cpp b/libraries/SPI/src/utility/spiElbear.cpp deleted file mode 100644 index 23d29b0..0000000 --- a/libraries/SPI/src/utility/spiElbear.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "Arduino.h" -#include "spiElbear.h" -#include "mik32_hal_gpio.h" -#include "xprintf.h" - -// pins shift in registers -#define PIN_3_SHIFT 3 -#define PIN_4_SHIFT 4 -#define PORT1_GET_PAD_CONFIG(pinShift) ((PAD_CONFIG->PORT_1_CFG >> (pinShift<<1)) & 0b11) -#define PORT1_GET_PAD_PUPD(pinShift) ((PAD_CONFIG->PORT_1_PUPD >> (pinShift<<1)) & 0b11) -#define PORT1_GET_GPIO_STATE(pinShift) ((GPIO_1->OUTPUT_ >> pinShift) & 0b1) - -void spi_onBegin(void) -{ - // there is a seller on pin 1.6 which replace D10 from spi NSS pin 1.3 to pin 1.4, - // because spi needs pin 1.3 for correct work - - // replace config from 1.3 to 1.4 - uint8_t config = PORT1_GET_PAD_CONFIG(PIN_3_SHIFT); - if (config == 0) // common gpio - { - // get info from pin gpio1.3 and set config to gpio1.4 - HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_4, HAL_GPIO_GetPinDirection(GPIO_1, GPIO_PIN_3), - (HAL_GPIO_PullTypeDef)PORT1_GET_PAD_PUPD(PIN_3_SHIFT), HAL_GPIO_DS_2MA); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_4, (GPIO_PinState)PORT1_GET_GPIO_STATE(PIN_3_SHIFT)); - - // pin D10 was switched to different gpio and can be used further - } - else if(config == 2) // timer for pwm - { - // if D10 (spi NSS pin) was used as pwm, we need to stop timer, - // because 1.4 don't support timer - analogWriteStop(10); - ErrorMsgHandler("analogWrite(): D10 cannot be used as PWM pin while SPI is running"); - } - - // switch seller to pin 1.4 - HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_6, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_6, GPIO_PIN_HIGH); - blockSpiPin(); -} - -void spi_onEnd(void) -{ - // get info from pin gpio1.4 and set config to gpio1.3 - HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_3, HAL_GPIO_GetPinDirection(GPIO_1, GPIO_PIN_4), - (HAL_GPIO_PullTypeDef)PORT1_GET_PAD_PUPD(PIN_4_SHIFT), HAL_GPIO_DS_2MA); - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_3, (GPIO_PinState)PORT1_GET_GPIO_STATE(PIN_4_SHIFT)); - - // switch seller back to pin 1.3 - HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_6, GPIO_PIN_LOW); - unblockSpiPin(); -} \ No newline at end of file diff --git a/libraries/SPI/src/utility/spiElbear.h b/libraries/SPI/src/utility/spiElbear.h deleted file mode 100644 index 53a286b..0000000 --- a/libraries/SPI/src/utility/spiElbear.h +++ /dev/null @@ -1,3 +0,0 @@ - -void spi_onBegin(void); -void spi_onEnd(void); \ No newline at end of file diff --git a/variants/standart/pins_arduino.h b/variants/standart/pins_arduino.h index 3700923..5f59b36 100644 --- a/variants/standart/pins_arduino.h +++ b/variants/standart/pins_arduino.h @@ -32,8 +32,6 @@ extern "C" { #include "mik32_hal_gpio.h" #include "mik32_hal_timer32.h" -extern bool spiNssPinIsBlocked; - // analog pins #define PIN_A0 (14) #define PIN_A1 (15) @@ -94,14 +92,8 @@ static const uint8_t MISO = PIN_SPI_MISO; static const uint8_t SCK = PIN_SPI_SCK; // config SEL_NSS1 to replace D10 to different controller pin, // because pin 1.3 which is D10 by default is needed to spi -inline void blockSpiPin(void) -{ - spiNssPinIsBlocked = true; -} -inline void unblockSpiPin(void) -{ - spiNssPinIsBlocked = false; -} +void spi_onBegin(void); +void spi_onEnd(void); // I2C #define PIN_WIRE_SDA (18) diff --git a/variants/standart/variant.c b/variants/standart/variant.c index f38cf1f..1cec497 100644 --- a/variants/standart/variant.c +++ b/variants/standart/variant.c @@ -13,6 +13,7 @@ #include "pins_arduino.h" #include "mik32_hal_adc.h" +#include "wiring_analog.h" #ifdef __cplusplus extern "C" { @@ -225,4 +226,53 @@ int8_t digitalPinToInterrupt(uint32_t digPinNumber) return i; } return NOT_AN_INTERRUPT; +} + +// ---------------------- SPI ---------------------- // +// pins shift in registers +#define PIN_3_SHIFT 3 +#define PIN_4_SHIFT 4 +#define PORT1_GET_PAD_CONFIG(pinShift) ((PAD_CONFIG->PORT_1_CFG >> (pinShift<<1)) & 0b11) +#define PORT1_GET_PAD_PUPD(pinShift) ((PAD_CONFIG->PORT_1_PUPD >> (pinShift<<1)) & 0b11) +#define PORT1_GET_GPIO_STATE(pinShift) ((GPIO_1->OUTPUT_ >> pinShift) & 0b1) + +void spi_onBegin(void) +{ + // On Elbear Ace-Uno rev1.1.0 there is a seller on pin 1.6 which replace D10 from spi NSS pin 1.3 to pin 1.4, + // because spi needs pin 1.3 for correct work + + // replace config from 1.3 to 1.4 + uint8_t config = PORT1_GET_PAD_CONFIG(PIN_3_SHIFT); + if (config == 0) // common gpio + { + // get info from pin gpio1.3 and set config to gpio1.4 + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_4, HAL_GPIO_GetPinDirection(GPIO_1, GPIO_PIN_3), + (HAL_GPIO_PullTypeDef)PORT1_GET_PAD_PUPD(PIN_3_SHIFT), HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_4, (GPIO_PinState)PORT1_GET_GPIO_STATE(PIN_3_SHIFT)); + + // pin D10 was switched to different gpio and can be used further + } + else if(config == 2) // timer for pwm + { + // if D10 (spi NSS pin) was used as pwm, we need to stop timer, because 1.4 don't support it + analogWriteStop(10); + ErrorMsgHandler("analogWrite(): D10 cannot be used as PWM pin while SPI is running"); + } + + // switch seller to pin 1.4 + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_6, HAL_GPIO_MODE_GPIO_OUTPUT, HAL_GPIO_PULL_NONE, HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_6, GPIO_PIN_HIGH); + spiNssPinIsBlocked = true; // block spi pin +} + +void spi_onEnd(void) +{ + // get info from pin gpio1.4 and set config to gpio1.3 + HAL_GPIO_PinConfig(GPIO_1, GPIO_PIN_3, HAL_GPIO_GetPinDirection(GPIO_1, GPIO_PIN_4), + (HAL_GPIO_PullTypeDef)PORT1_GET_PAD_PUPD(PIN_4_SHIFT), HAL_GPIO_DS_2MA); + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_3, (GPIO_PinState)PORT1_GET_GPIO_STATE(PIN_4_SHIFT)); + + // switch seller back to pin 1.3 + HAL_GPIO_WritePin(GPIO_1, GPIO_PIN_6, GPIO_PIN_LOW); + spiNssPinIsBlocked = false; // unblock spi pin } \ No newline at end of file