Midnight Sun Firmware
Loading...
Searching...
No Matches
IMU

IMU Firmware. More...

Collaboration diagram for IMU:

Classes

struct  AccelGainOffsetValues
 Struct to store offset and gain values for accelerometer. More...
 
struct  GyroGainOffsetValues
 Struct to store offset and gain values for gyroscope. More...
 
struct  Axes
 
struct  Bmi323Settings
 
struct  Bmi323Storage
 Storage struct for bmi323. More...
 

Macros

#define FEATURE_IO0   0x10
 
#define FEATURE_IO1   0x11
 
#define FEATURE_IO2   0x12
 
#define FEATURE_IO3   0x13
 
#define FEATURE_IO_STATUS   0x14
 
#define FEATURE_CTRL   0x40
 
#define INT_STATUS_INT1   0x0D
 
#define INT_STATUS_INT2   0x0E
 
#define BMI_SET_LOW_BYTE   0x00FF
 
#define BMI_SET_HIGH_BYTE   0xFF00
 
#define BMI3_E_NULL_PTR   INT8_C(-1)
 
#define BMI323_CHIP_ID   0x43U
 
#define BMI323_MAX_NUM_DATA   16U
 
#define BMI3_ACC_DP_DOFFSET_X_MASK   UINT16_C(0x3FFF)
 
#define BMI3_ACC_DP_DOFFSET_Y_MASK   UINT16_C(0x3FFF)
 
#define BMI3_ACC_DP_DOFFSET_Z_MASK   UINT16_C(0x3FFF)
 
#define BMI3_ACC_DP_DGAIN_X_MASK   UINT16_C(0x00FF)
 
#define BMI3_ACC_DP_DGAIN_Y_MASK   UINT16_C(0x00FF)
 
#define BMI3_ACC_DP_DGAIN_Z_MASK   UINT16_C(0x00FF)
 
#define BMI3_GYR_DP_OFF_X_MASK   UINT16_C(0x03FF)
 
#define BMI3_GYR_DP_DGAIN_X_MASK   UINT16_C(0x007F)
 
#define BMI3_GYR_DP_OFF_Y_MASK   UINT16_C(0x03FF)
 
#define BMI3_GYR_DP_DGAIN_Y_MASK   UINT16_C(0x007F)
 
#define BMI3_GYR_DP_OFF_Z_MASK   UINT16_C(0x03FF)
 
#define BMI3_GYR_DP_DGAIN_Z_MASK   UINT16_C(0x007F)
 

Enumerations

enum  IMUAccelRange {
  IMU_ACCEL_RANGE_2G , IMU_ACCEL_RANGE_4G , IMU_ACCEL_RANGE_8G , IMU_ACCEL_RANGE_16G ,
  NUM_IMU_ACCEL_RANGES , IMU_ACCEL_RANGE_2G , IMU_ACCEL_RANGE_4G , IMU_ACCEL_RANGE_8G ,
  IMU_ACCEL_RANGE_16G , NUM_IMU_ACCEL_RANGES
}
 IMU Accel range, in units of gravity acceleration (9.81m/s^2) More...
 
enum  IMUGyroRange {
  IMU_GYRO_RANGE_125_DEG , IMU_GYRO_RANGE_250_DEG , IMU_GYRO_RANGE_500_DEG , IMU_GYRO_RANGE_1000_DEG ,
  IMU_GYRO_RANGE_2000_DEG , NUM_IMU_GYRO_RANGES , IMU_GYRO_RANGE_125_DEG , IMU_GYRO_RANGE_250_DEG ,
  IMU_GYRO_RANGE_500_DEG , IMU_GYRO_RANGE_1000_DEG , IMU_GYRO_RANGE_2000_DEG , NUM_IMU_GYRO_RANGES
}
 IMU Gyro range in units of degrees. More...
 
enum  Bmi323Registers {
  BMI323_REG_BANK_SEL = 0x7F , BMI323_REG_CHIP_ID = 0x00 , BMI323_REG_ERROR_STATUS = 0x02 , BMI323_REG_RESET = 0x63 ,
  BMI323_REG_ACCEL_REG_ADDR = 0x03 , BMI323_REG_ACCEL_X_L = 0x12 , BMI323_REG_ACCEL_X_H = 0x13 , BMI323_REG_ACCEL_Y_L = 0x14 ,
  BMI323_REG_ACCEL_Y_H = 0x15 , BMI323_REG_ACCEL_Z_L = 0x16 , BMI323_REG_ACCEL_Z_H = 0x17 , BMI323_REG_ACC_CONF = 0x20 ,
  BMI323_REG_GYRO_REG_ADDR = 0x06 , BMI323_REG_GYRO_X_L = 0x0C , BMI323_REG_GYRO_X_H = 0x0D , BMI323_REG_GYRO_Y_L = 0x0E ,
  BMI323_REG_GYRO_Y_H = 0x0F , BMI323_REG_GYRO_Z_L = 0x10 , BMI323_REG_GYRO_Z_H = 0x11 , BMI323_REG_GYRO_CONF = 0x21 ,
  BMI323_REG_CTRL_REG1 = 0x19 , BMI323_REG_CTRL_REG2 = 0x1A , BMI323_REG_CTRL_REG3 = 0x1B , BMI323_REG_CTRL_REG4 = 0x1C ,
  BMI323_REG_CTRL_REG5 = 0x1D , BMI323_REG_CTRL_REG6 = 0x1E , BMI323_REG_PWR_CTRL = 0x6C , BMI323_REG_PWR_CTRL2 = 0x6D ,
  BMI323_REG_PWR_CTRL3 = 0x6E , BMI323_REG_PWR_CTRL4 = 0x6F , BMI323_REG_INT_CONFIG = 0x50 , BMI323_REG_INT_STATUS = 0x51 ,
  BMI323_REG_INT_EN_1 = 0x52 , BMI323_REG_INT_EN_2 = 0x53 , BMI323_REG_STATUS_REG = 0x1E , BMI323_REG_FIFO_STATUS = 0x24 ,
  BMI323_REG_TEMP_SENSOR = 0x22 , BMI323_REG_CALIBRATION_REG = 0x24 , BMI323_REG_ERROR_REG = 0x2B , BMI323_REG_CMD = 0x7E ,
  ACC_DP_OFF_X = 0x60 , ACC_DP_DGAIN_X = 0x61 , ACC_DP_OFF_Y = 0x62 , ACC_DP_DGAIN_Y = 0x63 ,
  ACC_DP_OFF_Z = 0x64 , ACC_DP_DGAIN_Z = 0x65 , GYR_DP_OFF_X = 0x66 , GYR_DP_DGAIN_X = 0x67 ,
  GYR_DP_OFF_Y = 0x68 , GYR_DP_DGAIN_Y = 0x69 , GYR_DP_OFF_Z = 0x6A , GYR_DP_DGAIN_Z = 0x6B ,
  BMI323_REG_BANK_SEL = 0x7F , BMI323_REG_CHIP_ID = 0x00 , BMI323_REG_ERROR_STATUS = 0x02 , BMI323_REG_RESET = 0x63 ,
  BMI323_REG_ACCEL_REG_ADDR = 0x03 , BMI323_REG_ACCEL_X_L = 0x12 , BMI323_REG_ACCEL_X_H = 0x13 , BMI323_REG_ACCEL_Y_L = 0x14 ,
  BMI323_REG_ACCEL_Y_H = 0x15 , BMI323_REG_ACCEL_Z_L = 0x16 , BMI323_REG_ACCEL_Z_H = 0x17 , BMI323_REG_ACC_CONF = 0x20 ,
  BMI323_REG_GYRO_REG_ADDR = 0x06 , BMI323_REG_GYRO_X_L = 0x0C , BMI323_REG_GYRO_X_H = 0x0D , BMI323_REG_GYRO_Y_L = 0x0E ,
  BMI323_REG_GYRO_Y_H = 0x0F , BMI323_REG_GYRO_Z_L = 0x10 , BMI323_REG_GYRO_Z_H = 0x11 , BMI323_REG_GYRO_CONF = 0x21 ,
  BMI323_REG_CTRL_REG1 = 0x19 , BMI323_REG_CTRL_REG2 = 0x1A , BMI323_REG_CTRL_REG3 = 0x1B , BMI323_REG_CTRL_REG4 = 0x1C ,
  BMI323_REG_CTRL_REG5 = 0x1D , BMI323_REG_CTRL_REG6 = 0x1E , BMI323_REG_PWR_CTRL = 0x6C , BMI323_REG_PWR_CTRL2 = 0x6D ,
  BMI323_REG_PWR_CTRL3 = 0x6E , BMI323_REG_PWR_CTRL4 = 0x6F , BMI323_REG_INT_CONFIG = 0x50 , BMI323_REG_INT_STATUS = 0x51 ,
  BMI323_REG_INT_EN_1 = 0x52 , BMI323_REG_INT_EN_2 = 0x53 , BMI323_REG_STATUS_REG = 0x1E , BMI323_REG_FIFO_STATUS = 0x24 ,
  BMI323_REG_TEMP_SENSOR = 0x22 , BMI323_REG_CALIBRATION_REG = 0x24 , BMI323_REG_ERROR_REG = 0x2B , ACC_DP_OFF_X = 0x60 ,
  ACC_DP_DGAIN_X = 0x61 , ACC_DP_OFF_Y = 0x62 , ACC_DP_DGAIN_Y = 0x63 , ACC_DP_OFF_Z = 0x64 ,
  ACC_DP_DGAIN_Z = 0x65 , GYR_DP_OFF_X = 0x66 , GYR_DP_DGAIN_X = 0x67 , GYR_DP_OFF_Y = 0x68 ,
  GYR_DP_DGAIN_Y = 0x69 , GYR_DP_OFF_Z = 0x6A , GYR_DP_DGAIN_Z = 0x6B , BMI323_REG_CMD = 0x7E
}
 BMI323 Registers. More...
 

Functions

StatusCode bmi323_init (Bmi323Storage *storage)
 Initialization function for bmi323. More...
 
StatusCode bmi323_update (Bmi323Storage *storage)
 Update the gyro/accel data, to be called in medium cycle. More...
 

Detailed Description

IMU Firmware.

Enumeration Type Documentation

◆ Bmi323Registers

BMI323 Registers.

Enumerator
BMI323_REG_BANK_SEL 

Register Bank Select

BMI323_REG_CHIP_ID 

Chip ID Register

BMI323_REG_ERROR_STATUS 

Error Status Register

BMI323_REG_RESET 

Soft Reset Command Register

BMI323_REG_ACCEL_REG_ADDR 

Accelerometer Data Start Address

BMI323_REG_ACCEL_X_L 

Accelerometer X-axis Low Byte

BMI323_REG_ACCEL_X_H 

Accelerometer X-axis High Byte

BMI323_REG_ACCEL_Y_L 

Accelerometer Y-axis Low Byte

BMI323_REG_ACCEL_Y_H 

Accelerometer Y-axis High Byte

BMI323_REG_ACCEL_Z_L 

Accelerometer Z-axis Low Byte

BMI323_REG_ACCEL_Z_H 

Accelerometer Z-axis High Byte

BMI323_REG_ACC_CONF 

Accelerometer configuration values

BMI323_REG_GYRO_REG_ADDR 

Gyroscope Data Start Address

BMI323_REG_GYRO_X_L 

Gyroscope X-axis Low Byte

BMI323_REG_GYRO_X_H 

Gyroscope X-axis High Byte

BMI323_REG_GYRO_Y_L 

Gyroscope Y-axis Low Byte

BMI323_REG_GYRO_Y_H 

Gyroscope Y-axis High Byte

BMI323_REG_GYRO_Z_L 

Gyroscope Z-axis Low Byte

BMI323_REG_GYRO_Z_H 

Gyroscope Z-axis High Byte

BMI323_REG_GYRO_CONF 

Gyroscope configuration values

BMI323_REG_CTRL_REG1 

Control Register 1

BMI323_REG_CTRL_REG2 

Control Register 2

BMI323_REG_CTRL_REG3 

Control Register 3

BMI323_REG_CTRL_REG4 

Control Register 4

BMI323_REG_CTRL_REG5 

Control Register 5

BMI323_REG_CTRL_REG6 

Control Register 6

BMI323_REG_PWR_CTRL 

Power Control Register

BMI323_REG_PWR_CTRL2 

Power Control 2 Register

BMI323_REG_PWR_CTRL3 

Power Control 3 Register

BMI323_REG_PWR_CTRL4 

Power Control 4 Register

BMI323_REG_INT_CONFIG 

Interrupt Configuration Register

BMI323_REG_INT_STATUS 

Interrupt Status Register

BMI323_REG_INT_EN_1 

Interrupt Enable 1 Register

BMI323_REG_INT_EN_2 

Interrupt Enable 2 Register

BMI323_REG_STATUS_REG 

Status Register

BMI323_REG_FIFO_STATUS 

FIFO Status Register

BMI323_REG_TEMP_SENSOR 

Temperature Data Register

BMI323_REG_CALIBRATION_REG 

Calibration Register

BMI323_REG_ERROR_REG 

Error Register

BMI323_REG_CMD 

Command Register (often used for resets and other operations)

BMI323_REG_BANK_SEL 

Register Bank Select

BMI323_REG_CHIP_ID 

Chip ID Register

BMI323_REG_ERROR_STATUS 

Error Status Register

BMI323_REG_RESET 

Soft Reset Command Register

BMI323_REG_ACCEL_REG_ADDR 

Accelerometer Data Start Address

BMI323_REG_ACCEL_X_L 

Accelerometer X-axis Low Byte

BMI323_REG_ACCEL_X_H 

Accelerometer X-axis High Byte

BMI323_REG_ACCEL_Y_L 

Accelerometer Y-axis Low Byte

BMI323_REG_ACCEL_Y_H 

Accelerometer Y-axis High Byte

BMI323_REG_ACCEL_Z_L 

Accelerometer Z-axis Low Byte

BMI323_REG_ACCEL_Z_H 

Accelerometer Z-axis High Byte

BMI323_REG_ACC_CONF 

Accelerometer configuration values

BMI323_REG_GYRO_REG_ADDR 

Gyroscope Data Start Address

BMI323_REG_GYRO_X_L 

Gyroscope X-axis Low Byte

BMI323_REG_GYRO_X_H 

Gyroscope X-axis High Byte

BMI323_REG_GYRO_Y_L 

Gyroscope Y-axis Low Byte

BMI323_REG_GYRO_Y_H 

Gyroscope Y-axis High Byte

BMI323_REG_GYRO_Z_L 

Gyroscope Z-axis Low Byte

BMI323_REG_GYRO_Z_H 

Gyroscope Z-axis High Byte

BMI323_REG_GYRO_CONF 

Gyroscope configuration values

BMI323_REG_CTRL_REG1 

Control Register 1

BMI323_REG_CTRL_REG2 

Control Register 2

BMI323_REG_CTRL_REG3 

Control Register 3

BMI323_REG_CTRL_REG4 

Control Register 4

BMI323_REG_CTRL_REG5 

Control Register 5

BMI323_REG_CTRL_REG6 

Control Register 6

BMI323_REG_PWR_CTRL 

Power Control Register

BMI323_REG_PWR_CTRL2 

Power Control 2 Register

BMI323_REG_PWR_CTRL3 

Power Control 3 Register

BMI323_REG_PWR_CTRL4 

Power Control 4 Register

BMI323_REG_INT_CONFIG 

Interrupt Configuration Register

BMI323_REG_INT_STATUS 

Interrupt Status Register

BMI323_REG_INT_EN_1 

Interrupt Enable 1 Register

BMI323_REG_INT_EN_2 

Interrupt Enable 2 Register

BMI323_REG_STATUS_REG 

Status Register

BMI323_REG_FIFO_STATUS 

FIFO Status Register

BMI323_REG_TEMP_SENSOR 

Temperature Data Register

BMI323_REG_CALIBRATION_REG 

Calibration Register

BMI323_REG_ERROR_REG 

Error Register

BMI323_REG_CMD 

Command Register (often used for resets and other operations)

◆ IMUAccelRange

IMU Accel range, in units of gravity acceleration (9.81m/s^2)

Enumerator
IMU_ACCEL_RANGE_2G 

+- 2Gs

IMU_ACCEL_RANGE_4G 

+- 4Gs

IMU_ACCEL_RANGE_8G 

+- 8Gs

IMU_ACCEL_RANGE_16G 

+- 16Gs

NUM_IMU_ACCEL_RANGES 

Number of IMU Accelerometer ranges

IMU_ACCEL_RANGE_2G 

+/- 2Gs

IMU_ACCEL_RANGE_4G 

+/- 4Gs

IMU_ACCEL_RANGE_8G 

+/- 8Gs

IMU_ACCEL_RANGE_16G 

+/- 16Gs

NUM_IMU_ACCEL_RANGES 

Number of IMU Accelerometer ranges

◆ IMUGyroRange

IMU Gyro range in units of degrees.

Enumerator
IMU_GYRO_RANGE_125_DEG 

+- 125deg

IMU_GYRO_RANGE_250_DEG 

+- 250deg

IMU_GYRO_RANGE_500_DEG 

+- 500deg

IMU_GYRO_RANGE_1000_DEG 

+- 1000deg

IMU_GYRO_RANGE_2000_DEG 

+- 2000deg

IMU_GYRO_RANGE_125_DEG 

+/- 125deg

IMU_GYRO_RANGE_250_DEG 

+/- 250deg

IMU_GYRO_RANGE_500_DEG 

+/- 500deg

IMU_GYRO_RANGE_1000_DEG 

+/- 1000deg

IMU_GYRO_RANGE_2000_DEG 

+/- 2000deg

NUM_IMU_GYRO_RANGES 

Number of IMU Gyro ranges

Function Documentation

◆ bmi323_init()

StatusCode bmi323_init ( Bmi323Storage storage)

Initialization function for bmi323.

Returns
STATUS_CODE_OK if initialization is successful STATUS_CODE_INVALID_ARGS if storage is null STATUS_CODE_INTERNAL_ERROR if chip ID is incorrect

◆ bmi323_update()

StatusCode bmi323_update ( Bmi323Storage storage)

Update the gyro/accel data, to be called in medium cycle.

Returns
STATUS_CODE_OK