我目前正在使用ESP32 devkit和MPU-9250传感器。
我正在使用library from github for both,目前正在运行the example mpu_real
当缓冲区中有数据时,该示例应该从MPU-9250中的FIFO缓冲区读取数据,但是我没有从命令lin获取任何读数。使用日志,我确定代码在任务mpuTask()
的阅读循环中陷入困境:
uint32_t notificationValue = ulTaskNotifyTake(pdTRUE, portMAX_DELAY);
我确定它正在等待来自函数mpuISR()
的通知;我在mpuISR()
中登录了一个日志,并注意到从未调用。
回顾mpuTask()
,这应该是mpuISR()
运行的:
constexpr gpio_config_t kGPIOConfig{
.pin_bit_mask = (uint64_t) 0x1 << kInterruptPin,
.mode = GPIO_MODE_INPUT,
.pull_up_en = GPIO_PULLUP_DISABLE,
.pull_down_en = GPIO_PULLDOWN_ENABLE,
.intr_type = GPIO_INTR_POSEDGE //
};
gpio_config(&kGPIOConfig);
gpio_install_isr_service(ESP_INTR_FLAG_IRAM);
gpio_isr_handler_add((gpio_num_t) kInterruptPin, mpuISR,
xTaskGetCurrentTaskHandle());
ESP_ERROR_CHECK(MPU.setInterruptConfig(kInterruptConfig));
ESP_ERROR_CHECK(MPU.setInterruptEnabled(mpud::INT_EN_RAWDATA_READY));
所以基本上它配置一个引脚(在本例中为GPIO 17)来接收interrupt
,并在收到mpuISR()
时创建一个运行interrupt
的处理程序,然后配置MPU9250当数据在寄存器中时发送interrupt
。除非它不这样做。
我注意到的一些事情:
无论如何,我想知道是否有人能够弄清楚到底出了什么问题,或者至少指出了我想要寻找的方向。您可能需要查看我在github上列出的完整示例。