esp32外挂ADC,数据收集问题
Posted: Sun May 30, 2021 3:32 am
我当前有这样一个项目:硬件上,一个24位ADC,是I2C接口+一个INT接ESP32;软件上,当这个ADC每次采样完成并准备好数据后,会通过INT脚发上升沿中断信号给ESP32;在ESP32里,基于ESP-IDF我是这样处理的:
定义I2C总线驱动;调用xQueueCreate(10, sizeof(uint32_t))创建gpio_evt_queue;定义gpio中断GPIO_PIN_INTR_POSEDGE类型,同时打开中断(中断发生时发送一个gpio_evt_queue);创建Task等待gpio_evt_queue,当接收到一个gpio_evt_queue时,通过I2C读ADC的采样数据;
目前我遇到的问题是:当ADC采样率设置低时,比如80HZ,程序能正常运行;但当设置到更高采样率,比如160HZ时,gpio_evt_queue会爆满而程序跑飞。试着把gpio_evt_queue尺寸调大,这只能延缓queue爆满的过程;试着在Task里,仅读ADC数据并保存到Buffer,仍然会queue爆满;
综上所述,感觉是task loop跟不上gpio中断,请问这样的问题如何优化好?
定义I2C总线驱动;调用xQueueCreate(10, sizeof(uint32_t))创建gpio_evt_queue;定义gpio中断GPIO_PIN_INTR_POSEDGE类型,同时打开中断(中断发生时发送一个gpio_evt_queue);创建Task等待gpio_evt_queue,当接收到一个gpio_evt_queue时,通过I2C读ADC的采样数据;
目前我遇到的问题是:当ADC采样率设置低时,比如80HZ,程序能正常运行;但当设置到更高采样率,比如160HZ时,gpio_evt_queue会爆满而程序跑飞。试着把gpio_evt_queue尺寸调大,这只能延缓queue爆满的过程;试着在Task里,仅读ADC数据并保存到Buffer,仍然会queue爆满;
综上所述,感觉是task loop跟不上gpio中断,请问这样的问题如何优化好?