перенесла переключение ноги spi в платозависимый файл variants.c
This commit is contained in:
parent
4ecc7f948b
commit
39ee35f88d
@ -1,6 +1,5 @@
|
|||||||
#include "SPI.h"
|
#include "SPI.h"
|
||||||
#include "mik32_hal_spi.h"
|
#include "mik32_hal_spi.h"
|
||||||
#include "utility/spiElbear.h"
|
|
||||||
|
|
||||||
SPI_HandleTypeDef hspi;
|
SPI_HandleTypeDef hspi;
|
||||||
bool newConfig = false;
|
bool newConfig = false;
|
||||||
|
|||||||
@ -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();
|
|
||||||
}
|
|
||||||
@ -1,3 +0,0 @@
|
|||||||
|
|
||||||
void spi_onBegin(void);
|
|
||||||
void spi_onEnd(void);
|
|
||||||
@ -32,8 +32,6 @@ extern "C" {
|
|||||||
#include "mik32_hal_gpio.h"
|
#include "mik32_hal_gpio.h"
|
||||||
#include "mik32_hal_timer32.h"
|
#include "mik32_hal_timer32.h"
|
||||||
|
|
||||||
extern bool spiNssPinIsBlocked;
|
|
||||||
|
|
||||||
// analog pins
|
// analog pins
|
||||||
#define PIN_A0 (14)
|
#define PIN_A0 (14)
|
||||||
#define PIN_A1 (15)
|
#define PIN_A1 (15)
|
||||||
@ -94,14 +92,8 @@ static const uint8_t MISO = PIN_SPI_MISO;
|
|||||||
static const uint8_t SCK = PIN_SPI_SCK;
|
static const uint8_t SCK = PIN_SPI_SCK;
|
||||||
// config SEL_NSS1 to replace D10 to different controller pin,
|
// config SEL_NSS1 to replace D10 to different controller pin,
|
||||||
// because pin 1.3 which is D10 by default is needed to spi
|
// because pin 1.3 which is D10 by default is needed to spi
|
||||||
inline void blockSpiPin(void)
|
void spi_onBegin(void);
|
||||||
{
|
void spi_onEnd(void);
|
||||||
spiNssPinIsBlocked = true;
|
|
||||||
}
|
|
||||||
inline void unblockSpiPin(void)
|
|
||||||
{
|
|
||||||
spiNssPinIsBlocked = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// I2C
|
// I2C
|
||||||
#define PIN_WIRE_SDA (18)
|
#define PIN_WIRE_SDA (18)
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include "pins_arduino.h"
|
#include "pins_arduino.h"
|
||||||
#include "mik32_hal_adc.h"
|
#include "mik32_hal_adc.h"
|
||||||
|
#include "wiring_analog.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -225,4 +226,53 @@ int8_t digitalPinToInterrupt(uint32_t digPinNumber)
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
return NOT_AN_INTERRUPT;
|
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
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user