• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос Быстродействие RTOS Task Notifications

sharikov

Active member
По прерыванию от gpio нужно разбудить задачу.
Код:
Код:
#define SPI0INT_PIN 27
static TaskHandle_t xTaskToNotify  = NULL;
static void IRAM_ATTR gpio_isr_handler(void* arg)
{
    BaseType_t xHigherPriorityTaskWoken = pdFALSE;

    //gpio_set_level(25, 1);
    GPIO.out_w1ts = (1 << 25);
    vTaskNotifyGiveFromISR( xTaskToNotify, &xHigherPriorityTaskWoken );
    portYIELD_FROM_ISR();
}

int32_t cs1237_read_adc(void)
{
    ...
    xTaskToNotify = xTaskGetCurrentTaskHandle();
    ...  
   gpio_install_isr_service(0);
   gpio_isr_handler_add(SPI0INT_PIN, gpio_isr_handler, (void*)SPI0INT_PIN);
    ...   
    do {
        GPIO.out_w1tc = (1 << 25);
        ret=spi_device_transmit(spi, &t);  //Transmit!
        assert(ret==ESP_OK);            //Should have had no issues.

        adc_val=(int8_t)t.rx_data[0];
        adc_val<<=8;
        adc_val|=t.rx_data[1];
        adc_val<<=8;
        adc_val|=t.rx_data[2];
        adc_val+=0x800000;    // unipolar mode (AINN = 1/2Vref)
        // 16 bit
        adc_val = (adc_val <0)? adc_val-128 : adc_val+128;
        adc_val/=256;
        printf("%d\n", adc_val);

        ulTaskNotifyTake( pdTRUE, 100 );
    }
    while(1);
}
на gpio25 выдаются импульсы от прерывания до просыпания задачи. Получаю 13мкс от обработки прерывания до просыпания задачи.
Не слишком ли это медленно для процессора на 160MHz при том что запущена только только одна задача (wifi отключен) ?

До этого пробовал Event Groups задержка была порядка 60мкс.
 
Сверху Снизу