Hello,
I am trying to implement wake on motion functionality of MPU9250 with nRF52. I am writing below sequence code for wake on motion configuration:
void MPU6500_StartMotionDetection(void) { uint8_t val; uint32_t err_code;
// Make sure accelerometer is running
val = 0x09;
i2c_write_registers(I2C_MPU9250_ADDR, MPU_REG_PWR_MGMT_1, 0x09);
// Enable accelerometer, disable gyro
val = 0x07;
i2c_write_registers(I2C_MPU9250_ADDR, MPU_REG_PWR_MGMT_2, 0x07);
// Set Accel LPF setting to 184 Hz Bandwidth
val = 0x01;
i2c_write_registers(I2C_MPU9250_ADDR, MPU_REG_ACCEL_CONFIG_2, 0x01);
// Enable Motion Interrupt
val = 0x40;
i2c_write_registers(I2C_MPU9250_ADDR, MPU_REG_INT_ENABLE, 0x40);
// Enable Accel Hardware Intelligence
val = 0xC0;
i2c_write_registers(I2C_MPU9250_ADDR, MPU_REG_MOT_DETECT_CTRL, 0xC0);
// Set Motion Threshold
i2c_write_registers(I2C_MPU9250_ADDR, MPU_REG_WOM_THR, 0x06);
// Set Frequency of Wake-up
i2c_write_registers(I2C_MPU9250_ADDR, MPU_REG_LP_ACCEL_ODR, 6);
// Enable Cycle Mode (Accel Low Power Mode)
val = 0x29;
i2c_write_registers(I2C_MPU9250_ADDR, MPU_REG_PWR_MGMT_1, 0x29);
// Clear interrupt
i2c_write_registers(I2C_MPU9250_ADDR, MPU_REG_INT_STATUS, 0x29);
printf("%s: MPU6500_StartMotionDetection\r\n", print_timestamp());
}
and I am calling it inside mpu initialization after mpu_int_cfg_pin() function. Before that I am setting gpio config as shown below:
static void gpio_init(void) { ret_code_t err_code;
err_code = nrf_drv_gpiote_init();
printf("%s: nrf_drv_gpiote_init_err_code: %lu\r\n", print_timestamp(), err_code);
APP_ERROR_CHECK(err_code);
nrf_drv_gpiote_in_config_t in_config = GPIOTE_CONFIG_IN_SENSE_LOTOHI(true);
err_code = nrf_drv_gpiote_in_init(MPU9250_INT_PIN, &in_config, int_pin_handler);
printf("%s: nrf_drv_gpiote_in_init_err_code: %lu\r\n", print_timestamp(), err_code);
APP_ERROR_CHECK(err_code);
nrf_drv_gpiote_in_event_enable(MPU9250_INT_PIN, true);
}
But I am getting error in it.
Is it the proper way for configuring ?