Hellen says merge #1772 hardware.cpp
This commit is contained in:
parent
0e370f87aa
commit
c98e78640a
|
@ -69,6 +69,8 @@
|
||||||
|
|
||||||
EXTERN_ENGINE;
|
EXTERN_ENGINE;
|
||||||
|
|
||||||
|
extern bool hasFirmwareErrorFlag;
|
||||||
|
|
||||||
static mutex_t spiMtx;
|
static mutex_t spiMtx;
|
||||||
|
|
||||||
#if HAL_USE_SPI
|
#if HAL_USE_SPI
|
||||||
|
@ -172,10 +174,56 @@ static Logging *sharedLogger;
|
||||||
static int fastMapSampleIndex;
|
static int fastMapSampleIndex;
|
||||||
static int hipSampleIndex;
|
static int hipSampleIndex;
|
||||||
static int tpsSampleIndex;
|
static int tpsSampleIndex;
|
||||||
|
static int triggerSampleIndex;
|
||||||
|
|
||||||
#if HAL_USE_ADC
|
#if HAL_USE_ADC
|
||||||
extern AdcDevice fastAdc;
|
extern AdcDevice fastAdc;
|
||||||
|
|
||||||
|
#if EFI_FASTER_UNIFORM_ADC
|
||||||
|
static int adcCallbackCounter = 0;
|
||||||
|
static volatile int averagedSamples[ADC_MAX_CHANNELS_COUNT];
|
||||||
|
static adcsample_t avgBuf[ADC_MAX_CHANNELS_COUNT];
|
||||||
|
|
||||||
|
void adc_callback_fast_internal(ADCDriver *adcp, adcsample_t *buffer, size_t n);
|
||||||
|
|
||||||
|
void adc_callback_fast(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
|
||||||
|
if (adcp->state == ADC_COMPLETE) {
|
||||||
|
fastAdc.invalidateSamplesCache();
|
||||||
|
|
||||||
|
#if HAL_TRIGGER_USE_ADC
|
||||||
|
// we need to call this ASAP, because trigger processing is time-critical
|
||||||
|
if (triggerSampleIndex >= 0)
|
||||||
|
triggerAdcCallback(buffer[triggerSampleIndex]);
|
||||||
|
#endif /* HAL_TRIGGER_USE_ADC */
|
||||||
|
|
||||||
|
// store the values for averaging
|
||||||
|
for (int i = fastAdc.size() - 1; i >= 0; i--) {
|
||||||
|
averagedSamples[i] += fastAdc.samples[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
// if it's time to process the data
|
||||||
|
if (++adcCallbackCounter >= ADC_BUF_NUM_AVG) {
|
||||||
|
// get an average
|
||||||
|
for (int i = fastAdc.size() - 1; i >= 0; i--) {
|
||||||
|
avgBuf[i] = (adcsample_t)(averagedSamples[i] / ADC_BUF_NUM_AVG); // todo: rounding?
|
||||||
|
}
|
||||||
|
|
||||||
|
// call the real callback (see below)
|
||||||
|
adc_callback_fast_internal(adcp, avgBuf, fastAdc.size());
|
||||||
|
|
||||||
|
// reset the avg buffer & counter
|
||||||
|
for (int i = fastAdc.size() - 1; i >= 0; i--) {
|
||||||
|
averagedSamples[i] = 0;
|
||||||
|
}
|
||||||
|
adcCallbackCounter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#define adc_callback_fast adc_callback_fast_internal
|
||||||
|
|
||||||
|
#endif /* EFI_FASTER_UNIFORM_ADC */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is not in the adc* lower-level file because it is more business logic then hardware.
|
* This method is not in the adc* lower-level file because it is more business logic then hardware.
|
||||||
*/
|
*/
|
||||||
|
@ -207,15 +255,15 @@ void adc_callback_fast(ADCDriver *adcp, adcsample_t *buffer, size_t n) {
|
||||||
#endif /* EFI_SENSOR_CHART */
|
#endif /* EFI_SENSOR_CHART */
|
||||||
|
|
||||||
#if EFI_MAP_AVERAGING
|
#if EFI_MAP_AVERAGING
|
||||||
mapAveragingAdcCallback(fastAdc.samples[fastMapSampleIndex]);
|
mapAveragingAdcCallback(buffer[fastMapSampleIndex]);
|
||||||
#endif /* EFI_MAP_AVERAGING */
|
#endif /* EFI_MAP_AVERAGING */
|
||||||
#if EFI_HIP_9011
|
#if EFI_HIP_9011
|
||||||
if (CONFIG(isHip9011Enabled)) {
|
if (CONFIG(isHip9011Enabled)) {
|
||||||
hipAdcCallback(fastAdc.samples[hipSampleIndex]);
|
hipAdcCallback(buffer[hipSampleIndex]);
|
||||||
}
|
}
|
||||||
#endif /* EFI_HIP_9011 */
|
#endif /* EFI_HIP_9011 */
|
||||||
// if (tpsSampleIndex != TPS_IS_SLOW) {
|
// if (tpsSampleIndex != TPS_IS_SLOW) {
|
||||||
// tpsFastAdc = fastAdc.samples[tpsSampleIndex];
|
// tpsFastAdc = buffer[tpsSampleIndex];
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -232,6 +280,11 @@ static void calcFastAdcIndexes(void) {
|
||||||
} else {
|
} else {
|
||||||
tpsSampleIndex = TPS_IS_SLOW;
|
tpsSampleIndex = TPS_IS_SLOW;
|
||||||
}
|
}
|
||||||
|
#if HAL_TRIGGER_USE_ADC
|
||||||
|
adc_channel_e triggerChannel = getAdcChannelForTrigger();
|
||||||
|
triggerSampleIndex = (triggerChannel == EFI_ADC_NONE) ?
|
||||||
|
-1 : fastAdc.internalAdcIndexByHardwareIndex[triggerChannel];
|
||||||
|
#endif /* HAL_TRIGGER_USE_ADC */
|
||||||
|
|
||||||
#endif/* HAL_USE_ADC */
|
#endif/* HAL_USE_ADC */
|
||||||
}
|
}
|
||||||
|
@ -243,6 +296,13 @@ static void adcConfigListener(Engine *engine) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void turnOnHardware(Logging *sharedLogger) {
|
void turnOnHardware(Logging *sharedLogger) {
|
||||||
|
#if EFI_FASTER_UNIFORM_ADC
|
||||||
|
for (int i = 0; i < ADC_MAX_CHANNELS_COUNT; i++) {
|
||||||
|
averagedSamples[i] = 0;
|
||||||
|
}
|
||||||
|
adcCallbackCounter = 0;
|
||||||
|
#endif /* EFI_FASTER_UNIFORM_ADC */
|
||||||
|
|
||||||
#if EFI_SHAFT_POSITION_INPUT
|
#if EFI_SHAFT_POSITION_INPUT
|
||||||
turnOnTriggerInputPins(sharedLogger);
|
turnOnTriggerInputPins(sharedLogger);
|
||||||
#endif /* EFI_SHAFT_POSITION_INPUT */
|
#endif /* EFI_SHAFT_POSITION_INPUT */
|
||||||
|
@ -300,7 +360,7 @@ void applyNewHardwareSettings(void) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (BOARD_TLE6240_COUNT > 0)
|
#if (BOARD_TLE6240_COUNT > 0) || (BOARD_DRV8860_COUNT > 0)
|
||||||
stopSmartCsPins();
|
stopSmartCsPins();
|
||||||
#endif /* (BOARD_MC33972_COUNT > 0) */
|
#endif /* (BOARD_MC33972_COUNT > 0) */
|
||||||
|
|
||||||
|
@ -479,6 +539,7 @@ void initHardware(Logging *l) {
|
||||||
|
|
||||||
#if HAL_USE_ADC
|
#if HAL_USE_ADC
|
||||||
initAdcInputs();
|
initAdcInputs();
|
||||||
|
|
||||||
// wait for first set of ADC values so that we do not produce invalid sensor data
|
// wait for first set of ADC values so that we do not produce invalid sensor data
|
||||||
waitForSlowAdc(1);
|
waitForSlowAdc(1);
|
||||||
#endif /* HAL_USE_ADC */
|
#endif /* HAL_USE_ADC */
|
||||||
|
|
Loading…
Reference in New Issue