По прерыванию от gpio нужно разбудить задачу.
Код:
на gpio25 выдаются импульсы от прерывания до просыпания задачи. Получаю 13мкс от обработки прерывания до просыпания задачи.
Не слишком ли это медленно для процессора на 160MHz при том что запущена только только одна задача (wifi отключен) ?
До этого пробовал Event Groups задержка была порядка 60мкс.
Код:
Код:
#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);
}
Не слишком ли это медленно для процессора на 160MHz при том что запущена только только одна задача (wifi отключен) ?
До этого пробовал Event Groups задержка была порядка 60мкс.