189 lines
5.0 KiB
C++
189 lines
5.0 KiB
C++
|
|
#include "pch.h"
|
|
#include "defaults.h"
|
|
#include "smart_gpio.h"
|
|
#include "drivers/gpio/l9779.h"
|
|
|
|
// PB14 is error LED, configured in board.mk
|
|
Gpio getCommsLedPin() {
|
|
// this board has LEDs
|
|
return Gpio::Unassigned;
|
|
}
|
|
|
|
Gpio getWarningLedPin() {
|
|
// this board has LEDs
|
|
return Gpio::Unassigned;
|
|
}
|
|
|
|
Gpio getRunningLedPin() {
|
|
// this board has LEDs
|
|
return Gpio::Unassigned;
|
|
}
|
|
|
|
static void setInjectorPins() {
|
|
engineConfiguration->injectionPins[0] = Gpio::L9779_OUT_1;
|
|
engineConfiguration->injectionPins[1] = Gpio::L9779_OUT_2;
|
|
engineConfiguration->injectionPins[2] = Gpio::L9779_OUT_3;
|
|
engineConfiguration->injectionPins[3] = Gpio::L9779_OUT_4;
|
|
|
|
engineConfiguration->injectionPinMode = OM_DEFAULT;
|
|
}
|
|
|
|
static void setIgnitionPins() {
|
|
engineConfiguration->ignitionPins[0] = Gpio::L9779_IGN_1;
|
|
engineConfiguration->ignitionPins[1] = Gpio::L9779_IGN_2;
|
|
/* Two following has no IGBT populated, wasted spark is used */
|
|
engineConfiguration->ignitionPins[2] = Gpio::L9779_IGN_3;
|
|
engineConfiguration->ignitionPins[3] = Gpio::L9779_IGN_4;
|
|
|
|
engineConfiguration->ignitionPinMode = OM_DEFAULT;
|
|
}
|
|
|
|
static void setupEtb() {
|
|
// TLE9201 driver
|
|
// This chip has three control pins:
|
|
// DIR - sets direction of the motor
|
|
// PWM - pwm control (enable high, coast low)
|
|
// DIS - disables motor (enable low)
|
|
|
|
// PWM pin
|
|
engineConfiguration->etbIo[0].controlPin = Gpio::B14;
|
|
// DIR pin
|
|
engineConfiguration->etbIo[0].directionPin1 = Gpio::B15;
|
|
// // Disable pin todo clarify if we have it?
|
|
// engineConfiguration->etbIo[0].disablePin = Gpio::C8;
|
|
|
|
// we only have pwm/dir, no dira/dirb
|
|
engineConfiguration->etb_use_two_wires = false;
|
|
}
|
|
|
|
/**
|
|
* @brief Board-specific configuration defaults.
|
|
|
|
*/
|
|
void setBoardDefaultConfiguration() {
|
|
setInjectorPins();
|
|
setIgnitionPins();
|
|
|
|
engineConfiguration->cylindersCount = 4;
|
|
engineConfiguration->firingOrder = FO_1_3_4_2;
|
|
|
|
engineConfiguration->ignitionMode = IM_WASTED_SPARK;
|
|
engineConfiguration->crankingInjectionMode = IM_SIMULTANEOUS;
|
|
engineConfiguration->injectionMode = IM_SEQUENTIAL;
|
|
|
|
/* SPI1 is used for communication with L9779 */
|
|
engineConfiguration->is_enabled_spi_1 = true;
|
|
|
|
engineConfiguration->spi1mosiPin = Gpio::E15;
|
|
engineConfiguration->spi1misoPin = Gpio::E14;
|
|
engineConfiguration->spi1sckPin = Gpio::E13;
|
|
|
|
engineConfiguration->triggerInputPins[0] = Gpio::F8;
|
|
engineConfiguration->camInputs[0] = Gpio::B9;
|
|
|
|
// todo engineConfiguration->clt.adcChannel = EFI_ADC_; // ADC3 PF5
|
|
// todo engineConfiguration->iat.adcChannel = EFI_ADC_; // ADC3 PF6
|
|
// todo engineConfiguration->map.sensor.hwChannel = EFI_ADC_;
|
|
|
|
// ?k high side/?k low side = ? ratio divider todo is the value below right?
|
|
engineConfiguration->analogInputDividerCoefficient = 2.0f;
|
|
|
|
// todo engineConfiguration->vbattDividerCoeff = (33 + 6.8) / 6.8; // 5.835
|
|
|
|
// engineConfiguration->vbattAdcChannel = EFI_ADC_;
|
|
engineConfiguration->adcVcc = 3.3f;
|
|
|
|
setTPS1Inputs(EFI_ADC_12, EFI_ADC_13);
|
|
|
|
setPPSInputs(EFI_ADC_10, EFI_ADC_11);
|
|
}
|
|
|
|
void setBoardConfigOverrides() {
|
|
//CAN 1 bus overwrites
|
|
engineConfiguration->canRxPin = Gpio::G0;
|
|
engineConfiguration->canTxPin = Gpio::G1;
|
|
setupEtb();
|
|
}
|
|
|
|
static struct l9779_config l9779_cfg = {
|
|
.spi_bus = &SPID1,
|
|
.spi_config = {
|
|
.circular = false,
|
|
.end_cb = NULL,
|
|
.ssport = GPIOE,
|
|
.sspad = 12,
|
|
.cr1 =
|
|
SPI_CR1_16BIT_MODE |
|
|
SPI_CR1_SSM |
|
|
SPI_CR1_SSI |
|
|
SPI_CR1_LSBFIRST | //LSB first
|
|
((3 << SPI_CR1_BR_Pos) & SPI_CR1_BR) | // div = 16
|
|
SPI_CR1_MSTR |
|
|
SPI_CR1_CPHA |
|
|
0,
|
|
.cr2 = SPI_CR2_16BIT_MODE
|
|
},
|
|
.direct_gpio = {
|
|
/* ignition pre-drivers */
|
|
[0] = {.port = GPIOF, .pad = 12},
|
|
[1] = {.port = GPIOF, .pad = 13},
|
|
[2] = {.port = GPIOF, .pad = 14},
|
|
[3] = {.port = GPIOF, .pad = 15},
|
|
/* IN1 .. IN7 */
|
|
[4] = {.port = GPIOE, .pad = 8},
|
|
[5] = {.port = GPIOE, .pad = 9},
|
|
[6] = {.port = GPIOE, .pad = 10},
|
|
[7] = {.port = GPIOE, .pad = 11},
|
|
[8] = {.port = GPIOG, .pad = 5},
|
|
[9] = {.port = GPIOG, .pad = 6},
|
|
[10] = {.port = GPIOG, .pad = 7},
|
|
},
|
|
/* PWM signal */
|
|
.pwm_gpio = {.port = NULL, .pad = 0}
|
|
};
|
|
|
|
static void board_init_ext_gpios()
|
|
{
|
|
int ret;
|
|
|
|
ret = l9779_add(Gpio::L9779_IGN_1, 0, &l9779_cfg);
|
|
if (ret < 0) {
|
|
/* error */
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @brief Board-specific initialization code.
|
|
* @todo Add your board-specific code, if any.
|
|
*/
|
|
void boardInit(void)
|
|
{
|
|
board_init_ext_gpios();
|
|
}
|
|
|
|
static Gpio OUTPUTS[] = {
|
|
Gpio::L9779_OUT_4, // Injector 1
|
|
Gpio::L9779_OUT_3, // Injector 2
|
|
// Gpio::L9779_OUT_2, // Injector 3
|
|
// Gpio::L9779_OUT_1, // Injector 4
|
|
// Gpio::L9779_OUT_6, // Oxygen sensor 1 heater
|
|
// Gpio::L9779_OUT_5, // EVAP solenoid control
|
|
// Gpio::L9779_OUT_7, // Oxygen sensor 2 heater
|
|
// Gpio::L9779_IGN_1, // Coil 1 (< +2.5v) / Coils 1,4
|
|
// Gpio::L9779_IGN_3, // Coil 3 (< +2.5v) / Coils 2,4
|
|
// Gpio::L9779_OUT_17, // Air compressor control
|
|
// Gpio::L9779_OUT_14, // Secondary starter relay
|
|
// Gpio::L9779_OUT_15, // FAN 1 relay
|
|
// Gpio::L9779_OUT_16, // FAN 2 relay
|
|
// Gpio::L9779_OUT_13, // Fuel pump relay
|
|
};
|
|
|
|
int getBoardMetaOutputsCount() {
|
|
return efi::size(OUTPUTS);
|
|
}
|
|
|
|
int getBoardMetaDcOutputsCount() {
|
|
return 1;
|
|
}
|