Program Listing for File adis1654x_register_map.cpp

Return to documentation for file (src/adis1654x_register_map.cpp)

// Copyright 2025 Analog Devices, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#include "adi_imu/adis1654x_register_map.h"

namespace adi_imu
{

Adis1654xRegisterMap::Adis1654xRegisterMap(adis_device_id device_id) : ADISRegisterMap(device_id)
{
  initialize();
}

void Adis1654xRegisterMap::initializeConstants()
{
  set(ADISRegister::HAS_DELTA_BURST, 1);
  set(ADISRegister::HAS_CALIB_SCALE, 1);

  set(ADISRegister::FLS_MEM_ENDURANCE, 100000);
  set(ADISRegister::MAX_SAMP_FREQ, 4250);
  set(ADISRegister::PAGE_ID_VAL, 0x80);

  // value to add to reg addr per page
  set(ADISRegister::PAGE_ID_VAL, 0x80);

  // global commands
  set(ADISRegister::GLOB_CMD_PAGE_ID, 0x03);
  set(ADISRegister::GLOB_CMD_ADDR_WITHOUT_PAGE, 0x02);

  set(ADISRegister::BIAS_CORRECTION_UPDATE_POS, 0);
  set(ADISRegister::SENSOR_SELF_TEST_POS, 1);
  set(ADISRegister::FLASH_MEMORY_UPDATE_POS, 3);
  set(ADISRegister::FACTORY_CALIBRATION_RESTORE_POS, 6);
  set(ADISRegister::SOFTWARE_RESET_CMD_POS, 7);

  // status and error flag indication
  set(ADISRegister::DIAG_STAT_PAGE_ID, 0x00);
  set(ADISRegister::DIAG_STAT_ADDR_WITHOUT_PAGE, 0x08);

  set(ADISRegister::MEM_FAIL_POS, 1);
  set(ADISRegister::CRC_ERROR_POS, 2);
  set(ADISRegister::SPI_COMM_ERR_POS, 3);
  set(ADISRegister::SNSR_FAIL_POS, 5);
  set(ADISRegister::FLS_MEM_UPDATE_FAIL_POS, 6);
  set(ADISRegister::DATA_PATH_OVERRUN_POS, 7);
  set(ADISRegister::CLK_ERR_POS, 8);
  set(ADISRegister::WDG_TIMER_FLAG_POS, 15);

  // self test error flags
  set(ADISRegister::DIAG_STS_PAGE_ID, 0x00);
  set(ADISRegister::DIAG_STS_REG_WITHOUT_PAGE, 0x0A);

  set(ADISRegister::GYRO_X_FAIL_POS, 0);
  set(ADISRegister::GYRO_Y_FAIL_POS, 1);
  set(ADISRegister::GYRO_Z_FAIL_POS, 2);
  set(ADISRegister::ACCEL_X_FAIL_POS, 3);
  set(ADISRegister::ACCEL_Y_FAIL_POS, 4);
  set(ADISRegister::ACCEL_Z_FAIL_POS, 5);

  // measurement range identifier
  set(ADISRegister::RANG_MDL_PAGE_ID, 0x03);
  set(ADISRegister::RANG_MDL_ADDR_WITHOUT_PAGE, 0x12);

  set(ADISRegister::GYRO_MEAS_RANG_POS, 2);

  // point of percussion
  set(ADISRegister::PT_OF_PERC_PAGE_ID, 0x03);
  set(ADISRegister::PT_OF_PERC_REG_ADDR_WITHOUT_PAGE, 0x0A);
  set(ADISRegister::PT_OF_PERC_ALGNMNT_POS, 6);

  // continuous bias estimation
  set(ADISRegister::NULL_CNFG_PAGE_ID, 0x03);
  set(ADISRegister::NULL_CNFG_ADDR_WITHOUT_PAGE, 0x0E);

  set(ADISRegister::TIME_BASE_CONTROL_POS, 0);
  set(ADISRegister::X_AXIS_GYRO_BIAS_CORR_EN_POS, 8);
  set(ADISRegister::Y_AXIS_GYRO_BIAS_CORR_EN_POS, 9);
  set(ADISRegister::Z_AXIS_GYRO_BIAS_CORR_EN_POS, 10);
  set(ADISRegister::X_AXIS_ACCEL_BIAS_CORR_EN_POS, 11);
  set(ADISRegister::Y_AXIS_ACCEL_BIAS_CORR_EN_POS, 12);
  set(ADISRegister::Z_AXIS_ACCEL_BIAS_CORR_EN_POS, 13);

  set(ADISRegister::TIME_BASE_CONTROL, 0xF);
}

}  // namespace adi_imu