Feat: add ADC callback on conversion done

Refs: #4
adc-init
rkcf 2023-02-21 05:57:42 -06:00
parent 1d2d1ce6bc
commit 2abdd7be0c
1 changed files with 21 additions and 0 deletions

View File

@ -1,10 +1,14 @@
#include <stdio.h> #include <stdio.h>
#include "esp_attr.h"
#include "esp_err.h" #include "esp_err.h"
#include "esp_log.h" #include "esp_log.h"
#include "esp_adc/adc_cali.h" #include "esp_adc/adc_cali.h"
#include "esp_adc/adc_cali_scheme.h" #include "esp_adc/adc_cali_scheme.h"
#include "esp_adc/adc_continuous.h" #include "esp_adc/adc_continuous.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/portmacro.h"
#include "hal/adc_types.h" #include "hal/adc_types.h"
/* ADC input pins */ /* ADC input pins */
@ -19,10 +23,20 @@ static adc_channel_t channel[4] = {ADC_CHANNEL_3, ADC_CHANNEL_5, ADC_CHANNEL_8,
/* ADC handles */ /* ADC handles */
static adc_continuous_handle_t adc_handle; static adc_continuous_handle_t adc_handle;
static adc_cali_handle_t adc_cali_handle; static adc_cali_handle_t adc_cali_handle;
static TaskHandle_t adc_task_handle;
static const char *TAG = "EERG"; static const char *TAG = "EERG";
/* ADC conversion finished callback */
static bool IRAM_ATTR adc_conv_cb(adc_continuous_handle_t handle, const adc_continuous_evt_data_t *edata, void *user_data)
{
BaseType_t mustYield = pdFALSE;
/* Send notification to handler task */
vTaskNotifyGiveFromISR(adc_task_handle, &mustYield);
return (mustYield == pdTRUE);
}
/* Deinitializes ADC handles */ /* Deinitializes ADC handles */
static void adc_cleanup(void) static void adc_cleanup(void)
{ {
@ -75,6 +89,12 @@ static void adc_cont_init(void)
} }
adc_config.adc_pattern = adc_pattern; adc_config.adc_pattern = adc_pattern;
ESP_ERROR_CHECK(adc_continuous_config(adc_handle, & adc_config)); ESP_ERROR_CHECK(adc_continuous_config(adc_handle, & adc_config));
/* Configure callbacks */
adc_continuous_evt_cbs_t cbs = {
.on_conv_done = adc_conv_cb
};
ESP_ERROR_CHECK(adc_continuous_register_event_callbacks(adc_handle, &cbs, NULL));
} }
void app_main(void) void app_main(void)
@ -85,6 +105,7 @@ void app_main(void)
/* Initialize continuous driver */ /* Initialize continuous driver */
adc_cont_init(); adc_cont_init();
/* Start the continuous driver */ /* Start the continuous driver */
adc_task_handle = xTaskGetCurrentTaskHandle();
ESP_ERROR_CHECK(adc_continuous_start(adc_handle)); ESP_ERROR_CHECK(adc_continuous_start(adc_handle));
/* Cleanup ADC */ /* Cleanup ADC */