* spi: add support for SPI4

* mpu_util: spi: add 8BIT mode definitions for F4, F7 and kineris (?)
This commit is contained in:
dron0gus 2020-01-06 16:44:23 +03:00 committed by rusefi
parent e312f25497
commit d218b4e8e6
11 changed files with 68 additions and 18 deletions

View File

@ -82,8 +82,11 @@ void printFloatArray(const char *prefix, float array[], int size) {
} }
void printSpiState(Logging *logger, const engine_configuration_s *engineConfiguration) { void printSpiState(Logging *logger, const engine_configuration_s *engineConfiguration) {
scheduleMsg(logger, "spi 1=%s/2=%s/3=%s", boolToString(engineConfiguration->is_enabled_spi_1), scheduleMsg(logger, "spi 1=%s/2=%s/3=%s/4=%s",
boolToString(engineConfiguration->is_enabled_spi_2), boolToString(engineConfiguration->is_enabled_spi_3)); boolToString(engineConfiguration->is_enabled_spi_1),
boolToString(engineConfiguration->is_enabled_spi_2),
boolToString(engineConfiguration->is_enabled_spi_3),
boolToString(engineConfiguration->is_enabled_spi_4));
} }
extern engine_configuration_s *engineConfiguration; extern engine_configuration_s *engineConfiguration;

View File

@ -113,6 +113,9 @@ static void initSpiModules(engine_configuration_s *engineConfiguration) {
if (CONFIG(is_enabled_spi_3)) { if (CONFIG(is_enabled_spi_3)) {
turnOnSpi(SPI_DEVICE_3); turnOnSpi(SPI_DEVICE_3);
} }
if (CONFIG(is_enabled_spi_4)) {
turnOnSpi(SPI_DEVICE_4);
}
} }
/** /**
@ -335,6 +338,9 @@ void applyNewHardwareSettings(void) {
if (isConfigurationChanged(is_enabled_spi_3)) if (isConfigurationChanged(is_enabled_spi_3))
stopSpi(SPI_DEVICE_3); stopSpi(SPI_DEVICE_3);
if (isConfigurationChanged(is_enabled_spi_4))
stopSpi(SPI_DEVICE_4);
#if EFI_HD44780_LCD #if EFI_HD44780_LCD
stopHD44780_pins(); stopHD44780_pins();
#endif /* #if EFI_HD44780_LCD */ #endif /* #if EFI_HD44780_LCD */

View File

@ -47,6 +47,7 @@
#if EFI_PROD_CODE #if EFI_PROD_CODE
#include "pin_repository.h" #include "pin_repository.h"
#include "mpu_util.h"
#endif #endif
#if EFI_HIP_9011 #if EFI_HIP_9011
@ -84,14 +85,20 @@ static Logging *logger;
// todo: nicer method which would mention SPI speed explicitly? // todo: nicer method which would mention SPI speed explicitly?
#if EFI_PROD_CODE #if EFI_PROD_CODE
static SPIConfig hipSpiCfg = { .circular = false, static SPIConfig hipSpiCfg = {
.end_cb = NULL, .circular = false,
.ssport = NULL, .end_cb = NULL,
.sspad = 0, .ssport = NULL,
.cr1 = SPI_CR1_MSTR | .sspad = 0,
//SPI_CR1_BR_1 // 5MHz .cr1 =
SPI_CR1_CPHA | SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_BR_2, SPI_CR1_MSTR |
.cr2 = 0}; SPI_CR1_CPHA |
//SPI_CR1_BR_1 // 5MHz
SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_BR_2 |
SPI_CR1_8BIT_MODE,
.cr2 =
SPI_CR2_8BIT_MODE
};
#endif /* EFI_PROD_CODE */ #endif /* EFI_PROD_CODE */
static void checkResponse(void) { static void checkResponse(void) {

View File

@ -41,6 +41,9 @@ BOR_Result_t BOR_Set(BOR_Level_t BORValue);
#define ADC_CR2_SWSTART ((uint32_t)0x40000000) #define ADC_CR2_SWSTART ((uint32_t)0x40000000)
#endif #endif
#define SPI_CR1_8BIT_MODE 0
#define SPI_CR2_8BIT_MODE 0
#define SPI_CR1_16BIT_MODE SPI_CR1_DFF #define SPI_CR1_16BIT_MODE SPI_CR1_DFF
#define SPI_CR2_16BIT_MODE 0 #define SPI_CR2_16BIT_MODE 0

View File

@ -318,6 +318,13 @@ void turnOnSpi(spi_device_e device) {
engineConfiguration->spi3MisoMode); engineConfiguration->spi3MisoMode);
#endif /* STM32_SPI_USE_SPI3 */ #endif /* STM32_SPI_USE_SPI3 */
} }
if (device == SPI_DEVICE_4) {
#if STM32_SPI_USE_SPI4
// scheduleMsg(&logging, "Turning on SPI4 pins");
/* there is no cofiguration fields for SPI4 in engineConfiguration, rely on board init code
* it should set proper functions for SPI4 pins */
#endif /* STM32_SPI_USE_SPI4 */
}
} }
void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso,

View File

@ -54,6 +54,9 @@
#define ADC_CR2_SWSTART ((uint32_t)0x40000000) #define ADC_CR2_SWSTART ((uint32_t)0x40000000)
#endif #endif
#define SPI_CR1_8BIT_MODE 0
#define SPI_CR2_8BIT_MODE 0
#define SPI_CR1_16BIT_MODE SPI_CR1_DFF #define SPI_CR1_16BIT_MODE SPI_CR1_DFF
#define SPI_CR2_16BIT_MODE 0 #define SPI_CR2_16BIT_MODE 0

View File

@ -313,6 +313,13 @@ void turnOnSpi(spi_device_e device) {
engineConfiguration->spi3MisoMode); engineConfiguration->spi3MisoMode);
#endif /* STM32_SPI_USE_SPI3 */ #endif /* STM32_SPI_USE_SPI3 */
} }
if (device == SPI_DEVICE_4) {
#if STM32_SPI_USE_SPI4
// scheduleMsg(&logging, "Turning on SPI4 pins");
/* there is no cofiguration fields for SPI4 in engineConfiguration, rely on board init code
* it should set proper functions for SPI4 pins */
#endif /* STM32_SPI_USE_SPI4 */
}
} }
void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso,

View File

@ -55,11 +55,14 @@
#define ADC_CR2_SWSTART ((uint32_t)0x40000000) #define ADC_CR2_SWSTART ((uint32_t)0x40000000)
#endif #endif
#define SPI_CR1_8BIT_MODE 0
#define SPI_CR2_8BIT_MODE (SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0)
#define SPI_CR1_16BIT_MODE 0 #define SPI_CR1_16BIT_MODE 0
#define SPI_CR2_16BIT_MODE SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 #define SPI_CR2_16BIT_MODE SPI_CR2_DS_3 | SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0
#define SPI_CR1_24BIT_MODE 0
/* 3 x 8-bit transfer */ /* 3 x 8-bit transfer */
#define SPI_CR1_24BIT_MODE 0
#define SPI_CR2_24BIT_MODE SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0 #define SPI_CR2_24BIT_MODE SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0

View File

@ -34,11 +34,13 @@ static SPIDriver *driver;
* The slave select line is the pin GPIOE_CS_SPI on the port GPIOE. * The slave select line is the pin GPIOE_CS_SPI on the port GPIOE.
*/ */
static const SPIConfig accelerometerCfg = { static const SPIConfig accelerometerCfg = {
NULL, .spi_bus = NULL,
/* HW dependent part.*/ /* HW dependent part.*/
GPIOE, .ssport = GPIOE,
GPIOE_PIN3, .sspad = GPIOE_PIN3,
SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_CPOL | SPI_CR1_CPHA .cr1 = SPI_CR1_BR_0 | SPI_CR1_BR_1 | SPI_CR1_CPOL | SPI_CR1_CPHA |
SPI_CR1_8BIT_MODE,
.cr2 = SPI_CR2_8BIT_MODE
}; };
#endif /* EFI_MEMS */ #endif /* EFI_MEMS */

View File

@ -15,6 +15,10 @@
#include "adc_inputs.h" #include "adc_inputs.h"
#if EFI_PROD_CODE
#include "mpu_util.h"
#endif
//#define CJ125_DEBUG //#define CJ125_DEBUG
//#define CJ125_DEBUG_SPI //#define CJ125_DEBUG_SPI
@ -39,8 +43,12 @@ static SPIConfig cj125spicfg = {
.end_cb = NULL, .end_cb = NULL,
.ssport = NULL, .ssport = NULL,
.sspad = 0, .sspad = 0,
.cr1 = SPI_CR1_MSTR | SPI_CR1_CPHA, .cr1 =
.cr2 = 0 }; SPI_CR1_MSTR | SPI_CR1_CPHA |
SPI_CR1_8BIT_MODE,
.cr2 =
SPI_CR2_8BIT_MODE
};
static volatile int lastSlowAdcCounter = 0; static volatile int lastSlowAdcCounter = 0;

View File

@ -85,6 +85,7 @@ struct mc33972_config mc33972 = {
.ssport = NULL, .ssport = NULL,
.sspad = 0, .sspad = 0,
.cr1 = .cr1 =
SPI_CR1_24BIT_MODE |
SPI_CR1_SSM | SPI_CR1_SSM |
SPI_CR1_SSI | SPI_CR1_SSI |
/* SPI_CR1_LSBFIRST | */ /* SPI_CR1_LSBFIRST | */