From 2271592a3763acf853235d2eca60c534ba92afe0 Mon Sep 17 00:00:00 2001 From: rusEfi Date: Sun, 29 Mar 2015 20:05:02 -0500 Subject: [PATCH] auto-sync --- .../controllers/algo/engine_configuration.cpp | 1 + ...ngine_configuration_generated_structures.h | 7 ++- firmware/hw_layer/HIP9011.cpp | 56 +++++++++++++------ firmware/hw_layer/HIP9011.h | 1 + firmware/integration/rusefi_config.txt | 1 + firmware/tunerstudio/rusefi.ini | 3 +- 6 files changed, 48 insertions(+), 21 deletions(-) diff --git a/firmware/controllers/algo/engine_configuration.cpp b/firmware/controllers/algo/engine_configuration.cpp index 74a705ad6c..7b52a1f649 100644 --- a/firmware/controllers/algo/engine_configuration.cpp +++ b/firmware/controllers/algo/engine_configuration.cpp @@ -358,6 +358,7 @@ void setDefaultConfiguration(DECLARE_ENGINE_PARAMETER_F) { engineConfiguration->externalKnockSenseAdc = EFI_ADC_NONE; boardConfiguration->useSerialPort = true; + boardConfiguration->useStepperIdle = false; #if EFI_PROD_CODE engineConfiguration->digitalChartSize = 300; diff --git a/firmware/controllers/algo/engine_configuration_generated_structures.h b/firmware/controllers/algo/engine_configuration_generated_structures.h index 12f0cd96de..a3c4932252 100644 --- a/firmware/controllers/algo/engine_configuration_generated_structures.h +++ b/firmware/controllers/algo/engine_configuration_generated_structures.h @@ -1,4 +1,4 @@ -// this section was generated by config_definition.jar on Sun Mar 29 17:07:25 EDT 2015 +// this section was generated by config_definition.jar on Sun Mar 29 20:08:11 EDT 2015 // begin #include "rusefi_types.h" typedef struct { @@ -443,6 +443,9 @@ typedef struct { /** offset 372 bit 8 */ bool_t useSerialPort : 1; + /** + offset 372 bit 9 */ + bool_t useStepperIdle : 1; /** * offset 376 */ @@ -1204,4 +1207,4 @@ typedef struct { } engine_configuration_s; // end -// this section was generated by config_definition.jar on Sun Mar 29 17:07:25 EDT 2015 +// this section was generated by config_definition.jar on Sun Mar 29 20:08:11 EDT 2015 diff --git a/firmware/hw_layer/HIP9011.cpp b/firmware/hw_layer/HIP9011.cpp index 1768fec08b..61ac4e69da 100644 --- a/firmware/hw_layer/HIP9011.cpp +++ b/firmware/hw_layer/HIP9011.cpp @@ -62,7 +62,7 @@ static efitimeus_t timeOfLastKnockEvent = 0; * * hipOutput should be set to used FAST adc device */ -static hip_state_e state = READY_TO_INTEGRATE; +static hip_state_e state = NOT_READY; static scheduling_s startTimer[2]; static scheduling_s endTimer[2]; @@ -219,6 +219,42 @@ void hipAdcCallback(adcsample_t value) { } } +static bool_t needToInit = true; + +static void hipStartupCode(void) { + // '0' for 4MHz + SPI_SYNCHRONOUS(SET_PRESCALER_CMD + 0); + + // '0' for channel #1 + SPI_SYNCHRONOUS(SET_CHANNEL_CMD + 0); + + // band index depends on cylinder bore + SPI_SYNCHRONOUS(SET_BAND_PASS_CMD + bandIndex); + + /** + * Let's restart SPI to switch it from synchronous mode into + * asynchronous mode + */ + spiStop(driver); + spicfg.end_cb = endOfSpiCommunication; + spiStart(driver, &spicfg); + state = READY_TO_INTEGRATE; +} + +static THD_WORKING_AREA(hipTreadStack, UTILITY_THREAD_STACK_SIZE); + +static msg_t hipThread(void *arg) { + chRegSetThreadName("hip9011 init"); + while (true) { + // 100 ms to let the hardware to start + chThdSleepMilliseconds(100); + if (needToInit) { + hipStartupCode(); + needToInit = false; + } + } +} + void initHip9011(Logging *sharedLogger) { addConsoleAction("hipinfo", showHipInfo); if (!boardConfiguration->isHip9011Enabled) @@ -255,23 +291,7 @@ void initHip9011(Logging *sharedLogger) { // palSetPadMode(GPIOB, 15, PAL_MODE_ALTERNATE(EFI_SPI2_AF) | PAL_STM32_OTYPE_OPENDRAIN); addConsoleActionF("set_gain", setGain); - - // '0' for 4MHz - SPI_SYNCHRONOUS(SET_PRESCALER_CMD + 0); - - // '0' for channel #1 - SPI_SYNCHRONOUS(SET_CHANNEL_CMD + 0); - - // band index depends on cylinder bore - SPI_SYNCHRONOUS(SET_BAND_PASS_CMD + bandIndex); - - /** - * Let's restart SPI to switch it from synchronous mode into - * asynchronous mode - */ - spiStop(driver); - spicfg.end_cb = endOfSpiCommunication; - spiStart(driver, &spicfg); + chThdCreateStatic(hipTreadStack, sizeof(hipTreadStack), NORMALPRIO, (tfunc_t) hipThread, NULL); } #endif diff --git a/firmware/hw_layer/HIP9011.h b/firmware/hw_layer/HIP9011.h index 2962fa79a2..40e2669e78 100644 --- a/firmware/hw_layer/HIP9011.h +++ b/firmware/hw_layer/HIP9011.h @@ -10,6 +10,7 @@ #define HIP9011_H_ typedef enum { + NOT_READY, /** * the step after this one is always IS_INTEGRATING */ diff --git a/firmware/integration/rusefi_config.txt b/firmware/integration/rusefi_config.txt index a6039eb17d..6915b885c2 100644 --- a/firmware/integration/rusefi_config.txt +++ b/firmware/integration/rusefi_config.txt @@ -334,6 +334,7 @@ bit is_enabled_spi_2 bit isHip9011Enabled bit isVerboseAlternator bit useSerialPort + bit useStepperIdle brain_input_pin_e[LOGIC_ANALYZER_CHANNEL_COUNT iterate] logicAnalyzerPins; uint8_t[LOGIC_ANALYZER_CHANNEL_COUNT] logicAnalyzerMode;default or inverted input diff --git a/firmware/tunerstudio/rusefi.ini b/firmware/tunerstudio/rusefi.ini index 2b7fe599e7..8d470fde52 100644 --- a/firmware/tunerstudio/rusefi.ini +++ b/firmware/tunerstudio/rusefi.ini @@ -41,7 +41,7 @@ enable2ndByteCanID = false ; see PAGE_0_SIZE in C source code ; CONFIG_DEFINITION_START -; this section was generated by ConfigDefinition.jar on Sun Mar 29 17:07:27 EDT 2015 +; this section was generated by ConfigDefinition.jar on Sun Mar 29 20:08:13 EDT 2015 page = 1 engineType = bits, S32, 0, [0:2], "AUDI_AAN", "DODGE_NEON_1995", "FORD_ASPIRE_1996", "FORD_FIESTA", "NISSAN_PRIMERA", "HONDA_ACCORD", "FORD_INLINE_6_1995", "GY6_139QMB" @@ -253,6 +253,7 @@ page = 1 isHip9011Enabled = bits, U32, 1244, [6:6], "false", "true" isVerboseAlternator = bits, U32, 1244, [7:7], "false", "true" useSerialPort = bits, U32, 1244, [8:8], "false", "true" + useStepperIdle = bits, U32, 1244, [9:9], "false", "true" logicAnalyzerPins1 = bits, U32, 1248, [0:6], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" logicAnalyzerPins2 = bits, U32, 1252, [0:6], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID" logicAnalyzerPins3 = bits, U32, 1256, [0:6], "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOA_5", "INVALID", "INVALID", "GPIOA_8", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOC_6", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "GPIOE_5", "INVALID", "GPIOE_7", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "NONE", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID", "INVALID"