This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Wake on motion in nrf52

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 ?

Parents Reply Children
No Data
Related