Hello,
I want to read the values from MPU9250 magnetometer i.e. from AK8963 I wrote a function just like accelerometer and gyroscope shown below:
uint32_t mpu_read_mag(mag_values_t * mag_values)
{
uint32_t err_code;
uint8_t raw_values[6];
err_code = mpu_read_registers1(REG_ST1, raw_values, 6);
if(err_code != NRF_SUCCESS) return err_code;
uint8_t *data;
data = (uint8_t*)mag_values;
for(uint8_t i = 0; i<6; i++)
{
*data = raw_values[5-i];
data++;
}
return NRF_SUCCESS;
}
and then wrote separate function for mpu_read_register for giving separate AK8963 address shown below:
uint32_t mpu_read_registers1(uint8_t reg, uint8_t * p_data, uint32_t length)
{
uint32_t err_code;
uint32_t timeout = MPU_TWI_TIMEOUT;
err_code = nrf_drv_twi_tx(&m_twi_instance, AK8963_ADDR, ®, 1, false);
if(err_code != NRF_SUCCESS) return err_code;
while((!twi_tx_done) && --timeout);
if(!timeout) return NRF_ERROR_TIMEOUT;
twi_tx_done = false;
err_code = nrf_drv_twi_rx(&m_twi_instance, AK8963_ADDR, p_data, length);
if(err_code != NRF_SUCCESS) return err_code;
timeout = MPU_TWI_TIMEOUT;
while((!twi_rx_done) && --timeout);
if(!timeout) return NRF_ERROR_TIMEOUT;
twi_rx_done = false;
return err_code;
}
Program gets compiled but doesn't show any output.