Tasks, ISR, Pin refactoring and renaming

This commit is contained in:
Emanuele Trabattoni
2026-03-30 15:50:17 +02:00
parent e0af350b89
commit 1adbf7fdb9
6 changed files with 247 additions and 220 deletions

View File

@@ -66,6 +66,7 @@ struct coilsStatus
float peak_p_in, peak_n_in;
float peak_p_out, peak_n_out;
float trigger_spark;
bool spark_ok;
};
// Task internal Status
@@ -77,40 +78,13 @@ struct ignitionBoxStatus
coilsStatus coils34;
// voltage from generator
float volts_gen = 0.0;
// spark flags
bool spark12 = false;
bool spark34 = false;
};
ignitionBoxStatus ignA_status;
ignitionBoxStatus ignB_status;
// Pin to flag Map
static uint32_t pin2trig[49] = {0};
void initTriggerPinMapping()
{
pin2trig[TRIG_A12P] = TRIG_FLAG_12P;
pin2trig[TRIG_A12N] = TRIG_FLAG_12N;
pin2trig[TRIG_A34P] = TRIG_FLAG_34P;
pin2trig[TRIG_A34N] = TRIG_FLAG_34N;
#ifndef TEST
pin2trig[TRIG_B12P] = TRIG_FLAG_12P;
pin2trig[TRIG_B12N] = TRIG_FLAG_12N;
pin2trig[TRIG_B34P] = TRIG_FLAG_34P;
pin2trig[TRIG_B34N] = TRIG_FLAG_34N;
#endif
struct isrParams {
const uint32_t flag;
ignitionBoxStatus* ign_stat;
};
static uint32_t pin2spark[49] = {0};
void initSparkPinMapping()
{
pin2spark[SPARK_A12] = SPARK_FLAG_12;
pin2spark[SPARK_A34] = SPARK_FLAG_34;
#ifndef TEST
pin2spark[SPARK_B12] = SPARK_FLAG_12;
pin2spark[SPARK_B34] = SPARK_FLAG_34;
#endif
};
// =====================
// ISR (Pass return bitmask to ISR management function)
@@ -118,37 +92,38 @@ void initSparkPinMapping()
// =====================
void IRAM_ATTR trig_isr_a(void *arg)
{
volatile const int64_t time_us = esp_timer_get_time();
const int64_t time_us = esp_timer_get_time();
// exit if task is not running
if (!trigA_TaskHandle)
if (!trigA_TaskHandle || !arg)
return;
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
volatile const uint32_t flag = (uint32_t)arg;
isrParams *params = (isrParams*)arg;
ignitionBoxStatus *box = box;
// reset spark flags, cannot be same time as trigger flags
ignA_status.spark12 = false;
ignA_status.spark34 = false;
box->coils12.spark_ok = false;
box->coils34.spark_ok = false;
switch (flag)
switch (params->flag)
{
case TRIG_FLAG_12P:
ignA_status.coils12.trig_time = time_us;
xTaskNotifyFromISR(trigA_TaskHandle, flag, eSetValueWithOverwrite, &xHigherPriorityTaskWoken);
box->coils12.trig_time = time_us;
xTaskNotifyFromISR(trigA_TaskHandle, params->flag, eSetValueWithOverwrite, &xHigherPriorityTaskWoken);
break;
case TRIG_FLAG_34P:
ignA_status.coils34.trig_time = time_us;
xTaskNotifyFromISR(trigA_TaskHandle, flag, eSetValueWithOverwrite, &xHigherPriorityTaskWoken);
box->coils34.trig_time = time_us;
xTaskNotifyFromISR(trigA_TaskHandle, params->flag, eSetValueWithOverwrite, &xHigherPriorityTaskWoken);
break;
case SPARK_FLAG_12:
ignA_status.spark12 = true;
ignA_status.coils12.spark_time = time_us;
box->coils12.spark_ok = true;
box->coils12.spark_time = time_us;
vTaskNotifyGiveFromISR(trigA_TaskHandle, &xHigherPriorityTaskWoken);
break;
case SPARK_FLAG_34:
ignA_status.spark34 = true;
ignA_status.coils34.spark_time = time_us;
box->coils34.spark_ok = true;
box->coils34.spark_time = time_us;
vTaskNotifyGiveFromISR(trigA_TaskHandle, &xHigherPriorityTaskWoken);
break;
default: