Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    BMI270 about interrupt

    BMI270 about interrupt

    jimit007
    New Poster

    Hi, jimit here, I built my own BMI270 API for Arduino boards, and I have a question regarding the BMI270 interrupt function, I want to generate an interrupt Acceleration sensor data. but to us, a surprise interrupt generates without attaching an interrupt pin attach, and I don't know how? can you guide me? here is my code.

     

    IMU imu = IMU(Wire);
    BMI imu1 = BMI();
     
     
    void setup()
    {
      Serial.begin(57600);
      Wire.begin();
      Wire.setClock(400000UL);
      delay(100);

      // imu.start();
      // imu.setConfig();

      // pinMode(9, INPUT);
      // attachInterrupt(9, drdy, RISING);

      imu1.start();
      imu1.setInterruptPin();
      imu1.setConfig();
    }
     
    void loop()
    {
      // uint8_t buf[12] = {0};
      int16_t ax = 0, ay = 0, az = 0;
      // int16_t x1 = 0, y1 = 0, z1 = 0;
      float x, y, z;

      // imu.readAccSensor();
      // x = imu.getAccl_X();
      // y = imu.getAccl_Y();
      // z = imu.getAccl_Z();
      imu1.getINTstatus(&int_status);
      int ret = ((int_status | _int_status) & BMI2_ACC_DRDY_INT_MASK);
      _int_status = int_status;
      _int_status &= ~BMI2_ACC_DRDY_INT_MASK;

      // Serial.println(int_status);

      if (ret)
      {
        imu1.getAccData();

        ax = imu1.get_accX();
        ay = imu1.get_accY();
        az = imu1.get_accZ();

        Serial.print(ax);
        Serial.print(",");
        Serial.print(ay);
        Serial.print(",");
        Serial.println(az);
      }

      Serial.println("new data");
      // imu1.read(0x68, 0x0c, buf, 12);
      // ax = buf[0] | (buf[1] << 8);
      // ay = buf[2] | (buf[3] << 8);
      // az = buf[4] | (buf[5] << 8);
      // x1 = (int16_t)ax;
      // y1 = (int16_t)ay;
      // z1 = (int16_t)az;

      // Wire.beginTransmission(0x68);
      // Wire.write(0x1B);
      // Wire.endTransmission();

      // Wire.requestFrom(0x68, 1);

      uint8_t data = 10;
      data = imu1.check_event_id();

      // while (Wire.available())
      // {
      //   data = Wire.read();
      //   /* code */
      //   // Serial.println(BMI3_GET_BITS(Wire.read(), BMI2_EVENT_FLAG));
      // }

      // Serial.println(BMI3_GET_BITS(data, BMI2_EVENT_FLAG));

      /* Set accelerometer range */
      // reg_data = BMI2_SET_BIT_POS0(data_array[1], BMI2_ACC_RANGE, config->range);

      // Serial.print(",");
      // Serial.print((int16_t)ax);
      // Serial.print(",");

      // imu1.read(0x68, 0x53, buf, 3);
      // Serial.print(buf[0], BIN);
      // Serial.print(",");
      // Serial.print(buf[1], BIN);
      // Serial.print(",");
      // Serial.println();

      delay(5); // Wait for 100ms before reading again
    }
    void BMI::setInterruptPin()
    {
        write(BMI270_ADDRESS, 0x53, B1010);
        delay(2);
        write(BMI270_ADDRESS, 0x55, 0x00);
        delay(2);

        write(BMI270_ADDRESS, 0x58, 0x04);
        delay(2);
    }
     
    void BMI::getINTstatus(uint16_t *int_status)
    {
        uint8_t data_array[2] = {0};
        read(BMI270_ADDRESS, 0x1C, data_array, 2);
        *int_status = (uint16_t)data_array[0] | ((uint16_t)data_array[1] << 8);
    }
     
    uint8_t BMI::write(uint16_t address, uint16_t subAddress, uint16_t data)
    {
        Wire.beginTransmission(address);
        Wire.write(subAddress);
        Wire.write(data);
        return Wire.endTransmission();
    }
     
    void BMI::read(uint8_t addr, uint8_t reg, uint8_t *buf, uint8_t len)
    {
        // uint8_t addr = 0;

        Wire.beginTransmission(addr);
        Wire.write(reg);
        Wire.endTransmission();

        Wire.requestFrom(addr, len);
        while (Wire.available())
        {
            for (uint16_t i = 0; i < len; i++)
            {
                buf[i] = Wire.read();
            }
        }
    }
    1 REPLY 1

    BSTRobin
    Community Moderator
    Community Moderator

    Hi jimit007,

    The official BMI270 API is written in C language. You can refer to the code on github: https://github.com/boschsensortec/BMI270-Sensor-API/blob/master/bmi270_examples/accel/accel.c

    For the interrupt part of acceleration data ready, you can refer to the following code:

    int8_t Open_BMI270_RDRY_INT(struct bmi2_dev *dev)
    {
    int8_t rslt = BMI2_OK;
    struct bmi2_int_pin_config int_cfg;

    /* Map data ready interrupt to interrupt pin. */
    rslt = bmi2_map_data_int(BMI2_DRDY_INT, BMI2_INT1, dev);
    bmi2_error_codes_print_result(rslt);

    bmi2_get_int_pin_config(&int_cfg, dev);

    int_cfg.pin_type = BMI2_INT1;
    int_cfg.pin_cfg[0].lvl = BMI2_INT_ACTIVE_HIGH;/*Config INT1 rising edge trigging*/
    int_cfg.pin_cfg[0].od = BMI2_INT_PUSH_PULL;
    int_cfg.pin_cfg[0].output_en= BMI2_INT_OUTPUT_ENABLE;

    bmi2_set_int_pin_config(&int_cfg, dev);
    bmi2_error_codes_print_result(rslt);

    return rslt;
    }

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist