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

@@ -11,13 +11,11 @@
#include <channels.h>
#include <devices.h>
void printTaskList() {
void printTaskList()
{
char buffer[1024];
Serial.println("Task Name\tState\tPrio\tStack\tNum");
vTaskList(buffer);
Serial.println(buffer);
}
@@ -32,7 +30,8 @@ void setup()
// Print Processor Info
LOG_INFO("ESP32 Chip:", ESP.getChipModel());
if (psramFound()){
if (psramFound())
{
LOG_INFO("ESP32 PSram Found");
LOG_INFO("ESP32 PSram:", ESP.getPsramSize());
psramInit();
@@ -43,51 +42,96 @@ void setup()
// Initialize Interrupt pins on PICKUP detectors
initTriggerPinsInputs();
initTriggerPinMapping();
// Initialize Interrupt pins on SPARK detectors
initSparkPinInputs();
initSparkPinMapping();
}
void loop()
{
// global variables
bool running = true;
rtTaskParams taskA_params, taskB_params;
Devices dev;
QueueHandle_t rt_taskA_queue = xQueueCreate(10, sizeof(ignitionBoxStatus));
rtTaskParams taskA_params {
.rt_running = true,
.dev = &dev,
.rt_queue = rt_taskA_queue,
.rt_int = rtTaskInterrupts{
.isr_ptr = trig_isr_a,
.trig_pin_12p = TRIG_PIN_A12P,
.trig_pin_12n = TRIG_PIN_A12N,
.trig_pin_34p = TRIG_PIN_A34P,
.trig_pin_34n = TRIG_PIN_A34N,
.spark_pin_12 = SPARK_PIN_A12,
.spark_pin_34 = SPARK_PIN_A34},
.rt_resets = rtTaskResets{
.rst_io_12p = RST_EXT_A12P,
.rst_io_12n = RST_EXT_A12N,
.rst_io_34p = RST_EXT_A34P,
.rst_io_34n = RST_EXT_A34N}
};
#ifndef TEST
QueueHandle_t rt_taskB_queue = xQueueCreate(10, sizeof(ignitionBoxStatus));
rtTaskParams taskB_params {
.rt_running = true,
.dev = &dev,
.rt_queue = rt_taskB_queue,
.rt_int = rtTaskInterrupts{
.isr_ptr = trig_isr_a,
.trig_pin_12p = TRIG_PIN_B12P,
.trig_pin_12n = TRIG_PIN_B12N,
.trig_pin_34p = TRIG_PIN_B34P,
.trig_pin_34n = TRIG_PIN_B34N,
.spark_pin_12 = SPARK_PIN_B12,
.spark_pin_34 = SPARK_PIN_B34},
.rt_resets = rtTaskResets{
.rst_io_12p = RST_EXT_B12P,
.rst_io_12n = RST_EXT_B12N,
.rst_io_34p = RST_EXT_B34P,
.rst_io_34n = RST_EXT_B34N}
};
#endif
#ifndef TEST
// Init 2 SPI interfaces
// Init 2 SPI interfaces
bool spiA_ok = true;
SPIClass SPI_A(FSPI);
spiA_ok = SPI_A.begin(SPI_A_SCK, SPI_A_MISO, SPI_A_MOSI);
bool spiB_ok = true;
#ifndef TEST
SPIClass SPI_B(HSPI);
if (!SPI_A.begin(SPI_A_SCK, SPI_A_MISO, SPI_A_MOSI) || !SPI_B.begin(SPI_A_SCK, SPI_A_MISO, SPI_A_MOSI)) {
spiB_ok = SPI_B.begin(SPI_B_SCK, SPI_B_MISO, SPI_B_MOSI);
#endif
if (!spiA_ok || !spiB_ok)
{
LOG_ERROR("Unable to Initialize SPI Busses");
LOG_ERROR("5 seconds to restart...");
vTaskDelay(pdMS_TO_TICKS(5000));
esp_restart();
}
#endif
pinMode(POT_A_CS, OUTPUT); // Temporary!
pinMode(POT_B_CS, OUTPUT); // Temporary!
LOG_INFO("Init SPI [OK]");
// Init ADC_A
// dev.adc_a = new ADS1256(ADC_A_DRDY, ADC_A_RST, ADC_A_SYNC, ADC_A_CS, 2.5, &SPI_A);
// dev.adc_a->InitializeADC();
// dev.adc_a->setPGA(PGA_1);
// dev.adc_a->setDRATE(DRATE_1000SPS);
dev.adc_a = new ADS1256(ADC_A_DRDY, ADC_A_RST, ADC_A_SYNC, ADC_A_CS, 2.5, &SPI_A);
dev.adc_a->InitializeADC();
dev.adc_a->setPGA(PGA_1);
dev.adc_a->setDRATE(DRATE_1000SPS);
#ifndef TEST
// Init ADC_B
// dev.adc_a = new ADS1256(ADC_B_DRDY, ADC_B_RST, ADC_B_SYNC, ADC_B_CS, 2.5, &SPI_B);
// dev.adc_a->InitializeADC();
// dev.adc_a->setPGA(PGA_1);
// dev.adc_a->setDRATE(DRATE_1000SPS);
dev.adc_a = new ADS1256(ADC_B_DRDY, ADC_B_RST, ADC_B_SYNC, ADC_B_CS, 2.5, &SPI_B);
dev.adc_a->InitializeADC();
dev.adc_a->setPGA(PGA_1);
dev.adc_a->setDRATE(DRATE_1000SPS);
#endif
LOG_INFO("Init ADC [OK]");
// Ignition A on Core 0
auto ignA_task_success = xTaskCreatePinnedToCore(
ignitionA_task,
"ignitionA_task",
auto ignA_task_success = pdPASS;
ignA_task_success = xTaskCreatePinnedToCore(
rtIgnitionTask,
"rtIgnitionTask_boxA",
TASK_STACK,
(void *)&taskA_params,
TASK_PRIORITY,
@@ -96,14 +140,16 @@ void loop()
// Ignition B on Core 1
auto ignB_task_success = pdPASS;
// auto ignB_task_success = xTaskCreatePinnedToCore(
// ignitionB_task,
// "ignitionB_task",
// TASK_STACK,
// (void *)&taskB_params,
// TASK_PRIORITY, // priorità leggermente più alta
// &trigA_TaskHandle,
// CORE_1);
#ifndef TEST
ignB_task_success = xTaskCreatePinnedToCore(
rtIgnitionTask,
"rtIgnitionTask_boxA",
TASK_STACK,
(void *)&taskB_params,
TASK_PRIORITY, // priorità leggermente più alta
&trigB_TaskHandle,
CORE_1);
#endif
if ((ignA_task_success && ignB_task_success) != pdPASS)
{
@@ -111,14 +157,15 @@ void loop()
LOG_ERROR("5 seconds to restart...");
vTaskDelay(pdMS_TO_TICKS(5000));
esp_restart();
}
LOG_INFO("Real Time Tasks A&B initialized");
}
LOG_INFO("Real Time Tasks A & B initialized");
////////////////////// MAIN LOOP //////////////////////
uint32_t count(0);
while (running)
{
//printTaskList();
// printTaskList();
delay(10000);
}