Tasks, ISR, Pin refactoring and renaming
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user