rusefi/firmware/config/boards/f407-discovery/board_configuration.cpp

197 lines
6.0 KiB
C++
Raw Normal View History

2019-11-06 17:05:44 -08:00
/**
2023-11-28 11:41:21 -08:00
* @file board_configuration.cpp
2019-11-06 17:05:44 -08:00
*/
2022-12-14 16:01:26 -08:00
#include "pch.h"
#include "hip9011_logic.h"
2022-12-14 16:01:26 -08:00
static void setDefaultFrankensoStepperIdleParameters() {
engineConfiguration->idle.stepperDirectionPin = Gpio::E10;
engineConfiguration->idle.stepperStepPin = Gpio::E12;
engineConfiguration->stepperEnablePin = Gpio::E14;
engineConfiguration->idleStepperReactionTime = 10;
engineConfiguration->idleStepperTotalSteps = 150;
}
static void setCanFrankensoDefaults() {
engineConfiguration->canTxPin = Gpio::B6;
engineConfiguration->canRxPin = Gpio::B12;
}
2023-06-04 23:53:58 -07:00
Gpio getWarningLedPin() {
// open question if we need those LEDs at all? shall those be configurable?
return Gpio::Unassigned;
2023-06-04 23:53:58 -07:00
}
2023-06-06 18:15:43 -07:00
Gpio getCommsLedPin() {
return engineConfiguration->communityCommsLedPid;
2023-06-04 23:53:58 -07:00
}
Gpio getRunningLedPin() {
// open question if we need those LEDs at all? shall those be configurable?
return Gpio::Unassigned;
2023-06-04 23:53:58 -07:00
}
2023-11-03 18:20:45 -07:00
#if EFI_HIP_9011
2022-12-14 16:01:26 -08:00
static void setHip9011FrankensoPinout() {
/**
* SPI on PB13/14/15
*/
// engineConfiguration->hip9011CsPin = Gpio::D0; // rev 0.1
engineConfiguration->isHip9011Enabled = true;
engineConfiguration->hip9011PrescalerAndSDO = HIP_8MHZ_PRESCALER; // 8MHz chip
engineConfiguration->is_enabled_spi_2 = true;
// todo: convert this to rusEfi, hardware-independent enum
#if EFI_PROD_CODE
#ifdef EFI_HIP_CS_PIN
engineConfiguration->hip9011CsPin = EFI_HIP_CS_PIN;
#else
engineConfiguration->hip9011CsPin = Gpio::B0; // rev 0.4
#endif
engineConfiguration->hip9011CsPinMode = OM_OPENDRAIN;
engineConfiguration->hip9011IntHoldPin = Gpio::B11;
engineConfiguration->hip9011IntHoldPinMode = OM_OPENDRAIN;
engineConfiguration->spi2SckMode = PO_OPENDRAIN; // 4
engineConfiguration->spi2MosiMode = PO_OPENDRAIN; // 4
engineConfiguration->spi2MisoMode = PO_PULLUP; // 32
#endif /* EFI_PROD_CODE */
engineConfiguration->hip9011Gain = 1;
if (!engineConfiguration->useTpicAdvancedMode) {
engineConfiguration->hipOutputChannel = EFI_ADC_10; // PC0
}
}
2023-11-03 18:20:45 -07:00
#endif
2022-12-14 16:01:26 -08:00
2023-12-13 08:08:28 -08:00
#if EFI_ONBOARD_MEMS
static void configureAccelerometerPins() {
// engineConfiguration->accelerometerCsPin = Gpio::E3; // we have a conflict with VVT output on Miata
// engineConfiguration->is_enabled_spi_1 = true; // we have a conflict with PA5 input pin
// stm32f4discovery defaults
engineConfiguration->spi1mosiPin = Gpio::A7;
engineConfiguration->spi1misoPin = Gpio::A6;
engineConfiguration->spi1sckPin = Gpio::A5;
}
2023-12-13 08:08:28 -08:00
#endif // EFI_ONBOARD_MEMS
2022-12-14 16:01:26 -08:00
/**
* @brief Hardware board-specific default configuration (GPIO pins, ADC channels, SPI configs etc.)
*/
void setBoardDefaultConfiguration() {
setDefaultFrankensoStepperIdleParameters();
setCanFrankensoDefaults();
engineConfiguration->communityCommsLedPid = Gpio::D15; // blue LED on discovery
2022-12-14 16:01:26 -08:00
#if EFI_HIP_9011
setHip9011FrankensoPinout();
#endif /* EFI_HIP_9011 */
// set optional subsystem configs
2023-12-13 08:08:28 -08:00
#if EFI_ONBOARD_MEMS
2022-12-14 16:01:26 -08:00
// this would override some values from above
configureAccelerometerPins();
2023-12-13 08:08:28 -08:00
#endif /* EFI_ONBOARD_MEMS */
2022-12-14 16:01:26 -08:00
engineConfiguration->map.sensor.hwChannel = EFI_ADC_4;
engineConfiguration->clt.adcChannel = EFI_ADC_6;
engineConfiguration->iat.adcChannel = EFI_ADC_7;
engineConfiguration->afr.hwChannel = EFI_ADC_14;
engineConfiguration->accelerometerSpiDevice = SPI_DEVICE_1;
engineConfiguration->triggerSimulatorPins[0] = Gpio::D1;
engineConfiguration->triggerSimulatorPins[1] = Gpio::D2;
engineConfiguration->triggerInputPins[0] = Gpio::C6;
// engineConfiguration->triggerInputPins[1] = Gpio::A5;
2022-12-14 16:01:26 -08:00
// set this to SPI_DEVICE_3 to enable stimulation
//engineConfiguration->digitalPotentiometerSpiDevice = SPI_DEVICE_3;
engineConfiguration->digitalPotentiometerChipSelect[0] = Gpio::D7;
engineConfiguration->digitalPotentiometerChipSelect[1] = Gpio::Unassigned;
engineConfiguration->digitalPotentiometerChipSelect[2] = Gpio::D5;
engineConfiguration->digitalPotentiometerChipSelect[3] = Gpio::Unassigned;
engineConfiguration->spi1mosiPin = Gpio::B5;
engineConfiguration->spi1misoPin = Gpio::B4;
engineConfiguration->spi1sckPin = Gpio::B3; // please note that this pin is also SWO/SWD - Single Wire debug Output
engineConfiguration->spi2mosiPin = Gpio::B15;
engineConfiguration->spi2misoPin = Gpio::B14;
engineConfiguration->spi2sckPin = Gpio::B13;
engineConfiguration->spi3mosiPin = Gpio::B5;
engineConfiguration->spi3misoPin = Gpio::B4;
engineConfiguration->spi3sckPin = Gpio::B3;
#if EFI_FILE_LOGGING
setDefaultSdCardParameters();
#endif /* EFI_FILE_LOGGING */
engineConfiguration->is_enabled_spi_1 = false;
engineConfiguration->is_enabled_spi_2 = false;
engineConfiguration->is_enabled_spi_3 = true;
}
2023-11-22 18:06:00 -08:00
2023-11-28 11:40:29 -08:00
// weak linkage
2023-11-22 18:06:00 -08:00
void boardInitHardware() {
2024-04-26 21:07:48 -07:00
2023-11-22 18:06:00 -08:00
static const struct mc33810_config mc33810 = {
.spi_bus = &SPID3,
.spi_config = {
.circular = false,
.end_cb = NULL,
// todo: use engineConfiguration->mc33810_cs
2023-11-23 06:21:56 -08:00
.ssport = GPIOC,
.sspad = 5,
2023-11-22 18:06:00 -08:00
.cr1 =
2023-11-22 22:47:41 -08:00
SPI_CR1_16BIT_MODE |
2023-11-22 18:06:00 -08:00
SPI_CR1_SSM |
SPI_CR1_SSI |
((3 << SPI_CR1_BR_Pos) & SPI_CR1_BR) | /* div = 16 */
SPI_CR1_MSTR |
/* SPI_CR1_CPOL | */ // = 0
SPI_CR1_CPHA | // = 1
0,
2023-12-02 08:09:49 -08:00
.cr2 = SPI_CR2_16BIT_MODE
2023-11-22 18:06:00 -08:00
},
.direct_io = {
/* injector drivers */
2023-11-23 06:21:56 -08:00
[0] = {.port = GPIOA, .pad = 3},
[1] = {.port = GPIOA, .pad = 4},
[2] = {.port = nullptr, .pad = 0},
[3] = {.port = nullptr, .pad = 0},
2023-11-22 18:06:00 -08:00
/* ignition pre-drivers */
2023-11-23 06:21:56 -08:00
[4] = {.port = GPIOA, .pad = 0},
[5] = {.port = GPIOA, .pad = 1},
//GPGD mode is not supported yet, ignition mode does not support spi on/off commands
// so ignition signals should be directly driven
[6] = {.port = GPIOD, .pad = 0},
// meaning even if we do not use it we need a pin for now
[7] = {.port = GPIOD, .pad = 1},
2023-11-22 18:06:00 -08:00
},
.en = {.port = GPIOA, .pad = 6} // copy-paste with setMode code!
2023-11-22 18:06:00 -08:00
};
if (engineConfiguration->engineType == engine_type_e::FRANKENSO_TEST_33810) {
2023-11-23 06:48:10 -08:00
int ret = mc33810_add(Gpio::MC33810_0_OUT_0, 0, &mc33810);
efiPrintf("*****************+ mc33810_add %d +*******************", ret);
2023-11-23 06:48:10 -08:00
// todo: add to more appropriate location?
addConsoleAction("injinfo", [](){
efiPrintf("injinfo index=%d", engine->fuelComputer.brokenInjector);
});
2023-11-22 18:06:00 -08:00
}
}