rusefi-hardware/GDI-4ch/firmware/main.cpp

148 lines
3.3 KiB
C++
Raw Normal View History

2023-05-15 14:42:29 -07:00
#include "pt2001impl.h"
2022-01-08 11:05:39 -08:00
2022-01-10 20:05:21 -08:00
#include "can.h"
#include "fault.h"
2022-01-10 19:53:09 -08:00
#include "uart.h"
2022-01-10 20:05:21 -08:00
#include "io_pins.h"
2023-05-15 14:42:29 -07:00
#include "can_common.h"
2022-05-21 12:46:40 -07:00
#include <algorithm>
2022-01-12 11:02:49 -08:00
static void InitPins() {
// stm32 TX - dongle RX often White
palSetPadMode(GPIOA, 9, PAL_MODE_STM32_ALTERNATE_PUSHPULL );
// stm32 RX - dongle TX often Green
palSetPadMode(GPIOA,10, PAL_MODE_INPUT_PULLUP );
// CAN TX
palSetPadMode(GPIOA,12, PAL_MODE_STM32_ALTERNATE_PUSHPULL );
// CAN RX
palSetPadMode(GPIOA,11, PAL_MODE_INPUT_PULLUP );
}
bool isOverallHappyStatus = false;
2022-05-21 12:46:40 -07:00
static const SPIConfig spiCfg = {
.circular = false,
.end_cb = nullptr,
.ssport = GPIOB,
.sspad = 2,
.cr1 =
SPI_CR1_DFF |
SPI_CR1_MSTR |
SPI_CR1_CPHA | SPI_CR1_BR_1 | SPI_CR1_SPE,
.cr2 = SPI_CR2_SSOE
};
2022-08-20 15:55:58 -07:00
void GDIConfiguration::resetToDefaults() {
2022-08-20 18:08:32 -07:00
version = PERSISTENCE_VERSION;
2023-06-27 13:20:02 -07:00
updateCounter = 20;
2023-05-15 14:42:29 -07:00
inputCanID = GDI4_BASE_ADDRESS + 0x10;
outputCanID = GDI4_BASE_ADDRESS;
2022-08-20 15:55:58 -07:00
2023-05-15 16:46:16 -07:00
BoostVoltage = 65;
2022-08-20 15:55:58 -07:00
BoostCurrent = 13;
2023-05-15 16:46:16 -07:00
TBoostMin = 100;
TBoostMax = 400;
2022-08-20 15:55:58 -07:00
2023-05-15 16:46:16 -07:00
PeakCurrent = 9.4f;
TpeakDuration = 700; // 700us = 0.7ms
2022-08-20 15:55:58 -07:00
TpeakOff = 10;
Tbypass = 10;
2023-05-15 16:46:16 -07:00
HoldCurrent = 3.7f;
2022-08-20 15:55:58 -07:00
TholdOff = 60;
2023-05-15 16:46:16 -07:00
THoldDuration = 10000; // 10000us = 10ms
2022-08-20 15:55:58 -07:00
PumpPeakCurrent = 5;
PumpHoldCurrent = 3;
PumpTholdOff = 10;
2023-05-15 16:46:16 -07:00
PumpTholdTot = 10000; // 10000us = 10ms
2022-08-20 15:55:58 -07:00
}
GDIConfiguration configuration;
2023-05-15 14:42:29 -07:00
GDIConfiguration *getConfiguration() {
return &configuration;
}
bool Pt2001::init() {
palSetPadMode(GPIOA, 5, PAL_MODE_STM32_ALTERNATE_PUSHPULL); // sck
palSetPadMode(GPIOA, 6, PAL_MODE_INPUT); // miso
palSetPadMode(GPIOA, 7, PAL_MODE_STM32_ALTERNATE_PUSHPULL); // mosi
2022-05-21 12:46:40 -07:00
// GD32 errata, PB1 must have certain states for PB2 to work
palSetPadMode(GPIOB, 1, PAL_MODE_INPUT);
palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL); // chip select
palSetPad(GPIOB, 2);
// Set debug pins remap mode to use PB4 as normal pin
AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
palSetPadMode(GPIOB, 4, PAL_MODE_OUTPUT_PUSHPULL); // DRVEN
palClearPad(GPIOB, 4);
2022-05-21 12:46:40 -07:00
palSetPadMode(GPIOB, 5, PAL_MODE_OUTPUT_PUSHPULL); // reset
palClearPad(GPIOB, 5);
2022-05-21 12:46:40 -07:00
palSetPadMode(GPIOB, 7, PAL_MODE_INPUT_PULLDOWN); // flag0
2022-05-21 12:46:40 -07:00
driver = &SPID1;
spiStart(driver, &spiCfg);
spiUnselect(driver);
2022-05-21 12:46:40 -07:00
// Wait 1/2 second for things to wake up
chThdSleepMilliseconds(500);
2022-05-21 12:46:40 -07:00
return restart();
}
2022-05-21 12:46:40 -07:00
Pt2001 chip;
2022-05-21 12:46:40 -07:00
2023-06-27 13:20:02 -07:00
mfs_error_t flashState;
2023-05-15 07:31:02 -07:00
/*
* Application entry point.
*/
int main() {
halInit();
chSysInit();
2022-05-21 12:46:40 -07:00
// Fire up all of our threads
InitPins();
2023-06-27 13:20:02 -07:00
flashState = InitFlash();
2023-07-09 07:09:48 -07:00
ReadOrDefault();
InitCan();
InitUart();
palSetPadMode(LED_BLUE_PORT, LED_BLUE_PIN, PAL_MODE_OUTPUT_PUSHPULL);
palClearPad(LED_BLUE_PORT, LED_BLUE_PIN);
palSetPadMode(LED_GREEN_PORT, LED_GREEN_PIN, PAL_MODE_OUTPUT_PUSHPULL);
palClearPad(LED_GREEN_PORT, LED_GREEN_PIN);
2022-05-21 12:46:40 -07:00
2022-12-20 05:40:37 -08:00
bool isOverallHappyStatus = false;
2023-05-15 07:31:02 -07:00
2023-06-28 18:58:17 -07:00
// reminder that +12v is required for PT2001 to start
isOverallHappyStatus = chip.init();
2022-05-21 12:46:40 -07:00
while (true) {
if (isOverallHappyStatus) {
2022-06-04 14:39:53 -07:00
// happy board - green D21 blinking
2022-05-21 12:46:40 -07:00
palTogglePad(LED_GREEN_PORT, LED_GREEN_PIN);
} else {
palTogglePad(LED_BLUE_PORT, LED_BLUE_PIN);
}
chThdSleepMilliseconds(100);
}
2023-06-27 13:58:39 -07:00
while (true) {
2022-05-21 12:46:40 -07:00
//auto fault = GetCurrentFault();
2022-01-10 20:05:21 -08:00
2022-05-21 12:46:40 -07:00
//palTogglePad(LED_BLUE_PORT, LED_BLUE_PIN);
chThdSleepMilliseconds(100);
2022-01-08 11:05:39 -08:00
}
}