support spi4/5/6

This commit is contained in:
Matthew Kennedy 2024-02-26 11:30:08 -08:00
parent 7fafa1a144
commit 9c2a6420b4
7 changed files with 99 additions and 19 deletions

View File

@ -320,14 +320,11 @@
#define EFI_INTERNAL_FAST_ADC_GPT &GPTD6
#define EFI_SPI1_AF 5
#define EFI_SPI2_AF 5
/**
* This section is for right-side center SPI
*/
#define EFI_SPI3_AF 6
#define EFI_SPI4_AF 5
#define EFI_SPI5_AF 5
#define EFI_SPI6_AF 6
/**
* Patched version of ChibiOS/RT support extra details in the system error messages

View File

@ -291,6 +291,8 @@ typedef enum __attribute__ ((__packed__)) {
SPI_DEVICE_2 = 2,
SPI_DEVICE_3 = 3,
SPI_DEVICE_4 = 4,
SPI_DEVICE_5 = 5,
SPI_DEVICE_6 = 6,
} spi_device_e;
typedef enum __attribute__ ((__packed__)) {

View File

@ -64,7 +64,7 @@
#endif
#if HAL_USE_SPI
extern bool isSpiInitialized[5];
extern bool isSpiInitialized[6];
/**
* Only one consumer can use SPI bus at a given time
@ -79,7 +79,6 @@ void unlockSpi(spi_device_e device) {
}
static void initSpiModules() {
UNUSED(engineConfiguration);
if (engineConfiguration->is_enabled_spi_1) {
turnOnSpi(SPI_DEVICE_1);
}
@ -92,6 +91,12 @@ static void initSpiModules() {
if (engineConfiguration->is_enabled_spi_4) {
turnOnSpi(SPI_DEVICE_4);
}
if (engineConfiguration->is_enabled_spi_5) {
turnOnSpi(SPI_DEVICE_5);
}
if (engineConfiguration->is_enabled_spi_6) {
turnOnSpi(SPI_DEVICE_6);
}
}
/**
@ -120,6 +125,16 @@ SPIDriver * getSpiDevice(spi_device_e spiDevice) {
if (spiDevice == SPI_DEVICE_4) {
return &SPID4;
}
#endif
#if STM32_SPI_USE_SPI5
if (spiDevice == SPI_DEVICE_5) {
return &SPID5;
}
#endif
#if STM32_SPI_USE_SPI6
if (spiDevice == SPI_DEVICE_6) {
return &SPID6;
}
#endif
firmwareError(ObdCode::CUSTOM_ERR_UNEXPECTED_SPI, "Unexpected SPI device: %d", spiDevice);
return NULL;

View File

@ -56,7 +56,7 @@ void HardFaultVector(void) {
}
#if HAL_USE_SPI || defined(__DOXYGEN__)
bool isSpiInitialized[5] = { false, false, false, false, false };
bool isSpiInitialized[6] = { false, false, false, false, false, false };
static int getSpiAf(SPIDriver *driver) {
#if STM32_SPI_USE_SPI1

View File

@ -48,7 +48,7 @@ void HardFaultVector(void) {
}
#if HAL_USE_SPI || defined(__DOXYGEN__)
bool isSpiInitialized[5] = { false, false, false, false, false };
bool isSpiInitialized[6] = { false, false, false, false, false, false };
static int getSpiAf(SPIDriver *driver) {
#if STM32_SPI_USE_SPI1

View File

@ -463,7 +463,7 @@ EXTERNC int getRemainingStack(thread_t *otp) {
}
#if HAL_USE_SPI
bool isSpiInitialized[5] = { false, false, false, false, false };
bool isSpiInitialized[6] = { false, false, false, false, false, false};
static int getSpiAf(SPIDriver *driver) {
#if STM32_SPI_USE_SPI1
@ -480,6 +480,21 @@ static int getSpiAf(SPIDriver *driver) {
if (driver == &SPID3) {
return EFI_SPI3_AF;
}
#endif
#if STM32_SPI_USE_SPI4
if (driver == &SPID4) {
return EFI_SPI4_AF;
}
#endif
#if STM32_SPI_USE_SPI5
if (driver == &SPID5) {
return EFI_SPI5_AF;
}
#endif
#if STM32_SPI_USE_SPI6
if (driver == &SPID6) {
return EFI_SPI6_AF;
}
#endif
return -1;
}
@ -492,6 +507,12 @@ brain_pin_e getMisoPin(spi_device_e device) {
return engineConfiguration->spi2misoPin;
case SPI_DEVICE_3:
return engineConfiguration->spi3misoPin;
case SPI_DEVICE_4:
return engineConfiguration->spi4misoPin;
case SPI_DEVICE_5:
return engineConfiguration->spi5misoPin;
case SPI_DEVICE_6:
return engineConfiguration->spi6misoPin;
default:
break;
}
@ -506,6 +527,12 @@ brain_pin_e getMosiPin(spi_device_e device) {
return engineConfiguration->spi2mosiPin;
case SPI_DEVICE_3:
return engineConfiguration->spi3mosiPin;
case SPI_DEVICE_4:
return engineConfiguration->spi4mosiPin;
case SPI_DEVICE_5:
return engineConfiguration->spi5mosiPin;
case SPI_DEVICE_6:
return engineConfiguration->spi6mosiPin;
default:
break;
}
@ -520,6 +547,12 @@ brain_pin_e getSckPin(spi_device_e device) {
return engineConfiguration->spi2sckPin;
case SPI_DEVICE_3:
return engineConfiguration->spi3sckPin;
case SPI_DEVICE_4:
return engineConfiguration->spi4sckPin;
case SPI_DEVICE_5:
return engineConfiguration->spi5sckPin;
case SPI_DEVICE_6:
return engineConfiguration->spi6sckPin;
default:
break;
}
@ -531,9 +564,7 @@ void turnOnSpi(spi_device_e device) {
return; // already initialized
isSpiInitialized[device] = true;
if (device == SPI_DEVICE_1) {
// todo: introduce a nice structure with all fields for same SPI
#if STM32_SPI_USE_SPI1
// scheduleMsg(&logging, "Turning on SPI1 pins");
initSpiModule(&SPID1, getSckPin(device),
getMisoPin(device),
getMosiPin(device),
@ -544,7 +575,6 @@ void turnOnSpi(spi_device_e device) {
}
if (device == SPI_DEVICE_2) {
#if STM32_SPI_USE_SPI2
// scheduleMsg(&logging, "Turning on SPI2 pins");
initSpiModule(&SPID2, getSckPin(device),
getMisoPin(device),
getMosiPin(device),
@ -555,7 +585,6 @@ void turnOnSpi(spi_device_e device) {
}
if (device == SPI_DEVICE_3) {
#if STM32_SPI_USE_SPI3
// scheduleMsg(&logging, "Turning on SPI3 pins");
initSpiModule(&SPID3, getSckPin(device),
getMisoPin(device),
getMosiPin(device),
@ -566,11 +595,34 @@ void turnOnSpi(spi_device_e device) {
}
if (device == SPI_DEVICE_4) {
#if STM32_SPI_USE_SPI4
// scheduleMsg(&logging, "Turning on SPI4 pins");
/* there are no configuration fields for SPI4 in engineConfiguration, rely on board init code
* it should set proper functions for SPI4 pins */
initSpiModule(&SPID4, getSckPin(device),
getMisoPin(device),
getMosiPin(device),
engineConfiguration->spi4SckMode,
engineConfiguration->spi4MosiMode,
engineConfiguration->spi4MisoMode);
#endif /* STM32_SPI_USE_SPI4 */
}
if (device == SPI_DEVICE_5) {
#if STM32_SPI_USE_SPI5
initSpiModule(&SPID5, getSckPin(device),
getMisoPin(device),
getMosiPin(device),
engineConfiguration->spi5SckMode,
engineConfiguration->spi5MosiMode,
engineConfiguration->spi5MisoMode);
#endif /* STM32_SPI_USE_SPI5 */
}
if (device == SPI_DEVICE_6) {
#if STM32_SPI_USE_SPI6
initSpiModule(&SPID6, getSckPin(device),
getMisoPin(device),
getMosiPin(device),
engineConfiguration->spi6SckMode,
engineConfiguration->spi6MosiMode,
engineConfiguration->spi6MisoMode);
#endif /* STM32_SPI_USE_SPI6 */
}
}
void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso,

View File

@ -432,6 +432,8 @@ bit useFordRedundantPps;On some Ford and Toyota vehicles one of the pedal sensor
bit cltSensorPulldown
bit iatSensorPulldown
bit allowIdenticalPps
bit is_enabled_spi_5
bit is_enabled_spi_6
int16_t tpsMin;Closed throttle, 1 volt = 200 units;"ADC", 1, 0, 0, 1023, 0
int16_t tpsMax;Full throttle, 1 volt = 200 units;"ADC", 1, 0, 0, 1023, 0
@ -1489,7 +1491,19 @@ pin_input_mode_e[LUA_DIGITAL_INPUT_COUNT iterate] luaDigitalInputPinModes;
output_pin_e speedometerOutputPin
uint16_t speedometerPulsePerKm;Number of speedometer pulses per kilometer travelled.;"", 1, 0, 0, 65000, 0
uint8_t[246] mainUnusedEnd;;"units", 1, 0, 0, 1, 0
Gpio spi4mosiPin;
Gpio spi4misoPin;
Gpio spi4sckPin;
Gpio spi5mosiPin;
Gpio spi5misoPin;
Gpio spi5sckPin;
Gpio spi6mosiPin;
Gpio spi6misoPin;
Gpio spi6sckPin;
uint8_t[237] mainUnusedEnd;;"units", 1, 0, 0, 1, 0
! end of engine_configuration_s
end_struct