From 3ac7cb6b29b1874b22ebefd1bf9d1a73e5d7cc1f Mon Sep 17 00:00:00 2001 From: lucascukla Date: Tue, 7 Nov 2023 11:45:38 -0300 Subject: [PATCH] test 1 --- .vscode/settings.json | 3 +- main/main.c | 110 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 110 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 12770bf..b5c656b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -13,5 +13,6 @@ ], "idf.portWin": "COM3", "idf.pythonBinPathWin": "C:\\Users\\lucas\\.espressif\\python_env\\idf5.0_py3.8_env\\Scripts\\python.exe", - "idf.toolsPathWin": "C:\\Users\\lucas\\.espressif" + "idf.toolsPathWin": "C:\\Users\\lucas\\.espressif", + "idf.flashType": "UART" } diff --git a/main/main.c b/main/main.c index 7b66f33..aa2f679 100644 --- a/main/main.c +++ b/main/main.c @@ -1,6 +1,112 @@ #include -void app_main(void) -{ +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/semphr.h" +#include "driver/gpio.h" + +#include "driver/spi_master.h" +#include + +// definicion de pines +// Definir los pines utilizados para MOSI, MISO, SCLK y CS +#define PIN_NUM_MOSI 13 +#define PIN_NUM_MISO 12 +#define PIN_NUM_CLK 14 +#define PIN_NUM_CS 15 +#define IRQ_PIN 26 + +// parámetros ADC +#define LEN_MAP_bytes 24 // cantidad de bitts en la memoria desde 0x1 a 0xD, adicionando 8 bits para el comando + +#define FAST_COMMAND 0b00 +#define STATIC_READ 0b01 +#define INCREMENTAL_WRITE 0b10 +#define INCREMENTAL_READ 0b11 + +uint8_t register_map[LEN_MAP_bytes] = {0}; +#define ADCDATA_index 0 +#define CONFIG0_index 1 +#define CONFIG1_index 2 +#define CONFIG2_index 3 +#define CONFIG3_index 4 +#define IRQ_index 5 +#define MUX_index 6 +#define SCAN_index 7 +#define TIMER_index 10 +#define OFFSETCAL_index 13 +#define GAINCAL_index 16 +#define LOCK_index 23 + +#define ADC_CONV_START_FC 0b1010 +#define ADC_STBY_MODE_FC 0b1011 +#define ADC_SHDN_MODE_FC 0b1100 +#define FULL_SHDN_MODE_FC 0b1101 +#define FULL_RESET_FC 0b1110 + +#define COMMAND_READ_ADC 0b01000001 + +// variables SPI +spi_device_handle_t *spi_handle; +spi_bus_config_t *bus_cfg_SPI; +spi_device_interface_config_t *mcp3561_cfg_SPI; + +// Declaración de la cola de semáforo +SemaphoreHandle_t xSemaphore; + +void IRAM_ATTR isr_IRQ_handler(void *arg) { + BaseType_t xHigherPriorityTaskWoken = pdFALSE; + xSemaphoreGiveFromISR(xSemaphore, &xHigherPriorityTaskWoken); + // if (xHigherPriorityTaskWoken == pdTRUE) { + // portYIELD_FROM_ISR(); + // } +} + +// Tarea de base (bare-metal) +void base_task(void *pvParameters) { + while (1) { + // Espera al semáforo + if (xSemaphoreTake(xSemaphore, portMAX_DELAY) == pdTRUE) { + // La tarea responde al semáforo aquí + // Realiza el trabajo necesario + printf("- "); + } + } +} + +void app_main() { + // Inicializa el semáforo + xSemaphore = xSemaphoreCreateBinary(); + + // configuración PIN + gpio_config_t irq_config; + irq_config.intr_type = GPIO_INTR_POSEDGE; + irq_config.mode = GPIO_MODE_INPUT; + irq_config.pin_bit_mask = (1ULL << IRQ_PIN); + irq_config.pull_down_en = GPIO_PULLDOWN_DISABLE; + irq_config.pull_up_en = GPIO_PULLDOWN_ENABLE; + gpio_config(&irq_config); + + gpio_install_isr_service(0); // Instala el servicio de interrupción en el núcleo 0 + gpio_isr_handler_add(IRQ_PIN, isr_IRQ_handler, NULL); // Asocia la función de interrupción al pin + + // Configura la rutina de interrupción para activar el semáforo + // ... + + // Crea la tarea de base + // xTaskCreate(base_task, "base_task", 2048, NULL, 15, NULL); + // xTaskCreatePinnedToCore(base_task, "base_task", 2048, NULL, 15, NULL, 0); + + // Inicia el sistema operativo en tiempo real + // vTaskStartScheduler(); + + while(1){ + // Espera al semáforo + if (xSemaphoreTake(xSemaphore, portMAX_DELAY) == pdTRUE) { + // La tarea responde al semáforo aquí + // Realiza el trabajo necesario + printf("- "); + } + } }