ESP32没有响应来自传感器的中断 - 运行示例代码

时间:2018-06-15 18:26:41

标签: c++ embedded sensor electronics

我目前正在使用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。除非它不这样做。

我注意到的一些事情:

  1. 如果我注释掉有问题的行,则会正确读取数据 从缓冲区 - 然而,这并不理想 - 我最终使用 一个案例是将一段时间内的所有样本收集到一个 文件,不只是从缓冲区中读取最新值 当你没有足够快速地阅读或者你也阅读时会溢出 很快就会没有任何用处。
  2. 我在中断引脚上使用了示波器,我得到了一个方波,我认为这表明传感器上的中断设置正确了吗?
  3. 无论如何,我想知道是否有人能够弄清楚到底出了什么问题,或者至少指出了我想要寻找的方向。您可能需要查看我在github上列出的完整示例。

0 个答案:

没有答案